FreeBSD kernel usb device Code
if_usie.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/eventhandler.h>
#include <sys/systm.h>
#include <sys/queue.h>
#include <sys/socket.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/sockio.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/malloc.h>
#include <sys/taskqueue.h>
#include <net/if.h>
#include <net/if_var.h>
#include <machine/bus.h>
#include <net/if_types.h>
#include <net/netisr.h>
#include <net/bpf.h>
#include <net/ethernet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <netinet/udp.h>
#include <net80211/ieee80211_ioctl.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 <dev/usb/serial/usb_serial.h>
#include <dev/usb/net/if_usievar.h>
Include dependency graph for if_usie.c:

Go to the source code of this file.

Macros

#define USB_DEBUG_VAR   usie_debug
 
#define USIE_DEV(v, d)
 

Functions

 __FBSDID ("$FreeBSD$")
 
static void usie_free_softc (struct usie_softc *)
 
static void usie_free (struct ucom_softc *)
 
static void usie_uc_update_line_state (struct ucom_softc *, uint8_t)
 
static void usie_uc_cfg_get_status (struct ucom_softc *, uint8_t *, uint8_t *)
 
static void usie_uc_cfg_set_dtr (struct ucom_softc *, uint8_t)
 
static void usie_uc_cfg_set_rts (struct ucom_softc *, uint8_t)
 
static void usie_uc_cfg_open (struct ucom_softc *)
 
static void usie_uc_cfg_close (struct ucom_softc *)
 
static void usie_uc_start_read (struct ucom_softc *)
 
static void usie_uc_stop_read (struct ucom_softc *)
 
static void usie_uc_start_write (struct ucom_softc *)
 
static void usie_uc_stop_write (struct ucom_softc *)
 
static void usie_if_sync_to (void *)
 
static void usie_if_sync_cb (void *, int)
 
static void usie_if_status_cb (void *, int)
 
static void usie_if_start (struct ifnet *)
 
static int usie_if_output (struct ifnet *, struct mbuf *, const struct sockaddr *, struct route *)
 
static void usie_if_init (void *)
 
static void usie_if_stop (struct usie_softc *)
 
static int usie_if_ioctl (struct ifnet *, u_long, caddr_t)
 
static int usie_do_request (struct usie_softc *, struct usb_device_request *, void *)
 
static int usie_if_cmd (struct usie_softc *, uint8_t)
 
static void usie_cns_req (struct usie_softc *, uint32_t, uint16_t)
 
static void usie_cns_rsp (struct usie_softc *, struct usie_cns *)
 
static void usie_hip_rsp (struct usie_softc *, uint8_t *, uint32_t)
 
static int usie_driver_loaded (struct module *, int, void *)
 
 DRIVER_MODULE (usie, uhub, usie_driver, usie_devclass, usie_driver_loaded, 0)
 
 MODULE_DEPEND (usie, ucom, 1, 1, 1)
 
 MODULE_DEPEND (usie, usb, 1, 1, 1)
 
 MODULE_VERSION (usie, 1)
 
 USB_PNP_HOST_INFO (usie_devs)
 
static void usie_autoinst (void *arg, struct usb_device *udev, struct usb_attach_arg *uaa)
 
static int usie_probe (device_t self)
 
static int usie_attach (device_t self)
 
static int usie_detach (device_t self)
 
 UCOM_UNLOAD_DRAIN (usie)
 
static void usie_uc_rx_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void usie_uc_tx_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void usie_uc_status_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void usie_if_rx_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void usie_if_tx_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void usie_if_status_callback (struct usb_xfer *xfer, usb_error_t error)
 

Variables

static const STRUCT_USB_HOST_ID usie_devs []
 
static device_probe_t usie_probe
 
static device_attach_t usie_attach
 
static device_detach_t usie_detach
 
static usb_callback_t usie_uc_tx_callback
 
static usb_callback_t usie_uc_rx_callback
 
static usb_callback_t usie_uc_status_callback
 
static usb_callback_t usie_if_tx_callback
 
static usb_callback_t usie_if_rx_callback
 
static usb_callback_t usie_if_status_callback
 
