staging: line6: remove unneeded EXPORT_SYMBOL() usage
[linux-2.6-block.git] / drivers / staging / line6 / driver.h
CommitLineData
705ececd 1/*
e1a164d7 2 * Line6 Linux USB driver - 0.9.1beta
705ececd 3 *
1027f476 4 * Copyright (C) 2004-2010 Markus Grabner (grabner@icg.tugraz.at)
705ececd
MG
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
705ececd
MG
15#include <linux/spinlock.h>
16#include <linux/usb.h>
705ececd
MG
17#include <sound/core.h>
18
19#include "midi.h"
20
705ececd
MG
21#define DRIVER_NAME "line6usb"
22
1027f476
MG
23#if defined(CONFIG_LINE6_USB_DUMP_CTRL) || defined(CONFIG_LINE6_USB_DUMP_MIDI) || defined(CONFIG_LINE6_USB_DUMP_PCM)
24#define CONFIG_LINE6_USB_DUMP_ANY
25#endif
26
705ececd
MG
27#define LINE6_TIMEOUT 1
28#define LINE6_MAX_DEVICES 8
29#define LINE6_BUFSIZE_LISTEN 32
30#define LINE6_MESSAGE_MAXLEN 256
31
705ececd
MG
32/*
33 Line6 MIDI control commands
34*/
35#define LINE6_PARAM_CHANGE 0xb0
36#define LINE6_PROGRAM_CHANGE 0xc0
37#define LINE6_SYSEX_BEGIN 0xf0
38#define LINE6_SYSEX_END 0xf7
39#define LINE6_RESET 0xff
40
41/*
42 MIDI channel for messages initiated by the host
43 (and eventually echoed back by the device)
44*/
45#define LINE6_CHANNEL_HOST 0x00
46
47/*
48 MIDI channel for messages initiated by the device
49*/
50#define LINE6_CHANNEL_DEVICE 0x02
51
e1a164d7 52#define LINE6_CHANNEL_UNKNOWN 5 /* don't know yet what this is good for */
705ececd
MG
53
54#define LINE6_CHANNEL_MASK 0x0f
55
1027f476
MG
56#ifdef CONFIG_LINE6_USB_DEBUG
57#define DEBUG_MESSAGES(x) (x)
58#else
59#define DEBUG_MESSAGES(x)
60#endif
61
a49e4838
GKH
62#define MISSING_CASE \
63 printk(KERN_ERR "line6usb driver bug: missing case in %s:%d\n", \
64 __FILE__, __LINE__)
705ececd 65
a49e4838
GKH
66#define CHECK_RETURN(x) \
67do { \
68 err = x; \
69 if (err < 0) \
70 return err; \
71} while (0)
705ececd 72
1027f476
MG
73#define CHECK_STARTUP_PROGRESS(x, n) \
74 if((x) >= (n)) \
75 return; \
76 x = (n);
77
705ececd
MG
78extern const unsigned char line6_midi_id[3];
79extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
705ececd
MG
80
81static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3;
82static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;
83
705ececd
MG
84/**
85 Common properties of Line6 devices.
86*/
87struct line6_properties {
1027f476
MG
88 /**
89 Card id string (maximum 16 characters).
90 This can be used to address the device in ALSA programs as
91 "default:CARD=<id>"
92 */
93 const char *id;
94
95 /**
96 Card short name (maximum 32 characters).
97 */
705ececd 98 const char *name;
1027f476
MG
99
100 /**
101 Bit identifying this device in the line6usb driver.
102 */
705ececd 103 int device_bit;
1027f476
MG
104
105 /**
106 Bit vector defining this device's capabilities in the
107 line6usb driver.
108 */
705ececd
MG
109 int capabilities;
110};
111
112/**
113 Common data shared by all Line6 devices.
114 Corresponds to a pair of USB endpoints.
115*/
116struct usb_line6 {
117 /**
118 USB device.
119 */
120 struct usb_device *usbdev;
121
122 /**
123 Product id.
124 */
125 int product;
126
127 /**
128 Properties.
129 */
130 const struct line6_properties *properties;
131
132 /**
133 Interface number.
134 */
135 int interface_number;
136
137 /**
138 Interval (ms).
139 */
140 int interval;
141
142 /**
143 Maximum size of USB packet.
144 */
145 int max_packet_size;
146
147 /**
148 Device representing the USB interface.
149 */
150 struct device *ifcdev;
151
152 /**
153 Line6 sound card data structure.
154 Each device has at least MIDI or PCM.
155 */
156 struct snd_card *card;
157
158 /**
159 Line6 PCM device data structure.
160 */
161 struct snd_line6_pcm *line6pcm;
162
163 /**
164 Line6 MIDI device data structure.
165 */
166 struct snd_line6_midi *line6midi;
167
168 /**
169 USB endpoint for listening to control commands.
170 */
171 int ep_control_read;
172
173 /**
174 USB endpoint for writing control commands.
175 */
176 int ep_control_write;
177
178 /**
179 URB for listening to PODxt Pro control endpoint.
180 */
181 struct urb *urb_listen;
182
183 /**
184 Buffer for listening to PODxt Pro control endpoint.
185 */
186 unsigned char *buffer_listen;
187
188 /**
189 Buffer for message to be processed.
190 */
191 unsigned char *buffer_message;
192
193 /**
194 Length of message to be processed.
195 */
196 int message_length;
197};
198
a49e4838
GKH
199extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1,
200 int code2, int size);
201extern ssize_t line6_nop_read(struct device *dev,
202 struct device_attribute *attr, char *buf);
203extern ssize_t line6_nop_write(struct device *dev,
204 struct device_attribute *attr,
205 const char *buf, size_t count);
206extern int line6_read_data(struct usb_line6 *line6, int address, void *data,
207 size_t datalen);
208extern int line6_read_serial_number(struct usb_line6 *line6,
209 int *serial_number);
705ececd 210extern int line6_send_program(struct usb_line6 *line6, int value);
a49e4838
GKH
211extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
212 int size);
213extern int line6_send_raw_message_async(struct usb_line6 *line6,
214 const char *buffer, int size);
215extern int line6_send_sysex_message(struct usb_line6 *line6,
216 const char *buffer, int size);
1027f476
MG
217extern int line6_send_sysex_message_async(struct usb_line6 *line6,
218 const char *buffer, int size);
a49e4838
GKH
219extern ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr,
220 const char *buf, size_t count);
1027f476 221extern void line6_start_timer(struct timer_list *timer, unsigned int msecs,
e1a164d7
MG
222 void (*function) (unsigned long),
223 unsigned long data);
a49e4838
GKH
224extern int line6_transmit_parameter(struct usb_line6 *line6, int param,
225 int value);
1027f476 226extern int line6_version_request_async(struct usb_line6 *line6);
a49e4838
GKH
227extern int line6_write_data(struct usb_line6 *line6, int address, void *data,
228 size_t datalen);
1027f476
MG
229
230#ifdef CONFIG_LINE6_USB_DUMP_ANY
a49e4838
GKH
231extern void line6_write_hexdump(struct usb_line6 *line6, char dir,
232 const unsigned char *buffer, int size);
1027f476 233#endif
705ececd 234
705ececd 235#endif