• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/staging/line6/
1/*
2 * Line6 Linux USB driver - 0.8.0
3 *
4 * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at)
5 *
6 *	This program is free software; you can redistribute it and/or
7 *	modify it under the terms of the GNU General Public License as
8 *	published by the Free Software Foundation, version 2.
9 *
10 */
11
12#ifndef DRIVER_H
13#define DRIVER_H
14
15
16#include "config.h"
17
18#include <linux/spinlock.h>
19#include <linux/usb.h>
20#include <linux/wait.h>
21#include <sound/core.h>
22
23#include "midi.h"
24
25#define DRIVER_NAME "line6usb"
26
27#define LINE6_TIMEOUT 1
28#define LINE6_MAX_DEVICES 8
29#define LINE6_BUFSIZE_LISTEN 32
30#define LINE6_MESSAGE_MAXLEN 256
31
32
33/*
34	Line6 MIDI control commands
35*/
36#define LINE6_PARAM_CHANGE   0xb0
37#define LINE6_PROGRAM_CHANGE 0xc0
38#define LINE6_SYSEX_BEGIN    0xf0
39#define LINE6_SYSEX_END      0xf7
40#define LINE6_RESET          0xff
41
42/*
43	MIDI channel for messages initiated by the host
44	(and eventually echoed back by the device)
45*/
46#define LINE6_CHANNEL_HOST   0x00
47
48/*
49	MIDI channel for messages initiated by the device
50*/
51#define LINE6_CHANNEL_DEVICE 0x02
52
53#define LINE6_CHANNEL_UNKNOWN 5  /* don't know yet what this is good for */
54
55#define LINE6_CHANNEL_MASK 0x0f
56
57
58#define MISSING_CASE	\
59	printk(KERN_ERR "line6usb driver bug: missing case in %s:%d\n", \
60		__FILE__, __LINE__)
61
62
63#define CHECK_RETURN(x)		\
64do {				\
65	err = x;		\
66	if (err < 0)		\
67		return err;	\
68} while (0)
69
70
71extern const unsigned char line6_midi_id[3];
72extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
73extern struct workqueue_struct *line6_workqueue;
74
75static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3;
76static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;
77
78
79/**
80	 Common properties of Line6 devices.
81*/
82struct line6_properties {
83	const char *name;
84	int device_bit;
85	int capabilities;
86};
87
88/**
89	 Common data shared by all Line6 devices.
90	 Corresponds to a pair of USB endpoints.
91*/
92struct usb_line6 {
93	/**
94		 USB device.
95	*/
96	struct usb_device *usbdev;
97
98	/**
99		 Product id.
100	*/
101	int product;
102
103	/**
104		 Properties.
105	*/
106	const struct line6_properties *properties;
107
108	/**
109		 Interface number.
110	*/
111	int interface_number;
112
113	/**
114		 Interval (ms).
115	*/
116	int interval;
117
118	/**
119		 Maximum size of USB packet.
120	*/
121	int max_packet_size;
122
123	/**
124		 Device representing the USB interface.
125	*/
126	struct device *ifcdev;
127
128	/**
129		 Line6 sound card data structure.
130		 Each device has at least MIDI or PCM.
131	*/
132	struct snd_card *card;
133
134	/**
135		 Line6 PCM device data structure.
136	*/
137	struct snd_line6_pcm *line6pcm;
138
139	/**
140		 Line6 MIDI device data structure.
141	*/
142	struct snd_line6_midi *line6midi;
143
144	/**
145		 USB endpoint for listening to control commands.
146	*/
147	int ep_control_read;
148
149	/**
150		 USB endpoint for writing control commands.
151	*/
152	int ep_control_write;
153
154	/**
155		 URB for listening to PODxt Pro control endpoint.
156	*/
157	struct urb *urb_listen;
158
159	/**
160		 Buffer for listening to PODxt Pro control endpoint.
161	*/
162	unsigned char *buffer_listen;
163
164	/**
165		 Buffer for message to be processed.
166	*/
167	unsigned char *buffer_message;
168
169	/**
170		 Length of message to be processed.
171	*/
172	int message_length;
173};
174
175
176extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1,
177				      int code2, int size);
178extern ssize_t line6_nop_read(struct device *dev,
179			      struct device_attribute *attr, char *buf);
180extern ssize_t line6_nop_write(struct device *dev,
181			       struct device_attribute *attr,
182			       const char *buf, size_t count);
183extern int line6_read_data(struct usb_line6 *line6, int address, void *data,
184			   size_t datalen);
185extern int line6_read_serial_number(struct usb_line6 *line6,
186				    int *serial_number);
187extern int line6_send_program(struct usb_line6 *line6, int value);
188extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
189				  int size);
190extern int line6_send_raw_message_async(struct usb_line6 *line6,
191					const char *buffer, int size);
192extern int line6_send_sysex_message(struct usb_line6 *line6,
193				    const char *buffer, int size);
194extern ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr,
195			     const char *buf, size_t count);
196extern int line6_transmit_parameter(struct usb_line6 *line6, int param,
197				    int value);
198extern int line6_write_data(struct usb_line6 *line6, int address, void *data,
199			    size_t datalen);
200extern void line6_write_hexdump(struct usb_line6 *line6, char dir,
201				const unsigned char *buffer, int size);
202
203
204#endif
205