FreeBSD kernel usb device Code
g_modem.c File Reference
#include <sys/param.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/queue.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/usb_cdc.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbhid.h>
#include "usb_if.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/gadget/g_modem.h>
Include dependency graph for g_modem.c:

Go to the source code of this file.

Data Structures

struct  g_modem_softc
 

Macros

#define USB_DEBUG_VAR   g_modem_debug
 

Enumerations

enum  { G_MODEM_INTR_DT , G_MODEM_BULK_RD , G_MODEM_BULK_WR , G_MODEM_N_TRANSFER }
 

Functions

 __FBSDID ("$FreeBSD$")
 
static SYSCTL_NODE (_hw_usb, OID_AUTO, g_modem, CTLFLAG_RW|CTLFLAG_MPSAFE, 0, "USB modem gadget")
 
 SYSCTL_INT (_hw_usb_g_modem, OID_AUTO, mode, CTLFLAG_RWTUN, &g_modem_mode, 0, "Mode selection")
 
 SYSCTL_INT (_hw_usb_g_modem, OID_AUTO, pattern_interval, CTLFLAG_RWTUN, &g_modem_pattern_interval, 0, "Pattern interval in milliseconds")
 
 SYSCTL_STRING (_hw_usb_g_modem, OID_AUTO, pattern, CTLFLAG_RW, &g_modem_pattern_data, sizeof(g_modem_pattern_data), "Data pattern")
 
 SYSCTL_INT (_hw_usb_g_modem, OID_AUTO, throughput, CTLFLAG_RD, &g_modem_throughput, sizeof(g_modem_throughput), "Throughput in bytes per second")
 
static void g_modem_timeout (void *arg)
 
 DRIVER_MODULE (g_modem, uhub, g_modem_driver, g_modem_devclass, 0, 0)
 
 MODULE_DEPEND (g_modem, usb, 1, 1, 1)
 
static void g_modem_timeout_reset (struct g_modem_softc *sc)
 
static void g_modem_watchdog (void *arg)
 
static void g_modem_watchdog_reset (struct g_modem_softc *sc)
 
static int g_modem_probe (device_t dev)
 
static int g_modem_attach (device_t dev)
 
static int g_modem_detach (device_t dev)
 
static void g_modem_intr_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void g_modem_bulk_write_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void g_modem_bulk_read_callback (struct usb_xfer *xfer, usb_error_t error)
 
static int g_modem_handle_request (device_t dev, const void *preq, void **pptr, uint16_t *plen, uint16_t offset, uint8_t *pstate)
 

Variables

static int g_modem_mode = 0
 
static int g_modem_pattern_interval = 1000
 
static char g_modem_pattern_data [G_MODEM_MAX_STRLEN]
 
static int g_modem_throughput
 
static device_probe_t g_modem_probe
 
static device_attach_t g_modem_attach
 
static device_detach_t g_modem_detach
 
static usb_handle_request_t g_modem_handle_request
 
static usb_callback_t g_modem_intr_callback
 
static usb_callback_t g_modem_bulk_read_callback
 
static usb_callback_t g_modem_bulk_write_callback
 
static devclass_t g_modem_devclass
 
static device_method_t g_modem_methods []
 
static driver_t g_modem_driver
 
static const struct usb_config g_modem_config [G_MODEM_N_TRANSFER]
 

Macro Definition Documentation

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   g_modem_debug

Definition at line 62 of file g_modem.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
G_MODEM_INTR_DT 
G_MODEM_BULK_RD 
G_MODEM_BULK_WR 
G_MODEM_N_TRANSFER 

Definition at line 67 of file g_modem.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( g_modem  ,
uhub  ,
g_modem_driver  ,
g_modem_devclass  ,
,
 
)

◆ g_modem_attach()

◆ g_modem_bulk_read_callback()

◆ g_modem_bulk_write_callback()

◆ g_modem_detach()

static int g_modem_detach ( device_t  dev)
static

◆ g_modem_handle_request()

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

◆ g_modem_intr_callback()

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

Definition at line 343 of file g_modem.c.

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

Here is the call graph for this function:

◆ g_modem_probe()

◆ g_modem_timeout()

static void g_modem_timeout ( void *  arg)
static

◆ g_modem_timeout_reset()

static void g_modem_timeout_reset ( struct g_modem_softc sc)
static

Definition at line 197 of file g_modem.c.

References g_modem_pattern_interval, g_modem_timeout(), g_modem_softc::sc_callout, g_modem_softc::sc_tx_interval, usb_callout_reset, and USB_MS_TO_TICKS.

Referenced by g_modem_attach(), and g_modem_timeout().

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

◆ g_modem_watchdog()

static void g_modem_watchdog ( void *  arg)
static

Definition at line 243 of file g_modem.c.

References g_modem_throughput, g_modem_watchdog_reset(), and g_modem_softc::sc_throughput.

