FreeBSD kernel usb device Code
if_cdceem.c File Reference
#include <sys/cdefs.h>
#include <sys/gsb_crc32.h>
#include <sys/eventhandler.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/queue.h>
#include <sys/systm.h>
#include <sys/socket.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/priv.h>
#include <net/if.h>
#include <net/if_var.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usb_cdc.h>
#include "usbdevs.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/usb_msctest.h>
#include "usb_if.h"
#include <dev/usb/net/usb_ethernet.h>
Include dependency graph for if_cdceem.c:

Go to the source code of this file.

Data Structures

struct  cdceem_softc
 

Macros

#define USB_DEBUG_VAR   cdceem_debug
 
#define CDCEEM_FRAMES_MAX   1
 
#define CDCEEM_ECHO_MAX   1024
 
#define CDCEEM_ECHO_PAYLOAD    "ICH DALEKOPIS FALSZUJE GDY PROBY XQV NIE WYTRZYMUJE 1234567890"
 
#define CDCEEM_SC_FLAGS_ECHO_RESPONSE_PENDING   0x1
 
#define CDCEEM_SC_FLAGS_ECHO_PENDING   0x2
 
#define CDCEEM_DEBUG(S, X, ...)
 
#define CDCEEM_WARN(S, X, ...)
 
#define CDCEEM_LOCK(X)   mtx_lock(&(X)->sc_mtx)
 
#define CDCEEM_UNLOCK(X)   mtx_unlock(&(X)->sc_mtx)
 
#define CDCEEM_TYPE_CMD   (0x1 << 15)
 
#define CDCEEM_CMD_MASK   (0x7 << 11)
 
#define CDCEEM_CMD_ECHO   (0x0 << 11)
 
#define CDCEEM_CMD_ECHO_RESPONSE   (0x1 << 11)
 
#define CDCEEM_CMD_SUSPEND_HINT   (0x2 << 11)
 
#define CDCEEM_CMD_RESPONSE_HINT   (0x3 << 11)
 
#define CDCEEM_CMD_RESPONSE_COMPLETE_HINT   (0x4 << 11)
 
#define CDCEEM_CMD_TICKLE   (0x5 << 11)
 
#define CDCEEM_CMD_RESERVED   (0x1 << 14)
 
#define CDCEEM_ECHO_LEN_MASK   0x3ff
 
#define CDCEEM_DATA_CRC   (0x1 << 14)
 
#define CDCEEM_DATA_LEN_MASK   0x3fff
 

Enumerations

enum  { CDCEEM_BULK_RX , CDCEEM_BULK_TX , CDCEEM_N_TRANSFER }
 

Functions

 __FBSDID ("$FreeBSD$")
 
static SYSCTL_NODE (_hw_usb, OID_AUTO, cdceem, CTLFLAG_RW|CTLFLAG_MPSAFE, 0, "USB CDC EEM")
 
 SYSCTL_INT (_hw_usb_cdceem, OID_AUTO, debug, CTLFLAG_RWTUN, &cdceem_debug, 0, "Debug level")
 
 SYSCTL_INT (_hw_usb_cdceem, OID_AUTO, send_echoes, CTLFLAG_RWTUN, &cdceem_send_echoes, 0, "Send an Echo command")
 
 SYSCTL_INT (_hw_usb_cdceem, OID_AUTO, send_fake_crc, CTLFLAG_RWTUN, &cdceem_send_fake_crc, 0, "Use 0xdeadbeef instead of CRC")
 
static uint32_t cdceem_m_crc32 (struct mbuf *, uint32_t, uint32_t)
 
 DRIVER_MODULE (cdceem, uhub, cdceem_driver, cdceem_devclass, NULL, NULL)
 
 MODULE_VERSION (cdceem, 1)
 
 MODULE_DEPEND (cdceem, uether, 1, 1, 1)
 
 MODULE_DEPEND (cdceem, usb, 1, 1, 1)
 
 MODULE_DEPEND (cdceem, ether, 1, 1, 1)
 
 USB_PNP_DUAL_INFO (cdceem_dual_devs)
 
