Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
2d202ddc
Commit
2d202ddc
authored
Nov 13, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-serial
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
2e3a2627
4b355b37
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
199 additions
and
246 deletions
+199
-246
drivers/serial/21285.c
drivers/serial/21285.c
+15
-18
drivers/serial/8250.c
drivers/serial/8250.c
+23
-24
drivers/serial/8250_pci.c
drivers/serial/8250_pci.c
+3
-3
drivers/serial/amba-pl010.c
drivers/serial/amba-pl010.c
+22
-26
drivers/serial/amba-pl011.c
drivers/serial/amba-pl011.c
+22
-27
drivers/serial/clps711x.c
drivers/serial/clps711x.c
+11
-17
drivers/serial/dz.c
drivers/serial/dz.c
+11
-16
drivers/serial/imx.c
drivers/serial/imx.c
+10
-11
drivers/serial/pxa.c
drivers/serial/pxa.c
+19
-28
drivers/serial/s3c2410.c
drivers/serial/s3c2410.c
+14
-18
drivers/serial/sa1100.c
drivers/serial/sa1100.c
+11
-16
drivers/serial/serial_lh7a40x.c
drivers/serial/serial_lh7a40x.c
+22
-26
drivers/serial/uart00.c
drivers/serial/uart00.c
+12
-15
include/linux/serial_core.h
include/linux/serial_core.h
+4
-1
No files found.
drivers/serial/21285.c
View file @
2d202ddc
...
...
@@ -13,12 +13,14 @@
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/device.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/mach-types.h>
#include <asm/hardware/dec21285.h>
#include <asm/hardware.h>
...
...
@@ -90,22 +92,21 @@ static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *r
{
struct
uart_port
*
port
=
dev_id
;
struct
tty_struct
*
tty
=
port
->
info
->
tty
;
unsigned
int
status
,
ch
,
rxs
,
max_count
=
256
;
unsigned
int
status
,
ch
,
flag
,
rxs
,
max_count
=
256
;
status
=
*
CSR_UARTFLG
;
while
(
!
(
status
&
0x10
)
&&
max_count
--
)
{
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
printk
(
KERN_WARNING
"TTY_DONT_FLIP set
\n
"
);
goto
out
;
}
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* If this failed then we will throw away the
* bytes but must do so to clear interrupts
*/
}
ch
=
*
CSR_UARTDR
;
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
port
->
icount
.
rx
++
;
rxs
=
*
CSR_RXSTAT
|
RXSTAT_DUMMY_READ
;
...
...
@@ -120,15 +121,13 @@ static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *r
rxs
&=
port
->
read_status_mask
;
if
(
rxs
&
RXSTAT_PARITY
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
rxs
&
RXSTAT_FRAME
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
((
rxs
&
port
->
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
rxs
&
RXSTAT_OVERRUN
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -137,9 +136,7 @@ static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *r
* immediately, and doesn't affect the current
* character.
*/
*
tty
->
flip
.
char_buf_ptr
++
=
0
;
*
tty
->
flip
.
flag_buf_ptr
++
=
TTY_OVERRUN
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
status
=
*
CSR_UARTFLG
;
}
...
...
drivers/serial/8250.c
View file @
2d202ddc
...
...
@@ -20,28 +20,29 @@
* membase is an 'ioremapped' cookie.
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_reg.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <linux/serial_8250.h>
#include <linux/circ_buf.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/irq.h>
#if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#include "8250.h"
/*
...
...
@@ -979,16 +980,19 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs)
struct
tty_struct
*
tty
=
up
->
port
.
info
->
tty
;
unsigned
char
ch
,
lsr
=
*
status
;
int
max_count
=
256
;
char
flag
;
do
{
/* The following is not allowed by the tty layer and
unsafe. It should be fixed ASAP */
if
(
unlikely
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
))
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
return
;
// if TTY_DONT_FLIP is set
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/* If this failed then we will throw away the
bytes but must do so to clear interrupts */
}
ch
=
serial_inp
(
up
,
UART_RX
);
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
up
->
port
.
icount
.
rx
++
;
#ifdef CONFIG_SERIAL_8250_CONSOLE
...
...
@@ -1031,18 +1035,16 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs)
if
(
lsr
&
UART_LSR_BI
)
{
DEBUG_INTR
(
"handling break...."
);
*
tty
->
flip
.
flag_buf_ptr
=
TTY_BREAK
;
flag
=
TTY_BREAK
;
}
else
if
(
lsr
&
UART_LSR_PE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
lsr
&
UART_LSR_FE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
(
uart_handle_sysrq_char
(
&
up
->
port
,
ch
,
regs
))
goto
ignore_char
;
if
((
lsr
&
up
->
port
.
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
lsr
&
UART_LSR_OE
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -1051,10 +1053,7 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs)
* immediately, and doesn't affect the current
* character.
*/
*
tty
->
flip
.
flag_buf_ptr
=
TTY_OVERRUN
;
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
ignore_char:
lsr
=
serial_inp
(
up
,
UART_LSR
);
...
...
drivers/serial/8250_pci.c
View file @
2d202ddc
...
...
@@ -283,7 +283,7 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev)
static
void
__devexit
pci_plx9050_exit
(
struct
pci_dev
*
dev
)
{
u8
*
p
;
u8
__iomem
*
p
;
if
((
pci_resource_flags
(
dev
,
0
)
&
IORESOURCE_MEM
)
==
0
)
return
;
...
...
@@ -336,7 +336,7 @@ sbs_setup(struct pci_dev *dev, struct pci_board *board,
static
int
__devinit
sbs_init
(
struct
pci_dev
*
dev
)
{
u8
*
p
;
u8
__iomem
*
p
;
p
=
ioremap
(
pci_resource_start
(
dev
,
0
),
pci_resource_len
(
dev
,
0
));
...
...
@@ -360,7 +360,7 @@ static int __devinit sbs_init(struct pci_dev *dev)
static
void
__devexit
sbs_exit
(
struct
pci_dev
*
dev
)
{
u8
*
p
;
u8
__iomem
*
p
;
p
=
ioremap
(
pci_resource_start
(
dev
,
0
),
pci_resource_len
(
dev
,
0
));
if
(
p
!=
NULL
)
{
...
...
drivers/serial/amba-pl010.c
View file @
2d202ddc
...
...
@@ -32,25 +32,25 @@
* and hooked into this driver.
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_AMBA_PL010_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/hardware/amba.h>
#if defined(CONFIG_SERIAL_AMBA_PL010_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#include <asm/hardware/amba_serial.h>
#define UART_NR 2
...
...
@@ -149,22 +149,22 @@ pl010_rx_chars(struct uart_port *port)
#endif
{
struct
tty_struct
*
tty
=
port
->
info
->
tty
;
unsigned
int
status
,
ch
,
rsr
,
max_count
=
256
;
unsigned
int
status
,
ch
,
flag
,
rsr
,
max_count
=
256
;
status
=
UART_GET_FR
(
port
);
while
(
UART_RX_DATA
(
status
)
&&
max_count
--
)
{
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
printk
(
KERN_WARNING
"TTY_DONT_FLIP set
\n
"
);
return
;
}
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* If this failed then we will throw away the
* bytes but must do so to clear interrupts.
*/
}
ch
=
UART_GET_CHAR
(
port
);
flag
=
TTY_NORMAL
;
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
port
->
icount
.
rx
++
;
/*
...
...
@@ -188,20 +188,18 @@ pl010_rx_chars(struct uart_port *port)
rsr
&=
port
->
read_status_mask
;
if
(
rsr
&
UART01x_RSR_BE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_BREAK
;
flag
=
TTY_BREAK
;
else
if
(
rsr
&
UART01x_RSR_PE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
rsr
&
UART01x_RSR_FE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
(
uart_handle_sysrq_char
(
port
,
ch
,
regs
))
goto
ignore_char
;
if
((
rsr
&
port
->
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
rsr
&
UART01x_RSR_OE
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -210,9 +208,7 @@ pl010_rx_chars(struct uart_port *port)
* immediately, and doesn't affect the current
* character
*/
*
tty
->
flip
.
char_buf_ptr
++
=
0
;
*
tty
->
flip
.
flag_buf_ptr
++
=
TTY_OVERRUN
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
ignore_char:
status
=
UART_GET_FR
(
port
);
...
...
drivers/serial/amba-pl011.c
View file @
2d202ddc
...
...
@@ -32,26 +32,26 @@
* and hooked into this driver.
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_AMBA_PL011_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/hardware/amba.h>
#include <asm/hardware/clock.h>
#if defined(CONFIG_SERIAL_AMBA_PL011_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#include <asm/hardware/amba_serial.h>
#define UART_NR 14
...
...
@@ -115,22 +115,21 @@ pl011_rx_chars(struct uart_amba_port *uap)
#endif
{
struct
tty_struct
*
tty
=
uap
->
port
.
info
->
tty
;
unsigned
int
status
,
ch
,
rsr
,
max_count
=
256
;
unsigned
int
status
,
ch
,
flag
,
rsr
,
max_count
=
256
;
status
=
readw
(
uap
->
port
.
membase
+
UART01x_FR
);
while
((
status
&
UART01x_FR_RXFE
)
==
0
&&
max_count
--
)
{
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
printk
(
KERN_WARNING
"TTY_DONT_FLIP set
\n
"
);
return
;
}
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* If this failed then we will throw away the
* bytes but must do so to clear interrupts
*/
}
ch
=
readw
(
uap
->
port
.
membase
+
UART01x_DR
);
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
uap
->
port
.
icount
.
rx
++
;
/*
...
...
@@ -154,20 +153,18 @@ pl011_rx_chars(struct uart_amba_port *uap)
rsr
&=
uap
->
port
.
read_status_mask
;
if
(
rsr
&
UART01x_RSR_BE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_BREAK
;
flag
=
TTY_BREAK
;
else
if
(
rsr
&
UART01x_RSR_PE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
rsr
&
UART01x_RSR_FE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
(
uart_handle_sysrq_char
(
&
uap
->
port
,
ch
,
regs
))
goto
ignore_char
;
if
((
rsr
&
uap
->
port
.
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
rsr
&
UART01x_RSR_OE
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -176,9 +173,7 @@ pl011_rx_chars(struct uart_amba_port *uap)
* immediately, and doesn't affect the current
* character
*/
*
tty
->
flip
.
char_buf_ptr
++
=
0
;
*
tty
->
flip
.
flag_buf_ptr
++
=
TTY_OVERRUN
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
ignore_char:
status
=
readw
(
uap
->
port
.
membase
+
UART01x_FR
);
...
...
drivers/serial/clps711x.c
View file @
2d202ddc
...
...
@@ -26,26 +26,26 @@
*
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_CLPS711X_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/spinlock.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/irq.h>
#if defined(CONFIG_SERIAL_CLPS711X_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#include <asm/hardware/clps7111.h>
#define UART_NR 2
...
...
@@ -123,9 +123,7 @@ static irqreturn_t clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *re
goto
ignore_char
;
error_return:
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ignore_char:
status
=
clps_readl
(
SYSFLG
(
port
));
}
...
...
@@ -158,11 +156,7 @@ static irqreturn_t clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *re
* CHECK: does overrun affect the current character?
* ASSUMPTION: it does not.
*/
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
goto
ignore_char
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ch
=
0
;
flg
=
TTY_OVERRUN
;
}
...
...
drivers/serial/dz.c
View file @
2d202ddc
...
...
@@ -28,12 +28,13 @@
#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/serial.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/bootinfo.h>
#include <asm/dec/interrupts.h>
...
...
@@ -186,7 +187,7 @@ static inline void dz_receive_chars(struct dz_port *dport)
struct
uart_icount
*
icount
;
int
ignore
=
0
;
unsigned
short
status
,
tmp
;
unsigned
char
ch
;
unsigned
char
ch
,
flag
;
/* this code is going to be a problem...
the call to tty_flip_buffer is going to need
...
...
@@ -201,6 +202,7 @@ static inline void dz_receive_chars(struct dz_port *dport)
ch
=
UCHAR
(
status
);
/* grab the char */
flag
=
TTY_NORMAL
;
#if 0
if (info->is_console) {
...
...
@@ -217,8 +219,6 @@ static inline void dz_receive_chars(struct dz_port *dport)
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
break
;
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
0
;
icount
->
rx
++
;
/* keep track of the statistics */
...
...
@@ -243,12 +243,12 @@ static inline void dz_receive_chars(struct dz_port *dport)
tmp
=
status
&
dport
->
port
.
read_status_mask
;
if
(
tmp
&
DZ_PERR
)
{
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
#ifdef DEBUG_DZ
debug_console
(
"PERR
\n
"
,
5
);
#endif
}
else
if
(
tmp
&
DZ_FERR
)
{
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
#ifdef DEBUG_DZ
debug_console
(
"FERR
\n
"
,
5
);
#endif
...
...
@@ -257,17 +257,12 @@ static inline void dz_receive_chars(struct dz_port *dport)
#ifdef DEBUG_DZ
debug_console
(
"OERR
\n
"
,
5
);
#endif
if
(
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
count
++
;
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_OVERRUN
;
}
tty_insert_flip_char
(
tty
,
ch
,
flag
);
ch
=
0
;
flag
=
TTY_OVERRUN
;
}
}
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
ignore_char:
}
while
(
status
&
DZ_DVAL
);
...
...
drivers/serial/imx.c
View file @
2d202ddc
...
...
@@ -24,14 +24,21 @@
*
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_IMX_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
...
...
@@ -39,12 +46,6 @@
#include <asm/arch/serial.h>
#include <asm/mach-types.h>
#if defined(CONFIG_SERIAL_IMX_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
/* We've been assigned a range on the "Low-density serial ports" major */
#define SERIAL_IMX_MAJOR 204
#define MINOR_START 41
...
...
@@ -237,9 +238,7 @@ static irqreturn_t imx_rxint(int irq, void *dev_id, struct pt_regs *regs)
goto
handle_error
;
error_return:
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
(
unsigned
char
)
rx
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
rx
,
flg
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
goto
out
;
...
...
drivers/serial/pxa.c
View file @
2d202ddc
...
...
@@ -25,8 +25,12 @@
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_PXA_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/console.h>
...
...
@@ -36,18 +40,15 @@
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/irq.h>
#include <asm/arch/pxa-regs.h>
#if defined(CONFIG_SERIAL_PXA_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
struct
uart_pxa_port
{
struct
uart_port
port
;
...
...
@@ -102,25 +103,20 @@ static inline void
receive_chars
(
struct
uart_pxa_port
*
up
,
int
*
status
,
struct
pt_regs
*
regs
)
{
struct
tty_struct
*
tty
=
up
->
port
.
info
->
tty
;
unsigned
char
ch
;
unsigned
int
ch
,
flag
;
int
max_count
=
256
;
do
{
if
(
unlikely
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
))
{
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* FIXME: Deadlock can happen here if we're a
* low-latency port. We're holding the per-port
* spinlock, and we call flush_to_ldisc->
* n_tty_receive_buf->n_tty_receive_char->
* opost->uart_put_char.
* If this failed then we will throw away the
* bytes but must do so to clear interrupts
*/
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
return
;
// if TTY_DONT_FLIP is set
}
ch
=
serial_in
(
up
,
UART_RX
);
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
up
->
port
.
icount
.
rx
++
;
if
(
unlikely
(
*
status
&
(
UART_LSR_BI
|
UART_LSR_PE
|
...
...
@@ -159,18 +155,16 @@ receive_chars(struct uart_pxa_port *up, int *status, struct pt_regs *regs)
}
#endif
if
(
*
status
&
UART_LSR_BI
)
{
*
tty
->
flip
.
flag_buf_ptr
=
TTY_BREAK
;
flag
=
TTY_BREAK
;
}
else
if
(
*
status
&
UART_LSR_PE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
*
status
&
UART_LSR_FE
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
(
uart_handle_sysrq_char
(
&
up
->
port
,
ch
,
regs
))
goto
ignore_char
;
if
((
*
status
&
up
->
port
.
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
*
status
&
UART_LSR_OE
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -179,10 +173,7 @@ receive_chars(struct uart_pxa_port *up, int *status, struct pt_regs *regs)
* immediately, and doesn't affect the current
* character.
*/
*
tty
->
flip
.
flag_buf_ptr
=
TTY_OVERRUN
;
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
ignore_char:
*
status
=
serial_in
(
up
,
UART_LSR
);
...
...
drivers/serial/s3c2410.c
View file @
2d202ddc
...
...
@@ -12,11 +12,12 @@
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
...
...
@@ -111,7 +112,7 @@ serial_s3c2410_rx_chars(int irq, void *dev_id, struct pt_regs *regs)
{
struct
uart_port
*
port
=
dev_id
;
struct
tty_struct
*
tty
=
port
->
info
->
tty
;
unsigned
int
ufcon
,
ch
,
rxs
,
ufstat
;
unsigned
int
ufcon
,
ch
,
flag
,
rxs
,
ufstat
;
int
max_count
=
256
;
while
(
max_count
--
>
0
)
{
...
...
@@ -122,17 +123,16 @@ serial_s3c2410_rx_chars(int irq, void *dev_id, struct pt_regs *regs)
break
;
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
printk
(
KERN_WARNING
"TTY_DONT_FLIP set
\n
"
);
goto
out
;
}
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* If this failed then we will throw away the
* bytes but must do so to clear interrupts
*/
}
ch
=
rd_regb
(
port
,
S3C2410_URXH
);
*
tty
->
flip
.
char_buf_ptr
=
ch
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
port
->
icount
.
rx
++
;
rxs
=
rd_regb
(
port
,
S3C2410_UERSTAT
)
|
RXSTAT_DUMMY_READ
;
...
...
@@ -146,15 +146,13 @@ serial_s3c2410_rx_chars(int irq, void *dev_id, struct pt_regs *regs)
rxs
&=
port
->
read_status_mask
;
if
(
rxs
&
S3C2410_UERSTAT_PARITY
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
rxs
&
(
S3C2410_UERSTAT_FRAME
|
S3C2410_UERSTAT_OVERRUN
))
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
((
rxs
&
port
->
ignore_status_mask
)
==
0
)
{
tty
->
flip
.
flag_buf_ptr
++
;
tty
->
flip
.
char_buf_ptr
++
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flag
);
}
if
((
rxs
&
S3C2410_UERSTAT_OVERRUN
)
&&
...
...
@@ -164,9 +162,7 @@ serial_s3c2410_rx_chars(int irq, void *dev_id, struct pt_regs *regs)
* immediately, and doesn't affect the current
* character.
*/
*
tty
->
flip
.
char_buf_ptr
++
=
0
;
*
tty
->
flip
.
flag_buf_ptr
++
=
TTY_OVERRUN
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
}
tty_flip_buffer_push
(
tty
);
...
...
drivers/serial/sa1100.c
View file @
2d202ddc
...
...
@@ -25,26 +25,27 @@
*
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_SA1100_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/hardware.h>
#include <asm/mach/serial_sa1100.h>
#if defined(CONFIG_SERIAL_SA1100_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
/* We've been assigned a range on the "Low-density serial ports" major */
#define SERIAL_SA1100_MAJOR 204
#define MINOR_START 5
...
...
@@ -220,9 +221,7 @@ sa1100_rx_chars(struct sa1100_port *sport, struct pt_regs *regs)
goto
ignore_char
;
error_return:
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ignore_char:
status
=
UTSR1_TO_SM
(
UART_GET_UTSR1
(
sport
))
|
UTSR0_TO_SM
(
UART_GET_UTSR0
(
sport
));
...
...
@@ -257,11 +256,7 @@ sa1100_rx_chars(struct sa1100_port *sport, struct pt_regs *regs)
* overrun does *not* affect the character
* we read from the FIFO
*/
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
goto
ignore_char
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ch
=
0
;
flg
=
TTY_OVERRUN
;
}
...
...
drivers/serial/serial_lh7a40x.c
View file @
2d202ddc
...
...
@@ -28,23 +28,24 @@
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_LH7A40X_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
#if defined(CONFIG_SERIAL_LH7A40X_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#define DEV_MAJOR 204
#define DEV_MINOR 16
#define DEV_NR 3
...
...
@@ -145,21 +146,20 @@ lh7a40xuart_rx_chars (struct uart_port* port)
{
struct
tty_struct
*
tty
=
port
->
info
->
tty
;
int
cbRxMax
=
256
;
/* (Gross) limit on receive */
unsigned
int
data
;
/* Received data and status */
unsigned
int
data
,
flag
;
/* Received data and status */
while
(
!
(
UR
(
port
,
UART_R_STATUS
)
&
nRxRdy
)
&&
--
cbRxMax
)
{
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
tty
->
flip
.
work
.
func
((
void
*
)
tty
);
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
{
printk
(
KERN_WARNING
"TTY_DONT_FLIP set
\n
"
);
return
;
}
if
(
tty
->
low_latency
)
tty_flip_buffer_push
(
tty
);
/*
* If this failed then we will throw away the
* bytes but must do so to clear interrupts
*/
}
data
=
UR
(
port
,
UART_R_DATA
);
*
tty
->
flip
.
char_buf_ptr
=
(
unsigned
char
)
data
;
*
tty
->
flip
.
flag_buf_ptr
=
TTY_NORMAL
;
flag
=
TTY_NORMAL
;
++
port
->
icount
.
rx
;
if
(
data
&
RxError
)
{
/* Quick check, short-circuit */
...
...
@@ -180,20 +180,18 @@ lh7a40xuart_rx_chars (struct uart_port* port)
data
&=
port
->
read_status_mask
|
0xff
;
if
(
data
&
RxBreak
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_BREAK
;
flag
=
TTY_BREAK
;
else
if
(
data
&
RxParityError
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_PARITY
;
flag
=
TTY_PARITY
;
else
if
(
data
&
RxFramingError
)
*
tty
->
flip
.
flag_buf_ptr
=
TTY_FRAME
;
flag
=
TTY_FRAME
;
}
if
(
uart_handle_sysrq_char
(
port
,
(
unsigned
char
)
data
,
regs
))
continue
;
if
((
data
&
port
->
ignore_status_mask
)
==
0
)
{
++
tty
->
flip
.
flag_buf_ptr
;
++
tty
->
flip
.
char_buf_ptr
;
++
tty
->
flip
.
count
;
tty_insert_flip_char
(
tty
,
data
,
flag
);
}
if
((
data
&
RxOverrunError
)
&&
tty
->
flip
.
count
<
TTY_FLIPBUF_SIZE
)
{
...
...
@@ -202,9 +200,7 @@ lh7a40xuart_rx_chars (struct uart_port* port)
* immediately, and doesn't affect the current
* character
*/
*
tty
->
flip
.
char_buf_ptr
++
=
0
;
*
tty
->
flip
.
flag_buf_ptr
++
=
TTY_OVERRUN
;
++
tty
->
flip
.
count
;
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
}
}
tty_flip_buffer_push
(
tty
);
...
...
drivers/serial/uart00.c
View file @
2d202ddc
...
...
@@ -27,23 +27,25 @@
*
*/
#include <linux/config.h>
#if defined(CONFIG_SERIAL_UART00_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/sizes.h>
#if defined(CONFIG_SERIAL_UART00_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
#define SUPPORT_SYSRQ
#endif
#include <linux/serial_core.h>
#include <asm/arch/excalibur.h>
#define UART00_TYPE (volatile unsigned int*)
#include <asm/arch/uart00.h>
...
...
@@ -132,9 +134,8 @@ uart00_rx_chars(struct uart_port *port, struct pt_regs *regs)
goto
ignore_char
;
error_return:
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ignore_char:
status
=
UART_GET_RSR
(
port
);
}
...
...
@@ -174,11 +175,7 @@ uart00_rx_chars(struct uart_port *port, struct pt_regs *regs)
* CHECK: does overrun affect the current character?
* ASSUMPTION: it does not.
*/
*
tty
->
flip
.
flag_buf_ptr
++
=
flg
;
*
tty
->
flip
.
char_buf_ptr
++
=
ch
;
tty
->
flip
.
count
++
;
if
(
tty
->
flip
.
count
>=
TTY_FLIPBUF_SIZE
)
goto
ignore_char
;
tty_insert_flip_char
(
tty
,
ch
,
flg
);
ch
=
0
;
flg
=
TTY_OVERRUN
;
}
...
...
include/linux/serial_core.h
View file @
2d202ddc
...
...
@@ -94,6 +94,9 @@
/*IBM icom*/
#define PORT_ICOM 60
/* Samsung S3C2440 SoC */
#define PORT_S3C2440 61
#ifdef __KERNEL__
#include <linux/config.h>
...
...
@@ -171,7 +174,7 @@ struct uart_icount {
struct
uart_port
{
spinlock_t
lock
;
/* port lock */
unsigned
int
iobase
;
/* in/out[bwl] */
char
*
membase
;
/* read/write[bwl] */
unsigned
char
__iomem
*
membase
;
/* read/write[bwl] */
unsigned
int
irq
;
/* irq number */
unsigned
int
uartclk
;
/* base uart clock */
unsigned
char
fifosize
;
/* tx fifo size */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment