FreeBSD kernel usb device Code
usb_template_modem.c File Reference
#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/usb_core.h>
#include <dev/usb/usb_cdc.h>
#include <dev/usb/usb_ioctl.h>
#include <dev/usb/usb_util.h>
#include <dev/usb/template/usb_template.h>
Include dependency graph for usb_template_modem.c:

Go to the source code of this file.

Macros

#define MODEM_DEFAULT_VENDOR_ID   USB_TEMPLATE_VENDOR
 
#define MODEM_DEFAULT_PRODUCT_ID   0x27dd
 
#define MODEM_DEFAULT_INTERFACE   "Virtual serial port"
 
#define MODEM_DEFAULT_MANUFACTURER   USB_TEMPLATE_MANUFACTURER
 
#define MODEM_DEFAULT_PRODUCT   "Virtual serial port"
 
#define MODEM_DEFAULT_SERIAL_NUMBER   "FreeBSD1"
 
#define MODEM_IFACE_0   0
 
#define MODEM_IFACE_1   1
 

Enumerations

enum  {
  MODEM_LANG_INDEX , MODEM_INTERFACE_INDEX , MODEM_MANUFACTURER_INDEX , MODEM_PRODUCT_INDEX ,
  MODEM_SERIAL_NUMBER_INDEX , MODEM_MAX_INDEX
}
 

Functions

static const void * modem_get_vendor_desc (const struct usb_device_request *req, uint16_t *plen)
 
static const void * modem_get_string_desc (uint16_t lang_id, uint8_t string_index)
 
static void modem_init (void *arg __unused)
 
static void modem_uninit (void *arg __unused)
 
 SYSINIT (modem_init, SI_SUB_LOCK, SI_ORDER_FIRST, modem_init, NULL)
 
 SYSUNINIT (modem_uninit, SI_SUB_LOCK, SI_ORDER_FIRST, modem_uninit, NULL)
 

Variables

static struct usb_string_descriptor modem_interface
 
static struct usb_string_descriptor modem_manufacturer
 
static struct usb_string_descriptor modem_product
 
static struct usb_string_descriptor modem_serial_number
 
static struct sysctl_ctx_list modem_ctx_list
 
static const struct usb_temp_packet_size modem_bulk_mps
 
static const struct usb_temp_packet_size modem_intr_mps
 
static const struct usb_temp_interval modem_intr_interval
 
static const struct usb_temp_endpoint_desc modem_ep_0
 
static const struct usb_temp_endpoint_desc modem_ep_1
 
static const struct usb_temp_endpoint_desc modem_ep_2
 
static const struct usb_temp_endpoint_descmodem_iface_0_ep []
 
static const struct usb_temp_endpoint_descmodem_iface_1_ep []
 
static const uint8_t modem_raw_desc_0 []
 
static const uint8_t modem_raw_desc_1 []
 
static const uint8_t modem_raw_desc_2 []
 
static const uint8_t modem_raw_desc_3 []
 
static const void * modem_iface_0_desc []
 
static const struct usb_temp_interface_desc modem_iface_0
 
static const struct usb_temp_interface_desc modem_iface_1
 
static const struct usb_temp_interface_descmodem_interfaces []
 
static const struct usb_temp_config_desc modem_config_desc
 
static const struct usb_temp_config_descmodem_configs []
 
static usb_temp_get_string_desc_t modem_get_string_desc
 
static usb_temp_get_vendor_desc_t modem_get_vendor_desc
 
struct usb_temp_device_desc usb_template_modem
 

Macro Definition Documentation

◆ MODEM_DEFAULT_INTERFACE

#define MODEM_DEFAULT_INTERFACE   "Virtual serial port"

Definition at line 81 of file usb_template_modem.c.

◆ MODEM_DEFAULT_MANUFACTURER

#define MODEM_DEFAULT_MANUFACTURER   USB_TEMPLATE_MANUFACTURER

Definition at line 82 of file usb_template_modem.c.

