FreeBSD kernel usb device Code
ums.c File Reference
#include <sys/cdefs.h>
#include "opt_evdev.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 <sys/conf.h>
#include <sys/fcntl.h>
#include <sys/sbuf.h>
#include <dev/hid/hid.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbhid.h>
#include "usbdevs.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/quirk/usb_quirk.h>
#include <sys/ioccom.h>
#include <sys/filio.h>
#include <sys/mouse.h>
Include dependency graph for ums.c:

Go to the source code of this file.

Data Structures

struct  ums_info
 
struct  ums_softc
 

Macros

#define USB_DEBUG_VAR   ums_debug
 
#define MOUSE_FLAGS_MASK   (HIO_CONST|HIO_RELATIVE)
 
#define MOUSE_FLAGS   (HIO_RELATIVE)
 
#define UMS_BUF_SIZE   8 /* bytes */
 
#define UMS_IFQ_MAXLEN   50 /* units */
 
#define UMS_BUTTON_MAX   31 /* exclusive, must be less than 32 */
 
#define UMS_BUT(i)   ((i) < 3 ? (((i) + 2) % 3) : (i))
 
#define UMS_INFO_MAX   2 /* maximum number of HID sets */
 
#define UMS_FLAG_X_AXIS   0x0001
 
#define UMS_FLAG_Y_AXIS   0x0002
 
#define UMS_FLAG_Z_AXIS   0x0004
 
#define UMS_FLAG_T_AXIS   0x0008
 
#define UMS_FLAG_SBU   0x0010 /* spurious button up events */
 
#define UMS_FLAG_REVZ   0x0020 /* Z-axis is reversed */
 
#define UMS_FLAG_W_AXIS   0x0040
 

Enumerations

enum  { UMS_INTR_DT , UMS_N_TRANSFER }
 

Functions

 __FBSDID ("$FreeBSD$")
 
static void ums_put_queue_timeout (void *__sc)
 
static void ums_start_rx (struct ums_softc *)
 
static void ums_stop_rx (struct ums_softc *)
 
static void ums_put_queue (struct ums_softc *, int32_t, int32_t, int32_t, int32_t, int32_t)
 
static int ums_sysctl_handler_parseinfo (SYSCTL_HANDLER_ARGS)
 
static void ums_intr_callback (struct usb_xfer *xfer, usb_error_t error)
 
static int ums_probe (device_t dev)
 
static void ums_hid_parse (struct ums_softc *sc, device_t dev, const uint8_t *buf, uint16_t len, uint8_t index)
 
static int ums_attach (device_t dev)
 
static int ums_detach (device_t self)
 
static void ums_reset (struct ums_softc *sc)
 
static void ums_fifo_start_read (struct usb_fifo *fifo)
 
static void ums_fifo_stop_read (struct usb_fifo *fifo)
 
static void ums_reset_buf (struct ums_softc *sc)
 
static int ums_fifo_open (struct usb_fifo *fifo, int fflags)
 
static void ums_fifo_close (struct usb_fifo *fifo, int fflags)
 
static int ums_fifo_ioctl (struct usb_fifo *fifo, u_long cmd, void *addr, int fflags)
 
 DRIVER_MODULE (ums, uhub, ums_driver, ums_devclass, NULL, 0)
 
 MODULE_DEPEND (ums, usb, 1, 1, 1)
 
 MODULE_DEPEND (ums, hid, 1, 1, 1)
 
 MODULE_VERSION (ums, 1)
 
 USB_PNP_HOST_INFO (ums_devs)
 

Variables

static usb_callback_t ums_intr_callback
 
static device_probe_t ums_probe
 
static device_attach_t ums_attach
 
static device_detach_t ums_detach
 
static usb_fifo_cmd_t ums_fifo_start_read
 
static usb_fifo_cmd_t ums_fifo_stop_read
 
static usb_fifo_open_t ums_fifo_open
 
static usb_fifo_close_t ums_fifo_close
 
static usb_fifo_ioctl_t ums_fifo_ioctl
 
static struct usb_fifo_methods ums_fifo_methods
 
static const struct usb_config ums_config [UMS_N_TRANSFER]
 
static const STRUCT_USB_HOST_ID __used ums_devs []
 
static devclass_t ums_devclass
 
static device_method_t ums_methods []
 
static driver_t ums_driver
 

Macro Definition Documentation

◆ MOUSE_FLAGS

#define MOUSE_FLAGS   (HIO_RELATIVE)

Definition at line 96 of file ums.c.

◆ MOUSE_FLAGS_MASK

#define MOUSE_FLAGS_MASK   (HIO_CONST|HIO_RELATIVE)

Definition at line 95 of file ums.c.

◆ UMS_BUF_SIZE

#define UMS_BUF_SIZE   8 /* bytes */

Definition at line 98 of file ums.c.

◆ UMS_BUT

