Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
/* $FreeBSD$ */
|
|
|
|
/*-
|
|
|
|
* Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
|
|
|
|
* Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
|
|
|
|
* Copyright (c) 1998 Lennart Augustsson. All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
2009-06-15 01:09:19 +00:00
|
|
|
#ifndef _USB_HID_H_
|
|
|
|
#define _USB_HID_H_
|
Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
|
2009-02-23 18:31:00 +00:00
|
|
|
#include <dev/usb/usb_endian.h>
|
2009-02-02 00:49:39 +00:00
|
|
|
|
Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
#define UR_GET_HID_DESCRIPTOR 0x06
|
|
|
|
#define UDESC_HID 0x21
|
|
|
|
#define UDESC_REPORT 0x22
|
|
|
|
#define UDESC_PHYSICAL 0x23
|
|
|
|
#define UR_SET_HID_DESCRIPTOR 0x07
|
|
|
|
#define UR_GET_REPORT 0x01
|
|
|
|
#define UR_SET_REPORT 0x09
|
|
|
|
#define UR_GET_IDLE 0x02
|
|
|
|
#define UR_SET_IDLE 0x0a
|
|
|
|
#define UR_GET_PROTOCOL 0x03
|
|
|
|
#define UR_SET_PROTOCOL 0x0b
|
|
|
|
|
2009-05-28 17:36:36 +00:00
|
|
|
struct usb_hid_descriptor {
|
Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
uByte bLength;
|
|
|
|
uByte bDescriptorType;
|
|
|
|
uWord bcdHID;
|
|
|
|
uByte bCountryCode;
|
|
|
|
uByte bNumDescriptors;
|
|
|
|
struct {
|
|
|
|
uByte bDescriptorType;
|
|
|
|
uWord wDescriptorLength;
|
|
|
|
} descrs[1];
|
|
|
|
} __packed;
|
|
|
|
|
|
|
|
#define USB_HID_DESCRIPTOR_SIZE(n) (9+((n)*3))
|
|
|
|
|
|
|
|
/* Usage pages */
|
|
|
|
#define HUP_UNDEFINED 0x0000
|
|
|
|
#define HUP_GENERIC_DESKTOP 0x0001
|
|
|
|
#define HUP_SIMULATION 0x0002
|
|
|
|
#define HUP_VR_CONTROLS 0x0003
|
|
|
|
#define HUP_SPORTS_CONTROLS 0x0004
|
|
|
|
#define HUP_GAMING_CONTROLS 0x0005
|
|
|
|
#define HUP_KEYBOARD 0x0007
|
|
|
|
#define HUP_LEDS 0x0008
|
|
|
|
#define HUP_BUTTON 0x0009
|
|
|
|
#define HUP_ORDINALS 0x000a
|
|
|
|
#define HUP_TELEPHONY 0x000b
|
|
|
|
#define HUP_CONSUMER 0x000c
|
|
|
|
#define HUP_DIGITIZERS 0x000d
|
|
|
|
#define HUP_PHYSICAL_IFACE 0x000e
|
|
|
|
#define HUP_UNICODE 0x0010
|
|
|
|
#define HUP_ALPHANUM_DISPLAY 0x0014
|
|
|
|
#define HUP_MONITOR 0x0080
|
|
|
|
#define HUP_MONITOR_ENUM_VAL 0x0081
|
|
|
|
#define HUP_VESA_VC 0x0082
|
|
|
|
#define HUP_VESA_CMD 0x0083
|
|
|
|
#define HUP_POWER 0x0084
|
|
|
|
#define HUP_BATTERY_SYSTEM 0x0085
|
|
|
|
#define HUP_BARCODE_SCANNER 0x008b
|
|
|
|
#define HUP_SCALE 0x008c
|
|
|
|
#define HUP_CAMERA_CONTROL 0x0090
|
|
|
|
#define HUP_ARCADE 0x0091
|
|
|
|
#define HUP_MICROSOFT 0xff00
|
|
|
|
|
|
|
|
/* Usages, generic desktop */
|
|
|
|
#define HUG_POINTER 0x0001
|
|
|
|
#define HUG_MOUSE 0x0002
|
|
|
|
#define HUG_JOYSTICK 0x0004
|
|
|
|
#define HUG_GAME_PAD 0x0005
|
|
|
|
#define HUG_KEYBOARD 0x0006
|
|
|
|
#define HUG_KEYPAD 0x0007
|
|
|
|
#define HUG_X 0x0030
|
|
|
|
#define HUG_Y 0x0031
|
|
|
|
#define HUG_Z 0x0032
|
|
|
|
#define HUG_RX 0x0033
|
|
|
|
#define HUG_RY 0x0034
|
|
|
|
#define HUG_RZ 0x0035
|
|
|
|
#define HUG_SLIDER 0x0036
|
|
|
|
#define HUG_DIAL 0x0037
|
|
|
|
#define HUG_WHEEL 0x0038
|
|
|
|
#define HUG_HAT_SWITCH 0x0039
|
|
|
|
#define HUG_COUNTED_BUFFER 0x003a
|
|
|
|
#define HUG_BYTE_COUNT 0x003b
|
|
|
|
#define HUG_MOTION_WAKEUP 0x003c
|
|
|
|
#define HUG_VX 0x0040
|
|
|
|
#define HUG_VY 0x0041
|
|
|
|
#define HUG_VZ 0x0042
|
|
|
|
#define HUG_VBRX 0x0043
|
|
|
|
#define HUG_VBRY 0x0044
|
|
|
|
#define HUG_VBRZ 0x0045
|
|
|
|
#define HUG_VNO 0x0046
|
|
|
|
#define HUG_TWHEEL 0x0048 /* M$ Wireless Intellimouse Wheel */
|
|
|
|
#define HUG_SYSTEM_CONTROL 0x0080
|
|
|
|
#define HUG_SYSTEM_POWER_DOWN 0x0081
|
|
|
|
#define HUG_SYSTEM_SLEEP 0x0082
|
|
|
|
#define HUG_SYSTEM_WAKEUP 0x0083
|
|
|
|
#define HUG_SYSTEM_CONTEXT_MENU 0x0084
|
|
|
|
#define HUG_SYSTEM_MAIN_MENU 0x0085
|
|
|
|
#define HUG_SYSTEM_APP_MENU 0x0086
|
|
|
|
#define HUG_SYSTEM_MENU_HELP 0x0087
|
|
|
|
#define HUG_SYSTEM_MENU_EXIT 0x0088
|
|
|
|
#define HUG_SYSTEM_MENU_SELECT 0x0089
|
|
|
|
#define HUG_SYSTEM_MENU_RIGHT 0x008a
|
|
|
|
#define HUG_SYSTEM_MENU_LEFT 0x008b
|
|
|
|
#define HUG_SYSTEM_MENU_UP 0x008c
|
|
|
|
#define HUG_SYSTEM_MENU_DOWN 0x008d
|
2009-05-27 19:27:29 +00:00
|
|
|
#define HUG_APPLE_EJECT 0x00b8
|
Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
|
|
|
|
/* Usages Digitizers */
|
|
|
|
#define HUD_UNDEFINED 0x0000
|
|
|
|
#define HUD_TIP_PRESSURE 0x0030
|
|
|
|
#define HUD_BARREL_PRESSURE 0x0031
|
|
|
|
#define HUD_IN_RANGE 0x0032
|
|
|
|
#define HUD_TOUCH 0x0033
|
|
|
|
#define HUD_UNTOUCH 0x0034
|
|
|
|
#define HUD_TAP 0x0035
|
|
|
|
#define HUD_QUALITY 0x0036
|
|
|
|
#define HUD_DATA_VALID 0x0037
|
|
|
|
#define HUD_TRANSDUCER_INDEX 0x0038
|
|
|
|
#define HUD_TABLET_FKEYS 0x0039
|
|
|
|
#define HUD_PROGRAM_CHANGE_KEYS 0x003a
|
|
|
|
#define HUD_BATTERY_STRENGTH 0x003b
|
|
|
|
#define HUD_INVERT 0x003c
|
|
|
|
#define HUD_X_TILT 0x003d
|
|
|
|
#define HUD_Y_TILT 0x003e
|
|
|
|
#define HUD_AZIMUTH 0x003f
|
|
|
|
#define HUD_ALTITUDE 0x0040
|
|
|
|
#define HUD_TWIST 0x0041
|
|
|
|
#define HUD_TIP_SWITCH 0x0042
|
|
|
|
#define HUD_SEC_TIP_SWITCH 0x0043
|
|
|
|
#define HUD_BARREL_SWITCH 0x0044
|
|
|
|
#define HUD_ERASER 0x0045
|
|
|
|
#define HUD_TABLET_PICK 0x0046
|
|
|
|
|
2010-05-12 22:43:33 +00:00
|
|
|
/* Usages, Consumer */
|
|
|
|
#define HUC_AC_PAN 0x0238
|
|
|
|
|
Bring in USB4BSD, Hans Petter Selasky rework of the USB stack
that includes significant features and SMP safety.
This commit includes a more or less complete rewrite of the *BSD USB
stack, including Host Controller and Device Controller drivers and
updating all existing USB drivers to use the new USB API:
1) A brief feature list:
- A new and mutex enabled USB API.
- Many USB drivers are now running Giant free.
- Linux USB kernel compatibility layer.
- New UGEN backend and libusb library, finally solves the "driver
unloading" problem. The new BSD licensed libusb20 library is fully
compatible with libusb-0.1.12 from sourceforge.
- New "usbconfig" utility, for easy configuration of USB.
- Full support for Split transactions, which means you can use your
full speed USB audio device on a high speed USB HUB.
- Full support for HS ISOC transactions, which makes writing drivers
for various HS webcams possible, for example.
- Full support for USB on embedded platforms, mostly cache flushing
and buffer invalidating stuff.
- Safer parsing of USB descriptors.
- Autodetect of annoying USB install disks.
- Support for USB device side mode, also called USB gadget mode,
using the same API like the USB host side. In other words the new
USB stack is symmetric with regard to host and device side.
- Support for USB transfers like I/O vectors, means more throughput
and less interrupts.
- ... see the FreeBSD quarterly status reports under "USB project"
2) To enable the driver in the default kernel build:
2.a) Remove all existing USB device options from your kernel config
file.
2.b) Add the following USB device options to your kernel configuration
file:
# USB core support
device usb2_core
# USB controller support
device usb2_controller
device usb2_controller_ehci
device usb2_controller_ohci
device usb2_controller_uhci
# USB mass storage support
device usb2_storage
device usb2_storage_mass
# USB ethernet support, requires miibus
device usb2_ethernet
device usb2_ethernet_aue
device usb2_ethernet_axe
device usb2_ethernet_cdce
device usb2_ethernet_cue
device usb2_ethernet_kue
device usb2_ethernet_rue
device usb2_ethernet_dav
# USB wireless LAN support
device usb2_wlan
device usb2_wlan_rum
device usb2_wlan_ral
device usb2_wlan_zyd
# USB serial device support
device usb2_serial
device usb2_serial_ark
device usb2_serial_bsa
device usb2_serial_bser
device usb2_serial_chcom
device usb2_serial_cycom
device usb2_serial_foma
device usb2_serial_ftdi
device usb2_serial_gensa
device usb2_serial_ipaq
device usb2_serial_lpt
device usb2_serial_mct
device usb2_serial_modem
device usb2_serial_moscom
device usb2_serial_plcom
device usb2_serial_visor
device usb2_serial_vscom
# USB bluetooth support
device usb2_bluetooth
device usb2_bluetooth_ng
# USB input device support
device usb2_input
device usb2_input_hid
device usb2_input_kbd
device usb2_input_ms
# USB sound and MIDI device support
device usb2_sound
2) To enable the driver at runtime:
2.a) Unload all existing USB modules. If USB is compiled into the
kernel then you might have to build a new kernel.
2.b) Load the "usb2_xxx.ko" modules under /boot/kernel having the same
base name like the kernel device option.
Submitted by: Hans Petter Selasky hselasky at c2i dot net
Reviewed by: imp, alfred
2008-11-04 02:31:03 +00:00
|
|
|
#define HID_USAGE2(p,u) (((p) << 16) | (u))
|
|
|
|
|
|
|
|
#define UHID_INPUT_REPORT 0x01
|
|
|
|
#define UHID_OUTPUT_REPORT 0x02
|
|
|
|
#define UHID_FEATURE_REPORT 0x03
|
|
|
|
|
|
|
|
/* Bits in the input/output/feature items */
|
|
|
|
#define HIO_CONST 0x001
|
|
|
|
#define HIO_VARIABLE 0x002
|
|
|
|
#define HIO_RELATIVE 0x004
|
|
|
|
#define HIO_WRAP 0x008
|
|
|
|
#define HIO_NONLINEAR 0x010
|
|
|
|
#define HIO_NOPREF 0x020
|
|
|
|
#define HIO_NULLSTATE 0x040
|
|
|
|
#define HIO_VOLATILE 0x080
|
|
|
|
#define HIO_BUFBYTES 0x100
|
|
|
|
|
2009-06-23 02:19:59 +00:00
|
|
|
#ifdef _KERNEL
|
|
|
|
struct usb_config_descriptor;
|
|
|
|
|
|
|
|
enum hid_kind {
|
|
|
|
hid_input, hid_output, hid_feature, hid_collection, hid_endcollection
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hid_location {
|
|
|
|
uint32_t size;
|
|
|
|
uint32_t count;
|
|
|
|
uint32_t pos;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hid_item {
|
|
|
|
/* Global */
|
|
|
|
int32_t _usage_page;
|
|
|
|
int32_t logical_minimum;
|
|
|
|
int32_t logical_maximum;
|
|
|
|
int32_t physical_minimum;
|
|
|
|
int32_t physical_maximum;
|
|
|
|
int32_t unit_exponent;
|
|
|
|
int32_t unit;
|
|
|
|
int32_t report_ID;
|
|
|
|
/* Local */
|
|
|
|
int32_t usage;
|
|
|
|
int32_t usage_minimum;
|
|
|
|
int32_t usage_maximum;
|
|
|
|
int32_t designator_index;
|
|
|
|
int32_t designator_minimum;
|
|
|
|
int32_t designator_maximum;
|
|
|
|
int32_t string_index;
|
|
|
|
int32_t string_minimum;
|
|
|
|
int32_t string_maximum;
|
|
|
|
int32_t set_delimiter;
|
|
|
|
/* Misc */
|
|
|
|
int32_t collection;
|
|
|
|
int collevel;
|
|
|
|
enum hid_kind kind;
|
|
|
|
uint32_t flags;
|
|
|
|
/* Location */
|
|
|
|
struct hid_location loc;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* prototypes from "usb_hid.c" */
|
|
|
|
|
|
|
|
struct hid_data *hid_start_parse(const void *d, usb_size_t len, int kindset);
|
|
|
|
void hid_end_parse(struct hid_data *s);
|
|
|
|
int hid_get_item(struct hid_data *s, struct hid_item *h);
|
|
|
|
int hid_report_size(const void *buf, usb_size_t len, enum hid_kind k,
|
|
|
|
uint8_t *id);
|
|
|
|
int hid_locate(const void *desc, usb_size_t size, uint32_t usage,
|
|
|
|
enum hid_kind kind, uint8_t index, struct hid_location *loc,
|
|
|
|
uint32_t *flags, uint8_t *id);
|
2010-05-12 22:50:23 +00:00
|
|
|
int32_t hid_get_data(const uint8_t *buf, usb_size_t len,
|
|
|
|
struct hid_location *loc);
|
|
|
|
uint32_t hid_get_data_unsigned(const uint8_t *buf, usb_size_t len,
|
2009-06-23 02:19:59 +00:00
|
|
|
struct hid_location *loc);
|
2011-07-04 07:37:28 +00:00
|
|
|
void hid_put_data_unsigned(uint8_t *buf, usb_size_t len,
|
|
|
|
struct hid_location *loc, unsigned int value);
|
2009-06-23 02:19:59 +00:00
|
|
|
int hid_is_collection(const void *desc, usb_size_t size, uint32_t usage);
|
|
|
|
struct usb_hid_descriptor *hid_get_descriptor_from_usb(
|
|
|
|
struct usb_config_descriptor *cd,
|
|
|
|
struct usb_interface_descriptor *id);
|
|
|
|
usb_error_t usbd_req_get_hid_desc(struct usb_device *udev, struct mtx *mtx,
|
|
|
|
void **descp, uint16_t *sizep, struct malloc_type *mem,
|
|
|
|
uint8_t iface_index);
|
|
|
|
#endif /* _KERNEL */
|
2009-06-15 01:09:19 +00:00
|
|
|
#endif /* _USB_HID_H_ */
|