static const struct usb_config usie_uc_config [USIE_UC_N_XFER]
 
static const struct usb_config usie_if_config [USIE_IF_N_XFER]
 
static device_method_t usie_methods []
 
static driver_t usie_driver
 
static devclass_t usie_devclass
 
static eventhandler_tag usie_etag
 
static const struct ucom_callback usie_uc_callback
 

Macro Definition Documentation

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   usie_debug

Definition at line 75 of file if_usie.c.

◆ USIE_DEV

#define USIE_DEV (   v,
 
)
Value:
{ \
USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##d) }

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( usie  ,
uhub  ,
usie_driver  ,
usie_devclass  ,
usie_driver_loaded  ,
 
)

◆ MODULE_DEPEND() [1/2]

MODULE_DEPEND ( usie  ,
ucom  ,
,
,
 
)

◆ MODULE_DEPEND() [2/2]

MODULE_DEPEND ( usie  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( usie  ,
 
)

◆ UCOM_UNLOAD_DRAIN()

UCOM_UNLOAD_DRAIN ( usie  )

◆ USB_PNP_HOST_INFO()

USB_PNP_HOST_INFO ( usie_devs  )

◆ usie_attach()

◆ usie_autoinst()

static void usie_autoinst ( void *  arg,
struct usb_device udev,
struct usb_attach_arg uaa 
)
static

◆ usie_cns_req()

◆ usie_cns_rsp()

static void usie_cns_rsp ( struct usie_softc sc,
struct usie_cns cns 
)
static

Definition at line 1471 of file if_usie.c.

References DPRINTF, usie_cns::id, usie_cns::obj, usie_softc::sc_dev, usie_softc::sc_ifp, usie_softc::sc_rssi, USIE_CNS_ID_INIT, USIE_CNS_ID_STOP, USIE_CNS_OB_LINK_UPDATE, USIE_CNS_OB_PDP_READ, USIE_CNS_OB_PROF_WRITE, USIE_CNS_OB_RSSI, and usie_if_sync_to().

Referenced by usie_hip_rsp().

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

◆ usie_detach()

◆ usie_do_request()

static int usie_do_request ( struct usie_softc sc,
struct usb_device_request req,
void *  data 
)
static

Definition at line 1345 of file if_usie.c.

References data, DPRINTF, req, usie_softc::sc_mtx, usie_softc::sc_udev, USB_MS_TO_TICKS, usb_pause_mtx(), usbd_do_request, and usbd_errstr().

Referenced by usie_attach(), usie_if_cmd(), and usie_uc_update_line_state().

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

◆ usie_driver_loaded()

static int usie_driver_loaded ( struct module *  mod,
int  what,
void *  arg 
)
static

Definition at line 1601 of file if_usie.c.

References usie_autoinst(), and usie_etag.

Here is the call graph for this function:

◆ usie_free()

static void usie_free ( struct ucom_softc ucom)
static

Definition at line 518 of file if_usie.c.

References ucom_softc::sc_parent, and usie_free_softc().

Here is the call graph for this function:

◆ usie_free_softc()

static void usie_free_softc ( struct usie_softc sc)
static

Definition at line 509 of file if_usie.c.

References usie_softc::sc_mtx, usie_softc::sc_super_ucom, and ucom_unref().

Referenced by usie_detach(), and usie_free().

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

◆ usie_hip_rsp()

static void usie_hip_rsp ( struct usie_softc sc,
uint8_t *  rsp,
uint32_t  len 
)
static

◆ usie_if_cmd()

static int usie_if_cmd ( struct usie_softc sc,
uint8_t  cmd 
)
static

Definition at line 1368 of file if_usie.c.

References DPRINTF, usie_hip::id, usie_hip::len, usie_hip::param, req, usie_softc::sc_if_ifnum, UCDC_SEND_ENCAPSULATED_COMMAND, USETW, usie_do_request(), and UT_WRITE_CLASS_INTERFACE.

Referenced by usie_if_status_cb(), usie_if_stop(), and usie_if_sync_cb().

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

◆ usie_if_init()

◆ usie_if_ioctl()

static int usie_if_ioctl ( struct ifnet *  ifp,
u_long  cmd,
caddr_t  data 
)
static

Definition at line 1281 of file if_usie.c.

References data, DPRINTF, usie_softc::sc_dev, usie_softc::sc_mtx, usie_softc::sc_rssi, USIE_CNS_ID_RSSI, USIE_CNS_OB_RSSI, usie_cns_req(), usie_if_init(), and usie_if_stop().

Referenced by usie_attach().

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

◆ usie_if_output()

static int usie_if_output ( struct ifnet *  ifp,
struct mbuf *  m,
const struct sockaddr *  dst,
struct route *  ro 
)
static

Definition at line 1194 of file if_usie.c.

References DPRINTF.

Referenced by usie_attach().

Here is the caller graph for this function:

◆ usie_if_rx_callback()

◆ usie_if_start()

static void usie_if_start ( struct ifnet *  ifp)
static

Definition at line 1178 of file if_usie.c.

References DPRINTF, usie_softc::sc_if_xfer, usie_softc::sc_mtx, usbd_transfer_start(), and USIE_IF_TX.

Referenced by usie_attach().

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

◆ usie_if_status_callback()

◆ usie_if_status_cb()

◆ usie_if_stop()

static void usie_if_stop ( struct usie_softc sc)
static

Definition at line 1261 of file if_usie.c.

References usie_softc::sc_if_sync_ch, usie_softc::sc_if_xfer, usie_softc::sc_mtx, usb_callout_drain, usbd_transfer_stop(), USIE_CNS_ID_STOP, USIE_CNS_OB_LINK_UPDATE, usie_cns_req(), USIE_HIP_DOWN, usie_if_cmd(), USIE_IF_RX, USIE_IF_STATUS, and USIE_IF_TX.

Referenced by usie_detach(), and usie_if_ioctl().

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

◆ usie_if_sync_cb()

static void usie_if_sync_cb ( void *  arg,
int  pending 
)
static

Definition at line 1049 of file if_usie.c.

References usie_softc::sc_if_sync_ch, usie_softc::sc_mtx, usb_callout_reset, USIE_HIP_SYNC2M, usie_if_cmd(), and usie_if_sync_to().

Referenced by usie_attach().

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

◆ usie_if_sync_to()

static void usie_if_sync_to ( void *  arg)
static

Definition at line 1041 of file if_usie.c.

References usie_softc::sc_if_sync_task.

Referenced by usie_cns_rsp(), and usie_if_sync_cb().

Here is the caller graph for this function:

◆ usie_if_tx_callback()

◆ usie_probe()

◆ usie_uc_cfg_close()

static void usie_uc_cfg_close ( struct ucom_softc ucom)
static

Definition at line 581 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_stop(), and USIE_UC_STATUS.

Here is the call graph for this function:

◆ usie_uc_cfg_get_status()

static void usie_uc_cfg_get_status ( struct ucom_softc ucom,
uint8_t *  lsr,
uint8_t *  msr 
)
static

Definition at line 544 of file if_usie.c.

References usie_softc::sc_lsr, usie_softc::sc_msr, and ucom_softc::sc_parent.

◆ usie_uc_cfg_open()

static void usie_uc_cfg_open ( struct ucom_softc ucom)
static

Definition at line 571 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_start(), and USIE_UC_STATUS.

Here is the call graph for this function:

◆ usie_uc_cfg_set_dtr()

static void usie_uc_cfg_set_dtr ( struct ucom_softc ucom,
uint8_t  flag 
)
static

Definition at line 553 of file if_usie.c.

References USIE_LS_DTR, and usie_uc_update_line_state().

Here is the call graph for this function:

◆ usie_uc_cfg_set_rts()

static void usie_uc_cfg_set_rts ( struct ucom_softc ucom,
uint8_t  flag 
)
static

Definition at line 562 of file if_usie.c.

References USIE_LS_RTS, and usie_uc_update_line_state().

Here is the call graph for this function:

◆ usie_uc_rx_callback()

◆ usie_uc_start_read()

static void usie_uc_start_read ( struct ucom_softc ucom)
static

Definition at line 589 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_start(), and USIE_UC_RX.

Here is the call graph for this function:

◆ usie_uc_start_write()

static void usie_uc_start_write ( struct ucom_softc ucom)
static

Definition at line 605 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_start(), and USIE_UC_TX.

Here is the call graph for this function:

◆ usie_uc_status_callback()

◆ usie_uc_stop_read()

static void usie_uc_stop_read ( struct ucom_softc ucom)
static

Definition at line 597 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_stop(), and USIE_UC_RX.

Here is the call graph for this function:

◆ usie_uc_stop_write()

static void usie_uc_stop_write ( struct ucom_softc ucom)
static

Definition at line 613 of file if_usie.c.

References ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_xfer, usbd_transfer_stop(), and USIE_UC_TX.

Here is the call graph for this function:

◆ usie_uc_tx_callback()

static void usie_uc_tx_callback ( struct usb_xfer xfer,
usb_error_t  error 
)
static

◆ usie_uc_update_line_state()

static void usie_uc_update_line_state ( struct ucom_softc ucom,
uint8_t  ls 
)
static

Definition at line 524 of file if_usie.c.

References DPRINTF, req, ucom_softc::sc_parent, ucom_softc::sc_subunit, usie_softc::sc_uc_ifnum, usie_softc::sc_uc_xfer, USETW, usie_do_request(), USIE_LINK_STATE, USIE_UC_STATUS, and UT_WRITE_CLASS_INTERFACE.

Referenced by usie_uc_cfg_set_dtr(), and usie_uc_cfg_set_rts().

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

Variable Documentation

◆ usie_attach

device_attach_t usie_attach
static

Definition at line 104 of file if_usie.c.

◆ usie_detach

device_detach_t usie_detach
static

Definition at line 105 of file if_usie.c.

Referenced by usie_attach().

◆ usie_devclass

devclass_t usie_devclass
static

Definition at line 212 of file if_usie.c.

◆ usie_devs

const STRUCT_USB_HOST_ID usie_devs[]
static
Initial value:
= {
#define USIE_DEV(v, d)
USIE_DEV(SIERRA, MC8700),
USIE_DEV(SIERRA, TRUINSTALL),
USIE_DEV(AIRPRIME, USB308),
}
#define USIE_DEV(v, d)

Definition at line 94 of file if_usie.c.

Referenced by usie_autoinst(), and usie_probe().

◆ usie_driver

driver_t usie_driver
static
Initial value:
= {
.name = "usie",
.methods = usie_methods,
.size = sizeof(struct usie_softc),
}
static device_method_t usie_methods[]
Definition: if_usie.c:199

Definition at line 206 of file if_usie.c.

◆ usie_etag

eventhandler_tag usie_etag
static

Definition at line 213 of file if_usie.c.

Referenced by usie_driver_loaded().

◆ usie_if_config

const struct usb_config usie_if_config[USIE_IF_N_XFER]
static
Initial value:
= {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = 0,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
},
[USIE_IF_RX] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = USIE_BUFSIZE,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.callback = &usie_if_rx_callback,
},
[USIE_IF_TX] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
.bufsize = MAX(USIE_BUFSIZE, MCLBYTES),
.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
.callback = &usie_if_tx_callback,
}
}
static usb_callback_t usie_if_tx_callback
Definition: if_usie.c:123
static usb_callback_t usie_if_status_callback
Definition: if_usie.c:125
static usb_callback_t usie_if_rx_callback
Definition: if_usie.c:124
@ USIE_IF_TX
Definition: if_usievar.h:208
@ USIE_IF_RX
Definition: if_usievar.h:207
@ USIE_IF_STATUS
Definition: if_usievar.h:206
#define USIE_BUFSIZE
Definition: if_usievar.h:52
#define UE_INTERRUPT
Definition: usb.h:544
#define UE_ADDR_ANY
Definition: usb.h:537
#define UE_BULK
Definition: usb.h:543
#define UE_DIR_IN
Definition: usb.h:531
#define UE_DIR_OUT
Definition: usb.h:532

