FreeBSD kernel usb device Code
umodem.c File Reference
#include <sys/cdefs.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/systm.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 <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbhid.h>
#include <dev/usb/usb_cdc.h>
#include "usbdevs.h"
#include "usb_if.h"
#include <dev/usb/usb_ioctl.h>
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/quirk/usb_quirk.h>
#include <dev/usb/serial/usb_serial.h>
Include dependency graph for umodem.c:

Go to the source code of this file.

Data Structures

struct  umodem_softc
 

Macros

#define USB_DEBUG_VAR   umodem_debug
 
#define UMODEM_BUF_SIZE   1024
 
#define UMODEM_MODVER   1 /* module version */
 

Enumerations

enum  {
  UMODEM_BULK_WR , UMODEM_BULK_RD , UMODEM_INTR_WR , UMODEM_INTR_RD ,
  UMODEM_N_TRANSFER
}
 

Functions

 __FBSDID ("$FreeBSD$")
 
static void umodem_free_softc (struct umodem_softc *)
 
static void umodem_free (struct ucom_softc *)
 
static void umodem_start_read (struct ucom_softc *)
 
static void umodem_stop_read (struct ucom_softc *)
 
static void umodem_start_write (struct ucom_softc *)
 
static void umodem_stop_write (struct ucom_softc *)
 
static void umodem_get_caps (struct usb_attach_arg *, uint8_t *, uint8_t *)
 
static void umodem_cfg_get_status (struct ucom_softc *, uint8_t *, uint8_t *)
 
static int umodem_pre_param (struct ucom_softc *, struct termios *)
 
static void umodem_cfg_param (struct ucom_softc *, struct termios *)
 
static int umodem_ioctl (struct ucom_softc *, uint32_t, caddr_t, int, struct thread *)
 
static void umodem_cfg_set_dtr (struct ucom_softc *, uint8_t)
 
static void umodem_cfg_set_rts (struct ucom_softc *, uint8_t)
 
static void umodem_cfg_set_break (struct ucom_softc *, uint8_t)
 
static void * umodem_get_desc (struct usb_attach_arg *, uint8_t, uint8_t)
 
static usb_error_t umodem_set_comm_feature (struct usb_device *, uint8_t, uint16_t, uint16_t)
 
static void umodem_poll (struct ucom_softc *ucom)
 
static void umodem_find_data_iface (struct usb_attach_arg *uaa, uint8_t, uint8_t *, uint8_t *)
 
 DRIVER_MODULE (umodem, uhub, umodem_driver, umodem_devclass, NULL, 0)
 
 MODULE_DEPEND (umodem, ucom, 1, 1, 1)
 
 MODULE_DEPEND (umodem, usb, 1, 1, 1)
 
 MODULE_VERSION (umodem, UMODEM_MODVER)
 
 USB_PNP_DUAL_INFO (umodem_dual_devs)
 
 USB_PNP_HOST_INFO (umodem_host_devs)
 
static int umodem_probe (device_t dev)
 
static int umodem_attach (device_t dev)
 
static void umodem_intr_write_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void umodem_intr_read_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void umodem_write_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void umodem_read_callback (struct usb_xfer *xfer, usb_error_t error)
 
static int umodem_detach (device_t dev)
 
 UCOM_UNLOAD_DRAIN (umodem)
 
static int umodem_handle_request (device_t dev, const void *preq, void **pptr, uint16_t *plen, uint16_t offset, uint8_t *pstate)
 

Variables

static const STRUCT_USB_DUAL_ID umodem_dual_devs []
 
static const STRUCT_USB_HOST_ID umodem_host_devs []
 
static device_probe_t umodem_probe
 
static device_attach_t umodem_attach
 
static device_detach_t umodem_detach
 
static usb_handle_request_t umodem_handle_request
 
static usb_callback_t umodem_intr_read_callback
 
static usb_callback_t umodem_intr_write_callback
 
static usb_callback_t umodem_write_callback
 
static usb_callback_t umodem_read_callback
 
static const struct usb_config umodem_config [UMODEM_N_TRANSFER]
 
static const struct ucom_callback umodem_callback
 
static device_method_t umodem_methods []
 
static devclass_t umodem_devclass
 
static driver_t umodem_driver
 

Macro Definition Documentation

◆ UMODEM_BUF_SIZE

