FreeBSD kernel usb device Code
umcs.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/linker_set.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/usb_cdc.h>
#include "usbdevs.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/serial/usb_serial.h>
#include <dev/usb/serial/umcs.h>
Include dependency graph for umcs.c:

Go to the source code of this file.

Data Structures

struct  umcs7840_port_registers
 
struct  umcs7840_softc_oneport
 
struct  umcs7840_softc
 

Macros

#define USB_DEBUG_VAR   umcs_debug
 
#define UMCS7840_MODVER   1
 

Enumerations

enum  { UMCS7840_BULK_RD_EP , UMCS7840_BULK_WR_EP , UMCS7840_N_TRANSFERS }
 

Functions

 __FBSDID ("$FreeBSD$")
 
static usb_error_t umcs7840_get_reg_sync (struct umcs7840_softc *, uint8_t, uint8_t *)
 
static usb_error_t umcs7840_set_reg_sync (struct umcs7840_softc *, uint8_t, uint8_t)
 
static usb_error_t umcs7840_get_UART_reg_sync (struct umcs7840_softc *, uint8_t, uint8_t, uint8_t *)
 
static usb_error_t umcs7840_set_UART_reg_sync (struct umcs7840_softc *, uint8_t, uint8_t, uint8_t)
 
static usb_error_t umcs7840_set_baudrate (struct umcs7840_softc *, uint8_t, uint32_t)
 
static usb_error_t umcs7840_calc_baudrate (uint32_t rate, uint16_t *, uint8_t *)
 
static void umcs7840_free (struct ucom_softc *)
 
static void umcs7840_cfg_get_status (struct ucom_softc *, uint8_t *, uint8_t *)
 
static void umcs7840_cfg_set_dtr (struct ucom_softc *, uint8_t)
 
static void umcs7840_cfg_set_rts (struct ucom_softc *, uint8_t)
 
static void umcs7840_cfg_set_break (struct ucom_softc *, uint8_t)
 
static void umcs7840_cfg_param (struct ucom_softc *, struct termios *)
 
static void umcs7840_cfg_open (struct ucom_softc *)
 
static void umcs7840_cfg_close (struct ucom_softc *)
 
static int umcs7840_pre_param (struct ucom_softc *, struct termios *)
 
static void umcs7840_start_read (struct ucom_softc *)
 
static void umcs7840_stop_read (struct ucom_softc *)
 
static void umcs7840_start_write (struct ucom_softc *)
 
static void umcs7840_stop_write (struct ucom_softc *)
 
static void umcs7840_poll (struct ucom_softc *ucom)
 
static void umcs7840_free_softc (struct umcs7840_softc *)
 
static void umcs7840_read_callbackN (struct usb_xfer *, usb_error_t, uint8_t)
 
static void umcs7840_write_callbackN (struct usb_xfer *, usb_error_t, uint8_t)
 
 DRIVER_MODULE (umcs7840, uhub, umcs7840_driver, umcs7840_devclass, 0, 0)
 
 MODULE_DEPEND (umcs7840, ucom, 1, 1, 1)
 
 MODULE_DEPEND (umcs7840, usb, 1, 1, 1)
 
 MODULE_VERSION (umcs7840, UMCS7840_MODVER)
 
 USB_PNP_HOST_INFO (umcs7840_devs)
 
static int umcs7840_probe (device_t dev)
 
static int umcs7840_attach (device_t dev)
 
static int umcs7840_detach (device_t dev)
 
 UCOM_UNLOAD_DRAIN (umcs7840)
 
static void umcs7840_intr_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_read_callback1 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_read_callback2 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_read_callback3 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_read_callback4 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_write_callback1 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_write_callback2 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_write_callback3 (struct usb_xfer *xfer, usb_error_t error)
 
static void umcs7840_write_callback4 (struct usb_xfer *xfer, usb_error_t error)
 

Variables

static const struct umcs7840_port_registers umcs7840_port_registers [UMCS7840_MAX_PORTS]
 
static device_probe_t umcs7840_probe
 
static device_attach_t umcs7840_attach
 
static device_detach_t umcs7840_detach
 
static usb_callback_t umcs7840_intr_callback
 
static usb_callback_t umcs7840_read_callback1
 
static usb_callback_t umcs7840_read_callback2
 
static usb_callback_t umcs7840_read_callback3
 
