Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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)         \
 64 do {                            \
 65         err = x;                \
 66         if (err < 0)            \
 67                 return err;     \
 68 } while (0)
 69 
 70 
 71 extern const unsigned char line6_midi_id[3];
 72 extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES];
 73 extern struct workqueue_struct *line6_workqueue;
 74 
 75 static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3;
 76 static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4;
 77 
 78 
 79 /**
 80          Common properties of Line6 devices.
 81 */
 82 struct 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 */
 92 struct 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 
176 extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1,
177                                       int code2, int size);
178 extern ssize_t line6_nop_read(struct device *dev,
179                               struct device_attribute *attr, char *buf);
180 extern ssize_t line6_nop_write(struct device *dev,
181                                struct device_attribute *attr,
182                                const char *buf, size_t count);
183 extern int line6_read_data(struct usb_line6 *line6, int address, void *data,
184                            size_t datalen);
185 extern int line6_read_serial_number(struct usb_line6 *line6,
186                                     int *serial_number);
187 extern int line6_send_program(struct usb_line6 *line6, int value);
188 extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer,
189                                   int size);
190 extern int line6_send_raw_message_async(struct usb_line6 *line6,
191                                         const char *buffer, int size);
192 extern int line6_send_sysex_message(struct usb_line6 *line6,
193                                     const char *buffer, int size);
194 extern ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr,
195                              const char *buf, size_t count);
196 extern int line6_transmit_parameter(struct usb_line6 *line6, int param,
197                                     int value);
198 extern int line6_write_data(struct usb_line6 *line6, int address, void *data,
199                             size_t datalen);
200 extern void line6_write_hexdump(struct usb_line6 *line6, char dir,
201                                 const unsigned char *buffer, int size);
202 
203 
204 #endif
205 
  This page was automatically generated by the LXR engine.