1bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev/* 2bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * usbfs header structures 3bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * Copyright (C) 2007 Daniel Drake <dsd@gentoo.org> 4bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * Copyright (c) 2001 Johannes Erdfelt <johannes@erdfelt.com> 5bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * 6bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * This library is free software; you can redistribute it and/or 7bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * modify it under the terms of the GNU Lesser General Public 8bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * License as published by the Free Software Foundation; either 9bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * version 2.1 of the License, or (at your option) any later version. 10bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * 11bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * This library is distributed in the hope that it will be useful, 12bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * but WITHOUT ANY WARRANTY; without even the implied warranty of 13bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * Lesser General Public License for more details. 15bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * 16bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * You should have received a copy of the GNU Lesser General Public 17bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * License along with this library; if not, write to the Free Software 18bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev */ 20bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 21bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#ifndef __LIBUSB_USBFS_H__ 22bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define __LIBUSB_USBFS_H__ 23bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 24bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define SYSFS_DEVICE_PATH "/sys/bus/usb/devices" 25bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 26bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_ctrltransfer { 27bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev /* keep in sync with usbdevice_fs.h:usbdevfs_ctrltransfer */ 28bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint8_t bmRequestType; 29bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint8_t bRequest; 30bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint16_t wValue; 31bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint16_t wIndex; 32bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint16_t wLength; 33bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 34bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev uint32_t timeout; /* in milliseconds */ 35bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 36bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev /* pointer to data */ 37bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev void *data; 38bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 39bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 40bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_bulktransfer { 41bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev /* keep in sync with usbdevice_fs.h:usbdevfs_bulktransfer */ 42bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int ep; 43bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int len; 44bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int timeout; /* in milliseconds */ 45bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 46bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev /* pointer to data */ 47bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev void *data; 48bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 49bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 50bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_setinterface { 51bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev /* keep in sync with usbdevice_fs.h:usbdevfs_setinterface */ 52bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int interface; 53bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int altsetting; 54bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 55bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 56bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define USBFS_MAXDRIVERNAME 255 57bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 58bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_getdriver { 59bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int interface; 60bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev char driver[USBFS_MAXDRIVERNAME + 1]; 61bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 62bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 63bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define USBFS_URB_SHORT_NOT_OK 0x01 64bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define USBFS_URB_ISO_ASAP 0x02 65bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define USBFS_URB_BULK_CONTINUATION 0x04 66bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define USBFS_URB_QUEUE_BULK 0x10 67bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 68bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevenum usbfs_urb_type { 69bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev USBFS_URB_TYPE_ISO = 0, 70bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev USBFS_URB_TYPE_INTERRUPT = 1, 71bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev USBFS_URB_TYPE_CONTROL = 2, 72bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev USBFS_URB_TYPE_BULK = 3, 73bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 74bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 75bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_iso_packet_desc { 76bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int length; 77bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int actual_length; 78bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int status; 79bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 80bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 81bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define MAX_ISO_BUFFER_LENGTH 32768 82bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define MAX_BULK_BUFFER_LENGTH 16384 83bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define MAX_CTRL_BUFFER_LENGTH 4096 84bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 85bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_urb { 86bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned char type; 87bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned char endpoint; 88bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int status; 89bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int flags; 90bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev void *buffer; 91bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int buffer_length; 92bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int actual_length; 93bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int start_frame; 94bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int number_of_packets; 95bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int error_count; 96bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int signr; 97bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev void *usercontext; 98bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev struct usbfs_iso_packet_desc iso_frame_desc[0]; 99bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 100bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 101bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_connectinfo { 102bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned int devnum; 103bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned char slow; 104bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 105bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 106bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_ioctl { 107bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int ifno; /* interface 0..N ; negative numbers reserved */ 108bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev int ioctl_code; /* MUST encode size + direction of data so the 109bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev * macros in <asm/ioctl.h> give correct values */ 110bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev void *data; /* param buffer (in, or out) */ 111bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 112bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 113bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishevstruct usbfs_hub_portinfo { 114bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned char numports; 115bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev unsigned char port[127]; /* port to device num mapping */ 116bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev}; 117bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 118bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_CONTROL _IOWR('U', 0, struct usbfs_ctrltransfer) 119bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_BULK _IOWR('U', 2, struct usbfs_bulktransfer) 120bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_RESETEP _IOR('U', 3, unsigned int) 121bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_SETINTF _IOR('U', 4, struct usbfs_setinterface) 122bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_SETCONFIG _IOR('U', 5, unsigned int) 123bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_GETDRIVER _IOW('U', 8, struct usbfs_getdriver) 124bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_SUBMITURB _IOR('U', 10, struct usbfs_urb) 125bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_DISCARDURB _IO('U', 11) 126bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_REAPURB _IOW('U', 12, void *) 127bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_REAPURBNDELAY _IOW('U', 13, void *) 128bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_CLAIMINTF _IOR('U', 15, unsigned int) 129bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_RELEASEINTF _IOR('U', 16, unsigned int) 130bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_CONNECTINFO _IOW('U', 17, struct usbfs_connectinfo) 131bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_IOCTL _IOWR('U', 18, struct usbfs_ioctl) 132bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_HUB_PORTINFO _IOR('U', 19, struct usbfs_hub_portinfo) 133bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_RESET _IO('U', 20) 134bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_CLEAR_HALT _IOR('U', 21, unsigned int) 135bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_DISCONNECT _IO('U', 22) 136bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#define IOCTL_USBFS_CONNECT _IO('U', 23) 137bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev 138bda86ae8203fd360c4e87c310498da1e1e4c53a7Yavor Goulishev#endif 139