Definition at line 172 of file if_usie.c.

Referenced by usie_attach().

◆ usie_if_rx_callback

usb_callback_t usie_if_rx_callback
static

Definition at line 124 of file if_usie.c.

◆ usie_if_status_callback

usb_callback_t usie_if_status_callback
static

Definition at line 125 of file if_usie.c.

◆ usie_if_tx_callback

usb_callback_t usie_if_tx_callback
static

Definition at line 123 of file if_usie.c.

◆ usie_methods

device_method_t usie_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, usie_probe),
DEVMETHOD(device_attach, usie_attach),
DEVMETHOD(device_detach, usie_detach),
DEVMETHOD_END
}
static device_attach_t usie_attach
Definition: if_usie.c:104
static device_probe_t usie_probe
Definition: if_usie.c:103
static device_detach_t usie_detach
Definition: if_usie.c:105

Definition at line 199 of file if_usie.c.

◆ usie_probe

device_probe_t usie_probe
static

Definition at line 103 of file if_usie.c.

◆ usie_uc_callback

const struct ucom_callback usie_uc_callback
static
Initial value:
= {
.ucom_cfg_get_status = &usie_uc_cfg_get_status,
.ucom_cfg_set_dtr = &usie_uc_cfg_set_dtr,
.ucom_cfg_set_rts = &usie_uc_cfg_set_rts,
.ucom_cfg_open = &usie_uc_cfg_open,
.ucom_cfg_close = &usie_uc_cfg_close,
.ucom_start_read = &usie_uc_start_read,
.ucom_stop_read = &usie_uc_stop_read,
.ucom_start_write = &usie_uc_start_write,
.ucom_stop_write = &usie_uc_stop_write,
.ucom_free = &usie_free,
}
static void usie_uc_cfg_set_rts(struct ucom_softc *, uint8_t)
Definition: if_usie.c:562
static void usie_uc_cfg_open(struct ucom_softc *)
Definition: if_usie.c:571
static void usie_uc_start_write(struct ucom_softc *)
Definition: if_usie.c:605
static void usie_uc_cfg_close(struct ucom_softc *)
Definition: if_usie.c:581
static void usie_free(struct ucom_softc *)
Definition: if_usie.c:518
static void usie_uc_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *)
Definition: if_usie.c:544
static void usie_uc_start_read(struct ucom_softc *)
Definition: if_usie.c:589
static void usie_uc_cfg_set_dtr(struct ucom_softc *, uint8_t)
Definition: if_usie.c:553
static void usie_uc_stop_read(struct ucom_softc *)
Definition: if_usie.c:597
static void usie_uc_stop_write(struct ucom_softc *)
Definition: if_usie.c:613

