1/* $FreeBSD: head/sys/dev/usb/usb_ioctl.h 254243 2013-08-12 09:17:48Z hselasky $ */ |
2/*- 3 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4 * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved. 5 * Copyright (c) 1998 Lennart Augustsson. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: --- 16 unchanged lines hidden (view full) --- 26 * SUCH DAMAGE. 27 */ 28 29#ifndef _USB_IOCTL_H_ 30#define _USB_IOCTL_H_ 31 32#ifndef USB_GLOBAL_INCLUDE_FILE 33#include <sys/ioccom.h> |
34#include <sys/cdefs.h> |
35 36/* Building "kdump" depends on these includes */ 37 38#include <dev/usb/usb_endian.h> 39#include <dev/usb/usb.h> 40#endif 41 42#define USB_DEVICE_NAME "usbctl" 43#define USB_DEVICE_DIR "usb" 44#define USB_GENERIC_NAME "ugen" 45#define USB_TEMPLATE_SYSCTL "hw.usb.template" /* integer type */ 46 |
47/* 48 * Align IOCTL structures to hide differences when running 32-bit 49 * programs under 64-bit kernels: 50 */ 51#ifdef COMPAT_32BIT 52#define USB_IOCTL_STRUCT_ALIGN(n) __aligned(n) 53#else 54#define USB_IOCTL_STRUCT_ALIGN(n) 55#endif 56 |
57/* Definition of valid template sysctl values */ 58 59enum { 60 USB_TEMP_MSC, /* USB Mass Storage */ 61 USB_TEMP_CDCE, /* USB CDC Ethernet */ 62 USB_TEMP_MTP, /* Message Transfer Protocol */ 63 USB_TEMP_MODEM, /* USB CDC Modem */ 64 USB_TEMP_AUDIO, /* USB Audio */ --- 5 unchanged lines hidden (view full) --- 70struct usb_read_dir { 71#ifdef COMPAT_32BIT 72 uint64_t urd_data; 73#else 74 void *urd_data; 75#endif 76 uint32_t urd_startentry; 77 uint32_t urd_maxlen; |
78} USB_IOCTL_STRUCT_ALIGN(8); |
79 80struct usb_ctl_request { 81#ifdef COMPAT_32BIT 82 uint64_t ucr_data; 83#else 84 void *ucr_data; 85#endif 86 uint16_t ucr_flags; 87 uint16_t ucr_actlen; /* actual length transferred */ 88 uint8_t ucr_addr; /* zero - currently not used */ 89 struct usb_device_request ucr_request; |
90} USB_IOCTL_STRUCT_ALIGN(8); |
91 92struct usb_alt_interface { 93 uint8_t uai_interface_index; 94 uint8_t uai_alt_index; |
95} USB_IOCTL_STRUCT_ALIGN(1); |
96 97struct usb_gen_descriptor { 98#ifdef COMPAT_32BIT 99 uint64_t ugd_data; 100#else 101 void *ugd_data; 102#endif 103 uint16_t ugd_lang_id; 104 uint16_t ugd_maxlen; 105 uint16_t ugd_actlen; 106 uint16_t ugd_offset; 107 uint8_t ugd_config_index; 108 uint8_t ugd_string_index; 109 uint8_t ugd_iface_index; 110 uint8_t ugd_altif_index; 111 uint8_t ugd_endpt_index; 112 uint8_t ugd_report_type; 113 uint8_t reserved[8]; |
114} USB_IOCTL_STRUCT_ALIGN(8); |
115 116struct usb_device_info { 117 uint16_t udi_productNo; 118 uint16_t udi_vendorNo; 119 uint16_t udi_releaseNo; 120 uint16_t udi_power; /* power consumption in mA, 0 if 121 * selfpowered */ 122 uint8_t udi_bus; --- 12 unchanged lines hidden (view full) --- 135 uint8_t udi_hubport; /* parent HUB port */ 136 uint8_t udi_power_mode; /* see "USB_POWER_MODE_XXX" */ 137 uint8_t udi_suspended; /* set if device is suspended */ 138 uint8_t udi_reserved[16]; /* leave space for the future */ 139 char udi_product[128]; 140 char udi_vendor[128]; 141 char udi_serial[64]; 142 char udi_release[8]; |
143} USB_IOCTL_STRUCT_ALIGN(2); |
144 145#define USB_DEVICE_PORT_PATH_MAX 32 146 147struct usb_device_port_path { 148 uint8_t udp_bus; /* which bus we are on */ 149 uint8_t udp_index; /* which device index */ 150 uint8_t udp_port_level; /* how many levels: 0, 1, 2 ... */ 151 uint8_t udp_port_no[USB_DEVICE_PORT_PATH_MAX]; |
152} USB_IOCTL_STRUCT_ALIGN(1); |
153 154struct usb_device_stats { 155 uint32_t uds_requests_ok[4]; /* Indexed by transfer type UE_XXX */ 156 uint32_t uds_requests_fail[4]; /* Indexed by transfer type UE_XXX */ |
157} USB_IOCTL_STRUCT_ALIGN(4); |
158 159struct usb_fs_start { 160 uint8_t ep_index; |
161} USB_IOCTL_STRUCT_ALIGN(1); |
162 163struct usb_fs_stop { 164 uint8_t ep_index; |
165} USB_IOCTL_STRUCT_ALIGN(1); |
166 167struct usb_fs_complete { 168 uint8_t ep_index; |
169} USB_IOCTL_STRUCT_ALIGN(1); |
170 171/* This structure is used for all endpoint types */ 172struct usb_fs_endpoint { 173 /* 174 * NOTE: isochronous USB transfer only use one buffer, but can have 175 * multiple frame lengths ! 176 */ 177#ifdef COMPAT_32BIT --- 16 unchanged lines hidden (view full) --- 194 /* will do a clear-stall before xfer */ 195#define USB_FS_FLAG_CLEAR_STALL 0x0008 196 uint16_t timeout; /* in milliseconds */ 197 /* isocronous completion time in milliseconds - used for echo cancel */ 198 uint16_t isoc_time_complete; 199 /* timeout value for no timeout */ 200#define USB_FS_TIMEOUT_NONE 0 201 int status; /* see USB_ERR_XXX */ |
202} USB_IOCTL_STRUCT_ALIGN(8); |
203 204struct usb_fs_init { 205 /* userland pointer to endpoints structure */ 206#ifdef COMPAT_32BIT 207 uint64_t pEndpoints; 208#else 209 struct usb_fs_endpoint *pEndpoints; 210#endif 211 /* maximum number of endpoints */ 212 uint8_t ep_index_max; |
213} USB_IOCTL_STRUCT_ALIGN(8); |
214 215struct usb_fs_uninit { 216 uint8_t dummy; /* zero */ |
217} USB_IOCTL_STRUCT_ALIGN(1); |
218 219struct usb_fs_open { 220#define USB_FS_MAX_BUFSIZE (1 << 18) 221 uint32_t max_bufsize; 222#define USB_FS_MAX_FRAMES (1U << 12) 223#define USB_FS_MAX_FRAMES_PRE_SCALE (1U << 31) /* for ISOCHRONOUS transfers */ 224 uint32_t max_frames; /* read and write */ 225 uint16_t max_packet_length; /* read only */ 226 uint8_t dev_index; /* currently unused */ 227 uint8_t ep_index; 228 uint8_t ep_no; /* bEndpointNumber */ |
229} USB_IOCTL_STRUCT_ALIGN(4); |
230 231struct usb_fs_open_stream { 232 struct usb_fs_open fs_open; |
233 uint16_t stream_id; /* stream ID */ 234} USB_IOCTL_STRUCT_ALIGN(4); |
235 236struct usb_fs_close { 237 uint8_t ep_index; |
238} USB_IOCTL_STRUCT_ALIGN(1); |
239 240struct usb_fs_clear_stall_sync { 241 uint8_t ep_index; |
242} USB_IOCTL_STRUCT_ALIGN(1); |
243 244struct usb_gen_quirk { 245 uint16_t index; /* Quirk Index */ 246 uint16_t vid; /* Vendor ID */ 247 uint16_t pid; /* Product ID */ 248 uint16_t bcdDeviceLow; /* Low Device Revision */ 249 uint16_t bcdDeviceHigh; /* High Device Revision */ 250 uint16_t reserved[2]; 251 /* |
252 * String version of quirk including terminating zero. See 253 * UQ_XXX in "usb_quirk.h". |
254 */ 255 char quirkname[64 - 14]; |
256} USB_IOCTL_STRUCT_ALIGN(2); |
257 258/* USB controller */ 259#define USB_REQUEST _IOWR('U', 1, struct usb_ctl_request) 260#define USB_SETDEBUG _IOW ('U', 2, int) 261#define USB_DISCOVER _IO ('U', 3) 262#define USB_DEVICEINFO _IOWR('U', 4, struct usb_device_info) 263#define USB_DEVICESTATS _IOR ('U', 5, struct usb_device_stats) 264#define USB_DEVICEENUMERATE _IOW ('U', 6, int) --- 78 unchanged lines hidden --- |