#define UMODEM_BUF_SIZE   1024

Definition at line 165 of file umodem.c.

◆ UMODEM_MODVER

#define UMODEM_MODVER   1 /* module version */

Definition at line 175 of file umodem.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   umodem_debug

Definition at line 106 of file umodem.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
UMODEM_BULK_WR 
UMODEM_BULK_RD 
UMODEM_INTR_WR 
UMODEM_INTR_RD 
UMODEM_N_TRANSFER 

Definition at line 167 of file umodem.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( umodem  ,
uhub  ,
umodem_driver  ,
umodem_devclass  ,
NULL  ,
 
)

◆ MODULE_DEPEND() [1/2]

MODULE_DEPEND ( umodem  ,
ucom  ,
,
,
 
)

◆ MODULE_DEPEND() [2/2]

MODULE_DEPEND ( umodem  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( umodem  ,
UMODEM_MODVER   
)

◆ UCOM_UNLOAD_DRAIN()

UCOM_UNLOAD_DRAIN ( umodem  )

◆ umodem_attach()

◆ umodem_cfg_get_status()

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

Definition at line 571 of file umodem.c.

References DPRINTF, umodem_softc::sc_lsr, umodem_softc::sc_msr, and ucom_softc::sc_parent.

◆ umodem_cfg_param()

◆ umodem_cfg_set_break()

◆ umodem_cfg_set_dtr()

◆ umodem_cfg_set_rts()

◆ umodem_detach()

static int umodem_detach ( device_t  dev)
static

◆ umodem_find_data_iface()

static void umodem_find_data_iface ( struct usb_attach_arg uaa,
uint8_t  iface_index,
uint8_t *  p_data_no,
uint8_t *  p_match_class 
)
static

Definition at line 478 of file umodem.c.

References usb_attach_arg::device, id, UICLASS_CDC_DATA, UISUBCLASS_DATA, usbd_get_iface(), and usbd_get_interface_descriptor().

Referenced by umodem_attach().

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

◆ umodem_free()

static void umodem_free ( struct ucom_softc ucom)
static

Definition at line 976 of file umodem.c.

References ucom_softc::sc_parent, and umodem_free_softc().

Here is the call graph for this function:

◆ umodem_free_softc()

static void umodem_free_softc ( struct umodem_softc sc)
static

Definition at line 967 of file umodem.c.

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

Referenced by umodem_detach(), and umodem_free().

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

◆ umodem_get_caps()

static void umodem_get_caps ( struct usb_attach_arg uaa,
uint8_t *  cm,
uint8_t *  acm 
)
static

◆ umodem_get_desc()

static void * umodem_get_desc ( struct usb_attach_arg uaa,
uint8_t  type,
uint8_t  subtype 
)
static

Definition at line 920 of file umodem.c.

References usbd_lookup_info::bIfaceIndex, usb_attach_arg::device, usb_attach_arg::info, type, and usbd_find_descriptor().

Referenced by umodem_attach(), and umodem_get_caps().

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

◆ umodem_handle_request()

static int umodem_handle_request ( device_t  dev,
const void *  preq,
void **  pptr,
uint16_t *  plen,
uint16_t  offset,
uint8_t *  pstate 
)
static

◆ umodem_intr_read_callback()

◆ umodem_intr_write_callback()

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

Definition at line 740 of file umodem.c.

References DPRINTF, error, USB_ERR_CANCELLED, USB_GET_STATE, USB_ST_SETUP, USB_ST_TRANSFERRED, usbd_xfer_set_stall(), and usbd_xfer_status().

Here is the call graph for this function:

◆ umodem_ioctl()

static int umodem_ioctl ( struct ucom_softc ucom,
uint32_t  cmd,
caddr_t  data,
int  flag,
struct thread *  td 
)
static

◆ umodem_poll()

static void umodem_poll ( struct ucom_softc ucom)
static

Definition at line 982 of file umodem.c.

References ucom_softc::sc_parent, umodem_softc::sc_xfer, UMODEM_N_TRANSFER, and usbd_transfer_poll().

Here is the call graph for this function:

◆ umodem_pre_param()

static int umodem_pre_param ( struct ucom_softc ucom,
struct termios *  t 
)
static

Definition at line 583 of file umodem.c.

◆ umodem_probe()

static int umodem_probe ( device_t  dev)
static

Definition at line 322 of file umodem.c.

References dev, error, umodem_dual_devs, umodem_host_devs, and usbd_lookup_id_by_uaa().

Here is the call graph for this function:

◆ umodem_read_callback()

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

◆ umodem_set_comm_feature()

static usb_error_t umodem_set_comm_feature ( struct usb_device udev,
uint8_t  iface_no,
uint16_t  feature,
uint16_t  state 
)
static

Definition at line 927 of file umodem.c.

References DPRINTF, feature, req, state, UCDC_ABSTRACT_STATE_LENGTH, UCDC_SET_COMM_FEATURE, usbd_do_request, USETW, UT_WRITE_CLASS_INTERFACE, and usb_cdc_abstract_state::wState.

Referenced by umodem_attach().

Here is the caller graph for this function:

◆ umodem_start_read()

static void umodem_start_read ( struct ucom_softc ucom)
static

Definition at line 508 of file umodem.c.

References ucom_softc::sc_parent, umodem_softc::sc_xfer, UMODEM_BULK_RD, UMODEM_INTR_RD, and usbd_transfer_start().

Here is the call graph for this function:

◆ umodem_start_write()

static void umodem_start_write ( struct ucom_softc ucom)
static

Definition at line 532 of file umodem.c.

References ucom_softc::sc_parent, umodem_softc::sc_xfer, UMODEM_BULK_WR, UMODEM_INTR_WR, and usbd_transfer_start().

Here is the call graph for this function:

◆ umodem_stop_read()

static void umodem_stop_read ( struct ucom_softc ucom)
static

Definition at line 520 of file umodem.c.

References ucom_softc::sc_parent, umodem_softc::sc_xfer, UMODEM_BULK_RD, UMODEM_INTR_RD, and usbd_transfer_stop().

Here is the call graph for this function:

◆ umodem_stop_write()

static void umodem_stop_write ( struct ucom_softc ucom)
static

Definition at line 541 of file umodem.c.

References ucom_softc::sc_parent, umodem_softc::sc_xfer, UMODEM_BULK_WR, UMODEM_INTR_WR, and usbd_transfer_stop().

Here is the call graph for this function:

◆ umodem_write_callback()

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

◆ USB_PNP_DUAL_INFO()

USB_PNP_DUAL_INFO ( umodem_dual_devs  )

◆ USB_PNP_HOST_INFO()

USB_PNP_HOST_INFO ( umodem_host_devs  )

Variable Documentation

◆ umodem_attach

device_attach_t umodem_attach
static

Definition at line 200 of file umodem.c.

◆ umodem_callback

const struct ucom_callback umodem_callback
static
Initial value:
= {
.ucom_cfg_get_status = &umodem_cfg_get_status,
.ucom_cfg_set_dtr = &umodem_cfg_set_dtr,
.ucom_cfg_set_rts = &umodem_cfg_set_rts,
.ucom_cfg_set_break = &umodem_cfg_set_break,
.ucom_cfg_param = &umodem_cfg_param,
.ucom_pre_param = &umodem_pre_param,
.ucom_ioctl = &umodem_ioctl,
.ucom_start_read = &umodem_start_read,
.ucom_stop_read = &umodem_stop_read,
.ucom_start_write = &umodem_start_write,
.ucom_stop_write = &umodem_stop_write,
.ucom_poll = &umodem_poll,
.ucom_free = &umodem_free,
}
static void umodem_cfg_set_dtr(struct ucom_softc *, uint8_t)
Definition: umodem.c:668
static int umodem_ioctl(struct ucom_softc *, uint32_t, caddr_t, int, struct thread *)
Definition: umodem.c:639
static void umodem_start_read(struct ucom_softc *)
Definition: umodem.c:508
static void umodem_cfg_set_break(struct ucom_softc *, uint8_t)
Definition: umodem.c:716
static int umodem_pre_param(struct ucom_softc *, struct termios *)
Definition: umodem.c:583
static void umodem_stop_write(struct ucom_softc *)
Definition: umodem.c:541
static void umodem_cfg_param(struct ucom_softc *, struct termios *)
Definition: umodem.c:589
static void umodem_cfg_set_rts(struct ucom_softc *, uint8_t)
Definition: umodem.c:692
static void umodem_stop_read(struct ucom_softc *)
Definition: umodem.c:520
static void umodem_free(struct ucom_softc *)
Definition: umodem.c:976
static void umodem_poll(struct ucom_softc *ucom)
Definition: umodem.c:982
static void umodem_start_write(struct ucom_softc *)
Definition: umodem.c:532
static void umodem_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *)
Definition: umodem.c:571

