1*53ee8cc1Swenshuai.xi /*****************************************************************************/ 2*53ee8cc1Swenshuai.xi 3*53ee8cc1Swenshuai.xi /* 4*53ee8cc1Swenshuai.xi * usbdevice_fs.h -- USB device file system. 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * Copyright (C) 2000 7*53ee8cc1Swenshuai.xi * Thomas Sailer (sailer@ife.ee.ethz.ch) 8*53ee8cc1Swenshuai.xi * 9*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or modify 10*53ee8cc1Swenshuai.xi * it under the terms of the GNU General Public License as published by 11*53ee8cc1Swenshuai.xi * the Free Software Foundation; either version 2 of the License, or 12*53ee8cc1Swenshuai.xi * (at your option) any later version. 13*53ee8cc1Swenshuai.xi * 14*53ee8cc1Swenshuai.xi * This program is distributed in the hope that it will be useful, 15*53ee8cc1Swenshuai.xi * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*53ee8cc1Swenshuai.xi * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*53ee8cc1Swenshuai.xi * GNU General Public License for more details. 18*53ee8cc1Swenshuai.xi * 19*53ee8cc1Swenshuai.xi * You should have received a copy of the GNU General Public License 20*53ee8cc1Swenshuai.xi * along with this program; if not, write to the Free Software 21*53ee8cc1Swenshuai.xi * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22*53ee8cc1Swenshuai.xi * 23*53ee8cc1Swenshuai.xi * History: 24*53ee8cc1Swenshuai.xi * 0.1 04.01.2000 Created 25*53ee8cc1Swenshuai.xi * 26*53ee8cc1Swenshuai.xi * $Id: usbdevice_fs.h,v 1.1 2000/01/06 18:40:41 tom Exp $ 27*53ee8cc1Swenshuai.xi */ 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi /*****************************************************************************/ 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi #ifndef _LINUX_USBDEVICE_FS_H 32*53ee8cc1Swenshuai.xi #define _LINUX_USBDEVICE_FS_H 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi #include <linux/types.h> 35*53ee8cc1Swenshuai.xi #include <linux/magic.h> 36*53ee8cc1Swenshuai.xi 37*53ee8cc1Swenshuai.xi /* --------------------------------------------------------------------- */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi /* usbdevfs ioctl codes */ 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi struct usbdevfs_ctrltransfer { 42*53ee8cc1Swenshuai.xi __u8 bRequestType; 43*53ee8cc1Swenshuai.xi __u8 bRequest; 44*53ee8cc1Swenshuai.xi __u16 wValue; 45*53ee8cc1Swenshuai.xi __u16 wIndex; 46*53ee8cc1Swenshuai.xi __u16 wLength; 47*53ee8cc1Swenshuai.xi __u32 timeout; /* in milliseconds */ 48*53ee8cc1Swenshuai.xi void *data; 49*53ee8cc1Swenshuai.xi }; 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi struct usbdevfs_bulktransfer { 52*53ee8cc1Swenshuai.xi unsigned int ep; 53*53ee8cc1Swenshuai.xi unsigned int len; 54*53ee8cc1Swenshuai.xi unsigned int timeout; /* in milliseconds */ 55*53ee8cc1Swenshuai.xi void *data; 56*53ee8cc1Swenshuai.xi }; 57*53ee8cc1Swenshuai.xi 58*53ee8cc1Swenshuai.xi struct usbdevfs_setinterface { 59*53ee8cc1Swenshuai.xi unsigned int interface; 60*53ee8cc1Swenshuai.xi unsigned int altsetting; 61*53ee8cc1Swenshuai.xi }; 62*53ee8cc1Swenshuai.xi 63*53ee8cc1Swenshuai.xi struct usbdevfs_disconnectsignal { 64*53ee8cc1Swenshuai.xi unsigned int signr; 65*53ee8cc1Swenshuai.xi void *context; 66*53ee8cc1Swenshuai.xi }; 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi #define USBDEVFS_MAXDRIVERNAME 255 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi struct usbdevfs_getdriver { 71*53ee8cc1Swenshuai.xi unsigned int interface; 72*53ee8cc1Swenshuai.xi char driver[USBDEVFS_MAXDRIVERNAME + 1]; 73*53ee8cc1Swenshuai.xi }; 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi struct usbdevfs_connectinfo { 76*53ee8cc1Swenshuai.xi unsigned int devnum; 77*53ee8cc1Swenshuai.xi unsigned char slow; 78*53ee8cc1Swenshuai.xi }; 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_SHORT_NOT_OK 0x01 81*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_ISO_ASAP 0x02 82*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_NO_FSBR 0x20 83*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_ZERO_PACKET 0x40 84*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_NO_INTERRUPT 0x80 85*53ee8cc1Swenshuai.xi 86*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_TYPE_ISO 0 87*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_TYPE_INTERRUPT 1 88*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_TYPE_CONTROL 2 89*53ee8cc1Swenshuai.xi #define USBDEVFS_URB_TYPE_BULK 3 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi struct usbdevfs_iso_packet_desc { 92*53ee8cc1Swenshuai.xi unsigned int length; 93*53ee8cc1Swenshuai.xi unsigned int actual_length; 94*53ee8cc1Swenshuai.xi unsigned int status; 95*53ee8cc1Swenshuai.xi }; 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi struct usbdevfs_urb { 98*53ee8cc1Swenshuai.xi unsigned char type; 99*53ee8cc1Swenshuai.xi unsigned char endpoint; 100*53ee8cc1Swenshuai.xi int status; 101*53ee8cc1Swenshuai.xi unsigned int flags; 102*53ee8cc1Swenshuai.xi void *buffer; 103*53ee8cc1Swenshuai.xi int buffer_length; 104*53ee8cc1Swenshuai.xi int actual_length; 105*53ee8cc1Swenshuai.xi int start_frame; 106*53ee8cc1Swenshuai.xi int number_of_packets; 107*53ee8cc1Swenshuai.xi int error_count; 108*53ee8cc1Swenshuai.xi unsigned int signr; /* signal to be sent on completion, 109*53ee8cc1Swenshuai.xi or 0 if none should be sent. */ 110*53ee8cc1Swenshuai.xi void *usercontext; 111*53ee8cc1Swenshuai.xi struct usbdevfs_iso_packet_desc iso_frame_desc[0]; 112*53ee8cc1Swenshuai.xi }; 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi /* ioctls for talking directly to drivers */ 115*53ee8cc1Swenshuai.xi struct usbdevfs_ioctl { 116*53ee8cc1Swenshuai.xi int ifno; /* interface 0..N ; negative numbers reserved */ 117*53ee8cc1Swenshuai.xi int ioctl_code; /* MUST encode size + direction of data so the 118*53ee8cc1Swenshuai.xi * macros in <asm/ioctl.h> give correct values */ 119*53ee8cc1Swenshuai.xi void *data; /* param buffer (in, or out) */ 120*53ee8cc1Swenshuai.xi }; 121*53ee8cc1Swenshuai.xi 122*53ee8cc1Swenshuai.xi /* You can do most things with hubs just through control messages, 123*53ee8cc1Swenshuai.xi * except find out what device connects to what port. */ 124*53ee8cc1Swenshuai.xi struct usbdevfs_hub_portinfo { 125*53ee8cc1Swenshuai.xi char nports; /* number of downstream ports in this hub */ 126*53ee8cc1Swenshuai.xi char port [127]; /* e.g. port 3 connects to device 27 */ 127*53ee8cc1Swenshuai.xi }; 128*53ee8cc1Swenshuai.xi 129*53ee8cc1Swenshuai.xi 130*53ee8cc1Swenshuai.xi #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) 131*53ee8cc1Swenshuai.xi #define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) 132*53ee8cc1Swenshuai.xi #define USBDEVFS_RESETEP _IOR('U', 3, unsigned int) 133*53ee8cc1Swenshuai.xi #define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface) 134*53ee8cc1Swenshuai.xi #define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int) 135*53ee8cc1Swenshuai.xi #define USBDEVFS_GETDRIVER _IOW('U', 8, struct usbdevfs_getdriver) 136*53ee8cc1Swenshuai.xi #define USBDEVFS_SUBMITURB _IOR('U', 10, struct usbdevfs_urb) 137*53ee8cc1Swenshuai.xi #define USBDEVFS_SUBMITURB32 _IOR('U', 10, struct usbdevfs_urb32) 138*53ee8cc1Swenshuai.xi #define USBDEVFS_DISCARDURB _IO('U', 11) 139*53ee8cc1Swenshuai.xi #define USBDEVFS_REAPURB _IOW('U', 12, void *) 140*53ee8cc1Swenshuai.xi #define USBDEVFS_REAPURB32 _IOW('U', 12, __u32) 141*53ee8cc1Swenshuai.xi #define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) 142*53ee8cc1Swenshuai.xi #define USBDEVFS_REAPURBNDELAY32 _IOW('U', 13, __u32) 143*53ee8cc1Swenshuai.xi #define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) 144*53ee8cc1Swenshuai.xi #define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int) 145*53ee8cc1Swenshuai.xi #define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int) 146*53ee8cc1Swenshuai.xi #define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo) 147*53ee8cc1Swenshuai.xi #define USBDEVFS_IOCTL _IOWR('U', 18, struct usbdevfs_ioctl) 148*53ee8cc1Swenshuai.xi #define USBDEVFS_IOCTL32 _IOWR('U', 18, struct usbdevfs_ioctl32) 149*53ee8cc1Swenshuai.xi #define USBDEVFS_HUB_PORTINFO _IOR('U', 19, struct usbdevfs_hub_portinfo) 150*53ee8cc1Swenshuai.xi #define USBDEVFS_RESET _IO('U', 20) 151*53ee8cc1Swenshuai.xi #define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int) 152*53ee8cc1Swenshuai.xi #define USBDEVFS_DISCONNECT _IO('U', 22) 153*53ee8cc1Swenshuai.xi #define USBDEVFS_CONNECT _IO('U', 23) 154*53ee8cc1Swenshuai.xi #endif /* _LINUX_USBDEVICE_FS_H */ 155