at v2.6.14-rc2 2309 lines 56 kB view raw
1/* 2 * linux/drivers/char/core.c 3 * 4 * Driver core for serial ports 5 * 6 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o. 7 * 8 * Copyright 1999 ARM Limited 9 * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 24 */ 25#include <linux/config.h> 26#include <linux/module.h> 27#include <linux/tty.h> 28#include <linux/slab.h> 29#include <linux/init.h> 30#include <linux/console.h> 31#include <linux/serial_core.h> 32#include <linux/smp_lock.h> 33#include <linux/device.h> 34#include <linux/serial.h> /* for serial_state and serial_icounter_struct */ 35#include <linux/delay.h> 36 37#include <asm/irq.h> 38#include <asm/uaccess.h> 39 40#undef DEBUG 41#ifdef DEBUG 42#define DPRINTK(x...) printk(x) 43#else 44#define DPRINTK(x...) do { } while (0) 45#endif 46 47/* 48 * This is used to lock changes in serial line configuration. 49 */ 50static DECLARE_MUTEX(port_sem); 51 52#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8) 53 54#define uart_users(state) ((state)->count + ((state)->info ? (state)->info->blocked_open : 0)) 55 56#ifdef CONFIG_SERIAL_CORE_CONSOLE 57#define uart_console(port) ((port)->cons && (port)->cons->index == (port)->line) 58#else 59#define uart_console(port) (0) 60#endif 61 62static void uart_change_speed(struct uart_state *state, struct termios *old_termios); 63static void uart_wait_until_sent(struct tty_struct *tty, int timeout); 64static void uart_change_pm(struct uart_state *state, int pm_state); 65 66/* 67 * This routine is used by the interrupt handler to schedule processing in 68 * the software interrupt portion of the driver. 69 */ 70void uart_write_wakeup(struct uart_port *port) 71{ 72 struct uart_info *info = port->info; 73 tasklet_schedule(&info->tlet); 74} 75 76static void uart_stop(struct tty_struct *tty) 77{ 78 struct uart_state *state = tty->driver_data; 79 struct uart_port *port = state->port; 80 unsigned long flags; 81 82 spin_lock_irqsave(&port->lock, flags); 83 port->ops->stop_tx(port); 84 spin_unlock_irqrestore(&port->lock, flags); 85} 86 87static void __uart_start(struct tty_struct *tty) 88{ 89 struct uart_state *state = tty->driver_data; 90 struct uart_port *port = state->port; 91 92 if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf && 93 !tty->stopped && !tty->hw_stopped) 94 port->ops->start_tx(port); 95} 96 97static void uart_start(struct tty_struct *tty) 98{ 99 struct uart_state *state = tty->driver_data; 100 struct uart_port *port = state->port; 101 unsigned long flags; 102 103 spin_lock_irqsave(&port->lock, flags); 104 __uart_start(tty); 105 spin_unlock_irqrestore(&port->lock, flags); 106} 107 108static void uart_tasklet_action(unsigned long data) 109{ 110 struct uart_state *state = (struct uart_state *)data; 111 tty_wakeup(state->info->tty); 112} 113 114static inline void 115uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear) 116{ 117 unsigned long flags; 118 unsigned int old; 119 120 spin_lock_irqsave(&port->lock, flags); 121 old = port->mctrl; 122 port->mctrl = (old & ~clear) | set; 123 if (old != port->mctrl) 124 port->ops->set_mctrl(port, port->mctrl); 125 spin_unlock_irqrestore(&port->lock, flags); 126} 127 128#define uart_set_mctrl(port,set) uart_update_mctrl(port,set,0) 129#define uart_clear_mctrl(port,clear) uart_update_mctrl(port,0,clear) 130 131/* 132 * Startup the port. This will be called once per open. All calls 133 * will be serialised by the per-port semaphore. 134 */ 135static int uart_startup(struct uart_state *state, int init_hw) 136{ 137 struct uart_info *info = state->info; 138 struct uart_port *port = state->port; 139 unsigned long page; 140 int retval = 0; 141 142 if (info->flags & UIF_INITIALIZED) 143 return 0; 144 145 /* 146 * Set the TTY IO error marker - we will only clear this 147 * once we have successfully opened the port. Also set 148 * up the tty->alt_speed kludge 149 */ 150 if (info->tty) 151 set_bit(TTY_IO_ERROR, &info->tty->flags); 152 153 if (port->type == PORT_UNKNOWN) 154 return 0; 155 156 /* 157 * Initialise and allocate the transmit and temporary 158 * buffer. 159 */ 160 if (!info->xmit.buf) { 161 page = get_zeroed_page(GFP_KERNEL); 162 if (!page) 163 return -ENOMEM; 164 165 info->xmit.buf = (unsigned char *) page; 166 uart_circ_clear(&info->xmit); 167 } 168 169 retval = port->ops->startup(port); 170 if (retval == 0) { 171 if (init_hw) { 172 /* 173 * Initialise the hardware port settings. 174 */ 175 uart_change_speed(state, NULL); 176 177 /* 178 * Setup the RTS and DTR signals once the 179 * port is open and ready to respond. 180 */ 181 if (info->tty->termios->c_cflag & CBAUD) 182 uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR); 183 } 184 185 if (info->flags & UIF_CTS_FLOW) { 186 spin_lock_irq(&port->lock); 187 if (!(port->ops->get_mctrl(port) & TIOCM_CTS)) 188 info->tty->hw_stopped = 1; 189 spin_unlock_irq(&port->lock); 190 } 191 192 info->flags |= UIF_INITIALIZED; 193 194 clear_bit(TTY_IO_ERROR, &info->tty->flags); 195 } 196 197 if (retval && capable(CAP_SYS_ADMIN)) 198 retval = 0; 199 200 return retval; 201} 202 203/* 204 * This routine will shutdown a serial port; interrupts are disabled, and 205 * DTR is dropped if the hangup on close termio flag is on. Calls to 206 * uart_shutdown are serialised by the per-port semaphore. 207 */ 208static void uart_shutdown(struct uart_state *state) 209{ 210 struct uart_info *info = state->info; 211 struct uart_port *port = state->port; 212 213 if (!(info->flags & UIF_INITIALIZED)) 214 return; 215 216 /* 217 * Turn off DTR and RTS early. 218 */ 219 if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) 220 uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); 221 222 /* 223 * clear delta_msr_wait queue to avoid mem leaks: we may free 224 * the irq here so the queue might never be woken up. Note 225 * that we won't end up waiting on delta_msr_wait again since 226 * any outstanding file descriptors should be pointing at 227 * hung_up_tty_fops now. 228 */ 229 wake_up_interruptible(&info->delta_msr_wait); 230 231 /* 232 * Free the IRQ and disable the port. 233 */ 234 port->ops->shutdown(port); 235 236 /* 237 * Ensure that the IRQ handler isn't running on another CPU. 238 */ 239 synchronize_irq(port->irq); 240 241 /* 242 * Free the transmit buffer page. 243 */ 244 if (info->xmit.buf) { 245 free_page((unsigned long)info->xmit.buf); 246 info->xmit.buf = NULL; 247 } 248 249 /* 250 * kill off our tasklet 251 */ 252 tasklet_kill(&info->tlet); 253 if (info->tty) 254 set_bit(TTY_IO_ERROR, &info->tty->flags); 255 256 info->flags &= ~UIF_INITIALIZED; 257} 258 259/** 260 * uart_update_timeout - update per-port FIFO timeout. 261 * @port: uart_port structure describing the port 262 * @cflag: termios cflag value 263 * @baud: speed of the port 264 * 265 * Set the port FIFO timeout value. The @cflag value should 266 * reflect the actual hardware settings. 267 */ 268void 269uart_update_timeout(struct uart_port *port, unsigned int cflag, 270 unsigned int baud) 271{ 272 unsigned int bits; 273 274 /* byte size and parity */ 275 switch (cflag & CSIZE) { 276 case CS5: 277 bits = 7; 278 break; 279 case CS6: 280 bits = 8; 281 break; 282 case CS7: 283 bits = 9; 284 break; 285 default: 286 bits = 10; 287 break; // CS8 288 } 289 290 if (cflag & CSTOPB) 291 bits++; 292 if (cflag & PARENB) 293 bits++; 294 295 /* 296 * The total number of bits to be transmitted in the fifo. 297 */ 298 bits = bits * port->fifosize; 299 300 /* 301 * Figure the timeout to send the above number of bits. 302 * Add .02 seconds of slop 303 */ 304 port->timeout = (HZ * bits) / baud + HZ/50; 305} 306 307EXPORT_SYMBOL(uart_update_timeout); 308 309/** 310 * uart_get_baud_rate - return baud rate for a particular port 311 * @port: uart_port structure describing the port in question. 312 * @termios: desired termios settings. 313 * @old: old termios (or NULL) 314 * @min: minimum acceptable baud rate 315 * @max: maximum acceptable baud rate 316 * 317 * Decode the termios structure into a numeric baud rate, 318 * taking account of the magic 38400 baud rate (with spd_* 319 * flags), and mapping the %B0 rate to 9600 baud. 320 * 321 * If the new baud rate is invalid, try the old termios setting. 322 * If it's still invalid, we try 9600 baud. 323 * 324 * Update the @termios structure to reflect the baud rate 325 * we're actually going to be using. 326 */ 327unsigned int 328uart_get_baud_rate(struct uart_port *port, struct termios *termios, 329 struct termios *old, unsigned int min, unsigned int max) 330{ 331 unsigned int try, baud, altbaud = 38400; 332 unsigned int flags = port->flags & UPF_SPD_MASK; 333 334 if (flags == UPF_SPD_HI) 335 altbaud = 57600; 336 if (flags == UPF_SPD_VHI) 337 altbaud = 115200; 338 if (flags == UPF_SPD_SHI) 339 altbaud = 230400; 340 if (flags == UPF_SPD_WARP) 341 altbaud = 460800; 342 343 for (try = 0; try < 2; try++) { 344 baud = tty_termios_baud_rate(termios); 345 346 /* 347 * The spd_hi, spd_vhi, spd_shi, spd_warp kludge... 348 * Die! Die! Die! 349 */ 350 if (baud == 38400) 351 baud = altbaud; 352 353 /* 354 * Special case: B0 rate. 355 */ 356 if (baud == 0) 357 baud = 9600; 358 359 if (baud >= min && baud <= max) 360 return baud; 361 362 /* 363 * Oops, the quotient was zero. Try again with 364 * the old baud rate if possible. 365 */ 366 termios->c_cflag &= ~CBAUD; 367 if (old) { 368 termios->c_cflag |= old->c_cflag & CBAUD; 369 old = NULL; 370 continue; 371 } 372 373 /* 374 * As a last resort, if the quotient is zero, 375 * default to 9600 bps 376 */ 377 termios->c_cflag |= B9600; 378 } 379 380 return 0; 381} 382 383EXPORT_SYMBOL(uart_get_baud_rate); 384 385/** 386 * uart_get_divisor - return uart clock divisor 387 * @port: uart_port structure describing the port. 388 * @baud: desired baud rate 389 * 390 * Calculate the uart clock divisor for the port. 391 */ 392unsigned int 393uart_get_divisor(struct uart_port *port, unsigned int baud) 394{ 395 unsigned int quot; 396 397 /* 398 * Old custom speed handling. 399 */ 400 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) 401 quot = port->custom_divisor; 402 else 403 quot = (port->uartclk + (8 * baud)) / (16 * baud); 404 405 return quot; 406} 407 408EXPORT_SYMBOL(uart_get_divisor); 409 410static void 411uart_change_speed(struct uart_state *state, struct termios *old_termios) 412{ 413 struct tty_struct *tty = state->info->tty; 414 struct uart_port *port = state->port; 415 struct termios *termios; 416 417 /* 418 * If we have no tty, termios, or the port does not exist, 419 * then we can't set the parameters for this port. 420 */ 421 if (!tty || !tty->termios || port->type == PORT_UNKNOWN) 422 return; 423 424 termios = tty->termios; 425 426 /* 427 * Set flags based on termios cflag 428 */ 429 if (termios->c_cflag & CRTSCTS) 430 state->info->flags |= UIF_CTS_FLOW; 431 else 432 state->info->flags &= ~UIF_CTS_FLOW; 433 434 if (termios->c_cflag & CLOCAL) 435 state->info->flags &= ~UIF_CHECK_CD; 436 else 437 state->info->flags |= UIF_CHECK_CD; 438 439 port->ops->set_termios(port, termios, old_termios); 440} 441 442static inline void 443__uart_put_char(struct uart_port *port, struct circ_buf *circ, unsigned char c) 444{ 445 unsigned long flags; 446 447 if (!circ->buf) 448 return; 449 450 spin_lock_irqsave(&port->lock, flags); 451 if (uart_circ_chars_free(circ) != 0) { 452 circ->buf[circ->head] = c; 453 circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); 454 } 455 spin_unlock_irqrestore(&port->lock, flags); 456} 457 458static void uart_put_char(struct tty_struct *tty, unsigned char ch) 459{ 460 struct uart_state *state = tty->driver_data; 461 462 __uart_put_char(state->port, &state->info->xmit, ch); 463} 464 465static void uart_flush_chars(struct tty_struct *tty) 466{ 467 uart_start(tty); 468} 469 470static int 471uart_write(struct tty_struct *tty, const unsigned char * buf, int count) 472{ 473 struct uart_state *state = tty->driver_data; 474 struct uart_port *port = state->port; 475 struct circ_buf *circ = &state->info->xmit; 476 unsigned long flags; 477 int c, ret = 0; 478 479 if (!circ->buf) 480 return 0; 481 482 spin_lock_irqsave(&port->lock, flags); 483 while (1) { 484 c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); 485 if (count < c) 486 c = count; 487 if (c <= 0) 488 break; 489 memcpy(circ->buf + circ->head, buf, c); 490 circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); 491 buf += c; 492 count -= c; 493 ret += c; 494 } 495 spin_unlock_irqrestore(&port->lock, flags); 496 497 uart_start(tty); 498 return ret; 499} 500 501static int uart_write_room(struct tty_struct *tty) 502{ 503 struct uart_state *state = tty->driver_data; 504 505 return uart_circ_chars_free(&state->info->xmit); 506} 507 508static int uart_chars_in_buffer(struct tty_struct *tty) 509{ 510 struct uart_state *state = tty->driver_data; 511 512 return uart_circ_chars_pending(&state->info->xmit); 513} 514 515static void uart_flush_buffer(struct tty_struct *tty) 516{ 517 struct uart_state *state = tty->driver_data; 518 struct uart_port *port = state->port; 519 unsigned long flags; 520 521 DPRINTK("uart_flush_buffer(%d) called\n", tty->index); 522 523 spin_lock_irqsave(&port->lock, flags); 524 uart_circ_clear(&state->info->xmit); 525 spin_unlock_irqrestore(&port->lock, flags); 526 tty_wakeup(tty); 527} 528 529/* 530 * This function is used to send a high-priority XON/XOFF character to 531 * the device 532 */ 533static void uart_send_xchar(struct tty_struct *tty, char ch) 534{ 535 struct uart_state *state = tty->driver_data; 536 struct uart_port *port = state->port; 537 unsigned long flags; 538 539 if (port->ops->send_xchar) 540 port->ops->send_xchar(port, ch); 541 else { 542 port->x_char = ch; 543 if (ch) { 544 spin_lock_irqsave(&port->lock, flags); 545 port->ops->start_tx(port); 546 spin_unlock_irqrestore(&port->lock, flags); 547 } 548 } 549} 550 551static void uart_throttle(struct tty_struct *tty) 552{ 553 struct uart_state *state = tty->driver_data; 554 555 if (I_IXOFF(tty)) 556 uart_send_xchar(tty, STOP_CHAR(tty)); 557 558 if (tty->termios->c_cflag & CRTSCTS) 559 uart_clear_mctrl(state->port, TIOCM_RTS); 560} 561 562static void uart_unthrottle(struct tty_struct *tty) 563{ 564 struct uart_state *state = tty->driver_data; 565 struct uart_port *port = state->port; 566 567 if (I_IXOFF(tty)) { 568 if (port->x_char) 569 port->x_char = 0; 570 else 571 uart_send_xchar(tty, START_CHAR(tty)); 572 } 573 574 if (tty->termios->c_cflag & CRTSCTS) 575 uart_set_mctrl(port, TIOCM_RTS); 576} 577 578static int uart_get_info(struct uart_state *state, 579 struct serial_struct __user *retinfo) 580{ 581 struct uart_port *port = state->port; 582 struct serial_struct tmp; 583 584 memset(&tmp, 0, sizeof(tmp)); 585 tmp.type = port->type; 586 tmp.line = port->line; 587 tmp.port = port->iobase; 588 if (HIGH_BITS_OFFSET) 589 tmp.port_high = (long) port->iobase >> HIGH_BITS_OFFSET; 590 tmp.irq = port->irq; 591 tmp.flags = port->flags; 592 tmp.xmit_fifo_size = port->fifosize; 593 tmp.baud_base = port->uartclk / 16; 594 tmp.close_delay = state->close_delay / 10; 595 tmp.closing_wait = state->closing_wait == USF_CLOSING_WAIT_NONE ? 596 ASYNC_CLOSING_WAIT_NONE : 597 state->closing_wait / 10; 598 tmp.custom_divisor = port->custom_divisor; 599 tmp.hub6 = port->hub6; 600 tmp.io_type = port->iotype; 601 tmp.iomem_reg_shift = port->regshift; 602 tmp.iomem_base = (void *)port->mapbase; 603 604 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) 605 return -EFAULT; 606 return 0; 607} 608 609static int uart_set_info(struct uart_state *state, 610 struct serial_struct __user *newinfo) 611{ 612 struct serial_struct new_serial; 613 struct uart_port *port = state->port; 614 unsigned long new_port; 615 unsigned int change_irq, change_port, old_flags, closing_wait; 616 unsigned int old_custom_divisor, close_delay; 617 int retval = 0; 618 619 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial))) 620 return -EFAULT; 621 622 new_port = new_serial.port; 623 if (HIGH_BITS_OFFSET) 624 new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET; 625 626 new_serial.irq = irq_canonicalize(new_serial.irq); 627 close_delay = new_serial.close_delay * 10; 628 closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ? 629 USF_CLOSING_WAIT_NONE : new_serial.closing_wait * 10; 630 631 /* 632 * This semaphore protects state->count. It is also 633 * very useful to prevent opens. Also, take the 634 * port configuration semaphore to make sure that a 635 * module insertion/removal doesn't change anything 636 * under us. 637 */ 638 down(&state->sem); 639 640 change_irq = new_serial.irq != port->irq; 641 642 /* 643 * Since changing the 'type' of the port changes its resource 644 * allocations, we should treat type changes the same as 645 * IO port changes. 646 */ 647 change_port = new_port != port->iobase || 648 (unsigned long)new_serial.iomem_base != port->mapbase || 649 new_serial.hub6 != port->hub6 || 650 new_serial.io_type != port->iotype || 651 new_serial.iomem_reg_shift != port->regshift || 652 new_serial.type != port->type; 653 654 old_flags = port->flags; 655 old_custom_divisor = port->custom_divisor; 656 657 if (!capable(CAP_SYS_ADMIN)) { 658 retval = -EPERM; 659 if (change_irq || change_port || 660 (new_serial.baud_base != port->uartclk / 16) || 661 (close_delay != state->close_delay) || 662 (closing_wait != state->closing_wait) || 663 (new_serial.xmit_fifo_size != port->fifosize) || 664 (((new_serial.flags ^ old_flags) & ~UPF_USR_MASK) != 0)) 665 goto exit; 666 port->flags = ((port->flags & ~UPF_USR_MASK) | 667 (new_serial.flags & UPF_USR_MASK)); 668 port->custom_divisor = new_serial.custom_divisor; 669 goto check_and_exit; 670 } 671 672 /* 673 * Ask the low level driver to verify the settings. 674 */ 675 if (port->ops->verify_port) 676 retval = port->ops->verify_port(port, &new_serial); 677 678 if ((new_serial.irq >= NR_IRQS) || (new_serial.irq < 0) || 679 (new_serial.baud_base < 9600)) 680 retval = -EINVAL; 681 682 if (retval) 683 goto exit; 684 685 if (change_port || change_irq) { 686 retval = -EBUSY; 687 688 /* 689 * Make sure that we are the sole user of this port. 690 */ 691 if (uart_users(state) > 1) 692 goto exit; 693 694 /* 695 * We need to shutdown the serial port at the old 696 * port/type/irq combination. 697 */ 698 uart_shutdown(state); 699 } 700 701 if (change_port) { 702 unsigned long old_iobase, old_mapbase; 703 unsigned int old_type, old_iotype, old_hub6, old_shift; 704 705 old_iobase = port->iobase; 706 old_mapbase = port->mapbase; 707 old_type = port->type; 708 old_hub6 = port->hub6; 709 old_iotype = port->iotype; 710 old_shift = port->regshift; 711 712 /* 713 * Free and release old regions 714 */ 715 if (old_type != PORT_UNKNOWN) 716 port->ops->release_port(port); 717 718 port->iobase = new_port; 719 port->type = new_serial.type; 720 port->hub6 = new_serial.hub6; 721 port->iotype = new_serial.io_type; 722 port->regshift = new_serial.iomem_reg_shift; 723 port->mapbase = (unsigned long)new_serial.iomem_base; 724 725 /* 726 * Claim and map the new regions 727 */ 728 if (port->type != PORT_UNKNOWN) { 729 retval = port->ops->request_port(port); 730 } else { 731 /* Always success - Jean II */ 732 retval = 0; 733 } 734 735 /* 736 * If we fail to request resources for the 737 * new port, try to restore the old settings. 738 */ 739 if (retval && old_type != PORT_UNKNOWN) { 740 port->iobase = old_iobase; 741 port->type = old_type; 742 port->hub6 = old_hub6; 743 port->iotype = old_iotype; 744 port->regshift = old_shift; 745 port->mapbase = old_mapbase; 746 retval = port->ops->request_port(port); 747 /* 748 * If we failed to restore the old settings, 749 * we fail like this. 750 */ 751 if (retval) 752 port->type = PORT_UNKNOWN; 753 754 /* 755 * We failed anyway. 756 */ 757 retval = -EBUSY; 758 } 759 } 760 761 port->irq = new_serial.irq; 762 port->uartclk = new_serial.baud_base * 16; 763 port->flags = (port->flags & ~UPF_CHANGE_MASK) | 764 (new_serial.flags & UPF_CHANGE_MASK); 765 port->custom_divisor = new_serial.custom_divisor; 766 state->close_delay = close_delay; 767 state->closing_wait = closing_wait; 768 port->fifosize = new_serial.xmit_fifo_size; 769 if (state->info->tty) 770 state->info->tty->low_latency = 771 (port->flags & UPF_LOW_LATENCY) ? 1 : 0; 772 773 check_and_exit: 774 retval = 0; 775 if (port->type == PORT_UNKNOWN) 776 goto exit; 777 if (state->info->flags & UIF_INITIALIZED) { 778 if (((old_flags ^ port->flags) & UPF_SPD_MASK) || 779 old_custom_divisor != port->custom_divisor) { 780 /* 781 * If they're setting up a custom divisor or speed, 782 * instead of clearing it, then bitch about it. No 783 * need to rate-limit; it's CAP_SYS_ADMIN only. 784 */ 785 if (port->flags & UPF_SPD_MASK) { 786 char buf[64]; 787 printk(KERN_NOTICE 788 "%s sets custom speed on %s. This " 789 "is deprecated.\n", current->comm, 790 tty_name(state->info->tty, buf)); 791 } 792 uart_change_speed(state, NULL); 793 } 794 } else 795 retval = uart_startup(state, 1); 796 exit: 797 up(&state->sem); 798 return retval; 799} 800 801 802/* 803 * uart_get_lsr_info - get line status register info. 804 * Note: uart_ioctl protects us against hangups. 805 */ 806static int uart_get_lsr_info(struct uart_state *state, 807 unsigned int __user *value) 808{ 809 struct uart_port *port = state->port; 810 unsigned int result; 811 812 result = port->ops->tx_empty(port); 813 814 /* 815 * If we're about to load something into the transmit 816 * register, we'll pretend the transmitter isn't empty to 817 * avoid a race condition (depending on when the transmit 818 * interrupt happens). 819 */ 820 if (port->x_char || 821 ((uart_circ_chars_pending(&state->info->xmit) > 0) && 822 !state->info->tty->stopped && !state->info->tty->hw_stopped)) 823 result &= ~TIOCSER_TEMT; 824 825 return put_user(result, value); 826} 827 828static int uart_tiocmget(struct tty_struct *tty, struct file *file) 829{ 830 struct uart_state *state = tty->driver_data; 831 struct uart_port *port = state->port; 832 int result = -EIO; 833 834 down(&state->sem); 835 if ((!file || !tty_hung_up_p(file)) && 836 !(tty->flags & (1 << TTY_IO_ERROR))) { 837 result = port->mctrl; 838 839 spin_lock_irq(&port->lock); 840 result |= port->ops->get_mctrl(port); 841 spin_unlock_irq(&port->lock); 842 } 843 up(&state->sem); 844 845 return result; 846} 847 848static int 849uart_tiocmset(struct tty_struct *tty, struct file *file, 850 unsigned int set, unsigned int clear) 851{ 852 struct uart_state *state = tty->driver_data; 853 struct uart_port *port = state->port; 854 int ret = -EIO; 855 856 down(&state->sem); 857 if ((!file || !tty_hung_up_p(file)) && 858 !(tty->flags & (1 << TTY_IO_ERROR))) { 859 uart_update_mctrl(port, set, clear); 860 ret = 0; 861 } 862 up(&state->sem); 863 return ret; 864} 865 866static void uart_break_ctl(struct tty_struct *tty, int break_state) 867{ 868 struct uart_state *state = tty->driver_data; 869 struct uart_port *port = state->port; 870 871 BUG_ON(!kernel_locked()); 872 873 down(&state->sem); 874 875 if (port->type != PORT_UNKNOWN) 876 port->ops->break_ctl(port, break_state); 877 878 up(&state->sem); 879} 880 881static int uart_do_autoconfig(struct uart_state *state) 882{ 883 struct uart_port *port = state->port; 884 int flags, ret; 885 886 if (!capable(CAP_SYS_ADMIN)) 887 return -EPERM; 888 889 /* 890 * Take the per-port semaphore. This prevents count from 891 * changing, and hence any extra opens of the port while 892 * we're auto-configuring. 893 */ 894 if (down_interruptible(&state->sem)) 895 return -ERESTARTSYS; 896 897 ret = -EBUSY; 898 if (uart_users(state) == 1) { 899 uart_shutdown(state); 900 901 /* 902 * If we already have a port type configured, 903 * we must release its resources. 904 */ 905 if (port->type != PORT_UNKNOWN) 906 port->ops->release_port(port); 907 908 flags = UART_CONFIG_TYPE; 909 if (port->flags & UPF_AUTO_IRQ) 910 flags |= UART_CONFIG_IRQ; 911 912 /* 913 * This will claim the ports resources if 914 * a port is found. 915 */ 916 port->ops->config_port(port, flags); 917 918 ret = uart_startup(state, 1); 919 } 920 up(&state->sem); 921 return ret; 922} 923 924/* 925 * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change 926 * - mask passed in arg for lines of interest 927 * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) 928 * Caller should use TIOCGICOUNT to see which one it was 929 */ 930static int 931uart_wait_modem_status(struct uart_state *state, unsigned long arg) 932{ 933 struct uart_port *port = state->port; 934 DECLARE_WAITQUEUE(wait, current); 935 struct uart_icount cprev, cnow; 936 int ret; 937 938 /* 939 * note the counters on entry 940 */ 941 spin_lock_irq(&port->lock); 942 memcpy(&cprev, &port->icount, sizeof(struct uart_icount)); 943 944 /* 945 * Force modem status interrupts on 946 */ 947 port->ops->enable_ms(port); 948 spin_unlock_irq(&port->lock); 949 950 add_wait_queue(&state->info->delta_msr_wait, &wait); 951 for (;;) { 952 spin_lock_irq(&port->lock); 953 memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); 954 spin_unlock_irq(&port->lock); 955 956 set_current_state(TASK_INTERRUPTIBLE); 957 958 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || 959 ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || 960 ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || 961 ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) { 962 ret = 0; 963 break; 964 } 965 966 schedule(); 967 968 /* see if a signal did it */ 969 if (signal_pending(current)) { 970 ret = -ERESTARTSYS; 971 break; 972 } 973 974 cprev = cnow; 975 } 976 977 current->state = TASK_RUNNING; 978 remove_wait_queue(&state->info->delta_msr_wait, &wait); 979 980 return ret; 981} 982 983/* 984 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) 985 * Return: write counters to the user passed counter struct 986 * NB: both 1->0 and 0->1 transitions are counted except for 987 * RI where only 0->1 is counted. 988 */ 989static int uart_get_count(struct uart_state *state, 990 struct serial_icounter_struct __user *icnt) 991{ 992 struct serial_icounter_struct icount; 993 struct uart_icount cnow; 994 struct uart_port *port = state->port; 995 996 spin_lock_irq(&port->lock); 997 memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); 998 spin_unlock_irq(&port->lock); 999 1000 icount.cts = cnow.cts; 1001 icount.dsr = cnow.dsr; 1002 icount.rng = cnow.rng; 1003 icount.dcd = cnow.dcd; 1004 icount.rx = cnow.rx; 1005 icount.tx = cnow.tx; 1006 icount.frame = cnow.frame; 1007 icount.overrun = cnow.overrun; 1008 icount.parity = cnow.parity; 1009 icount.brk = cnow.brk; 1010 icount.buf_overrun = cnow.buf_overrun; 1011 1012 return copy_to_user(icnt, &icount, sizeof(icount)) ? -EFAULT : 0; 1013} 1014 1015/* 1016 * Called via sys_ioctl under the BKL. We can use spin_lock_irq() here. 1017 */ 1018static int 1019uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, 1020 unsigned long arg) 1021{ 1022 struct uart_state *state = tty->driver_data; 1023 void __user *uarg = (void __user *)arg; 1024 int ret = -ENOIOCTLCMD; 1025 1026 BUG_ON(!kernel_locked()); 1027 1028 /* 1029 * These ioctls don't rely on the hardware to be present. 1030 */ 1031 switch (cmd) { 1032 case TIOCGSERIAL: 1033 ret = uart_get_info(state, uarg); 1034 break; 1035 1036 case TIOCSSERIAL: 1037 ret = uart_set_info(state, uarg); 1038 break; 1039 1040 case TIOCSERCONFIG: 1041 ret = uart_do_autoconfig(state); 1042 break; 1043 1044 case TIOCSERGWILD: /* obsolete */ 1045 case TIOCSERSWILD: /* obsolete */ 1046 ret = 0; 1047 break; 1048 } 1049 1050 if (ret != -ENOIOCTLCMD) 1051 goto out; 1052 1053 if (tty->flags & (1 << TTY_IO_ERROR)) { 1054 ret = -EIO; 1055 goto out; 1056 } 1057 1058 /* 1059 * The following should only be used when hardware is present. 1060 */ 1061 switch (cmd) { 1062 case TIOCMIWAIT: 1063 ret = uart_wait_modem_status(state, arg); 1064 break; 1065 1066 case TIOCGICOUNT: 1067 ret = uart_get_count(state, uarg); 1068 break; 1069 } 1070 1071 if (ret != -ENOIOCTLCMD) 1072 goto out; 1073 1074 down(&state->sem); 1075 1076 if (tty_hung_up_p(filp)) { 1077 ret = -EIO; 1078 goto out_up; 1079 } 1080 1081 /* 1082 * All these rely on hardware being present and need to be 1083 * protected against the tty being hung up. 1084 */ 1085 switch (cmd) { 1086 case TIOCSERGETLSR: /* Get line status register */ 1087 ret = uart_get_lsr_info(state, uarg); 1088 break; 1089 1090 default: { 1091 struct uart_port *port = state->port; 1092 if (port->ops->ioctl) 1093 ret = port->ops->ioctl(port, cmd, arg); 1094 break; 1095 } 1096 } 1097 out_up: 1098 up(&state->sem); 1099 out: 1100 return ret; 1101} 1102 1103static void uart_set_termios(struct tty_struct *tty, struct termios *old_termios) 1104{ 1105 struct uart_state *state = tty->driver_data; 1106 unsigned long flags; 1107 unsigned int cflag = tty->termios->c_cflag; 1108 1109 BUG_ON(!kernel_locked()); 1110 1111 /* 1112 * These are the bits that are used to setup various 1113 * flags in the low level driver. 1114 */ 1115#define RELEVANT_IFLAG(iflag) ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK)) 1116 1117 if ((cflag ^ old_termios->c_cflag) == 0 && 1118 RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) 1119 return; 1120 1121 uart_change_speed(state, old_termios); 1122 1123 /* Handle transition to B0 status */ 1124 if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) 1125 uart_clear_mctrl(state->port, TIOCM_RTS | TIOCM_DTR); 1126 1127 /* Handle transition away from B0 status */ 1128 if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { 1129 unsigned int mask = TIOCM_DTR; 1130 if (!(cflag & CRTSCTS) || 1131 !test_bit(TTY_THROTTLED, &tty->flags)) 1132 mask |= TIOCM_RTS; 1133 uart_set_mctrl(state->port, mask); 1134 } 1135 1136 /* Handle turning off CRTSCTS */ 1137 if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) { 1138 spin_lock_irqsave(&state->port->lock, flags); 1139 tty->hw_stopped = 0; 1140 __uart_start(tty); 1141 spin_unlock_irqrestore(&state->port->lock, flags); 1142 } 1143 1144 /* Handle turning on CRTSCTS */ 1145 if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) { 1146 spin_lock_irqsave(&state->port->lock, flags); 1147 if (!(state->port->ops->get_mctrl(state->port) & TIOCM_CTS)) { 1148 tty->hw_stopped = 1; 1149 state->port->ops->stop_tx(state->port); 1150 } 1151 spin_unlock_irqrestore(&state->port->lock, flags); 1152 } 1153 1154#if 0 1155 /* 1156 * No need to wake up processes in open wait, since they 1157 * sample the CLOCAL flag once, and don't recheck it. 1158 * XXX It's not clear whether the current behavior is correct 1159 * or not. Hence, this may change..... 1160 */ 1161 if (!(old_termios->c_cflag & CLOCAL) && 1162 (tty->termios->c_cflag & CLOCAL)) 1163 wake_up_interruptible(&state->info->open_wait); 1164#endif 1165} 1166 1167/* 1168 * In 2.4.5, calls to this will be serialized via the BKL in 1169 * linux/drivers/char/tty_io.c:tty_release() 1170 * linux/drivers/char/tty_io.c:do_tty_handup() 1171 */ 1172static void uart_close(struct tty_struct *tty, struct file *filp) 1173{ 1174 struct uart_state *state = tty->driver_data; 1175 struct uart_port *port; 1176 1177 BUG_ON(!kernel_locked()); 1178 1179 if (!state || !state->port) 1180 return; 1181 1182 port = state->port; 1183 1184 DPRINTK("uart_close(%d) called\n", port->line); 1185 1186 down(&state->sem); 1187 1188 if (tty_hung_up_p(filp)) 1189 goto done; 1190 1191 if ((tty->count == 1) && (state->count != 1)) { 1192 /* 1193 * Uh, oh. tty->count is 1, which means that the tty 1194 * structure will be freed. state->count should always 1195 * be one in these conditions. If it's greater than 1196 * one, we've got real problems, since it means the 1197 * serial port won't be shutdown. 1198 */ 1199 printk(KERN_ERR "uart_close: bad serial port count; tty->count is 1, " 1200 "state->count is %d\n", state->count); 1201 state->count = 1; 1202 } 1203 if (--state->count < 0) { 1204 printk(KERN_ERR "uart_close: bad serial port count for %s: %d\n", 1205 tty->name, state->count); 1206 state->count = 0; 1207 } 1208 if (state->count) 1209 goto done; 1210 1211 /* 1212 * Now we wait for the transmit buffer to clear; and we notify 1213 * the line discipline to only process XON/XOFF characters by 1214 * setting tty->closing. 1215 */ 1216 tty->closing = 1; 1217 1218 if (state->closing_wait != USF_CLOSING_WAIT_NONE) 1219 tty_wait_until_sent(tty, msecs_to_jiffies(state->closing_wait)); 1220 1221 /* 1222 * At this point, we stop accepting input. To do this, we 1223 * disable the receive line status interrupts. 1224 */ 1225 if (state->info->flags & UIF_INITIALIZED) { 1226 unsigned long flags; 1227 spin_lock_irqsave(&port->lock, flags); 1228 port->ops->stop_rx(port); 1229 spin_unlock_irqrestore(&port->lock, flags); 1230 /* 1231 * Before we drop DTR, make sure the UART transmitter 1232 * has completely drained; this is especially 1233 * important if there is a transmit FIFO! 1234 */ 1235 uart_wait_until_sent(tty, port->timeout); 1236 } 1237 1238 uart_shutdown(state); 1239 uart_flush_buffer(tty); 1240 1241 tty_ldisc_flush(tty); 1242 1243 tty->closing = 0; 1244 state->info->tty = NULL; 1245 1246 if (state->info->blocked_open) { 1247 if (state->close_delay) 1248 msleep_interruptible(state->close_delay); 1249 } else if (!uart_console(port)) { 1250 uart_change_pm(state, 3); 1251 } 1252 1253 /* 1254 * Wake up anyone trying to open this port. 1255 */ 1256 state->info->flags &= ~UIF_NORMAL_ACTIVE; 1257 wake_up_interruptible(&state->info->open_wait); 1258 1259 done: 1260 up(&state->sem); 1261} 1262 1263static void uart_wait_until_sent(struct tty_struct *tty, int timeout) 1264{ 1265 struct uart_state *state = tty->driver_data; 1266 struct uart_port *port = state->port; 1267 unsigned long char_time, expire; 1268 1269 BUG_ON(!kernel_locked()); 1270 1271 if (port->type == PORT_UNKNOWN || port->fifosize == 0) 1272 return; 1273 1274 /* 1275 * Set the check interval to be 1/5 of the estimated time to 1276 * send a single character, and make it at least 1. The check 1277 * interval should also be less than the timeout. 1278 * 1279 * Note: we have to use pretty tight timings here to satisfy 1280 * the NIST-PCTS. 1281 */ 1282 char_time = (port->timeout - HZ/50) / port->fifosize; 1283 char_time = char_time / 5; 1284 if (char_time == 0) 1285 char_time = 1; 1286 if (timeout && timeout < char_time) 1287 char_time = timeout; 1288 1289 /* 1290 * If the transmitter hasn't cleared in twice the approximate 1291 * amount of time to send the entire FIFO, it probably won't 1292 * ever clear. This assumes the UART isn't doing flow 1293 * control, which is currently the case. Hence, if it ever 1294 * takes longer than port->timeout, this is probably due to a 1295 * UART bug of some kind. So, we clamp the timeout parameter at 1296 * 2*port->timeout. 1297 */ 1298 if (timeout == 0 || timeout > 2 * port->timeout) 1299 timeout = 2 * port->timeout; 1300 1301 expire = jiffies + timeout; 1302 1303 DPRINTK("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n", 1304 port->line, jiffies, expire); 1305 1306 /* 1307 * Check whether the transmitter is empty every 'char_time'. 1308 * 'timeout' / 'expire' give us the maximum amount of time 1309 * we wait. 1310 */ 1311 while (!port->ops->tx_empty(port)) { 1312 msleep_interruptible(jiffies_to_msecs(char_time)); 1313 if (signal_pending(current)) 1314 break; 1315 if (time_after(jiffies, expire)) 1316 break; 1317 } 1318 set_current_state(TASK_RUNNING); /* might not be needed */ 1319} 1320 1321/* 1322 * This is called with the BKL held in 1323 * linux/drivers/char/tty_io.c:do_tty_hangup() 1324 * We're called from the eventd thread, so we can sleep for 1325 * a _short_ time only. 1326 */ 1327static void uart_hangup(struct tty_struct *tty) 1328{ 1329 struct uart_state *state = tty->driver_data; 1330 1331 BUG_ON(!kernel_locked()); 1332 DPRINTK("uart_hangup(%d)\n", state->port->line); 1333 1334 down(&state->sem); 1335 if (state->info && state->info->flags & UIF_NORMAL_ACTIVE) { 1336 uart_flush_buffer(tty); 1337 uart_shutdown(state); 1338 state->count = 0; 1339 state->info->flags &= ~UIF_NORMAL_ACTIVE; 1340 state->info->tty = NULL; 1341 wake_up_interruptible(&state->info->open_wait); 1342 wake_up_interruptible(&state->info->delta_msr_wait); 1343 } 1344 up(&state->sem); 1345} 1346 1347/* 1348 * Copy across the serial console cflag setting into the termios settings 1349 * for the initial open of the port. This allows continuity between the 1350 * kernel settings, and the settings init adopts when it opens the port 1351 * for the first time. 1352 */ 1353static void uart_update_termios(struct uart_state *state) 1354{ 1355 struct tty_struct *tty = state->info->tty; 1356 struct uart_port *port = state->port; 1357 1358 if (uart_console(port) && port->cons->cflag) { 1359 tty->termios->c_cflag = port->cons->cflag; 1360 port->cons->cflag = 0; 1361 } 1362 1363 /* 1364 * If the device failed to grab its irq resources, 1365 * or some other error occurred, don't try to talk 1366 * to the port hardware. 1367 */ 1368 if (!(tty->flags & (1 << TTY_IO_ERROR))) { 1369 /* 1370 * Make termios settings take effect. 1371 */ 1372 uart_change_speed(state, NULL); 1373 1374 /* 1375 * And finally enable the RTS and DTR signals. 1376 */ 1377 if (tty->termios->c_cflag & CBAUD) 1378 uart_set_mctrl(port, TIOCM_DTR | TIOCM_RTS); 1379 } 1380} 1381 1382/* 1383 * Block the open until the port is ready. We must be called with 1384 * the per-port semaphore held. 1385 */ 1386static int 1387uart_block_til_ready(struct file *filp, struct uart_state *state) 1388{ 1389 DECLARE_WAITQUEUE(wait, current); 1390 struct uart_info *info = state->info; 1391 struct uart_port *port = state->port; 1392 unsigned int mctrl; 1393 1394 info->blocked_open++; 1395 state->count--; 1396 1397 add_wait_queue(&info->open_wait, &wait); 1398 while (1) { 1399 set_current_state(TASK_INTERRUPTIBLE); 1400 1401 /* 1402 * If we have been hung up, tell userspace/restart open. 1403 */ 1404 if (tty_hung_up_p(filp) || info->tty == NULL) 1405 break; 1406 1407 /* 1408 * If the port has been closed, tell userspace/restart open. 1409 */ 1410 if (!(info->flags & UIF_INITIALIZED)) 1411 break; 1412 1413 /* 1414 * If non-blocking mode is set, or CLOCAL mode is set, 1415 * we don't want to wait for the modem status lines to 1416 * indicate that the port is ready. 1417 * 1418 * Also, if the port is not enabled/configured, we want 1419 * to allow the open to succeed here. Note that we will 1420 * have set TTY_IO_ERROR for a non-existant port. 1421 */ 1422 if ((filp->f_flags & O_NONBLOCK) || 1423 (info->tty->termios->c_cflag & CLOCAL) || 1424 (info->tty->flags & (1 << TTY_IO_ERROR))) { 1425 break; 1426 } 1427 1428 /* 1429 * Set DTR to allow modem to know we're waiting. Do 1430 * not set RTS here - we want to make sure we catch 1431 * the data from the modem. 1432 */ 1433 if (info->tty->termios->c_cflag & CBAUD) 1434 uart_set_mctrl(port, TIOCM_DTR); 1435 1436 /* 1437 * and wait for the carrier to indicate that the 1438 * modem is ready for us. 1439 */ 1440 spin_lock_irq(&port->lock); 1441 mctrl = port->ops->get_mctrl(port); 1442 spin_unlock_irq(&port->lock); 1443 if (mctrl & TIOCM_CAR) 1444 break; 1445 1446 up(&state->sem); 1447 schedule(); 1448 down(&state->sem); 1449 1450 if (signal_pending(current)) 1451 break; 1452 } 1453 set_current_state(TASK_RUNNING); 1454 remove_wait_queue(&info->open_wait, &wait); 1455 1456 state->count++; 1457 info->blocked_open--; 1458 1459 if (signal_pending(current)) 1460 return -ERESTARTSYS; 1461 1462 if (!info->tty || tty_hung_up_p(filp)) 1463 return -EAGAIN; 1464 1465 return 0; 1466} 1467 1468static struct uart_state *uart_get(struct uart_driver *drv, int line) 1469{ 1470 struct uart_state *state; 1471 1472 down(&port_sem); 1473 state = drv->state + line; 1474 if (down_interruptible(&state->sem)) { 1475 state = ERR_PTR(-ERESTARTSYS); 1476 goto out; 1477 } 1478 1479 state->count++; 1480 if (!state->port) { 1481 state->count--; 1482 up(&state->sem); 1483 state = ERR_PTR(-ENXIO); 1484 goto out; 1485 } 1486 1487 if (!state->info) { 1488 state->info = kmalloc(sizeof(struct uart_info), GFP_KERNEL); 1489 if (state->info) { 1490 memset(state->info, 0, sizeof(struct uart_info)); 1491 init_waitqueue_head(&state->info->open_wait); 1492 init_waitqueue_head(&state->info->delta_msr_wait); 1493 1494 /* 1495 * Link the info into the other structures. 1496 */ 1497 state->port->info = state->info; 1498 1499 tasklet_init(&state->info->tlet, uart_tasklet_action, 1500 (unsigned long)state); 1501 } else { 1502 state->count--; 1503 up(&state->sem); 1504 state = ERR_PTR(-ENOMEM); 1505 } 1506 } 1507 1508 out: 1509 up(&port_sem); 1510 return state; 1511} 1512 1513/* 1514 * In 2.4.5, calls to uart_open are serialised by the BKL in 1515 * linux/fs/devices.c:chrdev_open() 1516 * Note that if this fails, then uart_close() _will_ be called. 1517 * 1518 * In time, we want to scrap the "opening nonpresent ports" 1519 * behaviour and implement an alternative way for setserial 1520 * to set base addresses/ports/types. This will allow us to 1521 * get rid of a certain amount of extra tests. 1522 */ 1523static int uart_open(struct tty_struct *tty, struct file *filp) 1524{ 1525 struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state; 1526 struct uart_state *state; 1527 int retval, line = tty->index; 1528 1529 BUG_ON(!kernel_locked()); 1530 DPRINTK("uart_open(%d) called\n", line); 1531 1532 /* 1533 * tty->driver->num won't change, so we won't fail here with 1534 * tty->driver_data set to something non-NULL (and therefore 1535 * we won't get caught by uart_close()). 1536 */ 1537 retval = -ENODEV; 1538 if (line >= tty->driver->num) 1539 goto fail; 1540 1541 /* 1542 * We take the semaphore inside uart_get to guarantee that we won't 1543 * be re-entered while allocating the info structure, or while we 1544 * request any IRQs that the driver may need. This also has the nice 1545 * side-effect that it delays the action of uart_hangup, so we can 1546 * guarantee that info->tty will always contain something reasonable. 1547 */ 1548 state = uart_get(drv, line); 1549 if (IS_ERR(state)) { 1550 retval = PTR_ERR(state); 1551 goto fail; 1552 } 1553 1554 /* 1555 * Once we set tty->driver_data here, we are guaranteed that 1556 * uart_close() will decrement the driver module use count. 1557 * Any failures from here onwards should not touch the count. 1558 */ 1559 tty->driver_data = state; 1560 tty->low_latency = (state->port->flags & UPF_LOW_LATENCY) ? 1 : 0; 1561 tty->alt_speed = 0; 1562 state->info->tty = tty; 1563 1564 /* 1565 * If the port is in the middle of closing, bail out now. 1566 */ 1567 if (tty_hung_up_p(filp)) { 1568 retval = -EAGAIN; 1569 state->count--; 1570 up(&state->sem); 1571 goto fail; 1572 } 1573 1574 /* 1575 * Make sure the device is in D0 state. 1576 */ 1577 if (state->count == 1) 1578 uart_change_pm(state, 0); 1579 1580 /* 1581 * Start up the serial port. 1582 */ 1583 retval = uart_startup(state, 0); 1584 1585 /* 1586 * If we succeeded, wait until the port is ready. 1587 */ 1588 if (retval == 0) 1589 retval = uart_block_til_ready(filp, state); 1590 up(&state->sem); 1591 1592 /* 1593 * If this is the first open to succeed, adjust things to suit. 1594 */ 1595 if (retval == 0 && !(state->info->flags & UIF_NORMAL_ACTIVE)) { 1596 state->info->flags |= UIF_NORMAL_ACTIVE; 1597 1598 uart_update_termios(state); 1599 } 1600 1601 fail: 1602 return retval; 1603} 1604 1605static const char *uart_type(struct uart_port *port) 1606{ 1607 const char *str = NULL; 1608 1609 if (port->ops->type) 1610 str = port->ops->type(port); 1611 1612 if (!str) 1613 str = "unknown"; 1614 1615 return str; 1616} 1617 1618#ifdef CONFIG_PROC_FS 1619 1620static int uart_line_info(char *buf, struct uart_driver *drv, int i) 1621{ 1622 struct uart_state *state = drv->state + i; 1623 struct uart_port *port = state->port; 1624 char stat_buf[32]; 1625 unsigned int status; 1626 int ret; 1627 1628 if (!port) 1629 return 0; 1630 1631 ret = sprintf(buf, "%d: uart:%s %s%08lX irq:%d", 1632 port->line, uart_type(port), 1633 port->iotype == UPIO_MEM ? "mmio:0x" : "port:", 1634 port->iotype == UPIO_MEM ? port->mapbase : 1635 (unsigned long) port->iobase, 1636 port->irq); 1637 1638 if (port->type == PORT_UNKNOWN) { 1639 strcat(buf, "\n"); 1640 return ret + 1; 1641 } 1642 1643 if(capable(CAP_SYS_ADMIN)) 1644 { 1645 spin_lock_irq(&port->lock); 1646 status = port->ops->get_mctrl(port); 1647 spin_unlock_irq(&port->lock); 1648 1649 ret += sprintf(buf + ret, " tx:%d rx:%d", 1650 port->icount.tx, port->icount.rx); 1651 if (port->icount.frame) 1652 ret += sprintf(buf + ret, " fe:%d", 1653 port->icount.frame); 1654 if (port->icount.parity) 1655 ret += sprintf(buf + ret, " pe:%d", 1656 port->icount.parity); 1657 if (port->icount.brk) 1658 ret += sprintf(buf + ret, " brk:%d", 1659 port->icount.brk); 1660 if (port->icount.overrun) 1661 ret += sprintf(buf + ret, " oe:%d", 1662 port->icount.overrun); 1663 1664#define INFOBIT(bit,str) \ 1665 if (port->mctrl & (bit)) \ 1666 strncat(stat_buf, (str), sizeof(stat_buf) - \ 1667 strlen(stat_buf) - 2) 1668#define STATBIT(bit,str) \ 1669 if (status & (bit)) \ 1670 strncat(stat_buf, (str), sizeof(stat_buf) - \ 1671 strlen(stat_buf) - 2) 1672 1673 stat_buf[0] = '\0'; 1674 stat_buf[1] = '\0'; 1675 INFOBIT(TIOCM_RTS, "|RTS"); 1676 STATBIT(TIOCM_CTS, "|CTS"); 1677 INFOBIT(TIOCM_DTR, "|DTR"); 1678 STATBIT(TIOCM_DSR, "|DSR"); 1679 STATBIT(TIOCM_CAR, "|CD"); 1680 STATBIT(TIOCM_RNG, "|RI"); 1681 if (stat_buf[0]) 1682 stat_buf[0] = ' '; 1683 strcat(stat_buf, "\n"); 1684 1685 ret += sprintf(buf + ret, stat_buf); 1686 } else { 1687 strcat(buf, "\n"); 1688 ret++; 1689 } 1690#undef STATBIT 1691#undef INFOBIT 1692 return ret; 1693} 1694 1695static int uart_read_proc(char *page, char **start, off_t off, 1696 int count, int *eof, void *data) 1697{ 1698 struct tty_driver *ttydrv = data; 1699 struct uart_driver *drv = ttydrv->driver_state; 1700 int i, len = 0, l; 1701 off_t begin = 0; 1702 1703 len += sprintf(page, "serinfo:1.0 driver%s%s revision:%s\n", 1704 "", "", ""); 1705 for (i = 0; i < drv->nr && len < PAGE_SIZE - 96; i++) { 1706 l = uart_line_info(page + len, drv, i); 1707 len += l; 1708 if (len + begin > off + count) 1709 goto done; 1710 if (len + begin < off) { 1711 begin += len; 1712 len = 0; 1713 } 1714 } 1715 *eof = 1; 1716 done: 1717 if (off >= len + begin) 1718 return 0; 1719 *start = page + (off - begin); 1720 return (count < begin + len - off) ? count : (begin + len - off); 1721} 1722#endif 1723 1724#ifdef CONFIG_SERIAL_CORE_CONSOLE 1725/* 1726 * Check whether an invalid uart number has been specified, and 1727 * if so, search for the first available port that does have 1728 * console support. 1729 */ 1730struct uart_port * __init 1731uart_get_console(struct uart_port *ports, int nr, struct console *co) 1732{ 1733 int idx = co->index; 1734 1735 if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 && 1736 ports[idx].membase == NULL)) 1737 for (idx = 0; idx < nr; idx++) 1738 if (ports[idx].iobase != 0 || 1739 ports[idx].membase != NULL) 1740 break; 1741 1742 co->index = idx; 1743 1744 return ports + idx; 1745} 1746 1747/** 1748 * uart_parse_options - Parse serial port baud/parity/bits/flow contro. 1749 * @options: pointer to option string 1750 * @baud: pointer to an 'int' variable for the baud rate. 1751 * @parity: pointer to an 'int' variable for the parity. 1752 * @bits: pointer to an 'int' variable for the number of data bits. 1753 * @flow: pointer to an 'int' variable for the flow control character. 1754 * 1755 * uart_parse_options decodes a string containing the serial console 1756 * options. The format of the string is <baud><parity><bits><flow>, 1757 * eg: 115200n8r 1758 */ 1759void __init 1760uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow) 1761{ 1762 char *s = options; 1763 1764 *baud = simple_strtoul(s, NULL, 10); 1765 while (*s >= '0' && *s <= '9') 1766 s++; 1767 if (*s) 1768 *parity = *s++; 1769 if (*s) 1770 *bits = *s++ - '0'; 1771 if (*s) 1772 *flow = *s; 1773} 1774 1775struct baud_rates { 1776 unsigned int rate; 1777 unsigned int cflag; 1778}; 1779 1780static struct baud_rates baud_rates[] = { 1781 { 921600, B921600 }, 1782 { 460800, B460800 }, 1783 { 230400, B230400 }, 1784 { 115200, B115200 }, 1785 { 57600, B57600 }, 1786 { 38400, B38400 }, 1787 { 19200, B19200 }, 1788 { 9600, B9600 }, 1789 { 4800, B4800 }, 1790 { 2400, B2400 }, 1791 { 1200, B1200 }, 1792 { 0, B38400 } 1793}; 1794 1795/** 1796 * uart_set_options - setup the serial console parameters 1797 * @port: pointer to the serial ports uart_port structure 1798 * @co: console pointer 1799 * @baud: baud rate 1800 * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even) 1801 * @bits: number of data bits 1802 * @flow: flow control character - 'r' (rts) 1803 */ 1804int __init 1805uart_set_options(struct uart_port *port, struct console *co, 1806 int baud, int parity, int bits, int flow) 1807{ 1808 struct termios termios; 1809 int i; 1810 1811 /* 1812 * Ensure that the serial console lock is initialised 1813 * early. 1814 */ 1815 spin_lock_init(&port->lock); 1816 1817 memset(&termios, 0, sizeof(struct termios)); 1818 1819 termios.c_cflag = CREAD | HUPCL | CLOCAL; 1820 1821 /* 1822 * Construct a cflag setting. 1823 */ 1824 for (i = 0; baud_rates[i].rate; i++) 1825 if (baud_rates[i].rate <= baud) 1826 break; 1827 1828 termios.c_cflag |= baud_rates[i].cflag; 1829 1830 if (bits == 7) 1831 termios.c_cflag |= CS7; 1832 else 1833 termios.c_cflag |= CS8; 1834 1835 switch (parity) { 1836 case 'o': case 'O': 1837 termios.c_cflag |= PARODD; 1838 /*fall through*/ 1839 case 'e': case 'E': 1840 termios.c_cflag |= PARENB; 1841 break; 1842 } 1843 1844 if (flow == 'r') 1845 termios.c_cflag |= CRTSCTS; 1846 1847 port->ops->set_termios(port, &termios, NULL); 1848 co->cflag = termios.c_cflag; 1849 1850 return 0; 1851} 1852#endif /* CONFIG_SERIAL_CORE_CONSOLE */ 1853 1854static void uart_change_pm(struct uart_state *state, int pm_state) 1855{ 1856 struct uart_port *port = state->port; 1857 if (port->ops->pm) 1858 port->ops->pm(port, pm_state, state->pm_state); 1859 state->pm_state = pm_state; 1860} 1861 1862int uart_suspend_port(struct uart_driver *drv, struct uart_port *port) 1863{ 1864 struct uart_state *state = drv->state + port->line; 1865 1866 down(&state->sem); 1867 1868 if (state->info && state->info->flags & UIF_INITIALIZED) { 1869 struct uart_ops *ops = port->ops; 1870 1871 spin_lock_irq(&port->lock); 1872 ops->stop_tx(port); 1873 ops->set_mctrl(port, 0); 1874 ops->stop_rx(port); 1875 spin_unlock_irq(&port->lock); 1876 1877 /* 1878 * Wait for the transmitter to empty. 1879 */ 1880 while (!ops->tx_empty(port)) { 1881 msleep(10); 1882 } 1883 1884 ops->shutdown(port); 1885 } 1886 1887 /* 1888 * Disable the console device before suspending. 1889 */ 1890 if (uart_console(port)) 1891 console_stop(port->cons); 1892 1893 uart_change_pm(state, 3); 1894 1895 up(&state->sem); 1896 1897 return 0; 1898} 1899 1900int uart_resume_port(struct uart_driver *drv, struct uart_port *port) 1901{ 1902 struct uart_state *state = drv->state + port->line; 1903 1904 down(&state->sem); 1905 1906 uart_change_pm(state, 0); 1907 1908 /* 1909 * Re-enable the console device after suspending. 1910 */ 1911 if (uart_console(port)) { 1912 struct termios termios; 1913 1914 /* 1915 * First try to use the console cflag setting. 1916 */ 1917 memset(&termios, 0, sizeof(struct termios)); 1918 termios.c_cflag = port->cons->cflag; 1919 1920 /* 1921 * If that's unset, use the tty termios setting. 1922 */ 1923 if (state->info && state->info->tty && termios.c_cflag == 0) 1924 termios = *state->info->tty->termios; 1925 1926 port->ops->set_termios(port, &termios, NULL); 1927 console_start(port->cons); 1928 } 1929 1930 if (state->info && state->info->flags & UIF_INITIALIZED) { 1931 struct uart_ops *ops = port->ops; 1932 1933 ops->set_mctrl(port, 0); 1934 ops->startup(port); 1935 uart_change_speed(state, NULL); 1936 spin_lock_irq(&port->lock); 1937 ops->set_mctrl(port, port->mctrl); 1938 ops->start_tx(port); 1939 spin_unlock_irq(&port->lock); 1940 } 1941 1942 up(&state->sem); 1943 1944 return 0; 1945} 1946 1947static inline void 1948uart_report_port(struct uart_driver *drv, struct uart_port *port) 1949{ 1950 char address[64]; 1951 1952 switch (port->iotype) { 1953 case UPIO_PORT: 1954 snprintf(address, sizeof(address), 1955 "I/O 0x%x", port->iobase); 1956 break; 1957 case UPIO_HUB6: 1958 snprintf(address, sizeof(address), 1959 "I/O 0x%x offset 0x%x", port->iobase, port->hub6); 1960 break; 1961 case UPIO_MEM: 1962 case UPIO_MEM32: 1963 snprintf(address, sizeof(address), 1964 "MMIO 0x%lx", port->mapbase); 1965 break; 1966 default: 1967 strlcpy(address, "*unknown*", sizeof(address)); 1968 break; 1969 } 1970 1971 printk(KERN_INFO "%s%d at %s (irq = %d) is a %s\n", 1972 drv->dev_name, port->line, address, port->irq, uart_type(port)); 1973} 1974 1975static void 1976uart_configure_port(struct uart_driver *drv, struct uart_state *state, 1977 struct uart_port *port) 1978{ 1979 unsigned int flags; 1980 1981 /* 1982 * If there isn't a port here, don't do anything further. 1983 */ 1984 if (!port->iobase && !port->mapbase && !port->membase) 1985 return; 1986 1987 /* 1988 * Now do the auto configuration stuff. Note that config_port 1989 * is expected to claim the resources and map the port for us. 1990 */ 1991 flags = UART_CONFIG_TYPE; 1992 if (port->flags & UPF_AUTO_IRQ) 1993 flags |= UART_CONFIG_IRQ; 1994 if (port->flags & UPF_BOOT_AUTOCONF) { 1995 port->type = PORT_UNKNOWN; 1996 port->ops->config_port(port, flags); 1997 } 1998 1999 if (port->type != PORT_UNKNOWN) { 2000 unsigned long flags; 2001 2002 uart_report_port(drv, port); 2003 2004 /* 2005 * Ensure that the modem control lines are de-activated. 2006 * We probably don't need a spinlock around this, but 2007 */ 2008 spin_lock_irqsave(&port->lock, flags); 2009 port->ops->set_mctrl(port, 0); 2010 spin_unlock_irqrestore(&port->lock, flags); 2011 2012 /* 2013 * Power down all ports by default, except the 2014 * console if we have one. 2015 */ 2016 if (!uart_console(port)) 2017 uart_change_pm(state, 3); 2018 } 2019} 2020 2021/* 2022 * This reverses the effects of uart_configure_port, hanging up the 2023 * port before removal. 2024 */ 2025static void 2026uart_unconfigure_port(struct uart_driver *drv, struct uart_state *state) 2027{ 2028 struct uart_port *port = state->port; 2029 struct uart_info *info = state->info; 2030 2031 if (info && info->tty) 2032 tty_vhangup(info->tty); 2033 2034 down(&state->sem); 2035 2036 state->info = NULL; 2037 2038 /* 2039 * Free the port IO and memory resources, if any. 2040 */ 2041 if (port->type != PORT_UNKNOWN) 2042 port->ops->release_port(port); 2043 2044 /* 2045 * Indicate that there isn't a port here anymore. 2046 */ 2047 port->type = PORT_UNKNOWN; 2048 2049 /* 2050 * Kill the tasklet, and free resources. 2051 */ 2052 if (info) { 2053 tasklet_kill(&info->tlet); 2054 kfree(info); 2055 } 2056 2057 up(&state->sem); 2058} 2059 2060static struct tty_operations uart_ops = { 2061 .open = uart_open, 2062 .close = uart_close, 2063 .write = uart_write, 2064 .put_char = uart_put_char, 2065 .flush_chars = uart_flush_chars, 2066 .write_room = uart_write_room, 2067 .chars_in_buffer= uart_chars_in_buffer, 2068 .flush_buffer = uart_flush_buffer, 2069 .ioctl = uart_ioctl, 2070 .throttle = uart_throttle, 2071 .unthrottle = uart_unthrottle, 2072 .send_xchar = uart_send_xchar, 2073 .set_termios = uart_set_termios, 2074 .stop = uart_stop, 2075 .start = uart_start, 2076 .hangup = uart_hangup, 2077 .break_ctl = uart_break_ctl, 2078 .wait_until_sent= uart_wait_until_sent, 2079#ifdef CONFIG_PROC_FS 2080 .read_proc = uart_read_proc, 2081#endif 2082 .tiocmget = uart_tiocmget, 2083 .tiocmset = uart_tiocmset, 2084}; 2085 2086/** 2087 * uart_register_driver - register a driver with the uart core layer 2088 * @drv: low level driver structure 2089 * 2090 * Register a uart driver with the core driver. We in turn register 2091 * with the tty layer, and initialise the core driver per-port state. 2092 * 2093 * We have a proc file in /proc/tty/driver which is named after the 2094 * normal driver. 2095 * 2096 * drv->port should be NULL, and the per-port structures should be 2097 * registered using uart_add_one_port after this call has succeeded. 2098 */ 2099int uart_register_driver(struct uart_driver *drv) 2100{ 2101 struct tty_driver *normal = NULL; 2102 int i, retval; 2103 2104 BUG_ON(drv->state); 2105 2106 /* 2107 * Maybe we should be using a slab cache for this, especially if 2108 * we have a large number of ports to handle. 2109 */ 2110 drv->state = kmalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL); 2111 retval = -ENOMEM; 2112 if (!drv->state) 2113 goto out; 2114 2115 memset(drv->state, 0, sizeof(struct uart_state) * drv->nr); 2116 2117 normal = alloc_tty_driver(drv->nr); 2118 if (!normal) 2119 goto out; 2120 2121 drv->tty_driver = normal; 2122 2123 normal->owner = drv->owner; 2124 normal->driver_name = drv->driver_name; 2125 normal->devfs_name = drv->devfs_name; 2126 normal->name = drv->dev_name; 2127 normal->major = drv->major; 2128 normal->minor_start = drv->minor; 2129 normal->type = TTY_DRIVER_TYPE_SERIAL; 2130 normal->subtype = SERIAL_TYPE_NORMAL; 2131 normal->init_termios = tty_std_termios; 2132 normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; 2133 normal->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS; 2134 normal->driver_state = drv; 2135 tty_set_operations(normal, &uart_ops); 2136 2137 /* 2138 * Initialise the UART state(s). 2139 */ 2140 for (i = 0; i < drv->nr; i++) { 2141 struct uart_state *state = drv->state + i; 2142 2143 state->close_delay = 500; /* .5 seconds */ 2144 state->closing_wait = 30000; /* 30 seconds */ 2145 2146 init_MUTEX(&state->sem); 2147 } 2148 2149 retval = tty_register_driver(normal); 2150 out: 2151 if (retval < 0) { 2152 put_tty_driver(normal); 2153 kfree(drv->state); 2154 } 2155 return retval; 2156} 2157 2158/** 2159 * uart_unregister_driver - remove a driver from the uart core layer 2160 * @drv: low level driver structure 2161 * 2162 * Remove all references to a driver from the core driver. The low 2163 * level driver must have removed all its ports via the 2164 * uart_remove_one_port() if it registered them with uart_add_one_port(). 2165 * (ie, drv->port == NULL) 2166 */ 2167void uart_unregister_driver(struct uart_driver *drv) 2168{ 2169 struct tty_driver *p = drv->tty_driver; 2170 tty_unregister_driver(p); 2171 put_tty_driver(p); 2172 kfree(drv->state); 2173 drv->tty_driver = NULL; 2174} 2175 2176struct tty_driver *uart_console_device(struct console *co, int *index) 2177{ 2178 struct uart_driver *p = co->data; 2179 *index = co->index; 2180 return p->tty_driver; 2181} 2182 2183/** 2184 * uart_add_one_port - attach a driver-defined port structure 2185 * @drv: pointer to the uart low level driver structure for this port 2186 * @port: uart port structure to use for this port. 2187 * 2188 * This allows the driver to register its own uart_port structure 2189 * with the core driver. The main purpose is to allow the low 2190 * level uart drivers to expand uart_port, rather than having yet 2191 * more levels of structures. 2192 */ 2193int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) 2194{ 2195 struct uart_state *state; 2196 int ret = 0; 2197 2198 BUG_ON(in_interrupt()); 2199 2200 if (port->line >= drv->nr) 2201 return -EINVAL; 2202 2203 state = drv->state + port->line; 2204 2205 down(&port_sem); 2206 if (state->port) { 2207 ret = -EINVAL; 2208 goto out; 2209 } 2210 2211 state->port = port; 2212 2213 port->cons = drv->cons; 2214 port->info = state->info; 2215 2216 /* 2217 * If this port is a console, then the spinlock is already 2218 * initialised. 2219 */ 2220 if (!uart_console(port)) 2221 spin_lock_init(&port->lock); 2222 2223 uart_configure_port(drv, state, port); 2224 2225 /* 2226 * Register the port whether it's detected or not. This allows 2227 * setserial to be used to alter this ports parameters. 2228 */ 2229 tty_register_device(drv->tty_driver, port->line, port->dev); 2230 2231 /* 2232 * If this driver supports console, and it hasn't been 2233 * successfully registered yet, try to re-register it. 2234 * It may be that the port was not available. 2235 */ 2236 if (port->type != PORT_UNKNOWN && 2237 port->cons && !(port->cons->flags & CON_ENABLED)) 2238 register_console(port->cons); 2239 2240 out: 2241 up(&port_sem); 2242 2243 return ret; 2244} 2245 2246/** 2247 * uart_remove_one_port - detach a driver defined port structure 2248 * @drv: pointer to the uart low level driver structure for this port 2249 * @port: uart port structure for this port 2250 * 2251 * This unhooks (and hangs up) the specified port structure from the 2252 * core driver. No further calls will be made to the low-level code 2253 * for this port. 2254 */ 2255int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port) 2256{ 2257 struct uart_state *state = drv->state + port->line; 2258 2259 BUG_ON(in_interrupt()); 2260 2261 if (state->port != port) 2262 printk(KERN_ALERT "Removing wrong port: %p != %p\n", 2263 state->port, port); 2264 2265 down(&port_sem); 2266 2267 /* 2268 * Remove the devices from devfs 2269 */ 2270 tty_unregister_device(drv->tty_driver, port->line); 2271 2272 uart_unconfigure_port(drv, state); 2273 state->port = NULL; 2274 up(&port_sem); 2275 2276 return 0; 2277} 2278 2279/* 2280 * Are the two ports equivalent? 2281 */ 2282int uart_match_port(struct uart_port *port1, struct uart_port *port2) 2283{ 2284 if (port1->iotype != port2->iotype) 2285 return 0; 2286 2287 switch (port1->iotype) { 2288 case UPIO_PORT: 2289 return (port1->iobase == port2->iobase); 2290 case UPIO_HUB6: 2291 return (port1->iobase == port2->iobase) && 2292 (port1->hub6 == port2->hub6); 2293 case UPIO_MEM: 2294 return (port1->membase == port2->membase); 2295 } 2296 return 0; 2297} 2298EXPORT_SYMBOL(uart_match_port); 2299 2300EXPORT_SYMBOL(uart_write_wakeup); 2301EXPORT_SYMBOL(uart_register_driver); 2302EXPORT_SYMBOL(uart_unregister_driver); 2303EXPORT_SYMBOL(uart_suspend_port); 2304EXPORT_SYMBOL(uart_resume_port); 2305EXPORT_SYMBOL(uart_add_one_port); 2306EXPORT_SYMBOL(uart_remove_one_port); 2307 2308MODULE_DESCRIPTION("Serial driver core"); 2309MODULE_LICENSE("GPL");