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#define USB_SERIAL_WRITE_BUSY 0
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
75
76
77
78
79
80
81
82
83
84struct usb_serial_port {
85 struct usb_serial *serial;
86 struct tty_port port;
87 spinlock_t lock;
88 unsigned char number;
89
90 unsigned char *interrupt_in_buffer;
91 struct urb *interrupt_in_urb;
92 __u8 interrupt_in_endpointAddress;
93
94 unsigned char *interrupt_out_buffer;
95 int interrupt_out_size;
96 struct urb *interrupt_out_urb;
97 __u8 interrupt_out_endpointAddress;
98
99 unsigned char *bulk_in_buffer;
100 int bulk_in_size;
101 struct urb *read_urb;
102 __u8 bulk_in_endpointAddress;
103
104 unsigned char *bulk_in_buffers[2];
105 struct urb *read_urbs[2];
106 unsigned long read_urbs_free;
107
108 unsigned char *bulk_out_buffer;
109 int bulk_out_size;
110 struct urb *write_urb;
111 struct kfifo write_fifo;
112
113 unsigned char *bulk_out_buffers[2];
114 struct urb *write_urbs[2];
115 unsigned long write_urbs_free;
116 __u8 bulk_out_endpointAddress;
117
118 int tx_bytes;
119
120 unsigned long flags;
121 wait_queue_head_t write_wait;
122 struct work_struct work;
123 char throttled;
124 char throttle_req;
125 unsigned long sysrq;
126 struct device dev;
127 enum port_dev_state dev_state;
128};
129#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
130
131
132static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
133{
134 return dev_get_drvdata(&port->dev);
135}
136
137static inline void usb_set_serial_port_data(struct usb_serial_port *port,
138 void *data)
139{
140 dev_set_drvdata(&port->dev, data);
141}
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160struct usb_serial {
161 struct usb_device *dev;
162 struct usb_serial_driver *type;
163 struct usb_interface *interface;
164 unsigned char disconnected:1;
165 unsigned char suspending:1;
166 unsigned char attached:1;
167 unsigned char minor;
168 unsigned char num_ports;
169 unsigned char num_port_pointers;
170 char num_interrupt_in;
171 char num_interrupt_out;
172 char num_bulk_in;
173 char num_bulk_out;
174 struct usb_serial_port *port[MAX_NUM_PORTS];
175 struct kref kref;
176 struct mutex disc_mutex;
177 void *private;
178};
179#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
180
181
182static inline void *usb_get_serial_data(struct usb_serial *serial)
183{
184 return serial->private;
185}
186
187static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
188{
189 serial->private = data;
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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235struct usb_serial_driver {
236 const char *description;
237 const struct usb_device_id *id_table;
238 char num_ports;
239
240 struct list_head driver_list;
241 struct device_driver driver;
242 struct usb_driver *usb_driver;
243 struct usb_dynids dynids;
244
245 size_t bulk_in_size;
246 size_t bulk_out_size;
247
248 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
249 int (*attach)(struct usb_serial *serial);
250 int (*calc_num_ports) (struct usb_serial *serial);
251
252 void (*disconnect)(struct usb_serial *serial);
253 void (*release)(struct usb_serial *serial);
254
255 int (*port_probe)(struct usb_serial_port *port);
256 int (*port_remove)(struct usb_serial_port *port);
257
258 int (*suspend)(struct usb_serial *serial, pm_message_t message);
259 int (*resume)(struct usb_serial *serial);
260
261
262
263 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
264 void (*close)(struct usb_serial_port *port);
265 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
266 const unsigned char *buf, int count);
267
268 int (*write_room)(struct tty_struct *tty);
269 int (*ioctl)(struct tty_struct *tty,
270 unsigned int cmd, unsigned long arg);
271 void (*set_termios)(struct tty_struct *tty,
272 struct usb_serial_port *port, struct ktermios *old);
273 void (*break_ctl)(struct tty_struct *tty, int break_state);
274 int (*chars_in_buffer)(struct tty_struct *tty);
275 void (*throttle)(struct tty_struct *tty);
276 void (*unthrottle)(struct tty_struct *tty);
277 int (*tiocmget)(struct tty_struct *tty);
278 int (*tiocmset)(struct tty_struct *tty,
279 unsigned int set, unsigned int clear);
280 int (*get_icount)(struct tty_struct *tty,
281 struct serial_icounter_struct *icount);
282
283
284 void (*dtr_rts)(struct usb_serial_port *port, int on);
285 int (*carrier_raised)(struct usb_serial_port *port);
286
287
288 void (*init_termios)(struct tty_struct *tty);
289
290 void (*read_int_callback)(struct urb *urb);
291 void (*write_int_callback)(struct urb *urb);
292 void (*read_bulk_callback)(struct urb *urb);
293 void (*write_bulk_callback)(struct urb *urb);
294
295 void (*process_read_urb)(struct urb *urb);
296
297 int (*prepare_write_buffer)(struct usb_serial_port *port,
298 void *dest, size_t size);
299};
300#define to_usb_serial_driver(d) \
301 container_of(d, struct usb_serial_driver, driver)
302
303extern int usb_serial_register(struct usb_serial_driver *driver);
304extern void usb_serial_deregister(struct usb_serial_driver *driver);
305extern void usb_serial_port_softint(struct usb_serial_port *port);
306
307extern int usb_serial_probe(struct usb_interface *iface,
308 const struct usb_device_id *id);
309extern void usb_serial_disconnect(struct usb_interface *iface);
310
311extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
312extern int usb_serial_resume(struct usb_interface *intf);
313
314extern int ezusb_writememory(struct usb_serial *serial, int address,
315 unsigned char *data, int length, __u8 bRequest);
316extern int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit);
317
318
319#ifdef CONFIG_USB_SERIAL_CONSOLE
320extern void usb_serial_console_init(int debug, int minor);
321extern void usb_serial_console_exit(void);
322extern void usb_serial_console_disconnect(struct usb_serial *serial);
323#else
324static inline void usb_serial_console_init(int debug, int minor) { }
325static inline void usb_serial_console_exit(void) { }
326static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
327#endif
328
329
330extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
331extern void usb_serial_put(struct usb_serial *serial);
332extern int usb_serial_generic_open(struct tty_struct *tty,
333 struct usb_serial_port *port);
334extern int usb_serial_generic_write(struct tty_struct *tty,
335 struct usb_serial_port *port, const unsigned char *buf, int count);
336extern void usb_serial_generic_close(struct usb_serial_port *port);
337extern int usb_serial_generic_resume(struct usb_serial *serial);
338extern int usb_serial_generic_write_room(struct tty_struct *tty);
339extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
340extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
341extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
342extern void usb_serial_generic_throttle(struct tty_struct *tty);
343extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
344extern void usb_serial_generic_disconnect(struct usb_serial *serial);
345extern void usb_serial_generic_release(struct usb_serial *serial);
346extern int usb_serial_generic_register(int debug);
347extern void usb_serial_generic_deregister(void);
348extern int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
349 gfp_t mem_flags);
350extern void usb_serial_generic_process_read_urb(struct urb *urb);
351extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
352 void *dest, size_t size);
353extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
354 unsigned int ch);
355extern int usb_serial_handle_break(struct usb_serial_port *port);
356extern void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
357 struct tty_struct *tty,
358 unsigned int status);
359
360
361extern int usb_serial_bus_register(struct usb_serial_driver *device);
362extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
363
364extern struct usb_serial_driver usb_serial_generic_device;
365extern struct bus_type usb_serial_bus_type;
366extern struct tty_driver *usb_serial_tty_driver;
367
368static inline void usb_serial_debug_data(int debug,
369 struct device *dev,
370 const char *function, int size,
371 const unsigned char *data)
372{
373 int i;
374
375 if (debug) {
376 dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ",
377 function, size);
378 for (i = 0; i < size; ++i)
379 printk("%.2x ", data[i]);
380 printk("\n");
381 }
382}
383
384
385#undef dbg
386#define dbg(format, arg...) \
387do { \
388 if (debug) \
389 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
390} while (0)
391
392#endif
393
394