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