Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
usb
serial.h
Go to the documentation of this file.
1
/*
2
* USB Serial Converter stuff
3
*
4
* Copyright (C) 1999 - 2012
5
* Greg Kroah-Hartman (
[email protected]
)
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; version 2 of the License.
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
/* Nice legal number now */
22
#define SERIAL_TTY_MINORS 254
/* loads of devices :) */
23
#define SERIAL_TTY_NO_MINOR 255
/* No minor was assigned */
24
25
/* The maximum number of ports one device can grab at once */
26
#define MAX_NUM_PORTS 8
27
28
/* parity check flag */
29
#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
30
31
/* USB serial flags */
32
#define USB_SERIAL_WRITE_BUSY 0
33
77
struct
usb_serial_port
{
78
struct
usb_serial
*
serial
;
79
struct
tty_port
port
;
80
spinlock_t
lock
;
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_in_buffers
[2];
98
struct
urb
*
read_urbs
[2];
99
unsigned
long
read_urbs_free
;
100
101
unsigned
char
*
bulk_out_buffer
;
102
int
bulk_out_size
;
103
struct
urb
*
write_urb
;
104
struct
kfifo
write_fifo
;
105
106
unsigned
char
*
bulk_out_buffers
[2];
107
struct
urb
*
write_urbs
[2];
108
unsigned
long
write_urbs_free
;
109
__u8
bulk_out_endpointAddress
;
110
111
int
tx_bytes
;
112
113
unsigned
long
flags
;
114
wait_queue_head_t
write_wait
;
115
struct
work_struct
work
;
116
char
throttled
;
117
char
throttle_req
;
118
unsigned
long
sysrq
;
/* sysrq timeout */
119
struct
device
dev
;
120
};
121
#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
122
123
/* get and set the port private data pointer helper functions */
124
static
inline
void
*usb_get_serial_port_data(
struct
usb_serial_port
*
port
)
125
{
126
return
dev_get_drvdata
(&port->
dev
);
127
}
128
129
static
inline
void
usb_set_serial_port_data(
struct
usb_serial_port
*
port
,
130
void
*
data
)
131
{
132
dev_set_drvdata
(&port->
dev
, data);
133
}
134
152
struct
usb_serial
{
153
struct
usb_device *
dev
;
154
struct
usb_serial_driver
*
type
;
155
struct
usb_interface
*
interface
;
156
unsigned
char
disconnected
:1;
157
unsigned
char
suspending
:1;
158
unsigned
char
attached
:1;
159
unsigned
char
minor
;
160
unsigned
char
num_ports
;
161
unsigned
char
num_port_pointers
;
162
char
num_interrupt_in
;
163
char
num_interrupt_out
;
164
char
num_bulk_in
;
165
char
num_bulk_out
;
166
struct
usb_serial_port
*
port
[
MAX_NUM_PORTS
];
167
struct
kref
kref
;
168
struct
mutex
disc_mutex
;
169
void
*
private
;
170
};
171
#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
172
173
/* get and set the serial private data pointer helper functions */
174
static
inline
void
*usb_get_serial_data(
struct
usb_serial
*
serial
)
175
{
176
return
serial->
private
;
177
}
178
179
static
inline
void
usb_set_serial_data(
struct
usb_serial
*
serial
,
void
*
data
)
180
{
181
serial->
private
=
data
;
182
}
183
227
struct
usb_serial_driver
{
228
const
char
*
description
;
229
const
struct
usb_device_id
*
id_table
;
230
char
num_ports
;
231
232
struct
list_head
driver_list
;
233
struct
device_driver
driver
;
234
struct
usb_driver
*
usb_driver
;
235
struct
usb_dynids
dynids
;
236
237
size_t
bulk_in_size
;
238
size_t
bulk_out_size
;
239
240
int
(*
probe
)(
struct
usb_serial
*
serial
,
const
struct
usb_device_id
*
id
);
241
int
(*
attach
)(
struct
usb_serial
*
serial
);
242
int
(*
calc_num_ports
) (
struct
usb_serial
*
serial
);
243
244
void
(*
disconnect
)(
struct
usb_serial
*
serial
);
245
void
(*
release
)(
struct
usb_serial
*
serial
);
246
247
int
(*
port_probe
)(
struct
usb_serial_port
*
port
);
248
int
(*
port_remove
)(
struct
usb_serial_port
*
port
);
249
250
int
(*
suspend
)(
struct
usb_serial
*
serial
,
pm_message_t
message
);
251
int
(*
resume
)(
struct
usb_serial
*
serial
);
252
int
(*
reset_resume
)(
struct
usb_serial
*
serial
);
253
254
/* serial function calls */
255
/* Called by console and by the tty layer */
256
int
(*
open
)(
struct
tty_struct
*tty,
struct
usb_serial_port
*
port
);
257
void
(*
close
)(
struct
usb_serial_port
*
port
);
258
int
(*
write
)(
struct
tty_struct
*tty,
struct
usb_serial_port
*
port
,
259
const
unsigned
char
*
buf
,
int
count
);
260
/* Called only by the tty layer */
261
int
(*
write_room
)(
struct
tty_struct
*tty);
262
int
(*
ioctl
)(
struct
tty_struct
*tty,
263
unsigned
int
cmd
,
unsigned
long
arg
);
264
void
(*
set_termios
)(
struct
tty_struct
*tty,
265
struct
usb_serial_port
*
port
,
struct
ktermios
*old);
266
void
(*
break_ctl
)(
struct
tty_struct
*tty,
int
break_state);
267
int
(*
chars_in_buffer
)(
struct
tty_struct
*tty);
268
void
(*
throttle
)(
struct
tty_struct
*tty);
269
void
(*
unthrottle
)(
struct
tty_struct
*tty);
270
int
(*
tiocmget
)(
struct
tty_struct
*tty);
271
int
(*
tiocmset
)(
struct
tty_struct
*tty,
272
unsigned
int
set
,
unsigned
int
clear
);
273
int
(*
get_icount
)(
struct
tty_struct
*tty,
274
struct
serial_icounter_struct
*icount);
275
/* Called by the tty layer for port level work. There may or may not
276
be an attached tty at this point */
277
void
(*
dtr_rts
)(
struct
usb_serial_port
*
port
,
int
on);
278
int
(*
carrier_raised
)(
struct
usb_serial_port
*
port
);
279
/* Called by the usb serial hooks to allow the user to rework the
280
termios state */
281
void
(*
init_termios
)(
struct
tty_struct
*tty);
282
/* USB events */
283
void
(*
read_int_callback
)(
struct
urb
*
urb
);
284
void
(*
write_int_callback
)(
struct
urb
*
urb
);
285
void
(*
read_bulk_callback
)(
struct
urb
*
urb
);
286
void
(*
write_bulk_callback
)(
struct
urb
*
urb
);
287
/* Called by the generic read bulk callback */
288
void
(*
process_read_urb
)(
struct
urb
*
urb
);
289
/* Called by the generic write implementation */
290
int
(*
prepare_write_buffer
)(
struct
usb_serial_port
*
port
,
291
void
*
dest
,
size_t
size
);
292
};
293
#define to_usb_serial_driver(d) \
294
container_of(d, struct usb_serial_driver, driver)
295
296
extern
int
usb_serial_register_drivers
(
struct
usb_serial_driver
*
const
serial_drivers[],
297
const
char
*
name
,
const
struct
usb_device_id
*id_table);
298
extern
void
usb_serial_deregister_drivers
(
struct
usb_serial_driver
*
const
serial_drivers[]);
299
extern
void
usb_serial_port_softint
(
struct
usb_serial_port
*
port
);
300
301
extern
int
usb_serial_suspend
(
struct
usb_interface
*
intf
,
pm_message_t
message
);
302
extern
int
usb_serial_resume
(
struct
usb_interface
*
intf
);
303
304
/* USB Serial console functions */
305
#ifdef CONFIG_USB_SERIAL_CONSOLE
306
extern
void
usb_serial_console_init
(
int
minor);
307
extern
void
usb_serial_console_exit
(
void
);
308
extern
void
usb_serial_console_disconnect
(
struct
usb_serial
*
serial
);
309
#else
310
static
inline
void
usb_serial_console_init
(
int
minor) { }
311
static
inline
void
usb_serial_console_exit
(
void
) { }
312
static
inline
void
usb_serial_console_disconnect
(
struct
usb_serial
*
serial
) {}
313
#endif
314
315
/* Functions needed by other parts of the usbserial core */
316
extern
struct
usb_serial
*
usb_serial_get_by_index
(
unsigned
int
minor
);
317
extern
void
usb_serial_put
(
struct
usb_serial
*
serial
);
318
extern
int
usb_serial_generic_open
(
struct
tty_struct
*tty,
319
struct
usb_serial_port
*
port
);
320
extern
int
usb_serial_generic_write
(
struct
tty_struct
*tty,
321
struct
usb_serial_port
*
port
,
const
unsigned
char
*
buf
,
int
count
);
322
extern
void
usb_serial_generic_close
(
struct
usb_serial_port
*
port
);
323
extern
int
usb_serial_generic_resume
(
struct
usb_serial
*
serial
);
324
extern
int
usb_serial_generic_write_room
(
struct
tty_struct
*tty);
325
extern
int
usb_serial_generic_chars_in_buffer
(
struct
tty_struct
*tty);
326
extern
void
usb_serial_generic_read_bulk_callback
(
struct
urb
*
urb
);
327
extern
void
usb_serial_generic_write_bulk_callback
(
struct
urb
*
urb
);
328
extern
void
usb_serial_generic_throttle
(
struct
tty_struct
*tty);
329
extern
void
usb_serial_generic_unthrottle
(
struct
tty_struct
*tty);
330
extern
void
usb_serial_generic_disconnect
(
struct
usb_serial
*
serial
);
331
extern
void
usb_serial_generic_release
(
struct
usb_serial
*
serial
);
332
extern
int
usb_serial_generic_register
(
void
);
333
extern
void
usb_serial_generic_deregister
(
void
);
334
extern
int
usb_serial_generic_submit_read_urbs
(
struct
usb_serial_port
*
port
,
335
gfp_t
mem_flags);
336
extern
void
usb_serial_generic_process_read_urb
(
struct
urb
*
urb
);
337
extern
int
usb_serial_generic_prepare_write_buffer
(
struct
usb_serial_port
*
port
,
338
void
*
dest
,
size_t
size
);
339
extern
int
usb_serial_handle_sysrq_char
(
struct
usb_serial_port
*
port
,
340
unsigned
int
ch);
341
extern
int
usb_serial_handle_break
(
struct
usb_serial_port
*
port
);
342
extern
void
usb_serial_handle_dcd_change
(
struct
usb_serial_port
*
usb_port
,
343
struct
tty_struct
*tty,
344
unsigned
int
status
);
345
346
347
extern
int
usb_serial_bus_register
(
struct
usb_serial_driver
*
device
);
348
extern
void
usb_serial_bus_deregister
(
struct
usb_serial_driver
*
device
);
349
350
extern
struct
usb_serial_driver
usb_serial_generic_device
;
351
extern
struct
bus_type
usb_serial_bus_type
;
352
extern
struct
tty_driver
*
usb_serial_tty_driver
;
353
354
static
inline
void
usb_serial_debug_data(
struct
device
*
dev
,
355
const
char
*
function
,
int
size
,
356
const
unsigned
char
*
data
)
357
{
358
dev_dbg
(dev,
"%s - length = %d, data = %*ph\n"
,
359
function
, size, size, data);
360
}
361
362
/*
363
* Macro for reporting errors in write path to avoid inifinite loop
364
* when port is used as a console.
365
*/
366
#define dev_err_console(usport, fmt, ...) \
367
do { \
368
static bool __print_once; \
369
struct usb_serial_port *__port = (usport); \
370
\
371
if (!__port->port.console || !__print_once) { \
372
__print_once = true; \
373
dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
374
} \
375
} while (0)
376
377
/*
378
* module_usb_serial_driver() - Helper macro for registering a USB Serial driver
379
* @__serial_drivers: list of usb_serial drivers to register
380
* @__ids: all device ids that @__serial_drivers bind to
381
*
382
* Helper macro for USB serial drivers which do not do anything special
383
* in module init/exit. This eliminates a lot of boilerplate. Each
384
* module may only use this macro once, and calling it replaces
385
* module_init() and module_exit()
386
*
387
*/
388
#define usb_serial_module_driver(__name, __serial_drivers, __ids) \
389
static int __init usb_serial_module_init(void) \
390
{ \
391
return usb_serial_register_drivers(__serial_drivers, \
392
__name, __ids); \
393
} \
394
module_init(usb_serial_module_init); \
395
static void __exit usb_serial_module_exit(void) \
396
{ \
397
usb_serial_deregister_drivers(__serial_drivers); \
398
} \
399
module_exit(usb_serial_module_exit);
400
401
#define module_usb_serial_driver(__serial_drivers, __ids) \
402
usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
403
404
#endif
/* __LINUX_USB_SERIAL_H */
405
Generated on Thu Jan 10 2013 12:50:28 for Linux Kernel by
1.8.2