diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-02 00:32:46 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-02 00:32:46 -0500 |
| commit | ec33b309101bb2904e9fe20252f7760e254d05ec (patch) | |
| tree | 13cde551f2ef845801d9e59081258572e1ac222a | |
| parent | 7f36b1e9582c06d0ddef5f2416c9b17017647d1f (diff) | |
| parent | 913ade51eca369553a8ffbdaf1f426fade84f6ae (diff) | |
Merge master.kernel.org:/home/rmk/linux-2.6-serial
| -rw-r--r-- | Documentation/serial/driver | 66 | ||||
| -rw-r--r-- | drivers/serial/serial_core.c | 4 | ||||
| -rw-r--r-- | include/linux/serial_core.h | 7 |
3 files changed, 64 insertions, 13 deletions
diff --git a/Documentation/serial/driver b/Documentation/serial/driver index 87856d3cfb67..42ef9970bc86 100644 --- a/Documentation/serial/driver +++ b/Documentation/serial/driver | |||
| @@ -116,12 +116,15 @@ hardware. | |||
| 116 | line becoming inactive or the tty layer indicating we want | 116 | line becoming inactive or the tty layer indicating we want |
| 117 | to stop transmission due to an XOFF character. | 117 | to stop transmission due to an XOFF character. |
| 118 | 118 | ||
| 119 | The driver should stop transmitting characters as soon as | ||
| 120 | possible. | ||
| 121 | |||
| 119 | Locking: port->lock taken. | 122 | Locking: port->lock taken. |
| 120 | Interrupts: locally disabled. | 123 | Interrupts: locally disabled. |
| 121 | This call must not sleep | 124 | This call must not sleep |
| 122 | 125 | ||
| 123 | start_tx(port) | 126 | start_tx(port) |
| 124 | start transmitting characters. | 127 | Start transmitting characters. |
| 125 | 128 | ||
| 126 | Locking: port->lock taken. | 129 | Locking: port->lock taken. |
| 127 | Interrupts: locally disabled. | 130 | Interrupts: locally disabled. |
| @@ -281,26 +284,31 @@ hardware. | |||
| 281 | Other functions | 284 | Other functions |
| 282 | --------------- | 285 | --------------- |
| 283 | 286 | ||
| 284 | uart_update_timeout(port,cflag,quot) | 287 | uart_update_timeout(port,cflag,baud) |
| 285 | Update the FIFO drain timeout, port->timeout, according to the | 288 | Update the FIFO drain timeout, port->timeout, according to the |
| 286 | number of bits, parity, stop bits and quotient. | 289 | number of bits, parity, stop bits and baud rate. |
| 287 | 290 | ||
| 288 | Locking: caller is expected to take port->lock | 291 | Locking: caller is expected to take port->lock |
| 289 | Interrupts: n/a | 292 | Interrupts: n/a |
| 290 | 293 | ||
| 291 | uart_get_baud_rate(port,termios) | 294 | uart_get_baud_rate(port,termios,old,min,max) |
| 292 | Return the numeric baud rate for the specified termios, taking | 295 | Return the numeric baud rate for the specified termios, taking |
| 293 | account of the special 38400 baud "kludge". The B0 baud rate | 296 | account of the special 38400 baud "kludge". The B0 baud rate |
| 294 | is mapped to 9600 baud. | 297 | is mapped to 9600 baud. |
| 295 | 298 | ||
| 299 | If the baud rate is not within min..max, then if old is non-NULL, | ||
| 300 | the original baud rate will be tried. If that exceeds the | ||
| 301 | min..max constraint, 9600 baud will be returned. termios will | ||
| 302 | be updated to the baud rate in use. | ||
| 303 | |||
| 304 | Note: min..max must always allow 9600 baud to be selected. | ||
| 305 | |||
| 296 | Locking: caller dependent. | 306 | Locking: caller dependent. |
| 297 | Interrupts: n/a | 307 | Interrupts: n/a |
| 298 | 308 | ||
| 299 | uart_get_divisor(port,termios,oldtermios) | 309 | uart_get_divisor(port,baud) |
| 300 | Return the divsor (baud_base / baud) for the selected baud rate | 310 | Return the divsor (baud_base / baud) for the specified baud |
| 301 | specified by termios. If the baud rate is out of range, try | 311 | rate, appropriately rounded. |
| 302 | the original baud rate specified by oldtermios (if non-NULL). | ||
| 303 | If that fails, try 9600 baud. | ||
| 304 | 312 | ||
| 305 | If 38400 baud and custom divisor is selected, return the | 313 | If 38400 baud and custom divisor is selected, return the |
| 306 | custom divisor instead. | 314 | custom divisor instead. |
| @@ -308,6 +316,46 @@ uart_get_divisor(port,termios,oldtermios) | |||
| 308 | Locking: caller dependent. | 316 | Locking: caller dependent. |
| 309 | Interrupts: n/a | 317 | Interrupts: n/a |
| 310 | 318 | ||
| 319 | uart_match_port(port1,port2) | ||
| 320 | This utility function can be used to determine whether two | ||
| 321 | uart_port structures describe the same port. | ||
| 322 | |||
| 323 | Locking: n/a | ||
| 324 | Interrupts: n/a | ||
| 325 | |||
| 326 | uart_write_wakeup(port) | ||
| 327 | A driver is expected to call this function when the number of | ||
| 328 | characters in the transmit buffer have dropped below a threshold. | ||
| 329 | |||
| 330 | Locking: port->lock should be held. | ||
| 331 | Interrupts: n/a | ||
| 332 | |||
| 333 | uart_register_driver(drv) | ||
| 334 | Register a uart driver with the core driver. We in turn register | ||
| 335 | with the tty layer, and initialise the core driver per-port state. | ||
| 336 | |||
| 337 | drv->port should be NULL, and the per-port structures should be | ||
| 338 | registered using uart_add_one_port after this call has succeeded. | ||
| 339 | |||
| 340 | Locking: none | ||
| 341 | Interrupts: enabled | ||
| 342 | |||
| 343 | uart_unregister_driver() | ||
| 344 | Remove all references to a driver from the core driver. The low | ||
| 345 | level driver must have removed all its ports via the | ||
| 346 | uart_remove_one_port() if it registered them with uart_add_one_port(). | ||
| 347 | |||
| 348 | Locking: none | ||
| 349 | Interrupts: enabled | ||
| 350 | |||
| 351 | uart_suspend_port() | ||
| 352 | |||
| 353 | uart_resume_port() | ||
| 354 | |||
| 355 | uart_add_one_port() | ||
| 356 | |||
| 357 | uart_remove_one_port() | ||
| 358 | |||
| 311 | Other notes | 359 | Other notes |
| 312 | ----------- | 360 | ----------- |
| 313 | 361 | ||
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 401d94a7fe2e..0745ce782974 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
| @@ -1967,7 +1967,9 @@ uart_report_port(struct uart_driver *drv, struct uart_port *port) | |||
| 1967 | break; | 1967 | break; |
| 1968 | } | 1968 | } |
| 1969 | 1969 | ||
| 1970 | printk(KERN_INFO "%s%d at %s (irq = %d) is a %s\n", | 1970 | printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n", |
| 1971 | port->dev ? port->dev->bus_id : "", | ||
| 1972 | port->dev ? ": " : "", | ||
| 1971 | drv->dev_name, port->line, address, port->irq, uart_type(port)); | 1973 | drv->dev_name, port->line, address, port->irq, uart_type(port)); |
| 1972 | } | 1974 | } |
| 1973 | 1975 | ||
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 2b0401b93f2b..9d2579230689 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -39,8 +39,7 @@ | |||
| 39 | #define PORT_RSA 13 | 39 | #define PORT_RSA 13 |
| 40 | #define PORT_NS16550A 14 | 40 | #define PORT_NS16550A 14 |
| 41 | #define PORT_XSCALE 15 | 41 | #define PORT_XSCALE 15 |
| 42 | #define PORT_IP3106 16 | 42 | #define PORT_MAX_8250 15 /* max port ID */ |
| 43 | #define PORT_MAX_8250 16 /* max port ID */ | ||
| 44 | 43 | ||
| 45 | /* | 44 | /* |
| 46 | * ARM specific type numbers. These are not currently guaranteed | 45 | * ARM specific type numbers. These are not currently guaranteed |
| @@ -118,7 +117,9 @@ | |||
| 118 | #define PORT_M32R_SIO 68 | 117 | #define PORT_M32R_SIO 68 |
| 119 | 118 | ||
| 120 | /*Digi jsm */ | 119 | /*Digi jsm */ |
| 121 | #define PORT_JSM 65 | 120 | #define PORT_JSM 69 |
| 121 | |||
| 122 | #define PORT_IP3106 70 | ||
| 122 | 123 | ||
| 123 | #ifdef __KERNEL__ | 124 | #ifdef __KERNEL__ |
| 124 | 125 | ||