Definition at line 279 of file umodem.c.

Referenced by umodem_attach().

◆ umodem_config

const struct usb_config umodem_config[UMODEM_N_TRANSFER]
static

Definition at line 233 of file umodem.c.

Referenced by umodem_attach().

◆ umodem_detach

device_detach_t umodem_detach
static

Definition at line 201 of file umodem.c.

Referenced by umodem_attach().

◆ umodem_devclass

devclass_t umodem_devclass
static

Definition at line 306 of file umodem.c.

◆ umodem_driver

driver_t umodem_driver
static
Initial value:
= {
.name = "umodem",
.methods = umodem_methods,
.size = sizeof(struct umodem_softc),
}
static device_method_t umodem_methods[]
Definition: umodem.c:295

Definition at line 308 of file umodem.c.

◆ umodem_dual_devs

const STRUCT_USB_DUAL_ID umodem_dual_devs[]
static
Initial value:
= {
}
#define UIPROTO_CDC_NONE
Definition: usb.h:449
#define UICLASS_CDC
Definition: usb.h:434
#define UIPROTO_CDC_AT
Definition: usb.h:450
#define UISUBCLASS_ABSTRACT_CONTROL_MODEL
Definition: usb.h:436
#define USB_IFACE_SUBCLASS(isc)
Definition: usbdi.h:388
#define USB_IFACE_CLASS(ic)
Definition: usbdi.h:385
#define USB_IFACE_PROTOCOL(ip)
Definition: usbdi.h:391