Definition at line 221 of file if_usie.c.

Referenced by usie_attach().

◆ usie_uc_config

const struct usb_config usie_uc_config[USIE_UC_N_XFER]
static
Initial value:
= {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = 0,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
},
[USIE_UC_RX] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = USIE_BUFSIZE,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,.proxy_buffer = 1,},
.callback = &usie_uc_rx_callback,
},
[USIE_UC_TX] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
.bufsize = USIE_BUFSIZE,
.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
.callback = &usie_uc_tx_callback,
}
}
static usb_callback_t usie_uc_rx_callback
Definition: if_usie.c:121
static usb_callback_t usie_uc_status_callback
Definition: if_usie.c:122
static usb_callback_t usie_uc_tx_callback
Definition: if_usie.c:120
@ USIE_UC_STATUS
Definition: if_usievar.h:199
@ USIE_UC_TX
Definition: if_usievar.h:201
@ USIE_UC_RX
Definition: if_usievar.h:200

Definition at line 145 of file if_usie.c.

Referenced by usie_attach().

◆ usie_uc_rx_callback

usb_callback_t usie_uc_rx_callback
static

Definition at line 121 of file if_usie.c.

◆ usie_uc_status_callback

usb_callback_t usie_uc_status_callback
static

Definition at line 122 of file if_usie.c.

◆ usie_uc_tx_callback

usb_callback_t usie_uc_tx_callback
static

Definition at line 120 of file if_usie.c.