static usb_callback_t umcs7840_read_callback4
 
static usb_callback_t umcs7840_write_callback1
 
static usb_callback_t umcs7840_write_callback2
 
static usb_callback_t umcs7840_write_callback3
 
static usb_callback_t umcs7840_write_callback4
 
static usb_callback_tumcs7840_rw_callbacks [UMCS7840_MAX_PORTS][UMCS7840_N_TRANSFERS]
 
static const struct usb_config umcs7840_bulk_config_data [UMCS7840_N_TRANSFERS]
 
static const struct usb_config umcs7840_intr_config_data [1]
 
static struct ucom_callback umcs7840_callback
 
static const STRUCT_USB_HOST_ID umcs7840_devs []
 
static device_method_t umcs7840_methods []
 
static devclass_t umcs7840_devclass
 
static driver_t umcs7840_driver
 
static const uint32_t umcs7840_baudrate_divisors [] = {0, 115200, 230400, 403200, 460800, 806400, 921600, 1572864, 3145728,}
 
static const uint8_t umcs7840_baudrate_divisors_len = nitems(umcs7840_baudrate_divisors)
 

Macro Definition Documentation

◆ UMCS7840_MODVER

#define UMCS7840_MODVER   1

Definition at line 79 of file umcs.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   umcs_debug

Definition at line 71 of file umcs.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
UMCS7840_BULK_RD_EP 
UMCS7840_BULK_WR_EP 
UMCS7840_N_TRANSFERS 

Definition at line 114 of file umcs.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( umcs7840  ,
uhub  ,
umcs7840_driver  ,
umcs7840_devclass  ,
,
 
)

◆ MODULE_DEPEND() [1/2]

MODULE_DEPEND ( umcs7840  ,
ucom  ,
,
,
 
)

◆ MODULE_DEPEND() [2/2]

