Commit 4982d6b37a5ccebe6c2af79970c7a15c1939243a
Committed by
Linus Torvalds
1 parent
52d417388d
Exists in
master
and in
7 other branches
esp: use tty_port
Switch esp to use the new tty_port structures Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 138 additions and 143 deletions Side-by-side Diff
drivers/char/esp.c
... | ... | @@ -128,9 +128,9 @@ |
128 | 128 | |
129 | 129 | #if defined(MODULE) && defined(SERIAL_DEBUG_MCOUNT) |
130 | 130 | #define DBG_CNT(s) printk(KERN_DEBUG "(%s): [%x] refc=%d, serc=%d, ttyc=%d -> %s\n", \ |
131 | - tty->name, info->flags, \ | |
131 | + tty->name, info->port.flags, \ | |
132 | 132 | serial_driver.refcount, \ |
133 | - info->count, tty->count, s) | |
133 | + info->port.count, tty->count, s) | |
134 | 134 | #else |
135 | 135 | #define DBG_CNT(s) |
136 | 136 | #endif |
137 | 137 | |
... | ... | @@ -172,13 +172,13 @@ |
172 | 172 | |
173 | 173 | static inline unsigned int serial_in(struct esp_struct *info, int offset) |
174 | 174 | { |
175 | - return inb(info->port + offset); | |
175 | + return inb(info->io_port + offset); | |
176 | 176 | } |
177 | 177 | |
178 | 178 | static inline void serial_out(struct esp_struct *info, int offset, |
179 | 179 | unsigned char value) |
180 | 180 | { |
181 | - outb(value, info->port+offset); | |
181 | + outb(value, info->io_port+offset); | |
182 | 182 | } |
183 | 183 | |
184 | 184 | /* |
... | ... | @@ -273,7 +273,7 @@ |
273 | 273 | |
274 | 274 | static inline void receive_chars_pio(struct esp_struct *info, int num_bytes) |
275 | 275 | { |
276 | - struct tty_struct *tty = info->tty; | |
276 | + struct tty_struct *tty = info->port.tty; | |
277 | 277 | int i; |
278 | 278 | struct esp_pio_buffer *pio_buf; |
279 | 279 | struct esp_pio_buffer *err_buf; |
... | ... | @@ -295,7 +295,7 @@ |
295 | 295 | |
296 | 296 | for (i = 0; i < num_bytes - 1; i += 2) { |
297 | 297 | *((unsigned short *)(pio_buf->data + i)) = |
298 | - inw(info->port + UART_ESI_RX); | |
298 | + inw(info->io_port + UART_ESI_RX); | |
299 | 299 | err_buf->data[i] = serial_in(info, UART_ESI_RWS); |
300 | 300 | err_buf->data[i + 1] = (err_buf->data[i] >> 3) & status_mask; |
301 | 301 | err_buf->data[i] &= status_mask; |
... | ... | @@ -308,7 +308,7 @@ |
308 | 308 | } |
309 | 309 | |
310 | 310 | /* make sure everything is still ok since interrupts were enabled */ |
311 | - tty = info->tty; | |
311 | + tty = info->port.tty; | |
312 | 312 | |
313 | 313 | if (!tty) { |
314 | 314 | release_pio_buffer(pio_buf); |
... | ... | @@ -325,7 +325,7 @@ |
325 | 325 | |
326 | 326 | if (err_buf->data[i] & 0x04) { |
327 | 327 | flag = TTY_BREAK; |
328 | - if (info->flags & ASYNC_SAK) | |
328 | + if (info->port.flags & ASYNC_SAK) | |
329 | 329 | do_SAK(tty); |
330 | 330 | } else if (err_buf->data[i] & 0x02) |
331 | 331 | flag = TTY_FRAME; |
... | ... | @@ -370,7 +370,7 @@ |
370 | 370 | static inline void receive_chars_dma_done(struct esp_struct *info, |
371 | 371 | int status) |
372 | 372 | { |
373 | - struct tty_struct *tty = info->tty; | |
373 | + struct tty_struct *tty = info->port.tty; | |
374 | 374 | int num_bytes; |
375 | 375 | unsigned long flags; |
376 | 376 | |
... | ... | @@ -396,7 +396,7 @@ |
396 | 396 | if (status & 0x10) { |
397 | 397 | statflag = TTY_BREAK; |
398 | 398 | (info->icount.brk)++; |
399 | - if (info->flags & ASYNC_SAK) | |
399 | + if (info->port.flags & ASYNC_SAK) | |
400 | 400 | do_SAK(tty); |
401 | 401 | } else if (status & 0x08) { |
402 | 402 | statflag = TTY_FRAME; |
... | ... | @@ -451,7 +451,7 @@ |
451 | 451 | |
452 | 452 | for (i = 0; i < space_avail - 1; i += 2) { |
453 | 453 | outw(*((unsigned short *)(pio_buf->data + i)), |
454 | - info->port + UART_ESI_TX); | |
454 | + info->io_port + UART_ESI_TX); | |
455 | 455 | } |
456 | 456 | |
457 | 457 | if (space_avail & 0x0001) |
... | ... | @@ -470,8 +470,8 @@ |
470 | 470 | } |
471 | 471 | |
472 | 472 | if (info->xmit_cnt < WAKEUP_CHARS) { |
473 | - if (info->tty) | |
474 | - tty_wakeup(info->tty); | |
473 | + if (info->port.tty) | |
474 | + tty_wakeup(info->port.tty); | |
475 | 475 | |
476 | 476 | #ifdef SERIAL_DEBUG_INTR |
477 | 477 | printk("THRE..."); |
... | ... | @@ -507,8 +507,8 @@ |
507 | 507 | info->xmit_tail = (info->xmit_tail + dma_bytes) & (ESP_XMIT_SIZE - 1); |
508 | 508 | |
509 | 509 | if (info->xmit_cnt < WAKEUP_CHARS) { |
510 | - if (info->tty) | |
511 | - tty_wakeup(info->tty); | |
510 | + if (info->port.tty) | |
511 | + tty_wakeup(info->port.tty); | |
512 | 512 | |
513 | 513 | #ifdef SERIAL_DEBUG_INTR |
514 | 514 | printk("THRE..."); |
515 | 515 | |
516 | 516 | |
... | ... | @@ -575,18 +575,18 @@ |
575 | 575 | wake_up_interruptible(&info->delta_msr_wait); |
576 | 576 | } |
577 | 577 | |
578 | - if ((info->flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) { | |
578 | + if ((info->port.flags & ASYNC_CHECK_CD) && (status & UART_MSR_DDCD)) { | |
579 | 579 | #if (defined(SERIAL_DEBUG_OPEN) || defined(SERIAL_DEBUG_INTR)) |
580 | 580 | printk("ttys%d CD now %s...", info->line, |
581 | 581 | (status & UART_MSR_DCD) ? "on" : "off"); |
582 | 582 | #endif |
583 | 583 | if (status & UART_MSR_DCD) |
584 | - wake_up_interruptible(&info->open_wait); | |
584 | + wake_up_interruptible(&info->port.open_wait); | |
585 | 585 | else { |
586 | 586 | #ifdef SERIAL_DEBUG_OPEN |
587 | 587 | printk("scheduling hangup..."); |
588 | 588 | #endif |
589 | - tty_hangup(info->tty); | |
589 | + tty_hangup(info->port.tty); | |
590 | 590 | } |
591 | 591 | } |
592 | 592 | } |
... | ... | @@ -609,7 +609,7 @@ |
609 | 609 | |
610 | 610 | spin_lock(&info->lock); |
611 | 611 | |
612 | - if (!info->tty) { | |
612 | + if (!info->port.tty) { | |
613 | 613 | spin_unlock(&info->lock); |
614 | 614 | return IRQ_NONE; |
615 | 615 | } |
... | ... | @@ -647,7 +647,7 @@ |
647 | 647 | num_bytes = serial_in(info, UART_ESI_STAT1) << 8; |
648 | 648 | num_bytes |= serial_in(info, UART_ESI_STAT2); |
649 | 649 | |
650 | - num_bytes = tty_buffer_request_room(info->tty, num_bytes); | |
650 | + num_bytes = tty_buffer_request_room(info->port.tty, num_bytes); | |
651 | 651 | |
652 | 652 | if (num_bytes) { |
653 | 653 | if (dma_bytes || |
... | ... | @@ -661,7 +661,7 @@ |
661 | 661 | |
662 | 662 | if (!(info->stat_flags & (ESP_STAT_DMA_RX | ESP_STAT_DMA_TX)) && |
663 | 663 | (scratch & 0x02) && (info->IER & UART_IER_THRI)) { |
664 | - if ((info->xmit_cnt <= 0) || info->tty->stopped) { | |
664 | + if ((info->xmit_cnt <= 0) || info->port.tty->stopped) { | |
665 | 665 | info->IER &= ~UART_IER_THRI; |
666 | 666 | serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK); |
667 | 667 | serial_out(info, UART_ESI_CMD2, info->IER); |
... | ... | @@ -782,7 +782,7 @@ |
782 | 782 | |
783 | 783 | spin_lock_irqsave(&info->lock, flags); |
784 | 784 | |
785 | - if (info->flags & ASYNC_INITIALIZED) | |
785 | + if (info->port.flags & ASYNC_INITIALIZED) | |
786 | 786 | goto out; |
787 | 787 | |
788 | 788 | if (!info->xmit_buf) { |
... | ... | @@ -806,7 +806,7 @@ |
806 | 806 | num_chars |= serial_in(info, UART_ESI_STAT2); |
807 | 807 | |
808 | 808 | while (num_chars > 1) { |
809 | - inw(info->port + UART_ESI_RX); | |
809 | + inw(info->io_port + UART_ESI_RX); | |
810 | 810 | num_chars -= 2; |
811 | 811 | } |
812 | 812 | |
813 | 813 | |
... | ... | @@ -834,9 +834,9 @@ |
834 | 834 | |
835 | 835 | if (retval) { |
836 | 836 | if (capable(CAP_SYS_ADMIN)) { |
837 | - if (info->tty) | |
837 | + if (info->port.tty) | |
838 | 838 | set_bit(TTY_IO_ERROR, |
839 | - &info->tty->flags); | |
839 | + &info->port.tty->flags); | |
840 | 840 | retval = 0; |
841 | 841 | } |
842 | 842 | goto out_unlocked; |
843 | 843 | |
844 | 844 | |
... | ... | @@ -874,30 +874,30 @@ |
874 | 874 | serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK); |
875 | 875 | serial_out(info, UART_ESI_CMD2, info->IER); |
876 | 876 | |
877 | - if (info->tty) | |
878 | - clear_bit(TTY_IO_ERROR, &info->tty->flags); | |
877 | + if (info->port.tty) | |
878 | + clear_bit(TTY_IO_ERROR, &info->port.tty->flags); | |
879 | 879 | info->xmit_cnt = info->xmit_head = info->xmit_tail = 0; |
880 | 880 | spin_unlock_irqrestore(&info->lock, flags); |
881 | 881 | |
882 | 882 | /* |
883 | 883 | * Set up the tty->alt_speed kludge |
884 | 884 | */ |
885 | - if (info->tty) { | |
886 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) | |
887 | - info->tty->alt_speed = 57600; | |
888 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) | |
889 | - info->tty->alt_speed = 115200; | |
890 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) | |
891 | - info->tty->alt_speed = 230400; | |
892 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) | |
893 | - info->tty->alt_speed = 460800; | |
885 | + if (info->port.tty) { | |
886 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) | |
887 | + info->port.tty->alt_speed = 57600; | |
888 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) | |
889 | + info->port.tty->alt_speed = 115200; | |
890 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) | |
891 | + info->port.tty->alt_speed = 230400; | |
892 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) | |
893 | + info->port.tty->alt_speed = 460800; | |
894 | 894 | } |
895 | 895 | |
896 | 896 | /* |
897 | 897 | * set the speed of the serial port |
898 | 898 | */ |
899 | 899 | change_speed(info); |
900 | - info->flags |= ASYNC_INITIALIZED; | |
900 | + info->port.flags |= ASYNC_INITIALIZED; | |
901 | 901 | return 0; |
902 | 902 | |
903 | 903 | out: |
... | ... | @@ -914,7 +914,7 @@ |
914 | 914 | { |
915 | 915 | unsigned long flags, f; |
916 | 916 | |
917 | - if (!(info->flags & ASYNC_INITIALIZED)) | |
917 | + if (!(info->port.flags & ASYNC_INITIALIZED)) | |
918 | 918 | return; |
919 | 919 | |
920 | 920 | #ifdef SERIAL_DEBUG_OPEN |
... | ... | @@ -951,7 +951,7 @@ |
951 | 951 | |
952 | 952 | while (current_port) { |
953 | 953 | if ((current_port != info) && |
954 | - (current_port->flags & ASYNC_INITIALIZED)) | |
954 | + (current_port->port.flags & ASYNC_INITIALIZED)) | |
955 | 955 | break; |
956 | 956 | |
957 | 957 | current_port = current_port->next_port; |
... | ... | @@ -974,7 +974,7 @@ |
974 | 974 | serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK); |
975 | 975 | serial_out(info, UART_ESI_CMD2, 0x00); |
976 | 976 | |
977 | - if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) | |
977 | + if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL)) | |
978 | 978 | info->MCR &= ~(UART_MCR_DTR|UART_MCR_RTS); |
979 | 979 | |
980 | 980 | info->MCR &= ~UART_MCR_OUT2; |
981 | 981 | |
... | ... | @@ -982,10 +982,10 @@ |
982 | 982 | serial_out(info, UART_ESI_CMD2, UART_MCR); |
983 | 983 | serial_out(info, UART_ESI_CMD2, info->MCR); |
984 | 984 | |
985 | - if (info->tty) | |
986 | - set_bit(TTY_IO_ERROR, &info->tty->flags); | |
985 | + if (info->port.tty) | |
986 | + set_bit(TTY_IO_ERROR, &info->port.tty->flags); | |
987 | 987 | |
988 | - info->flags &= ~ASYNC_INITIALIZED; | |
988 | + info->port.flags &= ~ASYNC_INITIALIZED; | |
989 | 989 | spin_unlock_irqrestore(&info->lock, flags); |
990 | 990 | } |
991 | 991 | |
992 | 992 | |
... | ... | @@ -1002,10 +1002,10 @@ |
1002 | 1002 | unsigned char flow1 = 0, flow2 = 0; |
1003 | 1003 | unsigned long flags; |
1004 | 1004 | |
1005 | - if (!info->tty || !info->tty->termios) | |
1005 | + if (!info->port.tty || !info->port.tty->termios) | |
1006 | 1006 | return; |
1007 | - cflag = info->tty->termios->c_cflag; | |
1008 | - port = info->port; | |
1007 | + cflag = info->port.tty->termios->c_cflag; | |
1008 | + port = info->io_port; | |
1009 | 1009 | |
1010 | 1010 | /* byte size and parity */ |
1011 | 1011 | switch (cflag & CSIZE) { |
1012 | 1012 | |
... | ... | @@ -1029,9 +1029,9 @@ |
1029 | 1029 | if (cflag & CMSPAR) |
1030 | 1030 | cval |= UART_LCR_SPAR; |
1031 | 1031 | #endif |
1032 | - baud = tty_get_baud_rate(info->tty); | |
1032 | + baud = tty_get_baud_rate(info->port.tty); | |
1033 | 1033 | if (baud == 38400 && |
1034 | - ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)) | |
1034 | + ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)) | |
1035 | 1035 | quot = info->custom_divisor; |
1036 | 1036 | else { |
1037 | 1037 | if (baud == 134) /* Special case since 134 is really 134.5 */ |
1038 | 1038 | |
1039 | 1039 | |
1040 | 1040 | |
1041 | 1041 | |
1042 | 1042 | |
1043 | 1043 | |
1044 | 1044 | |
1045 | 1045 | |
1046 | 1046 | |
... | ... | @@ -1046,49 +1046,49 @@ |
1046 | 1046 | if (baud) { |
1047 | 1047 | /* Actual rate */ |
1048 | 1048 | baud = BASE_BAUD/quot; |
1049 | - tty_encode_baud_rate(info->tty, baud, baud); | |
1049 | + tty_encode_baud_rate(info->port.tty, baud, baud); | |
1050 | 1050 | } |
1051 | 1051 | info->timeout = ((1024 * HZ * bits * quot) / BASE_BAUD) + (HZ / 50); |
1052 | 1052 | |
1053 | 1053 | /* CTS flow control flag and modem status interrupts */ |
1054 | 1054 | /* info->IER &= ~UART_IER_MSI; */ |
1055 | 1055 | if (cflag & CRTSCTS) { |
1056 | - info->flags |= ASYNC_CTS_FLOW; | |
1056 | + info->port.flags |= ASYNC_CTS_FLOW; | |
1057 | 1057 | /* info->IER |= UART_IER_MSI; */ |
1058 | 1058 | flow1 = 0x04; |
1059 | 1059 | flow2 = 0x10; |
1060 | 1060 | } else |
1061 | - info->flags &= ~ASYNC_CTS_FLOW; | |
1061 | + info->port.flags &= ~ASYNC_CTS_FLOW; | |
1062 | 1062 | if (cflag & CLOCAL) |
1063 | - info->flags &= ~ASYNC_CHECK_CD; | |
1063 | + info->port.flags &= ~ASYNC_CHECK_CD; | |
1064 | 1064 | else |
1065 | - info->flags |= ASYNC_CHECK_CD; | |
1065 | + info->port.flags |= ASYNC_CHECK_CD; | |
1066 | 1066 | |
1067 | 1067 | /* |
1068 | 1068 | * Set up parity check flag |
1069 | 1069 | */ |
1070 | 1070 | info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; |
1071 | - if (I_INPCK(info->tty)) | |
1071 | + if (I_INPCK(info->port.tty)) | |
1072 | 1072 | info->read_status_mask |= UART_LSR_FE | UART_LSR_PE; |
1073 | - if (I_BRKINT(info->tty) || I_PARMRK(info->tty)) | |
1073 | + if (I_BRKINT(info->port.tty) || I_PARMRK(info->port.tty)) | |
1074 | 1074 | info->read_status_mask |= UART_LSR_BI; |
1075 | 1075 | |
1076 | 1076 | info->ignore_status_mask = 0; |
1077 | 1077 | #if 0 |
1078 | 1078 | /* This should be safe, but for some broken bits of hardware... */ |
1079 | - if (I_IGNPAR(info->tty)) { | |
1079 | + if (I_IGNPAR(info->port.tty)) { | |
1080 | 1080 | info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; |
1081 | 1081 | info->read_status_mask |= UART_LSR_PE | UART_LSR_FE; |
1082 | 1082 | } |
1083 | 1083 | #endif |
1084 | - if (I_IGNBRK(info->tty)) { | |
1084 | + if (I_IGNBRK(info->port.tty)) { | |
1085 | 1085 | info->ignore_status_mask |= UART_LSR_BI; |
1086 | 1086 | info->read_status_mask |= UART_LSR_BI; |
1087 | 1087 | /* |
1088 | 1088 | * If we're ignore parity and break indicators, ignore |
1089 | 1089 | * overruns too. (For real raw support). |
1090 | 1090 | */ |
1091 | - if (I_IGNPAR(info->tty)) { | |
1091 | + if (I_IGNPAR(info->port.tty)) { | |
1092 | 1092 | info->ignore_status_mask |= UART_LSR_OE | \ |
1093 | 1093 | UART_LSR_PE | UART_LSR_FE; |
1094 | 1094 | info->read_status_mask |= UART_LSR_OE | \ |
... | ... | @@ -1096,7 +1096,7 @@ |
1096 | 1096 | } |
1097 | 1097 | } |
1098 | 1098 | |
1099 | - if (I_IXOFF(info->tty)) | |
1099 | + if (I_IXOFF(info->port.tty)) | |
1100 | 1100 | flow1 |= 0x81; |
1101 | 1101 | |
1102 | 1102 | spin_lock_irqsave(&info->lock, flags); |
1103 | 1103 | |
... | ... | @@ -1116,10 +1116,10 @@ |
1116 | 1116 | serial_out(info, UART_ESI_CMD2, flow2); |
1117 | 1117 | |
1118 | 1118 | /* set flow control characters (XON/XOFF only) */ |
1119 | - if (I_IXOFF(info->tty)) { | |
1119 | + if (I_IXOFF(info->port.tty)) { | |
1120 | 1120 | serial_out(info, UART_ESI_CMD1, ESI_SET_FLOW_CHARS); |
1121 | - serial_out(info, UART_ESI_CMD2, START_CHAR(info->tty)); | |
1122 | - serial_out(info, UART_ESI_CMD2, STOP_CHAR(info->tty)); | |
1121 | + serial_out(info, UART_ESI_CMD2, START_CHAR(info->port.tty)); | |
1122 | + serial_out(info, UART_ESI_CMD2, STOP_CHAR(info->port.tty)); | |
1123 | 1123 | serial_out(info, UART_ESI_CMD2, 0x10); |
1124 | 1124 | serial_out(info, UART_ESI_CMD2, 0x21); |
1125 | 1125 | switch (cflag & CSIZE) { |
1126 | 1126 | |
... | ... | @@ -1355,9 +1355,9 @@ |
1355 | 1355 | memset(&tmp, 0, sizeof(tmp)); |
1356 | 1356 | tmp.type = PORT_16550A; |
1357 | 1357 | tmp.line = info->line; |
1358 | - tmp.port = info->port; | |
1358 | + tmp.port = info->io_port; | |
1359 | 1359 | tmp.irq = info->irq; |
1360 | - tmp.flags = info->flags; | |
1360 | + tmp.flags = info->port.flags; | |
1361 | 1361 | tmp.xmit_fifo_size = 1024; |
1362 | 1362 | tmp.baud_base = BASE_BAUD; |
1363 | 1363 | tmp.close_delay = info->close_delay; |
... | ... | @@ -1407,7 +1407,7 @@ |
1407 | 1407 | |
1408 | 1408 | if ((new_serial.type != PORT_16550A) || |
1409 | 1409 | (new_serial.hub6) || |
1410 | - (info->port != new_serial.port) || | |
1410 | + (info->io_port != new_serial.port) || | |
1411 | 1411 | (new_serial.baud_base != BASE_BAUD) || |
1412 | 1412 | (new_serial.irq > 15) || |
1413 | 1413 | (new_serial.irq < 2) || |
1414 | 1414 | |
... | ... | @@ -1425,9 +1425,9 @@ |
1425 | 1425 | if (change_irq || |
1426 | 1426 | (new_serial.close_delay != info->close_delay) || |
1427 | 1427 | ((new_serial.flags & ~ASYNC_USR_MASK) != |
1428 | - (info->flags & ~ASYNC_USR_MASK))) | |
1428 | + (info->port.flags & ~ASYNC_USR_MASK))) | |
1429 | 1429 | return -EPERM; |
1430 | - info->flags = ((info->flags & ~ASYNC_USR_MASK) | | |
1430 | + info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | | |
1431 | 1431 | (new_serial.flags & ASYNC_USR_MASK)); |
1432 | 1432 | info->custom_divisor = new_serial.custom_divisor; |
1433 | 1433 | } else { |
1434 | 1434 | |
... | ... | @@ -1441,9 +1441,9 @@ |
1441 | 1441 | if ((current_async->line >= info->line) && |
1442 | 1442 | (current_async->line < (info->line + 8))) { |
1443 | 1443 | if (current_async == info) { |
1444 | - if (current_async->count > 1) | |
1444 | + if (current_async->port.count > 1) | |
1445 | 1445 | return -EBUSY; |
1446 | - } else if (current_async->count) | |
1446 | + } else if (current_async->port.count) | |
1447 | 1447 | return -EBUSY; |
1448 | 1448 | } |
1449 | 1449 | |
... | ... | @@ -1456,7 +1456,7 @@ |
1456 | 1456 | * At this point, we start making changes..... |
1457 | 1457 | */ |
1458 | 1458 | |
1459 | - info->flags = ((info->flags & ~ASYNC_FLAGS) | | |
1459 | + info->port.flags = ((info->port.flags & ~ASYNC_FLAGS) | | |
1460 | 1460 | (new_serial.flags & ASYNC_FLAGS)); |
1461 | 1461 | info->custom_divisor = new_serial.custom_divisor; |
1462 | 1462 | info->close_delay = new_serial.close_delay * HZ/100; |
1463 | 1463 | |
... | ... | @@ -1487,18 +1487,18 @@ |
1487 | 1487 | } |
1488 | 1488 | } |
1489 | 1489 | |
1490 | - if (info->flags & ASYNC_INITIALIZED) { | |
1491 | - if (((old_info.flags & ASYNC_SPD_MASK) != | |
1492 | - (info->flags & ASYNC_SPD_MASK)) || | |
1490 | + if (info->port.flags & ASYNC_INITIALIZED) { | |
1491 | + if (((old_info.port.flags & ASYNC_SPD_MASK) != | |
1492 | + (info->port.flags & ASYNC_SPD_MASK)) || | |
1493 | 1493 | (old_info.custom_divisor != info->custom_divisor)) { |
1494 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) | |
1495 | - info->tty->alt_speed = 57600; | |
1496 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) | |
1497 | - info->tty->alt_speed = 115200; | |
1498 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) | |
1499 | - info->tty->alt_speed = 230400; | |
1500 | - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) | |
1501 | - info->tty->alt_speed = 460800; | |
1494 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) | |
1495 | + info->port.tty->alt_speed = 57600; | |
1496 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) | |
1497 | + info->port.tty->alt_speed = 115200; | |
1498 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI) | |
1499 | + info->port.tty->alt_speed = 230400; | |
1500 | + if ((info->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP) | |
1501 | + info->port.tty->alt_speed = 460800; | |
1502 | 1502 | change_speed(info); |
1503 | 1503 | } |
1504 | 1504 | } else |
1505 | 1505 | |
... | ... | @@ -1554,9 +1554,9 @@ |
1554 | 1554 | |
1555 | 1555 | while (current_async) { |
1556 | 1556 | if (current_async == info) { |
1557 | - if (current_async->count > 1) | |
1557 | + if (current_async->port.count > 1) | |
1558 | 1558 | return -EBUSY; |
1559 | - } else if (current_async->count) | |
1559 | + } else if (current_async->port.count) | |
1560 | 1560 | return -EBUSY; |
1561 | 1561 | |
1562 | 1562 | current_async = current_async->next_port; |
... | ... | @@ -1578,7 +1578,7 @@ |
1578 | 1578 | spin_unlock_irqrestore(&info->lock, flags); |
1579 | 1579 | } else { |
1580 | 1580 | /* DMA mode to PIO mode only */ |
1581 | - if (info->count > 1) | |
1581 | + if (info->port.count > 1) | |
1582 | 1582 | return -EBUSY; |
1583 | 1583 | |
1584 | 1584 | shutdown(info); |
... | ... | @@ -1634,7 +1634,7 @@ |
1634 | 1634 | spin_unlock_irqrestore(&info->lock, flags); |
1635 | 1635 | } |
1636 | 1636 | |
1637 | - if (!(info->flags & ASYNC_INITIALIZED)) | |
1637 | + if (!(info->port.flags & ASYNC_INITIALIZED)) | |
1638 | 1638 | retval = startup(info); |
1639 | 1639 | |
1640 | 1640 | return retval; |
1641 | 1641 | |
... | ... | @@ -1917,9 +1917,9 @@ |
1917 | 1917 | |
1918 | 1918 | #ifdef SERIAL_DEBUG_OPEN |
1919 | 1919 | printk(KERN_DEBUG "rs_close ttys%d, count = %d\n", |
1920 | - info->line, info->count); | |
1920 | + info->line, info->port.count); | |
1921 | 1921 | #endif |
1922 | - if (tty->count == 1 && info->count != 1) { | |
1922 | + if (tty->count == 1 && info->port.count != 1) { | |
1923 | 1923 | /* |
1924 | 1924 | * Uh, oh. tty->count is 1, which means that the tty |
1925 | 1925 | * structure will be freed. Info->count should always |
1926 | 1926 | |
1927 | 1927 | |
1928 | 1928 | |
1929 | 1929 | |
... | ... | @@ -1927,19 +1927,19 @@ |
1927 | 1927 | * one, we've got real problems, since it means the |
1928 | 1928 | * serial port won't be shutdown. |
1929 | 1929 | */ |
1930 | - printk(KERN_DEBUG "rs_close: bad serial port count; tty->count is 1, info->count is %d\n", info->count); | |
1931 | - info->count = 1; | |
1930 | + printk(KERN_DEBUG "rs_close: bad serial port count; tty->count is 1, info->port.count is %d\n", info->port.count); | |
1931 | + info->port.count = 1; | |
1932 | 1932 | } |
1933 | - if (--info->count < 0) { | |
1933 | + if (--info->port.count < 0) { | |
1934 | 1934 | printk(KERN_ERR "rs_close: bad serial port count for ttys%d: %d\n", |
1935 | - info->line, info->count); | |
1936 | - info->count = 0; | |
1935 | + info->line, info->port.count); | |
1936 | + info->port.count = 0; | |
1937 | 1937 | } |
1938 | - if (info->count) { | |
1938 | + if (info->port.count) { | |
1939 | 1939 | DBG_CNT("before DEC-2"); |
1940 | 1940 | goto out; |
1941 | 1941 | } |
1942 | - info->flags |= ASYNC_CLOSING; | |
1942 | + info->port.flags |= ASYNC_CLOSING; | |
1943 | 1943 | |
1944 | 1944 | spin_unlock_irqrestore(&info->lock, flags); |
1945 | 1945 | /* |
... | ... | @@ -1958,7 +1958,7 @@ |
1958 | 1958 | /* info->IER &= ~UART_IER_RLSI; */ |
1959 | 1959 | info->IER &= ~UART_IER_RDI; |
1960 | 1960 | info->read_status_mask &= ~UART_LSR_DR; |
1961 | - if (info->flags & ASYNC_INITIALIZED) { | |
1961 | + if (info->port.flags & ASYNC_INITIALIZED) { | |
1962 | 1962 | |
1963 | 1963 | spin_lock_irqsave(&info->lock, flags); |
1964 | 1964 | serial_out(info, UART_ESI_CMD1, ESI_SET_SRV_MASK); |
1965 | 1965 | |
1966 | 1966 | |
1967 | 1967 | |
... | ... | @@ -1981,15 +1981,15 @@ |
1981 | 1981 | rs_flush_buffer(tty); |
1982 | 1982 | tty_ldisc_flush(tty); |
1983 | 1983 | tty->closing = 0; |
1984 | - info->tty = NULL; | |
1984 | + info->port.tty = NULL; | |
1985 | 1985 | |
1986 | - if (info->blocked_open) { | |
1986 | + if (info->port.blocked_open) { | |
1987 | 1987 | if (info->close_delay) |
1988 | 1988 | msleep_interruptible(jiffies_to_msecs(info->close_delay)); |
1989 | - wake_up_interruptible(&info->open_wait); | |
1989 | + wake_up_interruptible(&info->port.open_wait); | |
1990 | 1990 | } |
1991 | - info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); | |
1992 | - wake_up_interruptible(&info->close_wait); | |
1991 | + info->port.flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); | |
1992 | + wake_up_interruptible(&info->port.close_wait); | |
1993 | 1993 | return; |
1994 | 1994 | |
1995 | 1995 | out: |
... | ... | @@ -2047,10 +2047,10 @@ |
2047 | 2047 | |
2048 | 2048 | rs_flush_buffer(tty); |
2049 | 2049 | shutdown(info); |
2050 | - info->count = 0; | |
2051 | - info->flags &= ~ASYNC_NORMAL_ACTIVE; | |
2052 | - info->tty = NULL; | |
2053 | - wake_up_interruptible(&info->open_wait); | |
2050 | + info->port.count = 0; | |
2051 | + info->port.flags &= ~ASYNC_NORMAL_ACTIVE; | |
2052 | + info->port.tty = NULL; | |
2053 | + wake_up_interruptible(&info->port.open_wait); | |
2054 | 2054 | } |
2055 | 2055 | |
2056 | 2056 | /* |
2057 | 2057 | |
... | ... | @@ -2071,11 +2071,11 @@ |
2071 | 2071 | * until it's done, and then try again. |
2072 | 2072 | */ |
2073 | 2073 | if (tty_hung_up_p(filp) || |
2074 | - (info->flags & ASYNC_CLOSING)) { | |
2075 | - if (info->flags & ASYNC_CLOSING) | |
2076 | - interruptible_sleep_on(&info->close_wait); | |
2074 | + (info->port.flags & ASYNC_CLOSING)) { | |
2075 | + if (info->port.flags & ASYNC_CLOSING) | |
2076 | + interruptible_sleep_on(&info->port.close_wait); | |
2077 | 2077 | #ifdef SERIAL_DO_RESTART |
2078 | - if (info->flags & ASYNC_HUP_NOTIFY) | |
2078 | + if (info->port.flags & ASYNC_HUP_NOTIFY) | |
2079 | 2079 | return -EAGAIN; |
2080 | 2080 | else |
2081 | 2081 | return -ERESTARTSYS; |
... | ... | @@ -2090,7 +2090,7 @@ |
2090 | 2090 | */ |
2091 | 2091 | if ((filp->f_flags & O_NONBLOCK) || |
2092 | 2092 | (tty->flags & (1 << TTY_IO_ERROR))) { |
2093 | - info->flags |= ASYNC_NORMAL_ACTIVE; | |
2093 | + info->port.flags |= ASYNC_NORMAL_ACTIVE; | |
2094 | 2094 | return 0; |
2095 | 2095 | } |
2096 | 2096 | |
2097 | 2097 | |
2098 | 2098 | |
2099 | 2099 | |
... | ... | @@ -2100,20 +2100,20 @@ |
2100 | 2100 | /* |
2101 | 2101 | * Block waiting for the carrier detect and the line to become |
2102 | 2102 | * free (i.e., not in use by the callout). While we are in |
2103 | - * this loop, info->count is dropped by one, so that | |
2103 | + * this loop, info->port.count is dropped by one, so that | |
2104 | 2104 | * rs_close() knows when to free things. We restore it upon |
2105 | 2105 | * exit, either normal or abnormal. |
2106 | 2106 | */ |
2107 | 2107 | retval = 0; |
2108 | - add_wait_queue(&info->open_wait, &wait); | |
2108 | + add_wait_queue(&info->port.open_wait, &wait); | |
2109 | 2109 | #ifdef SERIAL_DEBUG_OPEN |
2110 | 2110 | printk(KERN_DEBUG "block_til_ready before block: ttys%d, count = %d\n", |
2111 | - info->line, info->count); | |
2111 | + info->line, info->port.count); | |
2112 | 2112 | #endif |
2113 | 2113 | spin_lock_irqsave(&info->lock, flags); |
2114 | 2114 | if (!tty_hung_up_p(filp)) |
2115 | - info->count--; | |
2116 | - info->blocked_open++; | |
2115 | + info->port.count--; | |
2116 | + info->port.blocked_open++; | |
2117 | 2117 | while (1) { |
2118 | 2118 | if ((tty->termios->c_cflag & CBAUD)) { |
2119 | 2119 | unsigned int scratch; |
2120 | 2120 | |
... | ... | @@ -2128,9 +2128,9 @@ |
2128 | 2128 | } |
2129 | 2129 | set_current_state(TASK_INTERRUPTIBLE); |
2130 | 2130 | if (tty_hung_up_p(filp) || |
2131 | - !(info->flags & ASYNC_INITIALIZED)) { | |
2131 | + !(info->port.flags & ASYNC_INITIALIZED)) { | |
2132 | 2132 | #ifdef SERIAL_DO_RESTART |
2133 | - if (info->flags & ASYNC_HUP_NOTIFY) | |
2133 | + if (info->port.flags & ASYNC_HUP_NOTIFY) | |
2134 | 2134 | retval = -EAGAIN; |
2135 | 2135 | else |
2136 | 2136 | retval = -ERESTARTSYS; |
... | ... | @@ -2144,7 +2144,7 @@ |
2144 | 2144 | if (serial_in(info, UART_ESI_STAT2) & UART_MSR_DCD) |
2145 | 2145 | do_clocal = 1; |
2146 | 2146 | |
2147 | - if (!(info->flags & ASYNC_CLOSING) && | |
2147 | + if (!(info->port.flags & ASYNC_CLOSING) && | |
2148 | 2148 | (do_clocal)) |
2149 | 2149 | break; |
2150 | 2150 | if (signal_pending(current)) { |
2151 | 2151 | |
2152 | 2152 | |
2153 | 2153 | |
2154 | 2154 | |
... | ... | @@ -2153,25 +2153,25 @@ |
2153 | 2153 | } |
2154 | 2154 | #ifdef SERIAL_DEBUG_OPEN |
2155 | 2155 | printk(KERN_DEBUG "block_til_ready blocking: ttys%d, count = %d\n", |
2156 | - info->line, info->count); | |
2156 | + info->line, info->port.count); | |
2157 | 2157 | #endif |
2158 | 2158 | spin_unlock_irqrestore(&info->lock, flags); |
2159 | 2159 | schedule(); |
2160 | 2160 | spin_lock_irqsave(&info->lock, flags); |
2161 | 2161 | } |
2162 | 2162 | set_current_state(TASK_RUNNING); |
2163 | - remove_wait_queue(&info->open_wait, &wait); | |
2163 | + remove_wait_queue(&info->port.open_wait, &wait); | |
2164 | 2164 | if (!tty_hung_up_p(filp)) |
2165 | - info->count++; | |
2166 | - info->blocked_open--; | |
2165 | + info->port.count++; | |
2166 | + info->port.blocked_open--; | |
2167 | 2167 | spin_unlock_irqrestore(&info->lock, flags); |
2168 | 2168 | #ifdef SERIAL_DEBUG_OPEN |
2169 | 2169 | printk(KERN_DEBUG "block_til_ready after blocking: ttys%d, count = %d\n", |
2170 | - info->line, info->count); | |
2170 | + info->line, info->port.count); | |
2171 | 2171 | #endif |
2172 | 2172 | if (retval) |
2173 | 2173 | return retval; |
2174 | - info->flags |= ASYNC_NORMAL_ACTIVE; | |
2174 | + info->port.flags |= ASYNC_NORMAL_ACTIVE; | |
2175 | 2175 | return 0; |
2176 | 2176 | } |
2177 | 2177 | |
2178 | 2178 | |
2179 | 2179 | |
... | ... | @@ -2204,12 +2204,12 @@ |
2204 | 2204 | } |
2205 | 2205 | |
2206 | 2206 | #ifdef SERIAL_DEBUG_OPEN |
2207 | - printk(KERN_DEBUG "esp_open %s, count = %d\n", tty->name, info->count); | |
2207 | + printk(KERN_DEBUG "esp_open %s, count = %d\n", tty->name, info->port.count); | |
2208 | 2208 | #endif |
2209 | 2209 | spin_lock_irqsave(&info->lock, flags); |
2210 | - info->count++; | |
2210 | + info->port.count++; | |
2211 | 2211 | tty->driver_data = info; |
2212 | - info->tty = tty; | |
2212 | + info->port.tty = tty; | |
2213 | 2213 | |
2214 | 2214 | spin_unlock_irqrestore(&info->lock, flags); |
2215 | 2215 | |
... | ... | @@ -2263,7 +2263,7 @@ |
2263 | 2263 | int port_detected = 0; |
2264 | 2264 | unsigned long flags; |
2265 | 2265 | |
2266 | - if (!request_region(info->port, REGION_SIZE, "esp serial")) | |
2266 | + if (!request_region(info->io_port, REGION_SIZE, "esp serial")) | |
2267 | 2267 | return -EIO; |
2268 | 2268 | |
2269 | 2269 | spin_lock_irqsave(&info->lock, flags); |
... | ... | @@ -2300,7 +2300,7 @@ |
2300 | 2300 | } |
2301 | 2301 | } |
2302 | 2302 | if (!port_detected) |
2303 | - release_region(info->port, REGION_SIZE); | |
2303 | + release_region(info->io_port, REGION_SIZE); | |
2304 | 2304 | |
2305 | 2305 | spin_unlock_irqrestore(&info->lock, flags); |
2306 | 2306 | return (port_detected); |
... | ... | @@ -2414,7 +2414,7 @@ |
2414 | 2414 | offset = 0; |
2415 | 2415 | |
2416 | 2416 | do { |
2417 | - info->port = esp[i] + offset; | |
2417 | + info->io_port = esp[i] + offset; | |
2418 | 2418 | info->irq = irq[i]; |
2419 | 2419 | info->line = (i * 8) + (offset / 8); |
2420 | 2420 | |
2421 | 2421 | |
... | ... | @@ -2425,9 +2425,9 @@ |
2425 | 2425 | } |
2426 | 2426 | |
2427 | 2427 | info->custom_divisor = (divisor[i] >> (offset / 2)) & 0xf; |
2428 | - info->flags = STD_COM_FLAGS; | |
2428 | + info->port.flags = STD_COM_FLAGS; | |
2429 | 2429 | if (info->custom_divisor) |
2430 | - info->flags |= ASYNC_SPD_CUST; | |
2430 | + info->port.flags |= ASYNC_SPD_CUST; | |
2431 | 2431 | info->magic = ESP_MAGIC; |
2432 | 2432 | info->close_delay = 5*HZ/10; |
2433 | 2433 | info->closing_wait = 30*HZ; |
2434 | 2434 | |
... | ... | @@ -2436,13 +2436,13 @@ |
2436 | 2436 | info->config.flow_off = flow_off; |
2437 | 2437 | info->config.pio_threshold = pio_threshold; |
2438 | 2438 | info->next_port = ports; |
2439 | - init_waitqueue_head(&info->open_wait); | |
2440 | - init_waitqueue_head(&info->close_wait); | |
2439 | + init_waitqueue_head(&info->port.open_wait); | |
2440 | + init_waitqueue_head(&info->port.close_wait); | |
2441 | 2441 | init_waitqueue_head(&info->delta_msr_wait); |
2442 | 2442 | init_waitqueue_head(&info->break_wait); |
2443 | 2443 | ports = info; |
2444 | 2444 | printk(KERN_INFO "ttyP%d at 0x%04x (irq = %d) is an ESP ", |
2445 | - info->line, info->port, info->irq); | |
2445 | + info->line, info->io_port, info->irq); | |
2446 | 2446 | |
2447 | 2447 | if (info->line % 8) { |
2448 | 2448 | printk("secondary port\n"); |
... | ... | @@ -2498,8 +2498,8 @@ |
2498 | 2498 | put_tty_driver(esp_driver); |
2499 | 2499 | |
2500 | 2500 | while (ports) { |
2501 | - if (ports->port) | |
2502 | - release_region(ports->port, REGION_SIZE); | |
2501 | + if (ports->io_port) | |
2502 | + release_region(ports->io_port, REGION_SIZE); | |
2503 | 2503 | temp_async = ports->next_port; |
2504 | 2504 | kfree(ports); |
2505 | 2505 | ports = temp_async; |
include/linux/hayesesp.h
... | ... | @@ -76,11 +76,10 @@ |
76 | 76 | |
77 | 77 | struct esp_struct { |
78 | 78 | int magic; |
79 | + struct tty_port port; | |
79 | 80 | spinlock_t lock; |
80 | - int port; | |
81 | + int io_port; | |
81 | 82 | int irq; |
82 | - int flags; /* defined in tty.h */ | |
83 | - struct tty_struct *tty; | |
84 | 83 | int read_status_mask; |
85 | 84 | int ignore_status_mask; |
86 | 85 | int timeout; |
87 | 86 | |
... | ... | @@ -93,14 +92,10 @@ |
93 | 92 | int MCR; /* Modem control register */ |
94 | 93 | unsigned long last_active; |
95 | 94 | int line; |
96 | - int count; /* # of fd on device */ | |
97 | - int blocked_open; /* # of blocked opens */ | |
98 | 95 | unsigned char *xmit_buf; |
99 | 96 | int xmit_head; |
100 | 97 | int xmit_tail; |
101 | 98 | int xmit_cnt; |
102 | - wait_queue_head_t open_wait; | |
103 | - wait_queue_head_t close_wait; | |
104 | 99 | wait_queue_head_t delta_msr_wait; |
105 | 100 | wait_queue_head_t break_wait; |
106 | 101 | struct async_icount icount; /* kernel counters for the 4 input interrupts */ |