Linux-libre 2.6.32.42-gnu1
[librecmc/linux-libre.git] / include / linux / usb / vstusb.h
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 __user     *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)