MODULE_DEPEND ( umcs7840  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( umcs7840  ,
UMCS7840_MODVER   
)

◆ UCOM_UNLOAD_DRAIN()

UCOM_UNLOAD_DRAIN ( umcs7840  )

◆ umcs7840_attach()

◆ umcs7840_calc_baudrate()

static usb_error_t umcs7840_calc_baudrate ( uint32_t  rate,
uint16_t *  divisor,
uint8_t *  clk 
)
static

Definition at line 1090 of file umcs.c.

References MCS7840_DEV_SPx_CLOCK_SHIFT, umcs7840_baudrate_divisors, and umcs7840_baudrate_divisors_len.

Referenced by umcs7840_pre_param(), and umcs7840_set_baudrate().

Here is the caller graph for this function:

◆ umcs7840_cfg_close()

◆ umcs7840_cfg_get_status()

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

◆ umcs7840_cfg_open()

◆ umcs7840_cfg_param()

◆ umcs7840_cfg_set_break()

static void umcs7840_cfg_set_break ( struct ucom_softc ucom,
uint8_t  onoff 
)
static

◆ umcs7840_cfg_set_dtr()

static void umcs7840_cfg_set_dtr ( struct ucom_softc ucom,
uint8_t  onoff 
)
static

◆ umcs7840_cfg_set_rts()

static void umcs7840_cfg_set_rts ( struct ucom_softc ucom,
uint8_t  onoff 
)
static

◆ umcs7840_detach()

◆ umcs7840_free()

static void umcs7840_free ( struct ucom_softc ucom)
static

Definition at line 435 of file umcs.c.

References ucom_softc::sc_parent, and umcs7840_free_softc().

Here is the call graph for this function:

◆ umcs7840_free_softc()

static void umcs7840_free_softc ( struct umcs7840_softc sc)
static

Definition at line 426 of file umcs.c.

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

Referenced by umcs7840_detach(), and umcs7840_free().

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

◆ umcs7840_get_reg_sync()

static usb_error_t umcs7840_get_reg_sync ( struct umcs7840_softc sc,
uint8_t  reg,
uint8_t *  data 
)
static

◆ umcs7840_get_UART_reg_sync()

static usb_error_t umcs7840_get_UART_reg_sync ( struct umcs7840_softc sc,
uint8_t  portno,
uint8_t  reg,
uint8_t *  data 
)
static

◆ umcs7840_intr_callback()

◆ umcs7840_poll()

static void umcs7840_poll ( struct ucom_softc ucom)
static

◆ umcs7840_pre_param()

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

Definition at line 686 of file umcs.c.

References umcs7840_calc_baudrate().

Here is the call graph for this function:

◆ umcs7840_probe()

static int umcs7840_probe ( device_t  dev)
static

◆ umcs7840_read_callback1()

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

Definition at line 826 of file umcs.c.

References error, and umcs7840_read_callbackN().

Here is the call graph for this function:

◆ umcs7840_read_callback2()

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

Definition at line 832 of file umcs.c.

References error, and umcs7840_read_callbackN().

Here is the call graph for this function:

◆ umcs7840_read_callback3()

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

Definition at line 837 of file umcs.c.

References error, and umcs7840_read_callbackN().

Here is the call graph for this function:

◆ umcs7840_read_callback4()

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

Definition at line 843 of file umcs.c.

References error, and umcs7840_read_callbackN().

Here is the call graph for this function:

◆ umcs7840_read_callbackN()

static void umcs7840_read_callbackN ( struct usb_xfer xfer,
usb_error_t  error,
uint8_t  subunit 
)
static

◆ umcs7840_set_baudrate()

static usb_error_t umcs7840_set_baudrate ( struct umcs7840_softc sc,
uint8_t  portno,
uint32_t  rate 
)
static

◆ umcs7840_set_reg_sync()

static usb_error_t umcs7840_set_reg_sync ( struct umcs7840_softc sc,
uint8_t  reg,
uint8_t  data 
)
static

◆ umcs7840_set_UART_reg_sync()

static usb_error_t umcs7840_set_UART_reg_sync ( struct umcs7840_softc sc,
uint8_t  portno,
uint8_t  reg,
uint8_t  data 
)
static

◆ umcs7840_start_read()

static void umcs7840_start_read ( struct ucom_softc ucom)
static

◆ umcs7840_start_write()

static void umcs7840_start_write ( struct ucom_softc ucom)
static

◆ umcs7840_stop_read()

static void umcs7840_stop_read ( struct ucom_softc ucom)
static

Definition at line 710 of file umcs.c.

References ucom_softc::sc_parent, ucom_softc::sc_portno, umcs7840_softc::sc_ports, umcs7840_softc_oneport::sc_xfer, UMCS7840_BULK_RD_EP, and usbd_transfer_stop().

Referenced by umcs7840_cfg_close().

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

◆ umcs7840_stop_write()

static void umcs7840_stop_write ( struct ucom_softc ucom)
static

Definition at line 733 of file umcs.c.

References ucom_softc::sc_parent, ucom_softc::sc_portno, umcs7840_softc::sc_ports, umcs7840_softc_oneport::sc_xfer, UMCS7840_BULK_WR_EP, and usbd_transfer_stop().

Referenced by umcs7840_cfg_close().

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

◆ umcs7840_write_callback1()

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

Definition at line 882 of file umcs.c.

References error, and umcs7840_write_callbackN().

Here is the call graph for this function:

◆ umcs7840_write_callback2()

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

Definition at line 888 of file umcs.c.

References error, and umcs7840_write_callbackN().

Here is the call graph for this function:

◆ umcs7840_write_callback3()

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

Definition at line 894 of file umcs.c.

References error, and umcs7840_write_callbackN().

Here is the call graph for this function:

◆ umcs7840_write_callback4()

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

Definition at line 900 of file umcs.c.

References error, and umcs7840_write_callbackN().

Here is the call graph for this function:

◆ umcs7840_write_callbackN()

static void umcs7840_write_callbackN ( struct usb_xfer xfer,
usb_error_t  error,
uint8_t  subunit 
)
static

◆ USB_PNP_HOST_INFO()

USB_PNP_HOST_INFO ( umcs7840_devs  )

Variable Documentation

◆ umcs7840_attach

device_attach_t umcs7840_attach
static

Definition at line 177 of file umcs.c.

◆ umcs7840_baudrate_divisors

const uint32_t umcs7840_baudrate_divisors[] = {0, 115200, 230400, 403200, 460800, 806400, 921600, 1572864, 3145728,}
static

Definition at line 1086 of file umcs.c.

Referenced by umcs7840_calc_baudrate().

◆ umcs7840_baudrate_divisors_len

const uint8_t umcs7840_baudrate_divisors_len = nitems(umcs7840_baudrate_divisors)
static

Definition at line 1087 of file umcs.c.

Referenced by umcs7840_calc_baudrate().

◆ umcs7840_bulk_config_data

const struct usb_config umcs7840_bulk_config_data[UMCS7840_N_TRANSFERS]
static
Initial value:
= {
.type = UE_BULK,
.endpoint = 0x01,
.direction = UE_DIR_IN,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = 0,
.if_index = 0,
},
.type = UE_BULK,
.endpoint = 0x02,
.direction = UE_DIR_OUT,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = 0,
.if_index = 0,
},
}
static usb_callback_t umcs7840_write_callback1
Definition: umcs.c:186
@ UMCS7840_BULK_WR_EP
Definition: umcs.c:116
@ UMCS7840_BULK_RD_EP
Definition: umcs.c:115
static usb_callback_t umcs7840_read_callback1
Definition: umcs.c:182
#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 202 of file umcs.c.