◆ MODEM_DEFAULT_PRODUCT

#define MODEM_DEFAULT_PRODUCT   "Virtual serial port"

Definition at line 83 of file usb_template_modem.c.

◆ MODEM_DEFAULT_PRODUCT_ID

#define MODEM_DEFAULT_PRODUCT_ID   0x27dd

Definition at line 80 of file usb_template_modem.c.

◆ MODEM_DEFAULT_SERIAL_NUMBER

#define MODEM_DEFAULT_SERIAL_NUMBER   "FreeBSD1"

Definition at line 90 of file usb_template_modem.c.

◆ MODEM_DEFAULT_VENDOR_ID

#define MODEM_DEFAULT_VENDOR_ID   USB_TEMPLATE_VENDOR

Definition at line 79 of file usb_template_modem.c.

◆ MODEM_IFACE_0

#define MODEM_IFACE_0   0

Definition at line 99 of file usb_template_modem.c.

◆ MODEM_IFACE_1

#define MODEM_IFACE_1   1

Definition at line 100 of file usb_template_modem.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MODEM_LANG_INDEX 
MODEM_INTERFACE_INDEX 
MODEM_MANUFACTURER_INDEX 
MODEM_PRODUCT_INDEX 
MODEM_SERIAL_NUMBER_INDEX 
MODEM_MAX_INDEX 

Definition at line 70 of file usb_template_modem.c.

Function Documentation

◆ modem_get_string_desc()

static const void * modem_get_string_desc ( uint16_t  lang_id,
uint8_t  string_index 
)
static

◆ modem_get_vendor_desc()

static const void * modem_get_vendor_desc ( const struct usb_device_request req,
uint16_t *  plen 
)
static

Definition at line 237 of file usb_template_modem.c.

◆ modem_init()

◆ modem_uninit()

static void modem_uninit ( void *arg  __unused)
static

Definition at line 321 of file usb_template_modem.c.

References modem_ctx_list.

◆ SYSINIT()

SYSINIT ( modem_init  ,
SI_SUB_LOCK  ,
SI_ORDER_FIRST  ,
modem_init  ,
NULL   
)

◆ SYSUNINIT()

SYSUNINIT ( modem_uninit  ,
SI_SUB_LOCK  ,
SI_ORDER_FIRST  ,
modem_uninit  ,
NULL   
)

Variable Documentation

◆ modem_bulk_mps

const struct usb_temp_packet_size modem_bulk_mps
static
Initial value:
= {
.mps[USB_SPEED_LOW] = 8,
.mps[USB_SPEED_FULL] = 64,
.mps[USB_SPEED_HIGH] = 512,
}
@ USB_SPEED_LOW
Definition: usb.h:753
@ USB_SPEED_FULL
Definition: usb.h:754
@ USB_SPEED_HIGH
Definition: usb.h:755

Definition at line 104 of file usb_template_modem.c.

◆ modem_config_desc

const struct usb_temp_config_desc modem_config_desc
static
Initial value:
= {
.ppIfaceDesc = modem_interfaces,
.bmAttributes = 0,
.bMaxPower = 0,
.iConfiguration = MODEM_PRODUCT_INDEX,
}
@ MODEM_PRODUCT_INDEX
static const struct usb_temp_interface_desc * modem_interfaces[]

Definition at line 199 of file usb_template_modem.c.

◆ modem_configs