static int cdceem_probe (device_t dev)
 
static void cdceem_attach_post (struct usb_ether *ue)
 
static int cdceem_attach (device_t dev)
 
static int cdceem_detach (device_t dev)
 
static void cdceem_handle_cmd (struct usb_xfer *xfer, uint16_t hdr, int *offp)
 
static void cdceem_handle_data (struct usb_xfer *xfer, uint16_t hdr, int *offp)
 
static void cdceem_bulk_read_callback (struct usb_xfer *xfer, usb_error_t usb_error)
 
static void cdceem_send_echo (struct usb_xfer *xfer, int *offp)
 
static void cdceem_send_echo_response (struct usb_xfer *xfer, int *offp)
 
static void cdceem_send_data (struct usb_xfer *xfer, int *offp)
 
static void cdceem_bulk_write_callback (struct usb_xfer *xfer, usb_error_t usb_error)
 
static int32_t cdceem_m_crc32_cb (void *arg, void *src, uint32_t count)
 
static void cdceem_start (struct usb_ether *ue)
 
static void cdceem_init (struct usb_ether *ue)
 
static void cdceem_stop (struct usb_ether *ue)
 
static void cdceem_setmulti (struct usb_ether *ue)
 
static void cdceem_setpromisc (struct usb_ether *ue)
 
static int cdceem_suspend (device_t dev)
 
static int cdceem_resume (device_t dev)
 

Variables

static int cdceem_debug = 1
 
static int cdceem_send_echoes = 0
 
static int cdceem_send_fake_crc = 0
 
static device_probe_t cdceem_probe
 
static device_attach_t cdceem_attach
 
static device_detach_t cdceem_detach
 
static device_suspend_t cdceem_suspend
 
static device_resume_t cdceem_resume
 
static usb_callback_t cdceem_bulk_write_callback
 
static usb_callback_t cdceem_bulk_read_callback
 
static uether_fn_t cdceem_attach_post
 
static uether_fn_t cdceem_init
 
static uether_fn_t cdceem_stop
 
static uether_fn_t cdceem_start
 
static uether_fn_t cdceem_setmulti
 
static uether_fn_t cdceem_setpromisc
 
static const struct usb_config cdceem_config [CDCEEM_N_TRANSFER]
 
static device_method_t cdceem_methods []
 
static driver_t cdceem_driver
 
static devclass_t cdceem_devclass
 
static const STRUCT_USB_DUAL_ID cdceem_dual_devs []
 
static const struct usb_ether_methods cdceem_ue_methods
 

Macro Definition Documentation

◆ CDCEEM_CMD_ECHO

#define CDCEEM_CMD_ECHO   (0x0 << 11)

Definition at line 140 of file if_cdceem.c.

◆ CDCEEM_CMD_ECHO_RESPONSE

#define CDCEEM_CMD_ECHO_RESPONSE   (0x1 << 11)

Definition at line 141 of file if_cdceem.c.

◆ CDCEEM_CMD_MASK

#define CDCEEM_CMD_MASK   (0x7 << 11)

Definition at line 138 of file if_cdceem.c.

◆ CDCEEM_CMD_RESERVED

#define CDCEEM_CMD_RESERVED   (0x1 << 14)

Definition at line 147 of file if_cdceem.c.

◆ CDCEEM_CMD_RESPONSE_COMPLETE_HINT

#define CDCEEM_CMD_RESPONSE_COMPLETE_HINT   (0x4 << 11)

Definition at line 144 of file if_cdceem.c.

◆ CDCEEM_CMD_RESPONSE_HINT

#define CDCEEM_CMD_RESPONSE_HINT   (0x3 << 11)

Definition at line 143 of file if_cdceem.c.

◆ CDCEEM_CMD_SUSPEND_HINT

#define CDCEEM_CMD_SUSPEND_HINT   (0x2 << 11)

Definition at line 142 of file if_cdceem.c.

◆ CDCEEM_CMD_TICKLE

#define CDCEEM_CMD_TICKLE   (0x5 << 11)

Definition at line 145 of file if_cdceem.c.

◆ CDCEEM_DATA_CRC