Definition at line 122 of file umodem.c.

Referenced by umodem_probe().

◆ umodem_handle_request

usb_handle_request_t umodem_handle_request
static

Definition at line 202 of file umodem.c.

◆ umodem_host_devs

const STRUCT_USB_HOST_ID umodem_host_devs[]
static
Initial value:
= {
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR),
{USB_VENDOR(USB_VENDOR_HUAWEI),USB_IFACE_CLASS(UICLASS_CDC),
{USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(0xFF),
{USB_VPI(USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_AHK3001V, 1)},
{USB_VPI(USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC5720, 1)},
{USB_VPI(USB_VENDOR_CURITEL, USB_PRODUCT_CURITEL_PC5740, 1)},
{USB_VENDOR(USB_VENDOR_WINBOND), USB_PRODUCT(USB_PRODUCT_WINBOND_CDC)},
}
#define UICLASS_VENDOR
Definition: usb.h:520
#define USB_PRODUCT(prod)
Definition: usbdi.h:361
#define USB_VENDOR(vend)
Definition: usbdi.h:358
#define USB_VPI(vend, prod, info)
Definition: usbdi.h:367

Definition at line 132 of file umodem.c.

Referenced by umodem_probe().

◆ umodem_intr_read_callback

usb_callback_t umodem_intr_read_callback
static

Definition at line 206 of file umodem.c.

◆ umodem_intr_write_callback

usb_callback_t umodem_intr_write_callback
static

Definition at line 207 of file umodem.c.

◆ umodem_methods

device_method_t umodem_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, umodem_probe),
DEVMETHOD(device_attach, umodem_attach),
DEVMETHOD(device_detach, umodem_detach),
DEVMETHOD_END
}
static device_probe_t umodem_probe
Definition: umodem.c:199
static usb_handle_request_t umodem_handle_request
Definition: umodem.c:202
static device_attach_t umodem_attach
Definition: umodem.c:200
static device_detach_t umodem_detach
Definition: umodem.c:201
static usb_error_t usb_handle_request(struct usb_xfer *)

Definition at line 295 of file umodem.c.

◆ umodem_probe

device_probe_t umodem_probe
static

Definition at line 199 of file umodem.c.

◆ umodem_read_callback

usb_callback_t umodem_read_callback
static

Definition at line 209 of file umodem.c.

◆ umodem_write_callback

usb_callback_t umodem_write_callback
static

Definition at line 208 of file umodem.c.