const struct usb_temp_config_desc* modem_configs[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_config_desc modem_config_desc

Definition at line 206 of file usb_template_modem.c.

◆ modem_ctx_list

struct sysctl_ctx_list modem_ctx_list
static

Definition at line 97 of file usb_template_modem.c.

Referenced by modem_init(), and modem_uninit().

◆ modem_ep_0

const struct usb_temp_endpoint_desc modem_ep_0
static
Initial value:
= {
.pPacketSize = &modem_intr_mps,
.pIntervals = &modem_intr_interval,
.bEndpointAddress = UE_DIR_IN,
.bmAttributes = UE_INTERRUPT,
}
#define UE_INTERRUPT
Definition: usb.h:544
#define UE_DIR_IN
Definition: usb.h:531
static const struct usb_temp_interval modem_intr_interval
static const struct usb_temp_packet_size modem_intr_mps

Definition at line 122 of file usb_template_modem.c.

◆ modem_ep_1

const struct usb_temp_endpoint_desc modem_ep_1
static
Initial value:
= {
.pPacketSize = &modem_bulk_mps,
.bEndpointAddress = UE_DIR_OUT,
.bmAttributes = UE_BULK,
}
#define UE_BULK
Definition: usb.h:543
#define UE_DIR_OUT
Definition: usb.h:532
static const struct usb_temp_packet_size modem_bulk_mps

Definition at line 129 of file usb_template_modem.c.

◆ modem_ep_2

const struct usb_temp_endpoint_desc modem_ep_2
static
Initial value:
= {
.pPacketSize = &modem_bulk_mps,
.bEndpointAddress = UE_DIR_IN,
.bmAttributes = UE_BULK,
}

Definition at line 135 of file usb_template_modem.c.

◆ modem_get_string_desc

usb_temp_get_string_desc_t modem_get_string_desc
static

Definition at line 211 of file usb_template_modem.c.

◆ modem_get_vendor_desc

usb_temp_get_vendor_desc_t modem_get_vendor_desc
static

Definition at line 212 of file usb_template_modem.c.

◆ modem_iface_0

const struct usb_temp_interface_desc modem_iface_0
static
Initial value:
= {
.ppRawDesc = modem_iface_0_desc,
.ppEndpoints = modem_iface_0_ep,
.bInterfaceClass = UICLASS_CDC,
.bInterfaceSubClass = UISUBCLASS_ABSTRACT_CONTROL_MODEL,
.bInterfaceProtocol = UIPROTO_CDC_NONE,
.iInterface = MODEM_INTERFACE_INDEX,
}
#define UIPROTO_CDC_NONE
Definition: usb.h:449
#define UICLASS_CDC
Definition: usb.h:434
#define UISUBCLASS_ABSTRACT_CONTROL_MODEL
Definition: usb.h:436
@ MODEM_INTERFACE_INDEX
static const struct usb_temp_endpoint_desc * modem_iface_0_ep[]
static const void * modem_iface_0_desc[]

Definition at line 176 of file usb_template_modem.c.

◆ modem_iface_0_desc

const void* modem_iface_0_desc[]
static
Initial value:
= {
NULL,
}
static const uint8_t modem_raw_desc_0[]
static const uint8_t modem_raw_desc_1[]
static const uint8_t modem_raw_desc_3[]
static const uint8_t modem_raw_desc_2[]

Definition at line 168 of file usb_template_modem.c.

◆ modem_iface_0_ep

const struct usb_temp_endpoint_desc* modem_iface_0_ep[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_endpoint_desc modem_ep_0

Definition at line 141 of file usb_template_modem.c.

◆ modem_iface_1

const struct usb_temp_interface_desc modem_iface_1
static
Initial value:
= {
.ppEndpoints = modem_iface_1_ep,
.bInterfaceClass = UICLASS_CDC_DATA,
.bInterfaceSubClass = UISUBCLASS_DATA,
.bInterfaceProtocol = UIPROTO_CDC_NONE,
.iInterface = MODEM_INTERFACE_INDEX,
}
#define UICLASS_CDC_DATA
Definition: usb.h:485
#define UISUBCLASS_DATA
Definition: usb.h:486
static const struct usb_temp_endpoint_desc * modem_iface_1_ep[]

Definition at line 185 of file usb_template_modem.c.

◆ modem_iface_1_ep

const struct usb_temp_endpoint_desc* modem_iface_1_ep[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_endpoint_desc modem_ep_1
static const struct usb_temp_endpoint_desc modem_ep_2

Definition at line 146 of file usb_template_modem.c.

◆ modem_interface

struct usb_string_descriptor modem_interface
static

Definition at line 92 of file usb_template_modem.c.

Referenced by modem_get_string_desc(), and modem_init().

◆ modem_interfaces

const struct usb_temp_interface_desc* modem_interfaces[]
static
Initial value:
= {
NULL,
}
static const struct usb_temp_interface_desc modem_iface_1
static const struct usb_temp_interface_desc modem_iface_0

Definition at line 193 of file usb_template_modem.c.

◆ modem_intr_interval

const struct usb_temp_interval modem_intr_interval
static
Initial value:
= {
.bInterval[USB_SPEED_LOW] = 8,
.bInterval[USB_SPEED_FULL] = 8,
.bInterval[USB_SPEED_HIGH] = 7,
}

Definition at line 116 of file usb_template_modem.c.

◆ modem_intr_mps

const struct usb_temp_packet_size modem_intr_mps
static
Initial value:
= {
.mps[USB_SPEED_LOW] = 8,
.mps[USB_SPEED_FULL] = 8,
.mps[USB_SPEED_HIGH] = 8,
}

Definition at line 110 of file usb_template_modem.c.

◆ modem_manufacturer

struct usb_string_descriptor modem_manufacturer
static

Definition at line 93 of file usb_template_modem.c.

Referenced by modem_get_string_desc(), and modem_init().

◆ modem_product

struct usb_string_descriptor modem_product
static

Definition at line 94 of file usb_template_modem.c.

Referenced by modem_get_string_desc(), and modem_init().

◆ modem_raw_desc_0

const uint8_t modem_raw_desc_0[]
static
Initial value:
= {
0x05, 0x24, 0x00, 0x10, 0x01
}

Definition at line 152 of file usb_template_modem.c.

◆ modem_raw_desc_1

const uint8_t modem_raw_desc_1[]
static
Initial value:
= {
0x05, 0x24, 0x06, MODEM_IFACE_0, MODEM_IFACE_1
}
#define MODEM_IFACE_1
#define MODEM_IFACE_0

Definition at line 156 of file usb_template_modem.c.

◆ modem_raw_desc_2

const uint8_t modem_raw_desc_2[]
static
Initial value:
= {
0x05, 0x24, 0x01, 0x03, MODEM_IFACE_1
}

Definition at line 160 of file usb_template_modem.c.

◆ modem_raw_desc_3

const uint8_t modem_raw_desc_3[]
static
Initial value:
= {
0x04, 0x24, 0x02, 0x07
}

Definition at line 164 of file usb_template_modem.c.

◆ modem_serial_number

struct usb_string_descriptor modem_serial_number
static

Definition at line 95 of file usb_template_modem.c.

Referenced by modem_get_string_desc(), and modem_init().

◆ usb_template_modem

struct usb_temp_device_desc usb_template_modem
Initial value:
= {
.getStringDesc = &modem_get_string_desc,
.getVendorDesc = &modem_get_vendor_desc,
.ppConfigDesc = modem_configs,
.bcdDevice = 0x0100,
.bDeviceClass = UDCLASS_COMM,
.bDeviceSubClass = 0,
.bDeviceProtocol = 0,
.iManufacturer = MODEM_MANUFACTURER_INDEX,
.iProduct = MODEM_PRODUCT_INDEX,
.iSerialNumber = MODEM_SERIAL_NUMBER_INDEX,
}
#define UDCLASS_COMM
Definition: usb.h:372
#define MODEM_DEFAULT_PRODUCT_ID
@ MODEM_MANUFACTURER_INDEX
@ MODEM_SERIAL_NUMBER_INDEX
#define MODEM_DEFAULT_VENDOR_ID
static const struct usb_temp_config_desc * modem_configs[]
static usb_temp_get_string_desc_t modem_get_string_desc
static usb_temp_get_vendor_desc_t modem_get_vendor_desc

Definition at line 214 of file usb_template_modem.c.

Referenced by modem_init(), and usb_temp_setup_by_index().