cbc30118d7
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>
72 lines
2.4 KiB
C
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)
|