#define CDCEEM_DATA_CRC   (0x1 << 14)

Definition at line 151 of file if_cdceem.c.

◆ CDCEEM_DATA_LEN_MASK

#define CDCEEM_DATA_LEN_MASK   0x3fff

Definition at line 152 of file if_cdceem.c.

◆ CDCEEM_DEBUG

#define CDCEEM_DEBUG (   S,
  X,
  ... 
)
Value:
do { \
if (cdceem_debug > 1) { \
device_printf(S->sc_ue.ue_dev, "%s: " X "\n", \
__func__, ## __VA_ARGS__); \
} \
} while (0)
@ X
Definition: atp.c:588
static int cdceem_debug
Definition: if_cdceem.c:106

Definition at line 116 of file if_cdceem.c.

◆ CDCEEM_ECHO_LEN_MASK

#define CDCEEM_ECHO_LEN_MASK   0x3ff

Definition at line 149 of file if_cdceem.c.

◆ CDCEEM_ECHO_MAX

#define CDCEEM_ECHO_MAX   1024

Definition at line 81 of file if_cdceem.c.

◆ CDCEEM_ECHO_PAYLOAD

#define CDCEEM_ECHO_PAYLOAD    "ICH DALEKOPIS FALSZUJE GDY PROBY XQV NIE WYTRZYMUJE 1234567890"

Definition at line 83 of file if_cdceem.c.

◆ CDCEEM_FRAMES_MAX

#define CDCEEM_FRAMES_MAX   1

Definition at line 80 of file if_cdceem.c.

◆ CDCEEM_LOCK

#define CDCEEM_LOCK (   X)    mtx_lock(&(X)->sc_mtx)

Definition at line 133 of file if_cdceem.c.

◆ CDCEEM_SC_FLAGS_ECHO_PENDING

#define CDCEEM_SC_FLAGS_ECHO_PENDING   0x2

Definition at line 102 of file if_cdceem.c.

◆ CDCEEM_SC_FLAGS_ECHO_RESPONSE_PENDING

#define CDCEEM_SC_FLAGS_ECHO_RESPONSE_PENDING   0x1

Definition at line 101 of file if_cdceem.c.

◆ CDCEEM_TYPE_CMD

#define CDCEEM_TYPE_CMD   (0x1 << 15)

Definition at line 136 of file if_cdceem.c.

◆ CDCEEM_UNLOCK

#define CDCEEM_UNLOCK (   X)    mtx_unlock(&(X)->sc_mtx)

Definition at line 134 of file if_cdceem.c.

◆ CDCEEM_WARN

#define CDCEEM_WARN (   S,
  X,
  ... 
)
Value:
do { \
if (cdceem_debug > 0) { \
device_printf(S->sc_ue.ue_dev, \
"WARNING: %s: " X "\n", \
__func__, ## __VA_ARGS__); \
} \
} while (0)

Definition at line 124 of file if_cdceem.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   cdceem_debug

Definition at line 72 of file if_cdceem.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
CDCEEM_BULK_RX 
CDCEEM_BULK_TX 
CDCEEM_N_TRANSFER 

Definition at line 86 of file if_cdceem.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ cdceem_attach()

◆ cdceem_attach_post()

static void cdceem_attach_post ( struct usb_ether ue)
static

Definition at line 251 of file if_cdceem.c.

◆ cdceem_bulk_read_callback()

◆ cdceem_bulk_write_callback()

◆ cdceem_detach()

static int cdceem_detach ( device_t  dev)
static

Definition at line 308 of file if_cdceem.c.

References CDCEEM_N_TRANSFER, dev, cdceem_softc::sc_mtx, cdceem_softc::sc_ue, cdceem_softc::sc_xfer, uether_ifdetach(), and usbd_transfer_unsetup().

Here is the call graph for this function:

◆ cdceem_handle_cmd()

◆ cdceem_handle_data()

static void cdceem_handle_data ( struct usb_xfer xfer,
uint16_t  hdr,
int *  offp 
)
static

Definition at line 423 of file if_cdceem.c.

References CDCEEM_DATA_CRC, CDCEEM_DATA_LEN_MASK, CDCEEM_DEBUG, cdceem_m_crc32(), CDCEEM_WARN, cdceem_softc::sc_ue, uether_getifp(), uether_newbuf(), uether_rxmbuf(), usbd_copy_out(), usbd_xfer_get_frame(), usbd_xfer_softc(), and usbd_xfer_status().

Referenced by cdceem_bulk_read_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdceem_init()

◆ cdceem_m_crc32()

static uint32_t cdceem_m_crc32 ( struct mbuf *  m,
uint32_t  src_offset,
uint32_t  src_len 
)
static

Definition at line 783 of file if_cdceem.c.

References cdceem_m_crc32_cb().

Referenced by cdceem_handle_data(), and cdceem_send_data().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdceem_m_crc32_cb()

static int32_t cdceem_m_crc32_cb ( void *  arg,
void *  src,
uint32_t  count 
)
static

Definition at line 774 of file if_cdceem.c.

References count.

Referenced by cdceem_m_crc32().

Here is the caller graph for this function:

◆ cdceem_probe()

static int cdceem_probe ( device_t  dev)
static

Definition at line 238 of file if_cdceem.c.

References cdceem_dual_devs, dev, error, and usbd_lookup_id_by_uaa().

Here is the call graph for this function:

◆ cdceem_resume()

static int cdceem_resume ( device_t  dev)
static

Definition at line 872 of file if_cdceem.c.

References CDCEEM_DEBUG, and dev.

◆ cdceem_send_data()

static void cdceem_send_data ( struct usb_xfer xfer,
int *  offp 
)
static

Definition at line 647 of file if_cdceem.c.

References CDCEEM_DATA_CRC, CDCEEM_DATA_LEN_MASK, CDCEEM_DEBUG, cdceem_m_crc32(), cdceem_send_fake_crc, cdceem_softc::sc_ue, uether_getifp(), usbd_copy_in(), usbd_m_copy_in(), usbd_xfer_get_frame(), usbd_xfer_max_len(), and usbd_xfer_softc().

Referenced by cdceem_bulk_write_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdceem_send_echo()

static void cdceem_send_echo ( struct usb_xfer xfer,
int *  offp 
)
static

Definition at line 570 of file if_cdceem.c.

References CDCEEM_CMD_ECHO, CDCEEM_DEBUG, CDCEEM_ECHO_PAYLOAD, CDCEEM_TYPE_CMD, cdceem_softc::sc_flags, usbd_copy_in(), usbd_xfer_get_frame(), usbd_xfer_max_len(), and usbd_xfer_softc().

Referenced by cdceem_bulk_write_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdceem_send_echo_response()

static void cdceem_send_echo_response ( struct usb_xfer xfer,
int *  offp 
)
static

Definition at line 609 of file if_cdceem.c.

References CDCEEM_CMD_ECHO_RESPONSE, CDCEEM_DEBUG, CDCEEM_TYPE_CMD, cdceem_softc::sc_echo_buffer, cdceem_softc::sc_echo_len, cdceem_softc::sc_flags, usbd_copy_in(), usbd_xfer_get_frame(), usbd_xfer_max_len(), and usbd_xfer_softc().

Referenced by cdceem_bulk_write_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cdceem_setmulti()

static void cdceem_setmulti ( struct usb_ether ue)
static

Definition at line 849 of file if_cdceem.c.

◆ cdceem_setpromisc()

static void cdceem_setpromisc ( struct usb_ether ue)
static

Definition at line 856 of file if_cdceem.c.

◆ cdceem_start()

static void cdceem_start ( struct usb_ether ue)
static

Definition at line 792 of file if_cdceem.c.

References CDCEEM_BULK_RX, CDCEEM_BULK_TX, cdceem_softc::sc_xfer, uether_getsc(), and usbd_transfer_start().

Here is the call graph for this function:

◆ cdceem_stop()

static void cdceem_stop ( struct usb_ether ue)
static

Definition at line 834 of file if_cdceem.c.

References CDCEEM_BULK_RX, CDCEEM_BULK_TX, cdceem_softc::sc_xfer, uether_getifp(), uether_getsc(), and usbd_transfer_stop().

Here is the call graph for this function:

◆ cdceem_suspend()

static int cdceem_suspend ( device_t  dev)
static

Definition at line 863 of file if_cdceem.c.

References CDCEEM_DEBUG, and dev.

◆ DRIVER_MODULE()

DRIVER_MODULE ( cdceem  ,
uhub  ,
cdceem_driver  ,
cdceem_devclass  ,
NULL  ,
NULL   
)

◆ MODULE_DEPEND() [1/3]

MODULE_DEPEND ( cdceem  ,
ether  ,
,
,
 
)

◆ MODULE_DEPEND() [2/3]

MODULE_DEPEND ( cdceem  ,
uether  ,
,
,
 
)

◆ MODULE_DEPEND() [3/3]

MODULE_DEPEND ( cdceem  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( cdceem  ,
 
)

◆ SYSCTL_INT() [1/3]

SYSCTL_INT ( _hw_usb_cdceem  ,
OID_AUTO  ,
debug  ,
CTLFLAG_RWTUN  ,
cdceem_debug,
,
"Debug level"   
)

◆ SYSCTL_INT() [2/3]

SYSCTL_INT ( _hw_usb_cdceem  ,
OID_AUTO  ,
send_echoes  ,
CTLFLAG_RWTUN  ,
cdceem_send_echoes,
,
"Send an Echo command"   
)

◆ SYSCTL_INT() [3/3]

SYSCTL_INT ( _hw_usb_cdceem  ,
OID_AUTO  ,
send_fake_crc  ,
CTLFLAG_RWTUN  ,
cdceem_send_fake_crc,
,
"Use 0xdeadbeef instead of CRC"   
)

◆ SYSCTL_NODE()

static SYSCTL_NODE ( _hw_usb  ,
OID_AUTO  ,
cdceem  ,
CTLFLAG_RW|  CTLFLAG_MPSAFE,
,
"USB CDC EEM"   
)
static

◆ USB_PNP_DUAL_INFO()

USB_PNP_DUAL_INFO ( cdceem_dual_devs  )

Variable Documentation

◆ cdceem_attach

device_attach_t cdceem_attach
static

Definition at line 155 of file if_cdceem.c.

◆ cdceem_attach_post

uether_fn_t cdceem_attach_post
static

Definition at line 163 of file if_cdceem.c.

◆ cdceem_bulk_read_callback

usb_callback_t cdceem_bulk_read_callback
static

Definition at line 161 of file if_cdceem.c.

◆ cdceem_bulk_write_callback

usb_callback_t cdceem_bulk_write_callback
static

Definition at line 160 of file if_cdceem.c.

◆ cdceem_config

const struct usb_config cdceem_config[CDCEEM_N_TRANSFER]
static
Initial value:
= {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_TX,
.bufsize = 16 * (MCLBYTES + 16),
.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
.timeout = 10000,
.usb_mode = USB_MODE_DUAL,
},
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_RX,
.bufsize = 20480,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.timeout = 0,
.usb_mode = USB_MODE_DUAL,
},
}
static usb_callback_t cdceem_bulk_write_callback
Definition: if_cdceem.c:160
static usb_callback_t cdceem_bulk_read_callback
Definition: if_cdceem.c:161
@ CDCEEM_BULK_TX
Definition: if_cdceem.c:88
@ CDCEEM_BULK_RX
Definition: if_cdceem.c:87
#define UE_ADDR_ANY
Definition: usb.h:537
#define UE_BULK
Definition: usb.h:543
#define UE_DIR_RX
Definition: usb.h:533
@ USB_MODE_DUAL
Definition: usb.h:780
#define UE_DIR_TX
Definition: usb.h:534

