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