1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef __LINUX_USB_SERIAL_H
14#define __LINUX_USB_SERIAL_H
15
16#include <linux/kref.h>
17#include <linux/mutex.h>
18#include <linux/sysrq.h>
19#include <linux/kfifo.h>
20
21#define SERIAL_TTY_MAJOR 188
22#define SERIAL_TTY_MINORS 254
23#define SERIAL_TTY_NO_MINOR 255
24
25
26#define MAX_NUM_PORTS 8
27
28
29#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
30
31enum port_dev_state {
32 PORT_UNREGISTERED,
33 PORT_REGISTERING,
34 PORT_REGISTERED,
35 PORT_UNREGISTERING,
36};
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75struct usb_serial_port {
76 struct usb_serial *serial;
77 struct tty_port port;
78 spinlock_t lock;
79 unsigned char number;
80
81 unsigned char *interrupt_in_buffer;
82 struct urb *interrupt_in_urb;
83 __u8 interrupt_in_endpointAddress;
84
85 unsigned char *interrupt_out_buffer;
86 int interrupt_out_size;
87 struct urb *interrupt_out_urb;
88 __u8 interrupt_out_endpointAddress;
89
90 unsigned char *bulk_in_buffer;
91 int bulk_in_size;
92 struct urb *read_urb;
93 __u8 bulk_in_endpointAddress;
94
95 unsigned char *bulk_out_buffer;
96 int bulk_out_size;
97 struct urb *write_urb;
98 struct kfifo write_fifo;
99 int write_urb_busy;
100 __u8 bulk_out_endpointAddress;
101
102 int tx_bytes_flight;
103 int urbs_in_flight;
104
105 wait_queue_head_t write_wait;
106 struct work_struct work;
107 char throttled;
108 char throttle_req;
109 char console;
110 unsigned long sysrq;
111 struct device dev;
112 enum port_dev_state dev_state;
113};
114#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
115
116
117static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
118{
119 return dev_get_drvdata(&port->dev);
120}
121
122static inline void usb_set_serial_port_data(struct usb_serial_port *port,
123 void *data)
124{
125 dev_set_drvdata(&port->dev, data);
126}
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145struct usb_serial {
146 struct usb_device *dev;
147 struct usb_serial_driver *type;
148 struct usb_interface *interface;
149 unsigned char disconnected:1;
150 unsigned char suspending:1;
151 unsigned char attached:1;
152 unsigned char minor;
153 unsigned char num_ports;
154 unsigned char num_port_pointers;
155 char num_interrupt_in;
156 char num_interrupt_out;
157 char num_bulk_in;
158 char num_bulk_out;
159 struct usb_serial_port *port[MAX_NUM_PORTS];
160 struct kref kref;
161 struct mutex disc_mutex;
162 void *private;
163};
164#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
165
166
167static inline void *usb_get_serial_data(struct usb_serial *serial)
168{
169 return serial->private;
170}
171
172static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
173{
174 serial->private = data;
175}
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217struct usb_serial_driver {
218 const char *description;
219 const struct usb_device_id *id_table;
220 char num_ports;
221
222 struct list_head driver_list;
223 struct device_driver driver;
224 struct usb_driver *usb_driver;
225 struct usb_dynids dynids;
226 int max_in_flight_urbs;
227
228 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
229 int (*attach)(struct usb_serial *serial);
230 int (*calc_num_ports) (struct usb_serial *serial);
231
232 void (*disconnect)(struct usb_serial *serial);
233 void (*release)(struct usb_serial *serial);
234
235 int (*port_probe)(struct usb_serial_port *port);
236 int (*port_remove)(struct usb_serial_port *port);
237
238 int (*suspend)(struct usb_serial *serial, pm_message_t message);
239 int (*resume)(struct usb_serial *serial);
240
241
242
243 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
244 void (*close)(struct usb_serial_port *port);
245 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
246 const unsigned char *buf, int count);
247
248 int (*write_room)(struct tty_struct *tty);
249 int (*ioctl)(struct tty_struct *tty, struct file *file,
250 unsigned int cmd, unsigned long arg);
251 void (*set_termios)(struct tty_struct *tty,
252 struct usb_serial_port *port, struct ktermios *old);
253 void (*break_ctl)(struct tty_struct *tty, int break_state);
254 int (*chars_in_buffer)(struct tty_struct *tty);
255 void (*throttle)(struct tty_struct *tty);
256 void (*unthrottle)(struct tty_struct *tty);
257 int (*tiocmget)(struct tty_struct *tty, struct file *file);
258 int (*tiocmset)(struct tty_struct *tty, struct file *file,
259 unsigned int set, unsigned int clear);
260
261
262 void (*dtr_rts)(struct usb_serial_port *port, int on);
263 int (*carrier_raised)(struct usb_serial_port *port);
264
265
266 void (*init_termios)(struct tty_struct *tty);
267
268 void (*read_int_callback)(struct urb *urb);
269 void (*write_int_callback)(struct urb *urb);
270 void (*read_bulk_callback)(struct urb *urb);
271 void (*write_bulk_callback)(struct urb *urb);
272};
273#define to_usb_serial_driver(d) \
274 container_of(d, struct usb_serial_driver, driver)
275
276extern int usb_serial_register(struct usb_serial_driver *driver);
277extern void usb_serial_deregister(struct usb_serial_driver *driver);
278extern void usb_serial_port_softint(struct usb_serial_port *port);
279
280extern int usb_serial_probe(struct usb_interface *iface,
281 const struct usb_device_id *id);
282extern void usb_serial_disconnect(struct usb_interface *iface);
283
284extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
285extern int usb_serial_resume(struct usb_interface *intf);
286
287extern int ezusb_writememory(struct usb_serial *serial, int address,
288 unsigned char *data, int length, __u8 bRequest);
289extern int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit);
290
291
292#ifdef CONFIG_USB_SERIAL_CONSOLE
293extern void usb_serial_console_init(int debug, int minor);
294extern void usb_serial_console_exit(void);
295extern void usb_serial_console_disconnect(struct usb_serial *serial);
296#else
297static inline void usb_serial_console_init(int debug, int minor) { }
298static inline void usb_serial_console_exit(void) { }
299static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
300#endif
301
302
303extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
304extern void usb_serial_put(struct usb_serial *serial);
305extern int usb_serial_generic_open(struct tty_struct *tty,
306 struct usb_serial_port *port);
307extern int usb_serial_generic_write(struct tty_struct *tty,
308 struct usb_serial_port *port, const unsigned char *buf, int count);
309extern void usb_serial_generic_close(struct usb_serial_port *port);
310extern int usb_serial_generic_resume(struct usb_serial *serial);
311extern int usb_serial_generic_write_room(struct tty_struct *tty);
312extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
313extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
314extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
315extern void usb_serial_generic_throttle(struct tty_struct *tty);
316extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
317extern void usb_serial_generic_disconnect(struct usb_serial *serial);
318extern void usb_serial_generic_release(struct usb_serial *serial);
319extern int usb_serial_generic_register(int debug);
320extern void usb_serial_generic_deregister(void);
321extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port,
322 gfp_t mem_flags);
323extern int usb_serial_handle_sysrq_char(struct tty_struct *tty,
324 struct usb_serial_port *port,
325 unsigned int ch);
326extern int usb_serial_handle_break(struct usb_serial_port *port);
327
328
329extern int usb_serial_bus_register(struct usb_serial_driver *device);
330extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
331
332extern struct usb_serial_driver usb_serial_generic_device;
333extern struct bus_type usb_serial_bus_type;
334extern struct tty_driver *usb_serial_tty_driver;
335
336static inline void usb_serial_debug_data(int debug,
337 struct device *dev,
338 const char *function, int size,
339 const unsigned char *data)
340{
341 int i;
342
343 if (debug) {
344 dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ",
345 function, size);
346 for (i = 0; i < size; ++i)
347 printk("%.2x ", data[i]);
348 printk("\n");
349 }
350}
351
352
353#undef dbg
354#define dbg(format, arg...) \
355do { \
356 if (debug) \
357 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
358} while (0)
359
360#endif
361
362