Definition at line 172 of file if_cdceem.c.

Referenced by cdceem_attach().

◆ cdceem_debug

int cdceem_debug = 1
static

Definition at line 106 of file if_cdceem.c.

◆ cdceem_detach

device_detach_t cdceem_detach
static

Definition at line 156 of file if_cdceem.c.

◆ cdceem_devclass

devclass_t cdceem_devclass
static

Definition at line 213 of file if_cdceem.c.

◆ cdceem_driver

driver_t cdceem_driver
static
Initial value:
= {
.name = "cdceem",
.methods = cdceem_methods,
.size = sizeof(struct cdceem_softc),
}
static device_method_t cdceem_methods[]
Definition: if_cdceem.c:196

Definition at line 207 of file if_cdceem.c.

◆ cdceem_dual_devs

const STRUCT_USB_DUAL_ID cdceem_dual_devs[]
static
Initial value:
= {
0},
}
#define UISUBCLASS_ETHERNET_EMULATION_MODEL
Definition: usb.h:446
#define UICLASS_CDC
Definition: usb.h:434
#define USB_IFACE_SUBCLASS(isc)
Definition: usbdi.h:388
#define USB_IFACE_CLASS(ic)
Definition: usbdi.h:385

Definition at line 215 of file if_cdceem.c.

