Home | History | Annotate | Download | only in usb
      1 /*****************************************************************************
      2  *  File: drivers/usb/misc/vstusb.h
      3  *
      4  *  Purpose: Support for the bulk USB Vernier Spectrophotometers
      5  *
      6  *  Author:     EQware Engineering, Inc.
      7  *              Oregon City, OR, USA 97045
      8  *
      9  *  Copyright:  2007, 2008
     10  *              Vernier Software & Technology
     11  *              Beaverton, OR, USA 97005
     12  *
     13  *  Web:        www.vernier.com
     14  *
     15  *  This program is free software; you can redistribute it and/or modify
     16  *  it under the terms of the GNU General Public License version 2 as
     17  *  published by the Free Software Foundation.
     18  *
     19  *****************************************************************************/
     20 /*****************************************************************************
     21  *
     22  *  The vstusb module is a standard usb 'client' driver running on top of the
     23  *  standard usb host controller stack.
     24  *
     25  *  In general, vstusb supports standard bulk usb pipes.  It supports multiple
     26  *  devices and multiple pipes per device.
     27  *
     28  *  The vstusb driver supports two interfaces:
     29  *  1 - ioctl SEND_PIPE/RECV_PIPE - a general bulk write/read msg
     30  *  	interface to any pipe with timeout support;
     31  *  2 - standard read/write with ioctl config - offers standard read/write
     32  *  	interface with ioctl configured pipes and timeouts.
     33  *
     34  *  Both interfaces can be signal from other process and will abort its i/o
     35  *  operation.
     36  *
     37  *  A timeout of 0 means NO timeout.  The user can still terminate the read via
     38  *  signal.
     39  *
     40  *  If using multiple threads with this driver, the user should ensure that
     41  *  any reads, writes, or ioctls are complete before closing the device.
     42  *  Changing read/write timeouts or pipes takes effect on next read/write.
     43  *
     44  *****************************************************************************/
     45 
     46 struct vstusb_args {
     47 	union {
     48 		/* this struct is used for IOCTL_VSTUSB_SEND_PIPE,	*
     49 		 * IOCTL_VSTUSB_RECV_PIPE, and read()/write() fops	*/
     50 		struct {
     51 			void *buffer;
     52 			size_t          count;
     53 			unsigned int    timeout_ms;
     54 			int             pipe;
     55 		};
     56 
     57 		/* this one is used for IOCTL_VSTUSB_CONFIG_RW  	*/
     58 		struct {
     59 			int rd_pipe;
     60 			int rd_timeout_ms;
     61 			int wr_pipe;
     62 			int wr_timeout_ms;
     63 		};
     64 	};
     65 };
     66 
     67 #define VST_IOC_MAGIC 'L'
     68 #define VST_IOC_FIRST 0x20
     69 #define IOCTL_VSTUSB_SEND_PIPE	_IO(VST_IOC_MAGIC, VST_IOC_FIRST)
     70 #define IOCTL_VSTUSB_RECV_PIPE	_IO(VST_IOC_MAGIC, VST_IOC_FIRST + 1)
     71 #define IOCTL_VSTUSB_CONFIG_RW	_IO(VST_IOC_MAGIC, VST_IOC_FIRST + 2)
     72