aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/Kconfig2
-rw-r--r--arch/alpha/kernel/srmcons.c18
-rw-r--r--arch/arm/boot/dts/vt8500.dtsi40
-rw-r--r--arch/arm/boot/dts/wm8505.dtsi60
-rw-r--r--arch/arm/boot/dts/wm8650.dtsi20
-rw-r--r--arch/arm/boot/dts/zynq-7000.dtsi4
-rw-r--r--arch/arm/mach-sa1100/assabet.c1
-rw-r--r--arch/arm/plat-samsung/include/plat/adc.h1
-rw-r--r--arch/ia64/hp/sim/Kconfig1
-rw-r--r--arch/ia64/hp/sim/simserial.c21
-rw-r--r--arch/m68k/Kconfig.devices2
-rw-r--r--arch/mips/sni/a20r.c2
-rw-r--r--arch/mn10300/kernel/mn10300-serial.c20
-rw-r--r--arch/parisc/Kconfig1
-rw-r--r--arch/parisc/kernel/pdc_cons.c10
-rw-r--r--arch/sparc/kernel/kgdb_32.c1
-rw-r--r--arch/tile/Kconfig1
-rw-r--r--arch/um/Kconfig.common1
-rw-r--r--arch/um/drivers/chan.h3
-rw-r--r--arch/um/drivers/chan_kern.c25
-rw-r--r--arch/um/drivers/line.c7
-rw-r--r--arch/x86/lguest/Kconfig1
-rw-r--r--arch/xtensa/Kconfig1
-rw-r--r--arch/xtensa/platforms/iss/console.c10
24 files changed, 169 insertions, 84 deletions
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 775361f67bfd..dabc93649495 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -124,6 +124,7 @@ choice
124 124
125config ALPHA_GENERIC 125config ALPHA_GENERIC
126 bool "Generic" 126 bool "Generic"
127 depends on TTY
127 help 128 help
128 A generic kernel will run on all supported Alpha hardware. 129 A generic kernel will run on all supported Alpha hardware.
129 130
@@ -490,6 +491,7 @@ config VGA_HOSE
490 491
491config ALPHA_SRM 492config ALPHA_SRM
492 bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME 493 bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME
494 depends on TTY
493 default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL 495 default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL
494 ---help--- 496 ---help---
495 There are two different types of booting firmware on Alphas: SRM, 497 There are two different types of booting firmware on Alphas: SRM,
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c
index 59b7bbad8394..6f01d9ad7b81 100644
--- a/arch/alpha/kernel/srmcons.c
+++ b/arch/alpha/kernel/srmcons.c
@@ -44,7 +44,7 @@ typedef union _srmcons_result {
44 44
45/* called with callback_lock held */ 45/* called with callback_lock held */
46static int 46static int
47srmcons_do_receive_chars(struct tty_struct *tty) 47srmcons_do_receive_chars(struct tty_port *port)
48{ 48{
49 srmcons_result result; 49 srmcons_result result;
50 int count = 0, loops = 0; 50 int count = 0, loops = 0;
@@ -52,13 +52,13 @@ srmcons_do_receive_chars(struct tty_struct *tty)
52 do { 52 do {
53 result.as_long = callback_getc(0); 53 result.as_long = callback_getc(0);
54 if (result.bits.status < 2) { 54 if (result.bits.status < 2) {
55 tty_insert_flip_char(tty, (char)result.bits.c, 0); 55 tty_insert_flip_char(port, (char)result.bits.c, 0);
56 count++; 56 count++;
57 } 57 }
58 } while((result.bits.status & 1) && (++loops < 10)); 58 } while((result.bits.status & 1) && (++loops < 10));
59 59
60 if (count) 60 if (count)
61 tty_schedule_flip(tty); 61 tty_schedule_flip(port);
62 62
63 return count; 63 return count;
64} 64}
@@ -73,7 +73,7 @@ srmcons_receive_chars(unsigned long data)
73 73
74 local_irq_save(flags); 74 local_irq_save(flags);
75 if (spin_trylock(&srmcons_callback_lock)) { 75 if (spin_trylock(&srmcons_callback_lock)) {
76 if (!srmcons_do_receive_chars(port->tty)) 76 if (!srmcons_do_receive_chars(port))
77 incr = 100; 77 incr = 100;
78 spin_unlock(&srmcons_callback_lock); 78 spin_unlock(&srmcons_callback_lock);
79 } 79 }
@@ -88,7 +88,7 @@ srmcons_receive_chars(unsigned long data)
88 88
89/* called with callback_lock held */ 89/* called with callback_lock held */
90static int 90static int
91srmcons_do_write(struct tty_struct *tty, const char *buf, int count) 91srmcons_do_write(struct tty_port *port, const char *buf, int count)
92{ 92{
93 static char str_cr[1] = "\r"; 93 static char str_cr[1] = "\r";
94 long c, remaining = count; 94 long c, remaining = count;
@@ -113,10 +113,10 @@ srmcons_do_write(struct tty_struct *tty, const char *buf, int count)
113 cur += result.bits.c; 113 cur += result.bits.c;
114 114
115 /* 115 /*
116 * Check for pending input iff a tty was provided 116 * Check for pending input iff a tty port was provided
117 */ 117 */
118 if (tty) 118 if (port)
119 srmcons_do_receive_chars(tty); 119 srmcons_do_receive_chars(port);
120 } 120 }
121 121
122 while (need_cr) { 122 while (need_cr) {
@@ -135,7 +135,7 @@ srmcons_write(struct tty_struct *tty,
135 unsigned long flags; 135 unsigned long flags;
136 136
137 spin_lock_irqsave(&srmcons_callback_lock, flags); 137 spin_lock_irqsave(&srmcons_callback_lock, flags);
138 srmcons_do_write(tty, (const char *) buf, count); 138 srmcons_do_write(tty->port, (const char *) buf, count);
139 spin_unlock_irqrestore(&srmcons_callback_lock, flags); 139 spin_unlock_irqrestore(&srmcons_callback_lock, flags);
140 140
141 return count; 141 return count;
diff --git a/arch/arm/boot/dts/vt8500.dtsi b/arch/arm/boot/dts/vt8500.dtsi
index d8645e990b21..cf31ced46602 100644
--- a/arch/arm/boot/dts/vt8500.dtsi
+++ b/arch/arm/boot/dts/vt8500.dtsi
@@ -45,6 +45,38 @@
45 compatible = "fixed-clock"; 45 compatible = "fixed-clock";
46 clock-frequency = <24000000>; 46 clock-frequency = <24000000>;
47 }; 47 };
48
49 clkuart0: uart0 {
50 #clock-cells = <0>;
51 compatible = "via,vt8500-device-clock";
52 clocks = <&ref24>;
53 enable-reg = <0x250>;
54 enable-bit = <1>;
55 };
56
57 clkuart1: uart1 {
58 #clock-cells = <0>;
59 compatible = "via,vt8500-device-clock";
60 clocks = <&ref24>;
61 enable-reg = <0x250>;
62 enable-bit = <2>;
63 };
64
65 clkuart2: uart2 {
66 #clock-cells = <0>;
67 compatible = "via,vt8500-device-clock";
68 clocks = <&ref24>;
69 enable-reg = <0x250>;
70 enable-bit = <3>;
71 };
72
73 clkuart3: uart3 {
74 #clock-cells = <0>;
75 compatible = "via,vt8500-device-clock";
76 clocks = <&ref24>;
77 enable-reg = <0x250>;
78 enable-bit = <4>;
79 };
48 }; 80 };
49 }; 81 };
50 82
@@ -83,28 +115,28 @@
83 compatible = "via,vt8500-uart"; 115 compatible = "via,vt8500-uart";
84 reg = <0xd8200000 0x1040>; 116 reg = <0xd8200000 0x1040>;
85 interrupts = <32>; 117 interrupts = <32>;
86 clocks = <&ref24>; 118 clocks = <&clkuart0>;
87 }; 119 };
88 120
89 uart@d82b0000 { 121 uart@d82b0000 {
90 compatible = "via,vt8500-uart"; 122 compatible = "via,vt8500-uart";
91 reg = <0xd82b0000 0x1040>; 123 reg = <0xd82b0000 0x1040>;
92 interrupts = <33>; 124 interrupts = <33>;
93 clocks = <&ref24>; 125 clocks = <&clkuart1>;
94 }; 126 };
95 127
96 uart@d8210000 { 128 uart@d8210000 {
97 compatible = "via,vt8500-uart"; 129 compatible = "via,vt8500-uart";
98 reg = <0xd8210000 0x1040>; 130 reg = <0xd8210000 0x1040>;
99 interrupts = <47>; 131 interrupts = <47>;
100 clocks = <&ref24>; 132 clocks = <&clkuart2>;
101 }; 133 };
102 134
103 uart@d82c0000 { 135 uart@d82c0000 {
104 compatible = "via,vt8500-uart"; 136 compatible = "via,vt8500-uart";
105 reg = <0xd82c0000 0x1040>; 137 reg = <0xd82c0000 0x1040>;
106 interrupts = <50>; 138 interrupts = <50>;
107 clocks = <&ref24>; 139 clocks = <&clkuart3>;
108 }; 140 };
109 141
110 rtc@d8100000 { 142 rtc@d8100000 {
diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi
index 330f833ac3b0..e74a1c0fb9a2 100644
--- a/arch/arm/boot/dts/wm8505.dtsi
+++ b/arch/arm/boot/dts/wm8505.dtsi
@@ -59,6 +59,54 @@
59 compatible = "fixed-clock"; 59 compatible = "fixed-clock";
60 clock-frequency = <24000000>; 60 clock-frequency = <24000000>;
61 }; 61 };
62
63 clkuart0: uart0 {
64 #clock-cells = <0>;
65 compatible = "via,vt8500-device-clock";
66 clocks = <&ref24>;
67 enable-reg = <0x250>;
68 enable-bit = <1>;
69 };
70
71 clkuart1: uart1 {
72 #clock-cells = <0>;
73 compatible = "via,vt8500-device-clock";
74 clocks = <&ref24>;
75 enable-reg = <0x250>;
76 enable-bit = <2>;
77 };
78
79 clkuart2: uart2 {
80 #clock-cells = <0>;
81 compatible = "via,vt8500-device-clock";
82 clocks = <&ref24>;
83 enable-reg = <0x250>;
84 enable-bit = <3>;
85 };
86
87 clkuart3: uart3 {
88 #clock-cells = <0>;
89 compatible = "via,vt8500-device-clock";
90 clocks = <&ref24>;
91 enable-reg = <0x250>;
92 enable-bit = <4>;
93 };
94
95 clkuart4: uart4 {
96 #clock-cells = <0>;
97 compatible = "via,vt8500-device-clock";
98 clocks = <&ref24>;
99 enable-reg = <0x250>;
100 enable-bit = <22>;
101 };
102
103 clkuart5: uart5 {
104 #clock-cells = <0>;
105 compatible = "via,vt8500-device-clock";
106 clocks = <&ref24>;
107 enable-reg = <0x250>;
108 enable-bit = <23>;
109 };
62 }; 110 };
63 }; 111 };
64 112
@@ -96,42 +144,42 @@
96 compatible = "via,vt8500-uart"; 144 compatible = "via,vt8500-uart";
97 reg = <0xd8200000 0x1040>; 145 reg = <0xd8200000 0x1040>;
98 interrupts = <32>; 146 interrupts = <32>;
99 clocks = <&ref24>; 147 clocks = <&clkuart0>;
100 }; 148 };
101 149
102 uart@d82b0000 { 150 uart@d82b0000 {
103 compatible = "via,vt8500-uart"; 151 compatible = "via,vt8500-uart";
104 reg = <0xd82b0000 0x1040>; 152 reg = <0xd82b0000 0x1040>;
105 interrupts = <33>; 153 interrupts = <33>;
106 clocks = <&ref24>; 154 clocks = <&clkuart1>;
107 }; 155 };
108 156
109 uart@d8210000 { 157 uart@d8210000 {
110 compatible = "via,vt8500-uart"; 158 compatible = "via,vt8500-uart";
111 reg = <0xd8210000 0x1040>; 159 reg = <0xd8210000 0x1040>;
112 interrupts = <47>; 160 interrupts = <47>;
113 clocks = <&ref24>; 161 clocks = <&clkuart2>;
114 }; 162 };
115 163
116 uart@d82c0000 { 164 uart@d82c0000 {
117 compatible = "via,vt8500-uart"; 165 compatible = "via,vt8500-uart";
118 reg = <0xd82c0000 0x1040>; 166 reg = <0xd82c0000 0x1040>;
119 interrupts = <50>; 167 interrupts = <50>;
120 clocks = <&ref24>; 168 clocks = <&clkuart3>;
121 }; 169 };
122 170
123 uart@d8370000 { 171 uart@d8370000 {
124 compatible = "via,vt8500-uart"; 172 compatible = "via,vt8500-uart";
125 reg = <0xd8370000 0x1040>; 173 reg = <0xd8370000 0x1040>;
126 interrupts = <31>; 174 interrupts = <31>;
127 clocks = <&ref24>; 175 clocks = <&clkuart4>;
128 }; 176 };
129 177
130 uart@d8380000 { 178 uart@d8380000 {
131 compatible = "via,vt8500-uart"; 179 compatible = "via,vt8500-uart";
132 reg = <0xd8380000 0x1040>; 180 reg = <0xd8380000 0x1040>;
133 interrupts = <30>; 181 interrupts = <30>;
134 clocks = <&ref24>; 182 clocks = <&clkuart5>;
135 }; 183 };
136 184
137 rtc@d8100000 { 185 rtc@d8100000 {
diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi
index 83b9467559bb..db3c0a12e052 100644
--- a/arch/arm/boot/dts/wm8650.dtsi
+++ b/arch/arm/boot/dts/wm8650.dtsi
@@ -75,6 +75,22 @@
75 reg = <0x204>; 75 reg = <0x204>;
76 }; 76 };
77 77
78 clkuart0: uart0 {
79 #clock-cells = <0>;
80 compatible = "via,vt8500-device-clock";
81 clocks = <&ref24>;
82 enable-reg = <0x250>;
83 enable-bit = <1>;
84 };
85
86 clkuart1: uart1 {
87 #clock-cells = <0>;
88 compatible = "via,vt8500-device-clock";
89 clocks = <&ref24>;
90 enable-reg = <0x250>;
91 enable-bit = <2>;
92 };
93
78 arm: arm { 94 arm: arm {
79 #clock-cells = <0>; 95 #clock-cells = <0>;
80 compatible = "via,vt8500-device-clock"; 96 compatible = "via,vt8500-device-clock";
@@ -128,14 +144,14 @@
128 compatible = "via,vt8500-uart"; 144 compatible = "via,vt8500-uart";
129 reg = <0xd8200000 0x1040>; 145 reg = <0xd8200000 0x1040>;
130 interrupts = <32>; 146 interrupts = <32>;
131 clocks = <&ref24>; 147 clocks = <&clkuart0>;
132 }; 148 };
133 149
134 uart@d82b0000 { 150 uart@d82b0000 {
135 compatible = "via,vt8500-uart"; 151 compatible = "via,vt8500-uart";
136 reg = <0xd82b0000 0x1040>; 152 reg = <0xd82b0000 0x1040>;
137 interrupts = <33>; 153 interrupts = <33>;
138 clocks = <&ref24>; 154 clocks = <&clkuart1>;
139 }; 155 };
140 156
141 rtc@d8100000 { 157 rtc@d8100000 {
diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi
index 401c1262d4ed..5914b5654591 100644
--- a/arch/arm/boot/dts/zynq-7000.dtsi
+++ b/arch/arm/boot/dts/zynq-7000.dtsi
@@ -44,14 +44,14 @@
44 compatible = "xlnx,xuartps"; 44 compatible = "xlnx,xuartps";
45 reg = <0xE0000000 0x1000>; 45 reg = <0xE0000000 0x1000>;
46 interrupts = <0 27 4>; 46 interrupts = <0 27 4>;
47 clock = <50000000>; 47 clocks = <&uart_clk 0>;
48 }; 48 };
49 49
50 uart1: uart@e0001000 { 50 uart1: uart@e0001000 {
51 compatible = "xlnx,xuartps"; 51 compatible = "xlnx,xuartps";
52 reg = <0xE0001000 0x1000>; 52 reg = <0xE0001000 0x1000>;
53 interrupts = <0 50 4>; 53 interrupts = <0 50 4>;
54 clock = <50000000>; 54 clocks = <&uart_clk 1>;
55 }; 55 };
56 56
57 slcr: slcr@f8000000 { 57 slcr: slcr@f8000000 {
diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c
index 9a23739f7026..442497363db9 100644
--- a/arch/arm/mach-sa1100/assabet.c
+++ b/arch/arm/mach-sa1100/assabet.c
@@ -16,6 +16,7 @@
16#include <linux/ioport.h> 16#include <linux/ioport.h>
17#include <linux/platform_data/sa11x0-serial.h> 17#include <linux/platform_data/sa11x0-serial.h>
18#include <linux/serial_core.h> 18#include <linux/serial_core.h>
19#include <linux/platform_device.h>
19#include <linux/mfd/ucb1x00.h> 20#include <linux/mfd/ucb1x00.h>
20#include <linux/mtd/mtd.h> 21#include <linux/mtd/mtd.h>
21#include <linux/mtd/partitions.h> 22#include <linux/mtd/partitions.h>
diff --git a/arch/arm/plat-samsung/include/plat/adc.h b/arch/arm/plat-samsung/include/plat/adc.h
index b258a08de591..2fc89315553f 100644
--- a/arch/arm/plat-samsung/include/plat/adc.h
+++ b/arch/arm/plat-samsung/include/plat/adc.h
@@ -15,6 +15,7 @@
15#define __ASM_PLAT_ADC_H __FILE__ 15#define __ASM_PLAT_ADC_H __FILE__
16 16
17struct s3c_adc_client; 17struct s3c_adc_client;
18struct platform_device;
18 19
19extern int s3c_adc_start(struct s3c_adc_client *client, 20extern int s3c_adc_start(struct s3c_adc_client *client,
20 unsigned int channel, unsigned int nr_samples); 21 unsigned int channel, unsigned int nr_samples);
diff --git a/arch/ia64/hp/sim/Kconfig b/arch/ia64/hp/sim/Kconfig
index 8d513a8c5266..d84707d55203 100644
--- a/arch/ia64/hp/sim/Kconfig
+++ b/arch/ia64/hp/sim/Kconfig
@@ -8,6 +8,7 @@ config HP_SIMETH
8 8
9config HP_SIMSERIAL 9config HP_SIMSERIAL
10 bool "Simulated serial driver support" 10 bool "Simulated serial driver support"
11 depends on TTY
11 12
12config HP_SIMSERIAL_CONSOLE 13config HP_SIMSERIAL_CONSOLE
13 bool "Console for HP simulator" 14 bool "Console for HP simulator"
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index fc3924d18c1f..da2f319fb71d 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -53,7 +53,7 @@ struct tty_driver *hp_simserial_driver;
53 53
54static struct console *console; 54static struct console *console;
55 55
56static void receive_chars(struct tty_struct *tty) 56static void receive_chars(struct tty_port *port)
57{ 57{
58 unsigned char ch; 58 unsigned char ch;
59 static unsigned char seen_esc = 0; 59 static unsigned char seen_esc = 0;
@@ -81,10 +81,10 @@ static void receive_chars(struct tty_struct *tty)
81 } 81 }
82 seen_esc = 0; 82 seen_esc = 0;
83 83
84 if (tty_insert_flip_char(tty, ch, TTY_NORMAL) == 0) 84 if (tty_insert_flip_char(port, ch, TTY_NORMAL) == 0)
85 break; 85 break;
86 } 86 }
87 tty_flip_buffer_push(tty); 87 tty_flip_buffer_push(port);
88} 88}
89 89
90/* 90/*
@@ -93,18 +93,9 @@ static void receive_chars(struct tty_struct *tty)
93static irqreturn_t rs_interrupt_single(int irq, void *dev_id) 93static irqreturn_t rs_interrupt_single(int irq, void *dev_id)
94{ 94{
95 struct serial_state *info = dev_id; 95 struct serial_state *info = dev_id;
96 struct tty_struct *tty = tty_port_tty_get(&info->port);
97 96
98 if (!tty) { 97 receive_chars(&info->port);
99 printk(KERN_INFO "%s: tty=0 problem\n", __func__); 98
100 return IRQ_NONE;
101 }
102 /*
103 * pretty simple in our case, because we only get interrupts
104 * on inbound traffic
105 */
106 receive_chars(tty);
107 tty_kref_put(tty);
108 return IRQ_HANDLED; 99 return IRQ_HANDLED;
109} 100}
110 101
@@ -435,7 +426,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
435 struct tty_port *port = &info->port; 426 struct tty_port *port = &info->port;
436 427
437 tty->driver_data = info; 428 tty->driver_data = info;
438 tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0; 429 port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
439 430
440 /* 431 /*
441 * figure out which console to use (should be one already) 432 * figure out which console to use (should be one already)
diff --git a/arch/m68k/Kconfig.devices b/arch/m68k/Kconfig.devices
index c4cdfe444c64..4bc945dfe467 100644
--- a/arch/m68k/Kconfig.devices
+++ b/arch/m68k/Kconfig.devices
@@ -41,7 +41,7 @@ config NFBLOCK
41 41
42config NFCON 42config NFCON
43 tristate "NatFeat console driver" 43 tristate "NatFeat console driver"
44 depends on NATFEAT 44 depends on TTY && NATFEAT
45 help 45 help
46 Say Y to include support for the ARAnyM NatFeat console driver 46 Say Y to include support for the ARAnyM NatFeat console driver
47 which allows the console output to be redirected to the stderr 47 which allows the console output to be redirected to the stderr
diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c
index 9cb9d43a3a0e..e05ad4da44d9 100644
--- a/arch/mips/sni/a20r.c
+++ b/arch/mips/sni/a20r.c
@@ -118,7 +118,7 @@ static struct resource sc26xx_rsrc[] = {
118 } 118 }
119}; 119};
120 120
121#include <linux/platform_data/sccnxp.h> 121#include <linux/platform_data/serial-sccnxp.h>
122 122
123static struct sccnxp_pdata sccnxp_data = { 123static struct sccnxp_pdata sccnxp_data = {
124 .reg_shift = 2, 124 .reg_shift = 2,
diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c
index 81d5cb9b6569..bf6e949a2f87 100644
--- a/arch/mn10300/kernel/mn10300-serial.c
+++ b/arch/mn10300/kernel/mn10300-serial.c
@@ -524,7 +524,7 @@ static int mask_test_and_clear(volatile u8 *ptr, u8 mask)
524static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) 524static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)
525{ 525{
526 struct uart_icount *icount = &port->uart.icount; 526 struct uart_icount *icount = &port->uart.icount;
527 struct tty_struct *tty = port->uart.state->port.tty; 527 struct tty_port *tport = &port->uart.state->port;
528 unsigned ix; 528 unsigned ix;
529 int count; 529 int count;
530 u8 st, ch, push, status, overrun; 530 u8 st, ch, push, status, overrun;
@@ -534,10 +534,10 @@ static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)
534 push = 0; 534 push = 0;
535 535
536 count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE); 536 count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE);
537 count = tty_buffer_request_room(tty, count); 537 count = tty_buffer_request_room(tport, count);
538 if (count == 0) { 538 if (count == 0) {
539 if (!tty->low_latency) 539 if (!tport->low_latency)
540 tty_flip_buffer_push(tty); 540 tty_flip_buffer_push(tport);
541 return; 541 return;
542 } 542 }
543 543
@@ -545,8 +545,8 @@ try_again:
545 /* pull chars out of the hat */ 545 /* pull chars out of the hat */
546 ix = ACCESS_ONCE(port->rx_outp); 546 ix = ACCESS_ONCE(port->rx_outp);
547 if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) { 547 if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) {
548 if (push && !tty->low_latency) 548 if (push && !tport->low_latency)
549 tty_flip_buffer_push(tty); 549 tty_flip_buffer_push(tport);
550 return; 550 return;
551 } 551 }
552 552
@@ -666,19 +666,19 @@ insert:
666 else 666 else
667 flag = TTY_NORMAL; 667 flag = TTY_NORMAL;
668 668
669 tty_insert_flip_char(tty, ch, flag); 669 tty_insert_flip_char(tport, ch, flag);
670 } 670 }
671 671
672 /* overrun is special, since it's reported immediately, and doesn't 672 /* overrun is special, since it's reported immediately, and doesn't
673 * affect the current character 673 * affect the current character
674 */ 674 */
675 if (overrun) 675 if (overrun)
676 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 676 tty_insert_flip_char(tport, 0, TTY_OVERRUN);
677 677
678 count--; 678 count--;
679 if (count <= 0) { 679 if (count <= 0) {
680 if (!tty->low_latency) 680 if (!tport->low_latency)
681 tty_flip_buffer_push(tty); 681 tty_flip_buffer_push(tport);
682 return; 682 return;
683 } 683 }
684 684
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index 9f2820659da2..c600f39aa453 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -21,6 +21,7 @@ config PARISC
21 select HAVE_MOD_ARCH_SPECIFIC 21 select HAVE_MOD_ARCH_SPECIFIC
22 select MODULES_USE_ELF_RELA 22 select MODULES_USE_ELF_RELA
23 select CLONE_BACKWARDS 23 select CLONE_BACKWARDS
24 select TTY # Needed for pdc_cons.c
24 25
25 help 26 help
26 The PA-RISC microprocessor is designed by Hewlett-Packard and used 27 The PA-RISC microprocessor is designed by Hewlett-Packard and used
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c
index efc5e7d30530..d5cae55195ec 100644
--- a/arch/parisc/kernel/pdc_cons.c
+++ b/arch/parisc/kernel/pdc_cons.c
@@ -138,23 +138,17 @@ static const struct tty_operations pdc_console_tty_ops = {
138static void pdc_console_poll(unsigned long unused) 138static void pdc_console_poll(unsigned long unused)
139{ 139{
140 int data, count = 0; 140 int data, count = 0;
141 struct tty_struct *tty = tty_port_tty_get(&tty_port);
142
143 if (!tty)
144 return;
145 141
146 while (1) { 142 while (1) {
147 data = pdc_console_poll_key(NULL); 143 data = pdc_console_poll_key(NULL);
148 if (data == -1) 144 if (data == -1)
149 break; 145 break;
150 tty_insert_flip_char(tty, data & 0xFF, TTY_NORMAL); 146 tty_insert_flip_char(&tty_port, data & 0xFF, TTY_NORMAL);
151 count ++; 147 count ++;
152 } 148 }
153 149
154 if (count) 150 if (count)
155 tty_flip_buffer_push(tty); 151 tty_flip_buffer_push(&tty_port);
156
157 tty_kref_put(tty);
158 152
159 if (pdc_cons.flags & CON_ENABLED) 153 if (pdc_cons.flags & CON_ENABLED)
160 mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY); 154 mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY);
diff --git a/arch/sparc/kernel/kgdb_32.c b/arch/sparc/kernel/kgdb_32.c
index 2e424a576a36..dcf210811af4 100644
--- a/arch/sparc/kernel/kgdb_32.c
+++ b/arch/sparc/kernel/kgdb_32.c
@@ -5,6 +5,7 @@
5 5
6#include <linux/kgdb.h> 6#include <linux/kgdb.h>
7#include <linux/kdebug.h> 7#include <linux/kdebug.h>
8#include <linux/sched.h>
8 9
9#include <asm/kdebug.h> 10#include <asm/kdebug.h>
10#include <asm/ptrace.h> 11#include <asm/ptrace.h>
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index 1bb7ad4aeff4..36136e81f5d8 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -121,6 +121,7 @@ config DEBUG_COPY_FROM_USER
121 def_bool n 121 def_bool n
122 122
123config HVC_TILE 123config HVC_TILE
124 depends on TTY
124 select HVC_DRIVER 125 select HVC_DRIVER
125 def_bool y 126 def_bool y
126 127
diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common
index 648121b037d5..bceee6623b00 100644
--- a/arch/um/Kconfig.common
+++ b/arch/um/Kconfig.common
@@ -12,6 +12,7 @@ config UML
12 select GENERIC_CPU_DEVICES 12 select GENERIC_CPU_DEVICES
13 select GENERIC_IO 13 select GENERIC_IO
14 select GENERIC_CLOCKEVENTS 14 select GENERIC_CLOCKEVENTS
15 select TTY # Needed for line.c
15 16
16config MMU 17config MMU
17 bool 18 bool
diff --git a/arch/um/drivers/chan.h b/arch/um/drivers/chan.h
index 02b5a76e98d9..78f1b8999964 100644
--- a/arch/um/drivers/chan.h
+++ b/arch/um/drivers/chan.h
@@ -27,8 +27,7 @@ struct chan {
27 void *data; 27 void *data;
28}; 28};
29 29
30extern void chan_interrupt(struct line *line, 30extern void chan_interrupt(struct line *line, int irq);
31 struct tty_struct *tty, int irq);
32extern int parse_chan_pair(char *str, struct line *line, int device, 31extern int parse_chan_pair(char *str, struct line *line, int device,
33 const struct chan_opts *opts, char **error_out); 32 const struct chan_opts *opts, char **error_out);
34extern int write_chan(struct chan *chan, const char *buf, int len, 33extern int write_chan(struct chan *chan, const char *buf, int len,
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index e9a0abc6a32f..15c553c239a1 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -81,12 +81,6 @@ static const struct chan_ops not_configged_ops = {
81}; 81};
82#endif /* CONFIG_NOCONFIG_CHAN */ 82#endif /* CONFIG_NOCONFIG_CHAN */
83 83
84static void tty_receive_char(struct tty_struct *tty, char ch)
85{
86 if (tty)
87 tty_insert_flip_char(tty, ch, TTY_NORMAL);
88}
89
90static int open_one_chan(struct chan *chan) 84static int open_one_chan(struct chan *chan)
91{ 85{
92 int fd, err; 86 int fd, err;
@@ -137,11 +131,9 @@ void chan_enable_winch(struct chan *chan, struct tty_struct *tty)
137static void line_timer_cb(struct work_struct *work) 131static void line_timer_cb(struct work_struct *work)
138{ 132{
139 struct line *line = container_of(work, struct line, task.work); 133 struct line *line = container_of(work, struct line, task.work);
140 struct tty_struct *tty = tty_port_tty_get(&line->port);
141 134
142 if (!line->throttled) 135 if (!line->throttled)
143 chan_interrupt(line, tty, line->driver->read_irq); 136 chan_interrupt(line, line->driver->read_irq);
144 tty_kref_put(tty);
145} 137}
146 138
147int enable_chan(struct line *line) 139int enable_chan(struct line *line)
@@ -552,8 +544,9 @@ int parse_chan_pair(char *str, struct line *line, int device,
552 return 0; 544 return 0;
553} 545}
554 546
555void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) 547void chan_interrupt(struct line *line, int irq)
556{ 548{
549 struct tty_port *port = &line->port;
557 struct chan *chan = line->chan_in; 550 struct chan *chan = line->chan_in;
558 int err; 551 int err;
559 char c; 552 char c;
@@ -562,21 +555,24 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq)
562 goto out; 555 goto out;
563 556
564 do { 557 do {
565 if (tty && !tty_buffer_request_room(tty, 1)) { 558 if (!tty_buffer_request_room(port, 1)) {
566 schedule_delayed_work(&line->task, 1); 559 schedule_delayed_work(&line->task, 1);
567 goto out; 560 goto out;
568 } 561 }
569 err = chan->ops->read(chan->fd, &c, chan->data); 562 err = chan->ops->read(chan->fd, &c, chan->data);
570 if (err > 0) 563 if (err > 0)
571 tty_receive_char(tty, c); 564 tty_insert_flip_char(port, c, TTY_NORMAL);
572 } while (err > 0); 565 } while (err > 0);
573 566
574 if (err == 0) 567 if (err == 0)
575 reactivate_fd(chan->fd, irq); 568 reactivate_fd(chan->fd, irq);
576 if (err == -EIO) { 569 if (err == -EIO) {
577 if (chan->primary) { 570 if (chan->primary) {
578 if (tty != NULL) 571 struct tty_struct *tty = tty_port_tty_get(&line->port);
572 if (tty != NULL) {
579 tty_hangup(tty); 573 tty_hangup(tty);
574 tty_kref_put(tty);
575 }
580 if (line->chan_out != chan) 576 if (line->chan_out != chan)
581 close_one_chan(line->chan_out, 1); 577 close_one_chan(line->chan_out, 1);
582 } 578 }
@@ -585,6 +581,5 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq)
585 return; 581 return;
586 } 582 }
587 out: 583 out:
588 if (tty) 584 tty_flip_buffer_push(port);
589 tty_flip_buffer_push(tty);
590} 585}
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 9ffc28bd4b7a..f1b38571f94e 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -19,11 +19,10 @@ static irqreturn_t line_interrupt(int irq, void *data)
19{ 19{
20 struct chan *chan = data; 20 struct chan *chan = data;
21 struct line *line = chan->line; 21 struct line *line = chan->line;
22 struct tty_struct *tty = tty_port_tty_get(&line->port);
23 22
24 if (line) 23 if (line)
25 chan_interrupt(line, tty, irq); 24 chan_interrupt(line, irq);
26 tty_kref_put(tty); 25
27 return IRQ_HANDLED; 26 return IRQ_HANDLED;
28} 27}
29 28
@@ -234,7 +233,7 @@ void line_unthrottle(struct tty_struct *tty)
234 struct line *line = tty->driver_data; 233 struct line *line = tty->driver_data;
235 234
236 line->throttled = 0; 235 line->throttled = 0;
237 chan_interrupt(line, tty, line->driver->read_irq); 236 chan_interrupt(line, line->driver->read_irq);
238 237
239 /* 238 /*
240 * Maybe there is enough stuff pending that calling the interrupt 239 * Maybe there is enough stuff pending that calling the interrupt
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig
index 7872a3330fb5..29043d2048a0 100644
--- a/arch/x86/lguest/Kconfig
+++ b/arch/x86/lguest/Kconfig
@@ -2,6 +2,7 @@ config LGUEST_GUEST
2 bool "Lguest guest support" 2 bool "Lguest guest support"
3 select PARAVIRT 3 select PARAVIRT
4 depends on X86_32 4 depends on X86_32
5 select TTY
5 select VIRTUALIZATION 6 select VIRTUALIZATION
6 select VIRTIO 7 select VIRTIO
7 select VIRTIO_CONSOLE 8 select VIRTIO_CONSOLE
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig
index 5aab1acabf1c..ad64c73b8675 100644
--- a/arch/xtensa/Kconfig
+++ b/arch/xtensa/Kconfig
@@ -132,6 +132,7 @@ choice
132 132
133config XTENSA_PLATFORM_ISS 133config XTENSA_PLATFORM_ISS
134 bool "ISS" 134 bool "ISS"
135 depends on TTY
135 select XTENSA_CALIBRATE_CCOUNT 136 select XTENSA_CALIBRATE_CCOUNT
136 select SERIAL_CONSOLE 137 select SERIAL_CONSOLE
137 select XTENSA_ISS_NETWORK 138 select XTENSA_ISS_NETWORK
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c
index 8207a119eee9..da9866f7fecf 100644
--- a/arch/xtensa/platforms/iss/console.c
+++ b/arch/xtensa/platforms/iss/console.c
@@ -58,7 +58,8 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
58 tty->port = &serial_port; 58 tty->port = &serial_port;
59 spin_lock(&timer_lock); 59 spin_lock(&timer_lock);
60 if (tty->count == 1) { 60 if (tty->count == 1) {
61 setup_timer(&serial_timer, rs_poll, (unsigned long)tty); 61 setup_timer(&serial_timer, rs_poll,
62 (unsigned long)&serial_port);
62 mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); 63 mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);
63 } 64 }
64 spin_unlock(&timer_lock); 65 spin_unlock(&timer_lock);
@@ -97,8 +98,7 @@ static int rs_write(struct tty_struct * tty,
97 98
98static void rs_poll(unsigned long priv) 99static void rs_poll(unsigned long priv)
99{ 100{
100 struct tty_struct* tty = (struct tty_struct*) priv; 101 struct tty_port *port = (struct tty_port *)priv;
101
102 struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; 102 struct timeval tv = { .tv_sec = 0, .tv_usec = 0 };
103 int i = 0; 103 int i = 0;
104 unsigned char c; 104 unsigned char c;
@@ -107,12 +107,12 @@ static void rs_poll(unsigned long priv)
107 107
108 while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){ 108 while (__simc(SYS_select_one, 0, XTISS_SELECT_ONE_READ, (int)&tv,0,0)){
109 __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0); 109 __simc (SYS_read, 0, (unsigned long)&c, 1, 0, 0);
110 tty_insert_flip_char(tty, c, TTY_NORMAL); 110 tty_insert_flip_char(port, c, TTY_NORMAL);
111 i++; 111 i++;
112 } 112 }
113 113
114 if (i) 114 if (i)
115 tty_flip_buffer_push(tty); 115 tty_flip_buffer_push(port);
116 116
117 117
118 mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE); 118 mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);