Referenced by cdceem_probe().

◆ cdceem_init

uether_fn_t cdceem_init
static

Definition at line 164 of file if_cdceem.c.

◆ cdceem_methods

device_method_t cdceem_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, cdceem_probe),
DEVMETHOD(device_attach, cdceem_attach),
DEVMETHOD(device_detach, cdceem_detach),
DEVMETHOD(device_suspend, cdceem_suspend),
DEVMETHOD(device_resume, cdceem_resume),
DEVMETHOD_END
}
static device_probe_t cdceem_probe
Definition: if_cdceem.c:154
static device_attach_t cdceem_attach
Definition: if_cdceem.c:155
static device_detach_t cdceem_detach
Definition: if_cdceem.c:156
static device_resume_t cdceem_resume
Definition: if_cdceem.c:158
static device_suspend_t cdceem_suspend
Definition: if_cdceem.c:157

Definition at line 196 of file if_cdceem.c.

◆ cdceem_probe

device_probe_t cdceem_probe
static

Definition at line 154 of file if_cdceem.c.

◆ cdceem_resume

device_resume_t cdceem_resume
static

Definition at line 158 of file if_cdceem.c.

◆ cdceem_send_echoes

int cdceem_send_echoes = 0
static

Definition at line 109 of file if_cdceem.c.

