linux-headers (unknown)

(root)/
include/
linux/
usbdevice_fs.h
       1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
       2  /*****************************************************************************/
       3  
       4  /*
       5   *	usbdevice_fs.h  --  USB device file system.
       6   *
       7   *	Copyright (C) 2000
       8   *          Thomas Sailer (sailer@ife.ee.ethz.ch)
       9   *
      10   *	This program is free software; you can redistribute it and/or modify
      11   *	it under the terms of the GNU General Public License as published by
      12   *	the Free Software Foundation; either version 2 of the License, or
      13   *	(at your option) any later version.
      14   *
      15   *	This program is distributed in the hope that it will be useful,
      16   *	but WITHOUT ANY WARRANTY; without even the implied warranty of
      17   *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18   *	GNU General Public License for more details.
      19   *
      20   *	You should have received a copy of the GNU General Public License
      21   *	along with this program; if not, write to the Free Software
      22   *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
      23   *
      24   *  History:
      25   *   0.1  04.01.2000  Created
      26   */
      27  
      28  /*****************************************************************************/
      29  
      30  #ifndef _LINUX_USBDEVICE_FS_H
      31  #define _LINUX_USBDEVICE_FS_H
      32  
      33  #include <linux/types.h>
      34  #include <linux/magic.h>
      35  
      36  /* --------------------------------------------------------------------- */
      37  
      38  /* usbdevfs ioctl codes */
      39  
      40  struct usbdevfs_ctrltransfer {
      41  	__u8 bRequestType;
      42  	__u8 bRequest;
      43  	__u16 wValue;
      44  	__u16 wIndex;
      45  	__u16 wLength;
      46  	__u32 timeout;  /* in milliseconds */
      47   	void *data;
      48  };
      49  
      50  struct usbdevfs_bulktransfer {
      51  	unsigned int ep;
      52  	unsigned int len;
      53  	unsigned int timeout; /* in milliseconds */
      54  	void *data;
      55  };
      56  
      57  struct usbdevfs_setinterface {
      58  	unsigned int interface;
      59  	unsigned int altsetting;
      60  };
      61  
      62  struct usbdevfs_disconnectsignal {
      63  	unsigned int signr;
      64  	void *context;
      65  };
      66  
      67  #define USBDEVFS_MAXDRIVERNAME 255
      68  
      69  struct usbdevfs_getdriver {
      70  	unsigned int interface;
      71  	char driver[USBDEVFS_MAXDRIVERNAME + 1];
      72  };
      73  
      74  struct usbdevfs_connectinfo {
      75  	unsigned int devnum;
      76  	unsigned char slow;
      77  };
      78  
      79  struct usbdevfs_conninfo_ex {
      80  	__u32 size;		/* Size of the structure from the kernel's */
      81  				/* point of view. Can be used by userspace */
      82  				/* to determine how much data can be       */
      83  				/* used/trusted.                           */
      84  	__u32 busnum;           /* USB bus number, as enumerated by the    */
      85  				/* kernel, the device is connected to.     */
      86  	__u32 devnum;           /* Device address on the bus.              */
      87  	__u32 speed;		/* USB_SPEED_* constants from ch9.h        */
      88  	__u8 num_ports;		/* Number of ports the device is connected */
      89  				/* to on the way to the root hub. It may   */
      90  				/* be bigger than size of 'ports' array so */
      91  				/* userspace can detect overflows.         */
      92  	__u8 ports[7];		/* List of ports on the way from the root  */
      93  				/* hub to the device. Current limit in     */
      94  				/* USB specification is 7 tiers (root hub, */
      95  				/* 5 intermediate hubs, device), which     */
      96  				/* gives at most 6 port entries.           */
      97  };
      98  
      99  #define USBDEVFS_URB_SHORT_NOT_OK	0x01
     100  #define USBDEVFS_URB_ISO_ASAP		0x02
     101  #define USBDEVFS_URB_BULK_CONTINUATION	0x04
     102  #define USBDEVFS_URB_NO_FSBR		0x20	/* Not used */
     103  #define USBDEVFS_URB_ZERO_PACKET	0x40
     104  #define USBDEVFS_URB_NO_INTERRUPT	0x80
     105  
     106  #define USBDEVFS_URB_TYPE_ISO		   0
     107  #define USBDEVFS_URB_TYPE_INTERRUPT	   1
     108  #define USBDEVFS_URB_TYPE_CONTROL	   2
     109  #define USBDEVFS_URB_TYPE_BULK		   3
     110  
     111  struct usbdevfs_iso_packet_desc {
     112  	unsigned int length;
     113  	unsigned int actual_length;
     114  	unsigned int status;
     115  };
     116  
     117  struct usbdevfs_urb {
     118  	unsigned char type;
     119  	unsigned char endpoint;
     120  	int status;
     121  	unsigned int flags;
     122  	void *buffer;
     123  	int buffer_length;
     124  	int actual_length;
     125  	int start_frame;
     126  	union {
     127  		int number_of_packets;	/* Only used for isoc urbs */
     128  		unsigned int stream_id;	/* Only used with bulk streams */
     129  	};
     130  	int error_count;
     131  	unsigned int signr;	/* signal to be sent on completion,
     132  				  or 0 if none should be sent. */
     133  	void *usercontext;
     134  	struct usbdevfs_iso_packet_desc iso_frame_desc[];
     135  };
     136  
     137  /* ioctls for talking directly to drivers */
     138  struct usbdevfs_ioctl {
     139  	int	ifno;		/* interface 0..N ; negative numbers reserved */
     140  	int	ioctl_code;	/* MUST encode size + direction of data so the
     141  				 * macros in <asm/ioctl.h> give correct values */
     142  	void *data;	/* param buffer (in, or out) */
     143  };
     144  
     145  /* You can do most things with hubs just through control messages,
     146   * except find out what device connects to what port. */
     147  struct usbdevfs_hub_portinfo {
     148  	char nports;		/* number of downstream ports in this hub */
     149  	char port [127];	/* e.g. port 3 connects to device 27 */
     150  };
     151  
     152  /* System and bus capability flags */
     153  #define USBDEVFS_CAP_ZERO_PACKET		0x01
     154  #define USBDEVFS_CAP_BULK_CONTINUATION		0x02
     155  #define USBDEVFS_CAP_NO_PACKET_SIZE_LIM		0x04
     156  #define USBDEVFS_CAP_BULK_SCATTER_GATHER	0x08
     157  #define USBDEVFS_CAP_REAP_AFTER_DISCONNECT	0x10
     158  #define USBDEVFS_CAP_MMAP			0x20
     159  #define USBDEVFS_CAP_DROP_PRIVILEGES		0x40
     160  #define USBDEVFS_CAP_CONNINFO_EX		0x80
     161  #define USBDEVFS_CAP_SUSPEND			0x100
     162  
     163  /* USBDEVFS_DISCONNECT_CLAIM flags & struct */
     164  
     165  /* disconnect-and-claim if the driver matches the driver field */
     166  #define USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER	0x01
     167  /* disconnect-and-claim except when the driver matches the driver field */
     168  #define USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER	0x02
     169  
     170  struct usbdevfs_disconnect_claim {
     171  	unsigned int interface;
     172  	unsigned int flags;
     173  	char driver[USBDEVFS_MAXDRIVERNAME + 1];
     174  };
     175  
     176  struct usbdevfs_streams {
     177  	unsigned int num_streams; /* Not used by USBDEVFS_FREE_STREAMS */
     178  	unsigned int num_eps;
     179  	unsigned char eps[];
     180  };
     181  
     182  /*
     183   * USB_SPEED_* values returned by USBDEVFS_GET_SPEED are defined in
     184   * linux/usb/ch9.h
     185   */
     186  
     187  #define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer)
     188  #define USBDEVFS_CONTROL32           _IOWR('U', 0, struct usbdevfs_ctrltransfer32)
     189  #define USBDEVFS_BULK              _IOWR('U', 2, struct usbdevfs_bulktransfer)
     190  #define USBDEVFS_BULK32              _IOWR('U', 2, struct usbdevfs_bulktransfer32)
     191  #define USBDEVFS_RESETEP           _IOR('U', 3, unsigned int)
     192  #define USBDEVFS_SETINTERFACE      _IOR('U', 4, struct usbdevfs_setinterface)
     193  #define USBDEVFS_SETCONFIGURATION  _IOR('U', 5, unsigned int)
     194  #define USBDEVFS_GETDRIVER         _IOW('U', 8, struct usbdevfs_getdriver)
     195  #define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb)
     196  #define USBDEVFS_SUBMITURB32       _IOR('U', 10, struct usbdevfs_urb32)
     197  #define USBDEVFS_DISCARDURB        _IO('U', 11)
     198  #define USBDEVFS_REAPURB           _IOW('U', 12, void *)
     199  #define USBDEVFS_REAPURB32         _IOW('U', 12, __u32)
     200  #define USBDEVFS_REAPURBNDELAY     _IOW('U', 13, void *)
     201  #define USBDEVFS_REAPURBNDELAY32   _IOW('U', 13, __u32)
     202  #define USBDEVFS_DISCSIGNAL        _IOR('U', 14, struct usbdevfs_disconnectsignal)
     203  #define USBDEVFS_DISCSIGNAL32      _IOR('U', 14, struct usbdevfs_disconnectsignal32)
     204  #define USBDEVFS_CLAIMINTERFACE    _IOR('U', 15, unsigned int)
     205  #define USBDEVFS_RELEASEINTERFACE  _IOR('U', 16, unsigned int)
     206  #define USBDEVFS_CONNECTINFO       _IOW('U', 17, struct usbdevfs_connectinfo)
     207  #define USBDEVFS_IOCTL             _IOWR('U', 18, struct usbdevfs_ioctl)
     208  #define USBDEVFS_IOCTL32           _IOWR('U', 18, struct usbdevfs_ioctl32)
     209  #define USBDEVFS_HUB_PORTINFO      _IOR('U', 19, struct usbdevfs_hub_portinfo)
     210  #define USBDEVFS_RESET             _IO('U', 20)
     211  #define USBDEVFS_CLEAR_HALT        _IOR('U', 21, unsigned int)
     212  #define USBDEVFS_DISCONNECT        _IO('U', 22)
     213  #define USBDEVFS_CONNECT           _IO('U', 23)
     214  #define USBDEVFS_CLAIM_PORT        _IOR('U', 24, unsigned int)
     215  #define USBDEVFS_RELEASE_PORT      _IOR('U', 25, unsigned int)
     216  #define USBDEVFS_GET_CAPABILITIES  _IOR('U', 26, __u32)
     217  #define USBDEVFS_DISCONNECT_CLAIM  _IOR('U', 27, struct usbdevfs_disconnect_claim)
     218  #define USBDEVFS_ALLOC_STREAMS     _IOR('U', 28, struct usbdevfs_streams)
     219  #define USBDEVFS_FREE_STREAMS      _IOR('U', 29, struct usbdevfs_streams)
     220  #define USBDEVFS_DROP_PRIVILEGES   _IOW('U', 30, __u32)
     221  #define USBDEVFS_GET_SPEED         _IO('U', 31)
     222  /*
     223   * Returns struct usbdevfs_conninfo_ex; length is variable to allow
     224   * extending size of the data returned.
     225   */
     226  #define USBDEVFS_CONNINFO_EX(len)  _IOC(_IOC_READ, 'U', 32, len)
     227  #define USBDEVFS_FORBID_SUSPEND    _IO('U', 33)
     228  #define USBDEVFS_ALLOW_SUSPEND     _IO('U', 34)
     229  #define USBDEVFS_WAIT_FOR_RESUME   _IO('U', 35)
     230  
     231  #endif /* _LINUX_USBDEVICE_FS_H */