#define UMS_BUT (   i)    ((i) < 3 ? (((i) + 2) % 3) : (i))

Definition at line 101 of file ums.c.

◆ UMS_BUTTON_MAX

#define UMS_BUTTON_MAX   31 /* exclusive, must be less than 32 */

Definition at line 100 of file ums.c.

◆ UMS_FLAG_REVZ

#define UMS_FLAG_REVZ   0x0020 /* Z-axis is reversed */

Definition at line 123 of file ums.c.

◆ UMS_FLAG_SBU

#define UMS_FLAG_SBU   0x0010 /* spurious button up events */

Definition at line 122 of file ums.c.

◆ UMS_FLAG_T_AXIS

#define UMS_FLAG_T_AXIS   0x0008

Definition at line 121 of file ums.c.

◆ UMS_FLAG_W_AXIS

#define UMS_FLAG_W_AXIS   0x0040

Definition at line 124 of file ums.c.

◆ UMS_FLAG_X_AXIS

#define UMS_FLAG_X_AXIS   0x0001

Definition at line 118 of file ums.c.

◆ UMS_FLAG_Y_AXIS

#define UMS_FLAG_Y_AXIS   0x0002

Definition at line 119 of file ums.c.

◆ UMS_FLAG_Z_AXIS

#define UMS_FLAG_Z_AXIS   0x0004

Definition at line 120 of file ums.c.

◆ UMS_IFQ_MAXLEN

#define UMS_IFQ_MAXLEN   50 /* units */

Definition at line 99 of file ums.c.

◆ UMS_INFO_MAX

#define UMS_INFO_MAX   2 /* maximum number of HID sets */

Definition at line 102 of file ums.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   ums_debug

Definition at line 72 of file ums.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
UMS_INTR_DT 
UMS_N_TRANSFER 

Definition at line 104 of file ums.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( ums  ,
uhub  ,
ums_driver  ,
ums_devclass  ,
NULL  ,
 
)

◆ MODULE_DEPEND() [1/2]

MODULE_DEPEND ( ums  ,
hid  ,
,
,
 
)

◆ MODULE_DEPEND() [2/2]

MODULE_DEPEND ( ums  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( ums  ,
 
)

◆ ums_attach()

◆ ums_detach()

static int ums_detach ( device_t  self)
static

◆ ums_fifo_close()

static void ums_fifo_close ( struct usb_fifo fifo,
int  fflags 
)
static

Definition at line 1010 of file ums.c.

References ums_softc::sc_fflags, usb_fifo_free_buffer(), and usb_fifo_softc().

Here is the call graph for this function:

◆ ums_fifo_ioctl()

static int ums_fifo_ioctl ( struct usb_fifo fifo,
u_long  cmd,
void *  addr,
int  fflags 
)
static

◆ ums_fifo_open()

static int ums_fifo_open ( struct usb_fifo fifo,
int  fflags 
)
static

Definition at line 978 of file ums.c.

References ums_softc::sc_fflags, UMS_BUF_SIZE, UMS_IFQ_MAXLEN, ums_reset(), usb_fifo_alloc_buffer(), and usb_fifo_softc().

Here is the call graph for this function:

◆ ums_fifo_start_read()

static void ums_fifo_start_read ( struct usb_fifo fifo)
static

Definition at line 849 of file ums.c.

References ums_start_rx(), and usb_fifo_softc().

Here is the call graph for this function:

◆ ums_fifo_stop_read()

static void ums_fifo_stop_read ( struct usb_fifo fifo)
static

Definition at line 857 of file ums.c.

References ums_stop_rx(), and usb_fifo_softc().

Here is the call graph for this function:

◆ ums_hid_parse()

◆ ums_intr_callback()

◆ ums_probe()

◆ ums_put_queue()

static void ums_put_queue ( struct ums_softc sc,
int32_t  dx,
int32_t  dy,
int32_t  dz,
int32_t  dt,
int32_t  buttons 
)
static

Definition at line 873 of file ums.c.

References DPRINTF, usb_fifo_sc::fp, ums_softc::sc_fifo, ums_softc::sc_mode, usb_fifo_put_data_linear(), and USB_FIFO_RX.

Referenced by ums_intr_callback(), and ums_put_queue_timeout().

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

◆ ums_put_queue_timeout()

static void ums_put_queue_timeout ( void *  __sc)
static

Definition at line 207 of file ums.c.

References ums_softc::sc_mtx, and ums_put_queue().

Referenced by ums_intr_callback().

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

◆ ums_reset()

static void ums_reset ( struct ums_softc sc)
static

Definition at line 782 of file ums.c.

References ums_softc::sc_buttons, ums_softc::sc_hw, ums_softc::sc_mode, and ums_softc::sc_status.

Referenced by ums_fifo_open().

Here is the caller graph for this function:

◆ ums_reset_buf()

static void ums_reset_buf ( struct ums_softc sc)
static

Definition at line 937 of file ums.c.

References usb_fifo_sc::fp, ums_softc::sc_fifo, usb_fifo_reset(), and USB_FIFO_RX.

Referenced by ums_fifo_ioctl().

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

◆ ums_start_rx()

static void ums_start_rx ( struct ums_softc sc)
static

Definition at line 818 of file ums.c.

References DPRINTF, ums_softc::sc_pollrate, ums_softc::sc_xfer, UMS_INTR_DT, usbd_transfer_start(), usbd_transfer_stop(), and usbd_xfer_set_interval().

Referenced by ums_fifo_start_read().

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

◆ ums_stop_rx()

static void ums_stop_rx ( struct ums_softc sc)
static

Definition at line 842 of file ums.c.

References ums_softc::sc_callout, ums_softc::sc_xfer, UMS_INTR_DT, usb_callout_stop, and usbd_transfer_stop().

Referenced by ums_fifo_stop_read().

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

◆ ums_sysctl_handler_parseinfo()

◆ USB_PNP_HOST_INFO()

USB_PNP_HOST_INFO ( ums_devs  )

Variable Documentation

◆ ums_attach

device_attach_t ums_attach
static

Definition at line 168 of file ums.c.

◆ ums_config

const struct usb_config ums_config[UMS_N_TRANSFER]
static
Initial value:
= {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = 0,
.callback = &ums_intr_callback,
},
}
static usb_callback_t ums_intr_callback
Definition: ums.c:165
@ UMS_INTR_DT
Definition: ums.c:105
#define UE_INTERRUPT
Definition: usb.h:544
#define UE_ADDR_ANY
Definition: usb.h:537
#define UE_DIR_IN
Definition: usb.h:531