Referenced by cdceem_init().

◆ cdceem_send_fake_crc

int cdceem_send_fake_crc = 0
static

Definition at line 112 of file if_cdceem.c.

Referenced by cdceem_send_data().

◆ cdceem_setmulti

uether_fn_t cdceem_setmulti
static

Definition at line 167 of file if_cdceem.c.

◆ cdceem_setpromisc

uether_fn_t cdceem_setpromisc
static

Definition at line 168 of file if_cdceem.c.

◆ cdceem_start

uether_fn_t cdceem_start
static

Definition at line 166 of file if_cdceem.c.

Referenced by cdceem_init().

◆ cdceem_stop

uether_fn_t cdceem_stop
static

Definition at line 165 of file if_cdceem.c.

◆ cdceem_suspend

device_suspend_t cdceem_suspend
static

Definition at line 157 of file if_cdceem.c.

◆ cdceem_ue_methods

const struct usb_ether_methods cdceem_ue_methods
static
Initial value:
= {
.ue_attach_post = cdceem_attach_post,
.ue_start = cdceem_start,
.ue_init = cdceem_init,
.ue_stop = cdceem_stop,
.ue_setmulti = cdceem_setmulti,
.ue_setpromisc = cdceem_setpromisc,
}
static uether_fn_t cdceem_setmulti
Definition: if_cdceem.c:167
static uether_fn_t cdceem_stop
Definition: if_cdceem.c:165
static uether_fn_t cdceem_setpromisc
Definition: if_cdceem.c:168
static uether_fn_t cdceem_init
Definition: if_cdceem.c:164
static uether_fn_t cdceem_attach_post
Definition: if_cdceem.c:163
static uether_fn_t cdceem_start
Definition: if_cdceem.c:166

Definition at line 228 of file if_cdceem.c.

Referenced by cdceem_attach().