aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/serial/serial_core.c288
1 files changed, 146 insertions, 142 deletions
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 2d63b13e2f7e..0ffefb3f1d8f 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -141,7 +141,8 @@ uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)
141 */ 141 */
142static int uart_startup(struct uart_state *state, int init_hw) 142static int uart_startup(struct uart_state *state, int init_hw)
143{ 143{
144 struct uart_port *port = state->uart_port; 144 struct uart_port *uport = state->uart_port;
145 struct tty_port *port = &state->port;
145 unsigned long page; 146 unsigned long page;
146 int retval = 0; 147 int retval = 0;
147 148
@@ -153,9 +154,9 @@ static int uart_startup(struct uart_state *state, int init_hw)
153 * once we have successfully opened the port. Also set 154 * once we have successfully opened the port. Also set
154 * up the tty->alt_speed kludge 155 * up the tty->alt_speed kludge
155 */ 156 */
156 set_bit(TTY_IO_ERROR, &state->port.tty->flags); 157 set_bit(TTY_IO_ERROR, &port->tty->flags);
157 158
158 if (port->type == PORT_UNKNOWN) 159 if (uport->type == PORT_UNKNOWN)
159 return 0; 160 return 0;
160 161
161 /* 162 /*
@@ -172,7 +173,7 @@ static int uart_startup(struct uart_state *state, int init_hw)
172 uart_circ_clear(&state->xmit); 173 uart_circ_clear(&state->xmit);
173 } 174 }
174 175
175 retval = port->ops->startup(port); 176 retval = uport->ops->startup(uport);
176 if (retval == 0) { 177 if (retval == 0) {
177 if (init_hw) { 178 if (init_hw) {
178 /* 179 /*
@@ -184,20 +185,20 @@ static int uart_startup(struct uart_state *state, int init_hw)
184 * Setup the RTS and DTR signals once the 185 * Setup the RTS and DTR signals once the
185 * port is open and ready to respond. 186 * port is open and ready to respond.
186 */ 187 */
187 if (state->port.tty->termios->c_cflag & CBAUD) 188 if (port->tty->termios->c_cflag & CBAUD)
188 uart_set_mctrl(port, TIOCM_RTS | TIOCM_DTR); 189 uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
189 } 190 }
190 191
191 if (state->flags & UIF_CTS_FLOW) { 192 if (state->flags & UIF_CTS_FLOW) {
192 spin_lock_irq(&port->lock); 193 spin_lock_irq(&uport->lock);
193 if (!(port->ops->get_mctrl(port) & TIOCM_CTS)) 194 if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
194 state->port.tty->hw_stopped = 1; 195 port->tty->hw_stopped = 1;
195 spin_unlock_irq(&port->lock); 196 spin_unlock_irq(&uport->lock);
196 } 197 }
197 198
198 state->flags |= UIF_INITIALIZED; 199 state->flags |= UIF_INITIALIZED;
199 200
200 clear_bit(TTY_IO_ERROR, &state->port.tty->flags); 201 clear_bit(TTY_IO_ERROR, &port->tty->flags);
201 } 202 }
202 203
203 if (retval && capable(CAP_SYS_ADMIN)) 204 if (retval && capable(CAP_SYS_ADMIN))
@@ -672,7 +673,8 @@ static int uart_set_info(struct uart_state *state,
672 struct serial_struct __user *newinfo) 673 struct serial_struct __user *newinfo)
673{ 674{
674 struct serial_struct new_serial; 675 struct serial_struct new_serial;
675 struct uart_port *port = state->uart_port; 676 struct uart_port *uport = state->uart_port;
677 struct tty_port *port = &state->port;
676 unsigned long new_port; 678 unsigned long new_port;
677 unsigned int change_irq, change_port, closing_wait; 679 unsigned int change_irq, change_port, closing_wait;
678 unsigned int old_custom_divisor, close_delay; 680 unsigned int old_custom_divisor, close_delay;
@@ -700,47 +702,47 @@ static int uart_set_info(struct uart_state *state,
700 */ 702 */
701 mutex_lock(&state->mutex); 703 mutex_lock(&state->mutex);
702 704
703 change_irq = !(port->flags & UPF_FIXED_PORT) 705 change_irq = !(uport->flags & UPF_FIXED_PORT)
704 && new_serial.irq != port->irq; 706 && new_serial.irq != uport->irq;
705 707
706 /* 708 /*
707 * Since changing the 'type' of the port changes its resource 709 * Since changing the 'type' of the port changes its resource
708 * allocations, we should treat type changes the same as 710 * allocations, we should treat type changes the same as
709 * IO port changes. 711 * IO port changes.
710 */ 712 */
711 change_port = !(port->flags & UPF_FIXED_PORT) 713 change_port = !(uport->flags & UPF_FIXED_PORT)
712 && (new_port != port->iobase || 714 && (new_port != uport->iobase ||
713 (unsigned long)new_serial.iomem_base != port->mapbase || 715 (unsigned long)new_serial.iomem_base != uport->mapbase ||
714 new_serial.hub6 != port->hub6 || 716 new_serial.hub6 != uport->hub6 ||
715 new_serial.io_type != port->iotype || 717 new_serial.io_type != uport->iotype ||
716 new_serial.iomem_reg_shift != port->regshift || 718 new_serial.iomem_reg_shift != uport->regshift ||
717 new_serial.type != port->type); 719 new_serial.type != uport->type);
718 720
719 old_flags = port->flags; 721 old_flags = uport->flags;
720 new_flags = new_serial.flags; 722 new_flags = new_serial.flags;
721 old_custom_divisor = port->custom_divisor; 723 old_custom_divisor = uport->custom_divisor;
722 724
723 if (!capable(CAP_SYS_ADMIN)) { 725 if (!capable(CAP_SYS_ADMIN)) {
724 retval = -EPERM; 726 retval = -EPERM;
725 if (change_irq || change_port || 727 if (change_irq || change_port ||
726 (new_serial.baud_base != port->uartclk / 16) || 728 (new_serial.baud_base != uport->uartclk / 16) ||
727 (close_delay != state->port.close_delay) || 729 (close_delay != port->close_delay) ||
728 (closing_wait != state->port.closing_wait) || 730 (closing_wait != port->closing_wait) ||
729 (new_serial.xmit_fifo_size && 731 (new_serial.xmit_fifo_size &&
730 new_serial.xmit_fifo_size != port->fifosize) || 732 new_serial.xmit_fifo_size != uport->fifosize) ||
731 (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0)) 733 (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
732 goto exit; 734 goto exit;
733 port->flags = ((port->flags & ~UPF_USR_MASK) | 735 uport->flags = ((uport->flags & ~UPF_USR_MASK) |
734 (new_flags & UPF_USR_MASK)); 736 (new_flags & UPF_USR_MASK));
735 port->custom_divisor = new_serial.custom_divisor; 737 uport->custom_divisor = new_serial.custom_divisor;
736 goto check_and_exit; 738 goto check_and_exit;
737 } 739 }
738 740
739 /* 741 /*
740 * Ask the low level driver to verify the settings. 742 * Ask the low level driver to verify the settings.
741 */ 743 */
742 if (port->ops->verify_port) 744 if (uport->ops->verify_port)
743 retval = port->ops->verify_port(port, &new_serial); 745 retval = uport->ops->verify_port(uport, &new_serial);
744 746
745 if ((new_serial.irq >= nr_irqs) || (new_serial.irq < 0) || 747 if ((new_serial.irq >= nr_irqs) || (new_serial.irq < 0) ||
746 (new_serial.baud_base < 9600)) 748 (new_serial.baud_base < 9600))
@@ -769,31 +771,31 @@ static int uart_set_info(struct uart_state *state,
769 unsigned long old_iobase, old_mapbase; 771 unsigned long old_iobase, old_mapbase;
770 unsigned int old_type, old_iotype, old_hub6, old_shift; 772 unsigned int old_type, old_iotype, old_hub6, old_shift;
771 773
772 old_iobase = port->iobase; 774 old_iobase = uport->iobase;
773 old_mapbase = port->mapbase; 775 old_mapbase = uport->mapbase;
774 old_type = port->type; 776 old_type = uport->type;
775 old_hub6 = port->hub6; 777 old_hub6 = uport->hub6;
776 old_iotype = port->iotype; 778 old_iotype = uport->iotype;
777 old_shift = port->regshift; 779 old_shift = uport->regshift;
778 780
779 /* 781 /*
780 * Free and release old regions 782 * Free and release old regions
781 */ 783 */
782 if (old_type != PORT_UNKNOWN) 784 if (old_type != PORT_UNKNOWN)
783 port->ops->release_port(port); 785 uport->ops->release_port(uport);
784 786
785 port->iobase = new_port; 787 uport->iobase = new_port;
786 port->type = new_serial.type; 788 uport->type = new_serial.type;
787 port->hub6 = new_serial.hub6; 789 uport->hub6 = new_serial.hub6;
788 port->iotype = new_serial.io_type; 790 uport->iotype = new_serial.io_type;
789 port->regshift = new_serial.iomem_reg_shift; 791 uport->regshift = new_serial.iomem_reg_shift;
790 port->mapbase = (unsigned long)new_serial.iomem_base; 792 uport->mapbase = (unsigned long)new_serial.iomem_base;
791 793
792 /* 794 /*
793 * Claim and map the new regions 795 * Claim and map the new regions
794 */ 796 */
795 if (port->type != PORT_UNKNOWN) { 797 if (uport->type != PORT_UNKNOWN) {
796 retval = port->ops->request_port(port); 798 retval = uport->ops->request_port(uport);
797 } else { 799 } else {
798 /* Always success - Jean II */ 800 /* Always success - Jean II */
799 retval = 0; 801 retval = 0;
@@ -804,19 +806,19 @@ static int uart_set_info(struct uart_state *state,
804 * new port, try to restore the old settings. 806 * new port, try to restore the old settings.
805 */ 807 */
806 if (retval && old_type != PORT_UNKNOWN) { 808 if (retval && old_type != PORT_UNKNOWN) {
807 port->iobase = old_iobase; 809 uport->iobase = old_iobase;
808 port->type = old_type; 810 uport->type = old_type;
809 port->hub6 = old_hub6; 811 uport->hub6 = old_hub6;
810 port->iotype = old_iotype; 812 uport->iotype = old_iotype;
811 port->regshift = old_shift; 813 uport->regshift = old_shift;
812 port->mapbase = old_mapbase; 814 uport->mapbase = old_mapbase;
813 retval = port->ops->request_port(port); 815 retval = uport->ops->request_port(uport);
814 /* 816 /*
815 * If we failed to restore the old settings, 817 * If we failed to restore the old settings,
816 * we fail like this. 818 * we fail like this.
817 */ 819 */
818 if (retval) 820 if (retval)
819 port->type = PORT_UNKNOWN; 821 uport->type = PORT_UNKNOWN;
820 822
821 /* 823 /*
822 * We failed anyway. 824 * We failed anyway.
@@ -828,38 +830,38 @@ static int uart_set_info(struct uart_state *state,
828 } 830 }
829 831
830 if (change_irq) 832 if (change_irq)
831 port->irq = new_serial.irq; 833 uport->irq = new_serial.irq;
832 if (!(port->flags & UPF_FIXED_PORT)) 834 if (!(uport->flags & UPF_FIXED_PORT))
833 port->uartclk = new_serial.baud_base * 16; 835 uport->uartclk = new_serial.baud_base * 16;
834 port->flags = (port->flags & ~UPF_CHANGE_MASK) | 836 uport->flags = (uport->flags & ~UPF_CHANGE_MASK) |
835 (new_flags & UPF_CHANGE_MASK); 837 (new_flags & UPF_CHANGE_MASK);
836 port->custom_divisor = new_serial.custom_divisor; 838 uport->custom_divisor = new_serial.custom_divisor;
837 state->port.close_delay = close_delay; 839 port->close_delay = close_delay;
838 state->port.closing_wait = closing_wait; 840 port->closing_wait = closing_wait;
839 if (new_serial.xmit_fifo_size) 841 if (new_serial.xmit_fifo_size)
840 port->fifosize = new_serial.xmit_fifo_size; 842 uport->fifosize = new_serial.xmit_fifo_size;
841 if (state->port.tty) 843 if (port->tty)
842 state->port.tty->low_latency = 844 port->tty->low_latency =
843 (port->flags & UPF_LOW_LATENCY) ? 1 : 0; 845 (uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
844 846
845 check_and_exit: 847 check_and_exit:
846 retval = 0; 848 retval = 0;
847 if (port->type == PORT_UNKNOWN) 849 if (uport->type == PORT_UNKNOWN)
848 goto exit; 850 goto exit;
849 if (state->flags & UIF_INITIALIZED) { 851 if (state->flags & UIF_INITIALIZED) {
850 if (((old_flags ^ port->flags) & UPF_SPD_MASK) || 852 if (((old_flags ^ uport->flags) & UPF_SPD_MASK) ||
851 old_custom_divisor != port->custom_divisor) { 853 old_custom_divisor != uport->custom_divisor) {
852 /* 854 /*
853 * If they're setting up a custom divisor or speed, 855 * If they're setting up a custom divisor or speed,
854 * instead of clearing it, then bitch about it. No 856 * instead of clearing it, then bitch about it. No
855 * need to rate-limit; it's CAP_SYS_ADMIN only. 857 * need to rate-limit; it's CAP_SYS_ADMIN only.
856 */ 858 */
857 if (port->flags & UPF_SPD_MASK) { 859 if (uport->flags & UPF_SPD_MASK) {
858 char buf[64]; 860 char buf[64];
859 printk(KERN_NOTICE 861 printk(KERN_NOTICE
860 "%s sets custom speed on %s. This " 862 "%s sets custom speed on %s. This "
861 "is deprecated.\n", current->comm, 863 "is deprecated.\n", current->comm,
862 tty_name(state->port.tty, buf)); 864 tty_name(port->tty, buf));
863 } 865 }
864 uart_change_speed(state, NULL); 866 uart_change_speed(state, NULL);
865 } 867 }
@@ -878,10 +880,11 @@ static int uart_set_info(struct uart_state *state,
878static int uart_get_lsr_info(struct uart_state *state, 880static int uart_get_lsr_info(struct uart_state *state,
879 unsigned int __user *value) 881 unsigned int __user *value)
880{ 882{
881 struct uart_port *port = state->uart_port; 883 struct uart_port *uport = state->uart_port;
884 struct tty_port *port = &state->port;
882 unsigned int result; 885 unsigned int result;
883 886
884 result = port->ops->tx_empty(port); 887 result = uport->ops->tx_empty(uport);
885 888
886 /* 889 /*
887 * If we're about to load something into the transmit 890 * If we're about to load something into the transmit
@@ -889,9 +892,9 @@ static int uart_get_lsr_info(struct uart_state *state,
889 * avoid a race condition (depending on when the transmit 892 * avoid a race condition (depending on when the transmit
890 * interrupt happens). 893 * interrupt happens).
891 */ 894 */
892 if (port->x_char || 895 if (uport->x_char ||
893 ((uart_circ_chars_pending(&state->xmit) > 0) && 896 ((uart_circ_chars_pending(&state->xmit) > 0) &&
894 !state->port.tty->stopped && !state->port.tty->hw_stopped)) 897 !port->tty->stopped && !port->tty->hw_stopped))
895 result &= ~TIOCSER_TEMT; 898 result &= ~TIOCSER_TEMT;
896 899
897 return put_user(result, value); 900 return put_user(result, value);
@@ -900,17 +903,17 @@ static int uart_get_lsr_info(struct uart_state *state,
900static int uart_tiocmget(struct tty_struct *tty, struct file *file) 903static int uart_tiocmget(struct tty_struct *tty, struct file *file)
901{ 904{
902 struct uart_state *state = tty->driver_data; 905 struct uart_state *state = tty->driver_data;
903 struct uart_port *port = state->uart_port; 906 struct uart_port *uport = state->uart_port;
904 int result = -EIO; 907 int result = -EIO;
905 908
906 mutex_lock(&state->mutex); 909 mutex_lock(&state->mutex);
907 if ((!file || !tty_hung_up_p(file)) && 910 if ((!file || !tty_hung_up_p(file)) &&
908 !(tty->flags & (1 << TTY_IO_ERROR))) { 911 !(tty->flags & (1 << TTY_IO_ERROR))) {
909 result = port->mctrl; 912 result = uport->mctrl;
910 913
911 spin_lock_irq(&port->lock); 914 spin_lock_irq(&uport->lock);
912 result |= port->ops->get_mctrl(port); 915 result |= uport->ops->get_mctrl(uport);
913 spin_unlock_irq(&port->lock); 916 spin_unlock_irq(&uport->lock);
914 } 917 }
915 mutex_unlock(&state->mutex); 918 mutex_unlock(&state->mutex);
916 919
@@ -922,13 +925,13 @@ uart_tiocmset(struct tty_struct *tty, struct file *file,
922 unsigned int set, unsigned int clear) 925 unsigned int set, unsigned int clear)
923{ 926{
924 struct uart_state *state = tty->driver_data; 927 struct uart_state *state = tty->driver_data;
925 struct uart_port *port = state->uart_port; 928 struct uart_port *uport = state->uart_port;
926 int ret = -EIO; 929 int ret = -EIO;
927 930
928 mutex_lock(&state->mutex); 931 mutex_lock(&state->mutex);
929 if ((!file || !tty_hung_up_p(file)) && 932 if ((!file || !tty_hung_up_p(file)) &&
930 !(tty->flags & (1 << TTY_IO_ERROR))) { 933 !(tty->flags & (1 << TTY_IO_ERROR))) {
931 uart_update_mctrl(port, set, clear); 934 uart_update_mctrl(uport, set, clear);
932 ret = 0; 935 ret = 0;
933 } 936 }
934 mutex_unlock(&state->mutex); 937 mutex_unlock(&state->mutex);
@@ -938,12 +941,12 @@ uart_tiocmset(struct tty_struct *tty, struct file *file,
938static int uart_break_ctl(struct tty_struct *tty, int break_state) 941static int uart_break_ctl(struct tty_struct *tty, int break_state)
939{ 942{
940 struct uart_state *state = tty->driver_data; 943 struct uart_state *state = tty->driver_data;
941 struct uart_port *port = state->uart_port; 944 struct uart_port *uport = state->uart_port;
942 945
943 mutex_lock(&state->mutex); 946 mutex_lock(&state->mutex);
944 947
945 if (port->type != PORT_UNKNOWN) 948 if (uport->type != PORT_UNKNOWN)
946 port->ops->break_ctl(port, break_state); 949 uport->ops->break_ctl(uport, break_state);
947 950
948 mutex_unlock(&state->mutex); 951 mutex_unlock(&state->mutex);
949 return 0; 952 return 0;
@@ -951,7 +954,7 @@ static int uart_break_ctl(struct tty_struct *tty, int break_state)
951 954
952static int uart_do_autoconfig(struct uart_state *state) 955static int uart_do_autoconfig(struct uart_state *state)
953{ 956{
954 struct uart_port *port = state->uart_port; 957 struct uart_port *uport = state->uart_port;
955 int flags, ret; 958 int flags, ret;
956 959
957 if (!capable(CAP_SYS_ADMIN)) 960 if (!capable(CAP_SYS_ADMIN))
@@ -973,18 +976,18 @@ static int uart_do_autoconfig(struct uart_state *state)
973 * If we already have a port type configured, 976 * If we already have a port type configured,
974 * we must release its resources. 977 * we must release its resources.
975 */ 978 */
976 if (port->type != PORT_UNKNOWN) 979 if (uport->type != PORT_UNKNOWN)
977 port->ops->release_port(port); 980 uport->ops->release_port(uport);
978 981
979 flags = UART_CONFIG_TYPE; 982 flags = UART_CONFIG_TYPE;
980 if (port->flags & UPF_AUTO_IRQ) 983 if (uport->flags & UPF_AUTO_IRQ)
981 flags |= UART_CONFIG_IRQ; 984 flags |= UART_CONFIG_IRQ;
982 985
983 /* 986 /*
984 * This will claim the ports resources if 987 * This will claim the ports resources if
985 * a port is found. 988 * a port is found.
986 */ 989 */
987 port->ops->config_port(port, flags); 990 uport->ops->config_port(uport, flags);
988 991
989 ret = uart_startup(state, 1); 992 ret = uart_startup(state, 1);
990 } 993 }
@@ -1001,7 +1004,7 @@ static int uart_do_autoconfig(struct uart_state *state)
1001static int 1004static int
1002uart_wait_modem_status(struct uart_state *state, unsigned long arg) 1005uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1003{ 1006{
1004 struct uart_port *port = state->uart_port; 1007 struct uart_port *uport = state->uart_port;
1005 DECLARE_WAITQUEUE(wait, current); 1008 DECLARE_WAITQUEUE(wait, current);
1006 struct uart_icount cprev, cnow; 1009 struct uart_icount cprev, cnow;
1007 int ret; 1010 int ret;
@@ -1009,20 +1012,20 @@ uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1009 /* 1012 /*
1010 * note the counters on entry 1013 * note the counters on entry
1011 */ 1014 */
1012 spin_lock_irq(&port->lock); 1015 spin_lock_irq(&uport->lock);
1013 memcpy(&cprev, &port->icount, sizeof(struct uart_icount)); 1016 memcpy(&cprev, &uport->icount, sizeof(struct uart_icount));
1014 1017
1015 /* 1018 /*
1016 * Force modem status interrupts on 1019 * Force modem status interrupts on
1017 */ 1020 */
1018 port->ops->enable_ms(port); 1021 uport->ops->enable_ms(uport);
1019 spin_unlock_irq(&port->lock); 1022 spin_unlock_irq(&uport->lock);
1020 1023
1021 add_wait_queue(&state->delta_msr_wait, &wait); 1024 add_wait_queue(&state->delta_msr_wait, &wait);
1022 for (;;) { 1025 for (;;) {
1023 spin_lock_irq(&port->lock); 1026 spin_lock_irq(&uport->lock);
1024 memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); 1027 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1025 spin_unlock_irq(&port->lock); 1028 spin_unlock_irq(&uport->lock);
1026 1029
1027 set_current_state(TASK_INTERRUPTIBLE); 1030 set_current_state(TASK_INTERRUPTIBLE);
1028 1031
@@ -1062,11 +1065,11 @@ static int uart_get_count(struct uart_state *state,
1062{ 1065{
1063 struct serial_icounter_struct icount; 1066 struct serial_icounter_struct icount;
1064 struct uart_icount cnow; 1067 struct uart_icount cnow;
1065 struct uart_port *port = state->uart_port; 1068 struct uart_port *uport = state->uart_port;
1066 1069
1067 spin_lock_irq(&port->lock); 1070 spin_lock_irq(&uport->lock);
1068 memcpy(&cnow, &port->icount, sizeof(struct uart_icount)); 1071 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1069 spin_unlock_irq(&port->lock); 1072 spin_unlock_irq(&uport->lock);
1070 1073
1071 icount.cts = cnow.cts; 1074 icount.cts = cnow.cts;
1072 icount.dsr = cnow.dsr; 1075 icount.dsr = cnow.dsr;
@@ -1158,9 +1161,9 @@ uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd,
1158 break; 1161 break;
1159 1162
1160 default: { 1163 default: {
1161 struct uart_port *port = state->uart_port; 1164 struct uart_port *uport = state->uart_port;
1162 if (port->ops->ioctl) 1165 if (uport->ops->ioctl)
1163 ret = port->ops->ioctl(port, cmd, arg); 1166 ret = uport->ops->ioctl(uport, cmd, arg);
1164 break; 1167 break;
1165 } 1168 }
1166 } 1169 }
@@ -1173,10 +1176,10 @@ out:
1173static void uart_set_ldisc(struct tty_struct *tty) 1176static void uart_set_ldisc(struct tty_struct *tty)
1174{ 1177{
1175 struct uart_state *state = tty->driver_data; 1178 struct uart_state *state = tty->driver_data;
1176 struct uart_port *port = state->uart_port; 1179 struct uart_port *uport = state->uart_port;
1177 1180
1178 if (port->ops->set_ldisc) 1181 if (uport->ops->set_ldisc)
1179 port->ops->set_ldisc(port); 1182 uport->ops->set_ldisc(uport);
1180} 1183}
1181 1184
1182static void uart_set_termios(struct tty_struct *tty, 1185static void uart_set_termios(struct tty_struct *tty,
@@ -1254,16 +1257,15 @@ static void uart_set_termios(struct tty_struct *tty,
1254static void uart_close(struct tty_struct *tty, struct file *filp) 1257static void uart_close(struct tty_struct *tty, struct file *filp)
1255{ 1258{
1256 struct uart_state *state = tty->driver_data; 1259 struct uart_state *state = tty->driver_data;
1257 struct uart_port *port; 1260 struct tty_port *port;
1261 struct uart_port *uport;
1258 1262
1259 BUG_ON(!kernel_locked()); 1263 BUG_ON(!kernel_locked());
1260 1264
1261 if (!state || !state->uart_port) 1265 uport = state->uart_port;
1262 return; 1266 port = &state->port;
1263
1264 port = state->uart_port;
1265 1267
1266 pr_debug("uart_close(%d) called\n", port->line); 1268 pr_debug("uart_close(%d) called\n", uport->line);
1267 1269
1268 mutex_lock(&state->mutex); 1270 mutex_lock(&state->mutex);
1269 1271
@@ -1297,8 +1299,8 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
1297 */ 1299 */
1298 tty->closing = 1; 1300 tty->closing = 1;
1299 1301
1300 if (state->port.closing_wait != USF_CLOSING_WAIT_NONE) 1302 if (port->closing_wait != USF_CLOSING_WAIT_NONE)
1301 tty_wait_until_sent(tty, msecs_to_jiffies(state->port.closing_wait)); 1303 tty_wait_until_sent(tty, msecs_to_jiffies(port->closing_wait));
1302 1304
1303 /* 1305 /*
1304 * At this point, we stop accepting input. To do this, we 1306 * At this point, we stop accepting input. To do this, we
@@ -1307,14 +1309,14 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
1307 if (state->flags & UIF_INITIALIZED) { 1309 if (state->flags & UIF_INITIALIZED) {
1308 unsigned long flags; 1310 unsigned long flags;
1309 spin_lock_irqsave(&port->lock, flags); 1311 spin_lock_irqsave(&port->lock, flags);
1310 port->ops->stop_rx(port); 1312 uport->ops->stop_rx(uport);
1311 spin_unlock_irqrestore(&port->lock, flags); 1313 spin_unlock_irqrestore(&port->lock, flags);
1312 /* 1314 /*
1313 * Before we drop DTR, make sure the UART transmitter 1315 * Before we drop DTR, make sure the UART transmitter
1314 * has completely drained; this is especially 1316 * has completely drained; this is especially
1315 * important if there is a transmit FIFO! 1317 * important if there is a transmit FIFO!
1316 */ 1318 */
1317 uart_wait_until_sent(tty, port->timeout); 1319 uart_wait_until_sent(tty, uport->timeout);
1318 } 1320 }
1319 1321
1320 uart_shutdown(state); 1322 uart_shutdown(state);
@@ -1323,12 +1325,12 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
1323 tty_ldisc_flush(tty); 1325 tty_ldisc_flush(tty);
1324 1326
1325 tty->closing = 0; 1327 tty->closing = 0;
1326 state->port.tty = NULL; 1328 port->tty = NULL;
1327 1329
1328 if (state->port.blocked_open) { 1330 if (port->blocked_open) {
1329 if (state->port.close_delay) 1331 if (port->close_delay)
1330 msleep_interruptible(state->port.close_delay); 1332 msleep_interruptible(port->close_delay);
1331 } else if (!uart_console(port)) { 1333 } else if (!uart_console(uport)) {
1332 uart_change_pm(state, 3); 1334 uart_change_pm(state, 3);
1333 } 1335 }
1334 1336
@@ -1336,9 +1338,9 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
1336 * Wake up anyone trying to open this port. 1338 * Wake up anyone trying to open this port.
1337 */ 1339 */
1338 state->flags &= ~UIF_NORMAL_ACTIVE; 1340 state->flags &= ~UIF_NORMAL_ACTIVE;
1339 wake_up_interruptible(&state->port.open_wait); 1341 wake_up_interruptible(&port->open_wait);
1340 1342
1341 done: 1343done:
1342 mutex_unlock(&state->mutex); 1344 mutex_unlock(&state->mutex);
1343} 1345}
1344 1346
@@ -1410,6 +1412,7 @@ static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
1410static void uart_hangup(struct tty_struct *tty) 1412static void uart_hangup(struct tty_struct *tty)
1411{ 1413{
1412 struct uart_state *state = tty->driver_data; 1414 struct uart_state *state = tty->driver_data;
1415 struct tty_port *port = &state->port;
1413 1416
1414 BUG_ON(!kernel_locked()); 1417 BUG_ON(!kernel_locked());
1415 pr_debug("uart_hangup(%d)\n", state->uart_port->line); 1418 pr_debug("uart_hangup(%d)\n", state->uart_port->line);
@@ -1420,8 +1423,8 @@ static void uart_hangup(struct tty_struct *tty)
1420 uart_shutdown(state); 1423 uart_shutdown(state);
1421 state->count = 0; 1424 state->count = 0;
1422 state->flags &= ~UIF_NORMAL_ACTIVE; 1425 state->flags &= ~UIF_NORMAL_ACTIVE;
1423 state->port.tty = NULL; 1426 port->tty = NULL;
1424 wake_up_interruptible(&state->port.open_wait); 1427 wake_up_interruptible(&port->open_wait);
1425 wake_up_interruptible(&state->delta_msr_wait); 1428 wake_up_interruptible(&state->delta_msr_wait);
1426 } 1429 }
1427 mutex_unlock(&state->mutex); 1430 mutex_unlock(&state->mutex);
@@ -1470,20 +1473,21 @@ static int
1470uart_block_til_ready(struct file *filp, struct uart_state *state) 1473uart_block_til_ready(struct file *filp, struct uart_state *state)
1471{ 1474{
1472 DECLARE_WAITQUEUE(wait, current); 1475 DECLARE_WAITQUEUE(wait, current);
1473 struct uart_port *port = state->uart_port; 1476 struct uart_port *uport = state->uart_port;
1477 struct tty_port *port = &state->port;
1474 unsigned int mctrl; 1478 unsigned int mctrl;
1475 1479
1476 state->port.blocked_open++; 1480 port->blocked_open++;
1477 state->count--; 1481 state->count--;
1478 1482
1479 add_wait_queue(&state->port.open_wait, &wait); 1483 add_wait_queue(&port->open_wait, &wait);
1480 while (1) { 1484 while (1) {
1481 set_current_state(TASK_INTERRUPTIBLE); 1485 set_current_state(TASK_INTERRUPTIBLE);
1482 1486
1483 /* 1487 /*
1484 * If we have been hung up, tell userspace/restart open. 1488 * If we have been hung up, tell userspace/restart open.
1485 */ 1489 */
1486 if (tty_hung_up_p(filp) || state->port.tty == NULL) 1490 if (tty_hung_up_p(filp) || port->tty == NULL)
1487 break; 1491 break;
1488 1492
1489 /* 1493 /*
@@ -1502,8 +1506,8 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
1502 * have set TTY_IO_ERROR for a non-existant port. 1506 * have set TTY_IO_ERROR for a non-existant port.
1503 */ 1507 */
1504 if ((filp->f_flags & O_NONBLOCK) || 1508 if ((filp->f_flags & O_NONBLOCK) ||
1505 (state->port.tty->termios->c_cflag & CLOCAL) || 1509 (port->tty->termios->c_cflag & CLOCAL) ||
1506 (state->port.tty->flags & (1 << TTY_IO_ERROR))) 1510 (port->tty->flags & (1 << TTY_IO_ERROR)))
1507 break; 1511 break;
1508 1512
1509 /* 1513 /*
@@ -1511,17 +1515,17 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
1511 * not set RTS here - we want to make sure we catch 1515 * not set RTS here - we want to make sure we catch
1512 * the data from the modem. 1516 * the data from the modem.
1513 */ 1517 */
1514 if (state->port.tty->termios->c_cflag & CBAUD) 1518 if (port->tty->termios->c_cflag & CBAUD)
1515 uart_set_mctrl(port, TIOCM_DTR); 1519 uart_set_mctrl(uport, TIOCM_DTR);
1516 1520
1517 /* 1521 /*
1518 * and wait for the carrier to indicate that the 1522 * and wait for the carrier to indicate that the
1519 * modem is ready for us. 1523 * modem is ready for us.
1520 */ 1524 */
1521 spin_lock_irq(&port->lock); 1525 spin_lock_irq(&uport->lock);
1522 port->ops->enable_ms(port); 1526 uport->ops->enable_ms(uport);
1523 mctrl = port->ops->get_mctrl(port); 1527 mctrl = uport->ops->get_mctrl(uport);
1524 spin_unlock_irq(&port->lock); 1528 spin_unlock_irq(&uport->lock);
1525 if (mctrl & TIOCM_CAR) 1529 if (mctrl & TIOCM_CAR)
1526 break; 1530 break;
1527 1531
@@ -1533,15 +1537,15 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
1533 break; 1537 break;
1534 } 1538 }
1535 set_current_state(TASK_RUNNING); 1539 set_current_state(TASK_RUNNING);
1536 remove_wait_queue(&state->port.open_wait, &wait); 1540 remove_wait_queue(&port->open_wait, &wait);
1537 1541
1538 state->count++; 1542 state->count++;
1539 state->port.blocked_open--; 1543 port->blocked_open--;
1540 1544
1541 if (signal_pending(current)) 1545 if (signal_pending(current))
1542 return -ERESTARTSYS; 1546 return -ERESTARTSYS;
1543 1547
1544 if (!state->port.tty || tty_hung_up_p(filp)) 1548 if (!port->tty || tty_hung_up_p(filp))
1545 return -EAGAIN; 1549 return -EAGAIN;
1546 1550
1547 return 0; 1551 return 0;