Definition at line 404 of file ums.c.

Referenced by ums_attach().

◆ ums_detach

device_detach_t ums_detach
static

Definition at line 169 of file ums.c.

Referenced by ums_attach().

◆ ums_devclass

devclass_t ums_devclass
static

Definition at line 1203 of file ums.c.

◆ ums_devs

const STRUCT_USB_HOST_ID __used ums_devs[]
static
Initial value:
= {
}
#define UISUBCLASS_BOOT
Definition: usb.h:454
#define UICLASS_HID
Definition: usb.h:453
#define UIPROTO_MOUSE
Definition: usb.h:456
#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 416 of file ums.c.

◆ ums_driver

driver_t ums_driver
static
Initial value:
= {
.name = "ums",
.methods = ums_methods,
.size = sizeof(struct ums_softc),
}
Definition: ums.c:135
static device_method_t ums_methods[]
Definition: ums.c:1205

Definition at line 1213 of file ums.c.

◆ ums_fifo_close

usb_fifo_close_t ums_fifo_close
static

Definition at line 174 of file ums.c.

◆ ums_fifo_ioctl

usb_fifo_ioctl_t ums_fifo_ioctl
static

Definition at line 175 of file ums.c.

◆ ums_fifo_methods

struct usb_fifo_methods ums_fifo_methods
static
Initial value:
= {
.f_open = &ums_fifo_open,
.f_close = &ums_fifo_close,
.f_ioctl = &ums_fifo_ioctl,
.f_start_read = &ums_fifo_start_read,
.f_stop_read = &ums_fifo_stop_read,
.basename[0] = "ums",
}
static usb_fifo_cmd_t ums_fifo_start_read
Definition: ums.c:171
static usb_fifo_open_t ums_fifo_open
Definition: ums.c:173
static usb_fifo_cmd_t ums_fifo_stop_read
Definition: ums.c:172
static usb_fifo_ioctl_t ums_fifo_ioctl
Definition: ums.c:175
static usb_fifo_close_t ums_fifo_close
Definition: ums.c:174

Definition at line 190 of file ums.c.

Referenced by ums_attach().

◆ ums_fifo_open

usb_fifo_open_t ums_fifo_open
static

Definition at line 173 of file ums.c.

◆ ums_fifo_start_read

usb_fifo_cmd_t ums_fifo_start_read
static

Definition at line 171 of file ums.c.

◆ ums_fifo_stop_read

usb_fifo_cmd_t ums_fifo_stop_read
static

Definition at line 172 of file ums.c.

◆ ums_intr_callback

usb_callback_t ums_intr_callback
static

Definition at line 165 of file ums.c.

◆ ums_methods

device_method_t ums_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, ums_probe),
DEVMETHOD(device_attach, ums_attach),
DEVMETHOD(device_detach, ums_detach),
DEVMETHOD_END
}
static device_attach_t ums_attach
Definition: ums.c:168
static device_probe_t ums_probe
Definition: ums.c:167
static device_detach_t ums_detach
Definition: ums.c:169

Definition at line 1205 of file ums.c.

◆ ums_probe

device_probe_t ums_probe
static

Definition at line 167 of file ums.c.