Referenced by umcs7840_attach().

◆ umcs7840_callback

struct ucom_callback umcs7840_callback
static
Initial value:
= {
.ucom_cfg_get_status = &umcs7840_cfg_get_status,
.ucom_cfg_set_dtr = &umcs7840_cfg_set_dtr,
.ucom_cfg_set_rts = &umcs7840_cfg_set_rts,
.ucom_cfg_set_break = &umcs7840_cfg_set_break,
.ucom_cfg_param = &umcs7840_cfg_param,
.ucom_cfg_open = &umcs7840_cfg_open,
.ucom_cfg_close = &umcs7840_cfg_close,
.ucom_pre_param = &umcs7840_pre_param,
.ucom_start_read = &umcs7840_start_read,
.ucom_stop_read = &umcs7840_stop_read,
.ucom_start_write = &umcs7840_start_write,
.ucom_stop_write = &umcs7840_stop_write,
.ucom_poll = &umcs7840_poll,
.ucom_free = &umcs7840_free,
}
static void umcs7840_cfg_set_break(struct ucom_softc *, uint8_t)
Definition: umcs.c:596
static void umcs7840_stop_read(struct ucom_softc *)
Definition: umcs.c:710
static void umcs7840_cfg_open(struct ucom_softc *)
Definition: umcs.c:441
static void umcs7840_cfg_set_dtr(struct ucom_softc *, uint8_t)
Definition: umcs.c:566
static void umcs7840_cfg_close(struct ucom_softc *)
Definition: umcs.c:544
static void umcs7840_cfg_param(struct ucom_softc *, struct termios *)
Definition: umcs.c:611
static void umcs7840_start_write(struct ucom_softc *)
Definition: umcs.c:720
static int umcs7840_pre_param(struct ucom_softc *, struct termios *)
Definition: umcs.c:686
static void umcs7840_stop_write(struct ucom_softc *)
Definition: umcs.c:733
static void umcs7840_start_read(struct ucom_softc *)
Definition: umcs.c:697
static void umcs7840_cfg_get_status(struct ucom_softc *, uint8_t *, uint8_t *)
Definition: umcs.c:743
static void umcs7840_cfg_set_rts(struct ucom_softc *, uint8_t)
Definition: umcs.c:581
static void umcs7840_poll(struct ucom_softc *ucom)
Definition: umcs.c:938
static void umcs7840_free(struct ucom_softc *)
Definition: umcs.c:435

Definition at line 236 of file umcs.c.

Referenced by umcs7840_attach().

◆ umcs7840_detach

device_detach_t umcs7840_detach
static

Definition at line 178 of file umcs.c.

Referenced by umcs7840_attach().

◆ umcs7840_devclass

devclass_t umcs7840_devclass
static

Definition at line 271 of file umcs.c.

◆ umcs7840_devs

const STRUCT_USB_HOST_ID umcs7840_devs[]
static
Initial value:
= {
{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7820, 0)},
{USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7840, 0)},
}
#define USB_VPI(vend, prod, info)
Definition: usbdi.h:367

Definition at line 259 of file umcs.c.

Referenced by umcs7840_probe().

◆ umcs7840_driver

driver_t umcs7840_driver
static
Initial value:
= {
.name = "umcs7840",
.methods = umcs7840_methods,
.size = sizeof(struct umcs7840_softc),
}
static device_method_t umcs7840_methods[]
Definition: umcs.c:264