Referenced by g_modem_watchdog_reset().

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

◆ g_modem_watchdog_reset()

static void g_modem_watchdog_reset ( struct g_modem_softc sc)
static

Definition at line 237 of file g_modem.c.

References g_modem_watchdog(), g_modem_softc::sc_watchdog, and usb_callout_reset.

Referenced by g_modem_attach(), and g_modem_watchdog().

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

◆ MODULE_DEPEND()

MODULE_DEPEND ( g_modem  ,
usb  ,
,
,
 
)

◆ SYSCTL_INT() [1/3]

SYSCTL_INT ( _hw_usb_g_modem  ,
OID_AUTO  ,
mode  ,
CTLFLAG_RWTUN  ,
g_modem_mode,
,
"Mode selection"   
)

◆ SYSCTL_INT() [2/3]

SYSCTL_INT ( _hw_usb_g_modem  ,
OID_AUTO  ,
pattern_interval  ,
CTLFLAG_RWTUN  ,
g_modem_pattern_interval,
,
"Pattern interval in milliseconds"   
)

◆ SYSCTL_INT() [3/3]

SYSCTL_INT ( _hw_usb_g_modem  ,
OID_AUTO  ,
throughput  ,
CTLFLAG_RD  ,
g_modem_throughput,
sizeof(g_modem_throughput ,
"Throughput in bytes per second"   
)

◆ SYSCTL_NODE()

static SYSCTL_NODE ( _hw_usb  ,
OID_AUTO  ,
g_modem  ,
CTLFLAG_RW|  CTLFLAG_MPSAFE,
,
"USB modem gadget"   
)
static

◆ SYSCTL_STRING()

SYSCTL_STRING ( _hw_usb_g_modem  ,
OID_AUTO  ,
pattern  ,
CTLFLAG_RW  ,
g_modem_pattern_data,
sizeof(g_modem_pattern_data ,
"Data pattern"   
)

Variable Documentation

◆ g_modem_attach

device_attach_t g_modem_attach
static

Definition at line 126 of file g_modem.c.

◆ g_modem_bulk_read_callback

usb_callback_t g_modem_bulk_read_callback
static

Definition at line 130 of file g_modem.c.

◆ g_modem_bulk_write_callback

usb_callback_t g_modem_bulk_write_callback
static

Definition at line 131 of file g_modem.c.

◆ g_modem_config

const struct usb_config g_modem_config[G_MODEM_N_TRANSFER]
static

Definition at line 158 of file g_modem.c.

Referenced by g_modem_attach().

◆ g_modem_detach

device_detach_t g_modem_detach
static

Definition at line 127 of file g_modem.c.

Referenced by g_modem_attach().

◆ g_modem_devclass

devclass_t g_modem_devclass
static

Definition at line 135 of file g_modem.c.

◆ g_modem_driver

driver_t g_modem_driver
static
Initial value:
= {
.name = "g_modem",
.methods = g_modem_methods,
.size = sizeof(struct g_modem_softc),
}
static device_method_t g_modem_methods[]
Definition: g_modem.c:137

Definition at line 149 of file g_modem.c.

◆ g_modem_handle_request

usb_handle_request_t g_modem_handle_request
static

Definition at line 128 of file g_modem.c.

◆ g_modem_intr_callback

usb_callback_t g_modem_intr_callback
static

Definition at line 129 of file g_modem.c.

◆ g_modem_methods

device_method_t g_modem_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, g_modem_probe),
DEVMETHOD(device_attach, g_modem_attach),
DEVMETHOD(device_detach, g_modem_detach),
DEVMETHOD_END
}
static device_detach_t g_modem_detach
Definition: g_modem.c:127
static usb_handle_request_t g_modem_handle_request
Definition: g_modem.c:128
static device_attach_t g_modem_attach
Definition: g_modem.c:126
static device_probe_t g_modem_probe
Definition: g_modem.c:125
static usb_error_t usb_handle_request(struct usb_xfer *)

Definition at line 137 of file g_modem.c.

◆ g_modem_mode

int g_modem_mode = 0
static

Definition at line 105 of file g_modem.c.

Referenced by g_modem_timeout().

◆ g_modem_pattern_data

char g_modem_pattern_data[G_MODEM_MAX_STRLEN]
static

Definition at line 115 of file g_modem.c.

Referenced by g_modem_timeout().

◆ g_modem_pattern_interval

int g_modem_pattern_interval = 1000
static

Definition at line 110 of file g_modem.c.

Referenced by g_modem_timeout_reset().

◆ g_modem_probe

device_probe_t g_modem_probe
static

Definition at line 125 of file g_modem.c.

◆ g_modem_throughput

int g_modem_throughput
static

Definition at line 120 of file g_modem.c.

Referenced by g_modem_watchdog().