FreeBSD kernel usb device Code
|
#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>
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 |
#define UMS_BUTTON_MAX 31 /* exclusive, must be less than 32 */ |
__FBSDID | ( | "$FreeBSD$" | ) |
DRIVER_MODULE | ( | ums | , |
uhub | , | ||
ums_driver | , | ||
ums_devclass | , | ||
NULL | , | ||
0 | |||
) |
MODULE_DEPEND | ( | ums | , |
hid | , | ||
1 | , | ||
1 | , | ||
1 | |||
) |
MODULE_DEPEND | ( | ums | , |
usb | , | ||
1 | , | ||
1 | , | ||
1 | |||
) |
MODULE_VERSION | ( | ums | , |
1 | |||
) |
|
static |
Definition at line 570 of file ums.c.
References usbd_lookup_info::bIfaceIndex, dev, usb_attach_arg::device, device_set_usb_desc(), DPRINTF, usbd_lookup_info::idProduct, usbd_lookup_info::idVendor, usb_attach_arg::info, ums_info::sc_buttons, ums_softc::sc_callout, ums_softc::sc_fifo, ums_info::sc_flags, ums_softc::sc_iid, ums_info::sc_iid_btn, ums_info::sc_iid_t, ums_info::sc_iid_w, ums_info::sc_iid_x, ums_info::sc_iid_y, ums_info::sc_iid_z, ums_softc::sc_info, ums_info::sc_loc_btn, ums_info::sc_loc_t, ums_info::sc_loc_w, ums_info::sc_loc_x, ums_info::sc_loc_y, ums_info::sc_loc_z, ums_softc::sc_mtx, ums_softc::sc_xfer, ums_config, ums_detach, ums_fifo_methods, UMS_FLAG_REVZ, UMS_FLAG_SBU, UMS_FLAG_T_AXIS, UMS_FLAG_X_AXIS, UMS_FLAG_Y_AXIS, UMS_FLAG_Z_AXIS, ums_hid_parse(), UMS_INFO_MAX, UMS_INTR_DT, UMS_N_TRANSFER, ums_sysctl_handler_parseinfo(), UQ_MS_BAD_CLASS, UQ_MS_REVZ, usb_callout_init_mtx, usb_fifo_attach(), usb_get_serial(), usb_test_quirk(), usbd_errstr(), usbd_req_get_hid_desc(), usbd_req_set_protocol(), usbd_transfer_setup(), and usbd_xfer_max_framelen().
|
static |
Definition at line 760 of file ums.c.
References DPRINTF, ums_softc::sc_callout, ums_softc::sc_fifo, ums_softc::sc_mtx, ums_softc::sc_xfer, UMS_N_TRANSFER, usb_callout_drain, usb_fifo_detach(), and usbd_transfer_unsetup().
|
static |
Definition at line 1010 of file ums.c.
References ums_softc::sc_fflags, usb_fifo_free_buffer(), and usb_fifo_softc().
|
static |
Definition at line 1023 of file ums.c.
References addr, error, ums_softc::sc_buttons, ums_softc::sc_hw, ums_softc::sc_mode, ums_softc::sc_mtx, ums_softc::sc_pollrate, ums_softc::sc_status, status, ums_reset_buf(), and usb_fifo_softc().
|
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().
|
static |
Definition at line 849 of file ums.c.
References ums_start_rx(), and usb_fifo_softc().
|
static |
Definition at line 857 of file ums.c.
References ums_stop_rx(), and usb_fifo_softc().
|
static |
Definition at line 461 of file ums.c.
References dev, index, len, MOUSE_FLAGS, MOUSE_FLAGS_MASK, ums_info::sc_buttons, ums_softc::sc_buttons, ums_info::sc_flags, ums_info::sc_iid_btn, ums_info::sc_iid_t, ums_info::sc_iid_w, ums_info::sc_iid_x, ums_info::sc_iid_y, ums_info::sc_iid_z, ums_softc::sc_info, ums_info::sc_loc_btn, ums_info::sc_loc_t, ums_info::sc_loc_w, ums_info::sc_loc_x, ums_info::sc_loc_y, ums_info::sc_loc_z, UMS_BUTTON_MAX, UMS_FLAG_T_AXIS, UMS_FLAG_W_AXIS, UMS_FLAG_X_AXIS, UMS_FLAG_Y_AXIS, and UMS_FLAG_Z_AXIS.
Referenced by ums_attach().
|
static |
Definition at line 220 of file ums.c.
References error, usb_fifo_sc::fp, id, len, ums_info::sc_buttons, ums_softc::sc_callout, ums_softc::sc_fifo, ums_info::sc_flags, ums_softc::sc_iid, ums_info::sc_iid_btn, ums_info::sc_iid_t, ums_info::sc_iid_w, ums_info::sc_iid_x, ums_info::sc_iid_y, ums_info::sc_iid_z, ums_softc::sc_info, ums_info::sc_loc_btn, ums_info::sc_loc_t, ums_info::sc_loc_w, ums_info::sc_loc_x, ums_info::sc_loc_y, ums_info::sc_loc_z, ums_softc::sc_status, ums_softc::sc_temp, UMS_BUT, UMS_FLAG_REVZ, UMS_FLAG_SBU, UMS_FLAG_T_AXIS, UMS_FLAG_W_AXIS, UMS_FLAG_X_AXIS, UMS_FLAG_Y_AXIS, UMS_FLAG_Z_AXIS, UMS_INFO_MAX, ums_put_queue(), ums_put_queue_timeout(), usb_callout_reset, usb_callout_stop, USB_ERR_CANCELLED, usb_fifo_put_bytes_max(), USB_FIFO_RX, USB_GET_STATE, USB_ST_SETUP, USB_ST_TRANSFERRED, usbd_copy_out(), usbd_transfer_submit(), usbd_xfer_get_frame(), usbd_xfer_max_len(), usbd_xfer_set_frame_len(), usbd_xfer_set_stall(), usbd_xfer_softc(), and usbd_xfer_status().
|
static |
Definition at line 423 of file ums.c.
References usbd_lookup_info::bIfaceIndex, usbd_lookup_info::bInterfaceClass, usbd_lookup_info::bInterfaceProtocol, usbd_lookup_info::bInterfaceSubClass, dev, usb_attach_arg::device, error, usb_attach_arg::info, UICLASS_HID, UIPROTO_MOUSE, UISUBCLASS_BOOT, UQ_UMS_IGNORE, usb_attach_arg::usb_mode, USB_MODE_HOST, usb_test_quirk(), and usbd_req_get_hid_desc().
|
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().
|
static |
Definition at line 207 of file ums.c.
References ums_softc::sc_mtx, and ums_put_queue().
Referenced by ums_intr_callback().
|
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().
|
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().
|
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().
|
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().
|
static |
Definition at line 1141 of file ums.c.
References req, ums_info::sc_buttons, ums_info::sc_flags, ums_info::sc_iid_btn, ums_info::sc_iid_t, ums_info::sc_iid_w, ums_info::sc_iid_x, ums_info::sc_iid_y, ums_info::sc_iid_z, ums_softc::sc_info, ums_info::sc_loc_btn, ums_info::sc_loc_t, ums_info::sc_loc_w, ums_info::sc_loc_x, ums_info::sc_loc_y, ums_info::sc_loc_z, UMS_FLAG_T_AXIS, UMS_FLAG_W_AXIS, UMS_FLAG_X_AXIS, UMS_FLAG_Y_AXIS, UMS_FLAG_Z_AXIS, and UMS_INFO_MAX.
Referenced by ums_attach().
USB_PNP_HOST_INFO | ( | ums_devs | ) |
|
static |
Definition at line 404 of file ums.c.
Referenced by ums_attach().
|
static |
Definition at line 169 of file ums.c.
Referenced by ums_attach().
|
static |
|
static |
|
static |
|
static |
|
static |
Definition at line 190 of file ums.c.
Referenced by ums_attach().
|
static |
|
static |
|
static |
|
static |
|
static |