Definition at line 273 of file umcs.c.

◆ umcs7840_intr_callback

usb_callback_t umcs7840_intr_callback
static

Definition at line 181 of file umcs.c.

◆ umcs7840_intr_config_data

const struct usb_config umcs7840_intr_config_data[1]
static
Initial value:
= {
[0] = {
.type = UE_INTERRUPT,
.endpoint = 0x09,
.direction = UE_DIR_IN,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = 0,
.callback = &umcs7840_intr_callback,
.if_index = 0,
},
}
static usb_callback_t umcs7840_intr_callback
Definition: umcs.c:181
#define UE_INTERRUPT
Definition: usb.h:544

Definition at line 224 of file umcs.c.

Referenced by umcs7840_attach().

◆ umcs7840_methods

device_method_t umcs7840_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, umcs7840_probe),
DEVMETHOD(device_attach, umcs7840_attach),
DEVMETHOD(device_detach, umcs7840_detach),
DEVMETHOD_END
}
static device_detach_t umcs7840_detach
Definition: umcs.c:178
static device_probe_t umcs7840_probe
Definition: umcs.c:176
static device_attach_t umcs7840_attach
Definition: umcs.c:177

Definition at line 264 of file umcs.c.

◆ umcs7840_port_registers

Initial value:
= {
}
#define MCS7840_DEV_REG_SP2
Definition: umcs.h:54
#define MCS7840_DEV_REG_CONTROL2
Definition: umcs.h:55
#define MCS7840_DEV_REG_CONTROL1
Definition: umcs.h:49
#define MCS7840_DEV_REG_SP3
Definition: umcs.h:56
#define MCS7840_DEV_REG_CONTROL4
Definition: umcs.h:59
#define MCS7840_DEV_REG_CONTROL3
Definition: umcs.h:57
#define MCS7840_DEV_REG_DCR0_4
Definition: umcs.h:263
#define MCS7840_DEV_REG_DCR0_2
Definition: umcs.h:257
#define MCS7840_DEV_REG_DCR0_1
Definition: umcs.h:254
#define MCS7840_DEV_REG_SP1
Definition: umcs.h:48
#define MCS7840_DEV_REG_SP4
Definition: umcs.h:58
#define MCS7840_DEV_REG_DCR0_3
Definition: umcs.h:260

Definition at line 107 of file umcs.c.

◆ umcs7840_probe

device_probe_t umcs7840_probe
static

Definition at line 176 of file umcs.c.

◆ umcs7840_read_callback1

usb_callback_t umcs7840_read_callback1
static

Definition at line 182 of file umcs.c.

◆ umcs7840_read_callback2

usb_callback_t umcs7840_read_callback2
static

Definition at line 183 of file umcs.c.

◆ umcs7840_read_callback3

usb_callback_t umcs7840_read_callback3
static

Definition at line 184 of file umcs.c.

◆ umcs7840_read_callback4

usb_callback_t umcs7840_read_callback4
static

Definition at line 185 of file umcs.c.

◆ umcs7840_rw_callbacks

usb_callback_t* umcs7840_rw_callbacks[UMCS7840_MAX_PORTS][UMCS7840_N_TRANSFERS]
static
Initial value:
= {
}
static usb_callback_t umcs7840_write_callback3
Definition: umcs.c:188
static usb_callback_t umcs7840_read_callback2
Definition: umcs.c:183
static usb_callback_t umcs7840_write_callback4
Definition: umcs.c:189
static usb_callback_t umcs7840_read_callback3
Definition: umcs.c:184
static usb_callback_t umcs7840_write_callback2
Definition: umcs.c:187
static usb_callback_t umcs7840_read_callback4
Definition: umcs.c:185

Definition at line 195 of file umcs.c.

Referenced by umcs7840_attach().

◆ umcs7840_write_callback1

usb_callback_t umcs7840_write_callback1
static

Definition at line 186 of file umcs.c.

◆ umcs7840_write_callback2

usb_callback_t umcs7840_write_callback2
static

Definition at line 187 of file umcs.c.

◆ umcs7840_write_callback3

usb_callback_t umcs7840_write_callback3
static

Definition at line 188 of file umcs.c.

◆ umcs7840_write_callback4

usb_callback_t umcs7840_write_callback4
static

Definition at line 189 of file umcs.c.