kernel_optimize_test/include/linux/usb/vstusb.h
Stephen Ware cbc30118d7 usb: vstusb.c : new driver for spectrometers used by Vernier Software & Technology, Inc.
This patch adds the vstusb driver to the drivers/usb/misc directory.
This driver provides support for Vernier Software & Technology
spectrometers, all made by Ocean Optics. The driver provides both IOCTL
and read()/write() methods for sending raw data to spectrometers across
the bulk channel. Each method allows for a configured timeout.

From: Stephen Ware <stephen.ware@eqware.net>
Signed-off-by: Dennis O'Brien <dennis.obrien@eqware.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-10-17 14:41:01 -07:00

72 lines
2.4 KiB
C

/*****************************************************************************
* File: drivers/usb/misc/vstusb.h
*
* Purpose: Support for the bulk USB Vernier Spectrophotometers
*
* Author: EQware Engineering, Inc.
* Oregon City, OR, USA 97045
*
* Copyright: 2007, 2008
* Vernier Software & Technology
* Beaverton, OR, USA 97005
*
* Web: www.vernier.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*****************************************************************************/
/*****************************************************************************
*
* The vstusb module is a standard usb 'client' driver running on top of the
* standard usb host controller stack.
*
* In general, vstusb supports standard bulk usb pipes. It supports multiple
* devices and multiple pipes per device.
*
* The vstusb driver supports two interfaces:
* 1 - ioctl SEND_PIPE/RECV_PIPE - a general bulk write/read msg
* interface to any pipe with timeout support;
* 2 - standard read/write with ioctl config - offers standard read/write
* interface with ioctl configured pipes and timeouts.
*
* Both interfaces can be signal from other process and will abort its i/o
* operation.
*
* A timeout of 0 means NO timeout. The user can still terminate the read via
* signal.
*
* If using multiple threads with this driver, the user should ensure that
* any reads, writes, or ioctls are complete before closing the device.
* Changing read/write timeouts or pipes takes effect on next read/write.
*
*****************************************************************************/
struct vstusb_args {
union {
/* this struct is used for IOCTL_VSTUSB_SEND_PIPE, *
* IOCTL_VSTUSB_RECV_PIPE, and read()/write() fops */
struct {
void __user *buffer;
size_t count;
unsigned int timeout_ms;
int pipe;
};
/* this one is used for IOCTL_VSTUSB_CONFIG_RW */
struct {
int rd_pipe;
int rd_timeout_ms;
int wr_pipe;
int wr_timeout_ms;
};
};
};
#define VST_IOC_MAGIC 'L'
#define VST_IOC_FIRST 0x20
#define IOCTL_VSTUSB_SEND_PIPE _IO(VST_IOC_MAGIC, VST_IOC_FIRST)
#define IOCTL_VSTUSB_RECV_PIPE _IO(VST_IOC_MAGIC, VST_IOC_FIRST + 1)
#define IOCTL_VSTUSB_CONFIG_RW _IO(VST_IOC_MAGIC, VST_IOC_FIRST + 2)