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
nexedi
linux
Commits
3cbbbd88
Commit
3cbbbd88
authored
Sep 08, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-serial
into home.osdl.org:/home/torvalds/v2.5/linux
parents
7a9df5e2
3cd30bf0
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
107 additions
and
103 deletions
+107
-103
drivers/serial/8250.c
drivers/serial/8250.c
+14
-10
drivers/serial/8250.h
drivers/serial/8250.h
+2
-2
drivers/serial/8250_pci.c
drivers/serial/8250_pci.c
+3
-19
drivers/serial/Kconfig
drivers/serial/Kconfig
+26
-6
drivers/serial/Makefile
drivers/serial/Makefile
+2
-2
drivers/serial/clps711x.c
drivers/serial/clps711x.c
+7
-5
drivers/serial/sa1100.c
drivers/serial/sa1100.c
+4
-4
drivers/serial/serial_core.c
drivers/serial/serial_core.c
+41
-53
drivers/serial/serial_cs.c
drivers/serial/serial_cs.c
+0
-0
include/linux/serial_core.h
include/linux/serial_core.h
+8
-2
No files found.
drivers/serial/8250.c
View file @
3cbbbd88
...
...
@@ -122,6 +122,7 @@ struct uart_8250_port {
struct
uart_port
port
;
struct
timer_list
timer
;
/* "no irq" timer */
struct
list_head
list
;
/* ports on this IRQ */
unsigned
int
capabilities
;
/* port capabilities */
unsigned
short
rev
;
unsigned
char
acr
;
unsigned
char
ier
;
...
...
@@ -683,6 +684,7 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
serial_outp
(
up
,
UART_LCR
,
save_lcr
);
up
->
port
.
fifosize
=
uart_config
[
up
->
port
.
type
].
dfl_xmit_fifo_size
;
up
->
capabilities
=
uart_config
[
up
->
port
.
type
].
flags
;
if
(
up
->
port
.
type
==
PORT_UNKNOWN
)
goto
out
;
...
...
@@ -1190,6 +1192,8 @@ static int serial8250_startup(struct uart_port *port)
unsigned
long
flags
;
int
retval
;
up
->
capabilities
=
uart_config
[
up
->
port
.
type
].
flags
;
if
(
up
->
port
.
type
==
PORT_16C950
)
{
/* Wake up and initialize UART */
up
->
acr
=
0
;
...
...
@@ -1215,7 +1219,7 @@ static int serial8250_startup(struct uart_port *port)
* Clear the FIFO buffers and disable them.
* (they will be reeanbled in set_termios())
*/
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_CLEAR_FIFO
)
{
if
(
u
p
->
capabilitie
s
&
UART_CLEAR_FIFO
)
{
serial_outp
(
up
,
UART_FCR
,
UART_FCR_ENABLE_FIFO
);
serial_outp
(
up
,
UART_FCR
,
UART_FCR_ENABLE_FIFO
|
UART_FCR_CLEAR_RCVR
|
UART_FCR_CLEAR_XMIT
);
...
...
@@ -1428,7 +1432,7 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios,
up
->
rev
==
0x5201
)
quot
++
;
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_USE_FIFO
)
{
if
(
u
p
->
capabilitie
s
&
UART_USE_FIFO
)
{
if
(
baud
<
2400
)
fcr
=
UART_FCR_ENABLE_FIFO
|
UART_FCR_TRIGGER_1
;
#ifdef CONFIG_SERIAL_8250_RSA
...
...
@@ -1489,13 +1493,13 @@ serial8250_set_termios(struct uart_port *port, struct termios *termios,
serial_out
(
up
,
UART_IER
,
up
->
ier
);
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_STARTECH
)
{
if
(
u
p
->
capabilitie
s
&
UART_STARTECH
)
{
serial_outp
(
up
,
UART_LCR
,
0xBF
);
serial_outp
(
up
,
UART_EFR
,
termios
->
c_cflag
&
CRTSCTS
?
UART_EFR_CTS
:
0
);
}
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_NATSEMI
)
{
if
(
u
p
->
capabilitie
s
&
UART_NATSEMI
)
{
/* Switch to bank 2 not bank 1, to avoid resetting EXCR2 */
serial_outp
(
up
,
UART_LCR
,
0xe0
);
}
else
{
...
...
@@ -1524,7 +1528,7 @@ serial8250_pm(struct uart_port *port, unsigned int state,
struct
uart_8250_port
*
up
=
(
struct
uart_8250_port
*
)
port
;
if
(
state
)
{
/* sleep */
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_STARTECH
)
{
if
(
u
p
->
capabilitie
s
&
UART_STARTECH
)
{
/* Arrange to enter sleep mode */
serial_outp
(
up
,
UART_LCR
,
0xBF
);
serial_outp
(
up
,
UART_EFR
,
UART_EFR_ECB
);
...
...
@@ -1543,7 +1547,7 @@ serial8250_pm(struct uart_port *port, unsigned int state,
up
->
pm
(
port
,
state
,
oldstate
);
}
else
{
/* wake */
if
(
u
art_config
[
up
->
port
.
type
].
flag
s
&
UART_STARTECH
)
{
if
(
u
p
->
capabilitie
s
&
UART_STARTECH
)
{
/* Wake up UART */
serial_outp
(
up
,
UART_LCR
,
0xBF
);
serial_outp
(
up
,
UART_EFR
,
UART_EFR_ECB
);
...
...
@@ -2101,9 +2105,9 @@ void serial8250_get_irq_map(unsigned int *map)
*
* Suspend one serial port.
*/
void
serial8250_suspend_port
(
int
line
,
u32
level
)
void
serial8250_suspend_port
(
int
line
)
{
uart_suspend_port
(
&
serial8250_reg
,
&
serial8250_ports
[
line
].
port
,
level
);
uart_suspend_port
(
&
serial8250_reg
,
&
serial8250_ports
[
line
].
port
);
}
/**
...
...
@@ -2112,9 +2116,9 @@ void serial8250_suspend_port(int line, u32 level)
*
* Resume one serial port.
*/
void
serial8250_resume_port
(
int
line
,
u32
level
)
void
serial8250_resume_port
(
int
line
)
{
uart_resume_port
(
&
serial8250_reg
,
&
serial8250_ports
[
line
].
port
,
level
);
uart_resume_port
(
&
serial8250_reg
,
&
serial8250_ports
[
line
].
port
);
}
static
int
__init
serial8250_init
(
void
)
...
...
drivers/serial/8250.h
View file @
3cbbbd88
...
...
@@ -27,8 +27,8 @@ struct serial8250_probe {
int
serial8250_register_probe
(
struct
serial8250_probe
*
probe
);
void
serial8250_unregister_probe
(
struct
serial8250_probe
*
probe
);
void
serial8250_get_irq_map
(
unsigned
int
*
map
);
void
serial8250_suspend_port
(
int
line
,
u32
level
);
void
serial8250_resume_port
(
int
line
,
u32
level
);
void
serial8250_suspend_port
(
int
line
);
void
serial8250_resume_port
(
int
line
);
struct
old_serial_port
{
unsigned
int
uart
;
...
...
drivers/serial/8250_pci.c
View file @
3cbbbd88
...
...
@@ -1600,19 +1600,6 @@ static void __devexit pciserial_remove_one(struct pci_dev *dev)
}
}
static
int
pciserial_save_state_one
(
struct
pci_dev
*
dev
,
u32
state
)
{
struct
serial_private
*
priv
=
pci_get_drvdata
(
dev
);
if
(
priv
)
{
int
i
;
for
(
i
=
0
;
i
<
priv
->
nr
;
i
++
)
serial8250_suspend_port
(
priv
->
line
[
i
],
SUSPEND_SAVE_STATE
);
}
return
0
;
}
static
int
pciserial_suspend_one
(
struct
pci_dev
*
dev
,
u32
state
)
{
struct
serial_private
*
priv
=
pci_get_drvdata
(
dev
);
...
...
@@ -1621,7 +1608,7 @@ static int pciserial_suspend_one(struct pci_dev *dev, u32 state)
int
i
;
for
(
i
=
0
;
i
<
priv
->
nr
;
i
++
)
serial8250_suspend_port
(
priv
->
line
[
i
]
,
SUSPEND_POWER_DOWN
);
serial8250_suspend_port
(
priv
->
line
[
i
]);
}
return
0
;
}
...
...
@@ -1639,10 +1626,8 @@ static int pciserial_resume_one(struct pci_dev *dev)
if
(
priv
->
quirk
->
init
)
priv
->
quirk
->
init
(
dev
);
for
(
i
=
0
;
i
<
priv
->
nr
;
i
++
)
{
serial8250_resume_port
(
priv
->
line
[
i
],
RESUME_POWER_ON
);
serial8250_resume_port
(
priv
->
line
[
i
],
RESUME_RESTORE_STATE
);
}
for
(
i
=
0
;
i
<
priv
->
nr
;
i
++
)
serial8250_resume_port
(
priv
->
line
[
i
]);
}
return
0
;
}
...
...
@@ -2040,7 +2025,6 @@ static struct pci_driver serial_pci_driver = {
.
name
=
"serial"
,
.
probe
=
pciserial_init_one
,
.
remove
=
__devexit_p
(
pciserial_remove_one
),
.
save_state
=
pciserial_save_state_one
,
.
suspend
=
pciserial_suspend_one
,
.
resume
=
pciserial_resume_one
,
.
id_table
=
serial_pci_tbl
,
...
...
drivers/serial/Kconfig
View file @
3cbbbd88
...
...
@@ -10,6 +10,7 @@ menu "Serial drivers"
# The new 8250/16550 serial drivers
config SERIAL_8250
tristate "8250/16550 and compatible serial support"
select SERIAL_CORE
---help---
This selects whether you want to include the driver for the standard
serial ports. The standard answer is Y. People who might say N
...
...
@@ -41,6 +42,7 @@ config SERIAL_8250
config SERIAL_8250_CONSOLE
bool "Console on 8250/16550 and compatible serial port"
depends on SERIAL_8250=y
select SERIAL_CORE_CONSOLE
---help---
If you say Y here, it will be possible to use a serial port as the
system console (the system console is the device which receives all
...
...
@@ -167,12 +169,14 @@ config SERIAL_8250_ACORN
config SERIAL_ANAKIN
bool "Anakin serial port support"
depends on ARM && ARCH_ANAKIN
select SERIAL_CORE
help
::: To be written :::
config SERIAL_ANAKIN_CONSOLE
bool "Console on Anakin serial port"
depends on SERIAL_ANAKIN
select SERIAL_CORE_CONSOLE
help
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
...
...
@@ -190,7 +194,8 @@ config ANAKIN_DEFAULT_BAUDRATE
config SERIAL_AMBA
tristate "ARM AMBA serial port support"
depends on ARM && ARCH_INTEGRATOR
depends on ARM_AMBA
select SERIAL_CORE
help
This selects the ARM(R) AMBA(R) PrimeCell UART. If you have an
Integrator platform, say Y or M here.
...
...
@@ -200,6 +205,7 @@ config SERIAL_AMBA
config SERIAL_AMBA_CONSOLE
bool "Support for console on AMBA serial port"
depends on SERIAL_AMBA=y
select SERIAL_CORE_CONSOLE
---help---
Say Y here if you wish to use an AMBA PrimeCell UART as the system
console (the system console is the device which receives all kernel
...
...
@@ -214,18 +220,20 @@ config SERIAL_AMBA_CONSOLE
config SERIAL_INTEGRATOR
bool
depends on SERIAL_AMBA
=y
depends on SERIAL_AMBA
&& ARCH_INTEGRATOR
default y
config SERIAL_CLPS711X
tristate "CLPS711X serial port support"
depends on ARM && ARCH_CLPS711X
select SERIAL_CORE
help
::: To be written :::
config SERIAL_CLPS711X_CONSOLE
bool "Support for console on CLPS711X serial port"
depends on SERIAL_CLPS711X=y
select SERIAL_CORE_CONSOLE
help
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
...
...
@@ -243,6 +251,7 @@ config SERIAL_CLPS711X_OLD_NAME
config SERIAL_21285
tristate "DC21285 serial port support"
depends on ARM && FOOTBRIDGE
select SERIAL_CORE
help
If you have a machine based on a 21285 (Footbridge) StrongARM(R)/
PCI bridge you can enable its onboard serial port by enabling this
...
...
@@ -258,6 +267,7 @@ config SERIAL_21285_OLD
config SERIAL_21285_CONSOLE
bool "Console on DC21285 serial port"
depends on SERIAL_21285=y
select SERIAL_CORE_CONSOLE
help
If you have enabled the serial port on the 21285 footbridge you can
make it the console by answering Y to this option.
...
...
@@ -272,6 +282,7 @@ config SERIAL_21285_CONSOLE
config SERIAL_UART00
bool "Excalibur serial port (uart00) support"
depends on ARM && ARCH_CAMELOT
select SERIAL_CORE
help
Say Y here if you want to use the hard logic uart on Excalibur. This
driver also supports soft logic implentations of this uart core.
...
...
@@ -279,6 +290,7 @@ config SERIAL_UART00
config SERIAL_UART00_CONSOLE
bool "Support for console on Excalibur serial port"
depends on SERIAL_UART00
select SERIAL_CORE_CONSOLE
help
Say Y here if you want to support a serial console on an Excalibur
hard logic uart or uart00 IP core.
...
...
@@ -293,6 +305,7 @@ config SERIAL_UART00_CONSOLE
config SERIAL_SA1100
bool "SA1100 serial port support"
depends on ARM && ARCH_SA1100
select SERIAL_CORE
help
If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you
can enable its onboard serial port by enabling this option.
...
...
@@ -302,6 +315,7 @@ config SERIAL_SA1100
config SERIAL_SA1100_CONSOLE
bool "Console on SA1100 serial port"
depends on SERIAL_SA1100
select SERIAL_CORE_CONSOLE
help
If you have enabled the serial port on the SA1100/SA1110 StrongARM
CPU you can make it the console by answering Y to this option.
...
...
@@ -316,6 +330,8 @@ config SERIAL_SA1100_CONSOLE
config SERIAL_SUNCORE
bool
depends on SPARC32 || SPARC64
select SERIAL_CORE
select SERIAL_CORE_CONSOLE
default y
config SERIAL_SUNZILOG
...
...
@@ -352,6 +368,7 @@ config SERIAL_SUNSU_CONSOLE
config SERIAL_MUX
tristate "Serial MUX support"
depends on PARISC
select SERIAL_CORE
default y
---help---
Saying Y here will enable the hardware MUX serial driver for
...
...
@@ -369,6 +386,7 @@ config SERIAL_MUX
config SERIAL_MUX_CONSOLE
bool "Support for console on serial MUX"
depends on SERIAL_MUX
select SERIAL_CORE_CONSOLE
default y
config PDC_CONSOLE
...
...
@@ -406,6 +424,7 @@ config SERIAL_SUNSAB_CONSOLE
config V850E_UART
bool "NEC V850E on-chip UART support"
depends on V850E_MA1 || V850E_ME2 || V850E_TEG || V850E2_ANNA || V850E_AS85EP1
select SERIAL_CORE
default y
config V850E_UARTB
...
...
@@ -416,10 +435,12 @@ config V850E_UARTB
config V850E_UART_CONSOLE
bool "Use NEC V850E on-chip UART for console"
depends on V850E_UART
select SERIAL_CORE_CONSOLE
config SERIAL98
tristate "PC-9800 8251-based primary serial port support"
depends on X86_PC9800
select SERIAL_CORE
help
If you want to use standard primary serial ports on PC-9800,
say Y. Otherwise, say N.
...
...
@@ -427,16 +448,13 @@ config SERIAL98
config SERIAL98_CONSOLE
bool "Support for console on PC-9800 standard serial port"
depends on SERIAL98=y
select SERIAL_CORE_CONSOLE
config SERIAL_CORE
tristate
default m if SERIAL_AMBA!=y && SERIAL_CLPS711X!=y && SERIAL_21285!=y && !SERIAL_SA1100 && !SERIAL_ANAKIN && !SERIAL_UART00 && SERIAL_8250!=y && SERIAL_MUX!=y && !SERIAL_ROCKETPORT && !SERIAL_SUNCORE && !V850E_UART && SERIAL_PMACZILOG!=y && (SERIAL_AMBA=m || SERIAL_CLPS711X=m || SERIAL_21285=m || SERIAL_8250=m || SERIAL_MUX=m || SERIAL98=m || SERIAL_PMACZILOG=m)
default y if SERIAL_AMBA=y || SERIAL_CLPS711X=y || SERIAL_21285=y || SERIAL_SA1100 || SERIAL_ANAKIN || SERIAL_UART00 || SERIAL_8250=y || SERIAL_MUX=y || SERIAL_ROCKETPORT || SERIAL_SUNCORE || V850E_UART || SERIAL98=y || SERIAL_PMACZILOG=y
config SERIAL_CORE_CONSOLE
bool
depends on SERIAL_AMBA_CONSOLE || SERIAL_CLPS711X_CONSOLE || SERIAL_21285_CONSOLE || SERIAL_SA1100_CONSOLE || SERIAL_ANAKIN_CONSOLE || SERIAL_UART00_CONSOLE || SERIAL_8250_CONSOLE || SERIAL_MUX_CONSOLE || SERIAL_SUNZILOG_CONSOLE || SERIAL_SUNSU_CONSOLE || SERIAL_SUNSAB_CONSOLE || V850E_UART_CONSOLE || SERIAL98_CONSOLE || SERIAL_PMACZILOG_CONSOLE
default y
config SERIAL_68328
bool "68328 serial support"
...
...
@@ -476,6 +494,7 @@ config SERIAL_68360
config SERIAL_PMACZILOG
tristate "PowerMac z85c30 ESCC support"
depends on PPC_OF
select SERIAL_CORE
help
This driver supports the Zilog z85C30 serial ports found on
PowerMac machines.
...
...
@@ -484,6 +503,7 @@ config SERIAL_PMACZILOG
config SERIAL_PMACZILOG_CONSOLE
bool "Console on PowerMac z85c30 serial port"
depends on SERIAL_PMACZILOG=y
select SERIAL_CORE_CONSOLE
help
If you would like to be able to use the z85c30 serial port
on your PowerMac as the console, you can do so by answering
...
...
drivers/serial/Makefile
View file @
3cbbbd88
...
...
@@ -11,10 +11,10 @@ serial-8250-$(CONFIG_PNP) += 8250_pnp.o
serial-8250-$(CONFIG_SERIAL_8250_HCDP)
+=
8250_hcdp.o
serial-8250-$(CONFIG_SERIAL_8250_ACPI)
+=
8250_acpi.o
obj-$(CONFIG_SERIAL_CORE)
+=
core.o
obj-$(CONFIG_SERIAL_CORE)
+=
serial_
core.o
obj-$(CONFIG_SERIAL_21285)
+=
21285.o
obj-$(CONFIG_SERIAL_8250)
+=
8250.o
$
(
serial-8250-y
)
obj-$(CONFIG_SERIAL_8250_CS)
+=
8250
_cs.o
obj-$(CONFIG_SERIAL_8250_CS)
+=
serial
_cs.o
obj-$(CONFIG_SERIAL_8250_ACORN)
+=
8250_acorn.o
obj-$(CONFIG_SERIAL_ANAKIN)
+=
anakin.o
obj-$(CONFIG_SERIAL_AMBA)
+=
amba.o
...
...
drivers/serial/clps711x.c
View file @
3cbbbd88
...
...
@@ -104,7 +104,7 @@ static void clps711xuart_enable_ms(struct uart_port *port)
{
}
static
void
clps711xuart_int_rx
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
clps711xuart_int_rx
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
uart_port
*
port
=
dev_id
;
struct
tty_struct
*
tty
=
port
->
info
->
tty
;
...
...
@@ -139,7 +139,7 @@ static void clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *regs)
}
out:
tty_flip_buffer_push
(
tty
);
return
;
return
IRQ_HANDLED
;
handle_error:
if
(
ch
&
UARTDR_PARERR
)
...
...
@@ -180,7 +180,7 @@ static void clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *regs)
goto
error_return
;
}
static
void
clps711xuart_int_tx
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
clps711xuart_int_tx
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
uart_port
*
port
=
dev_id
;
struct
circ_buf
*
xmit
=
&
port
->
info
->
xmit
;
...
...
@@ -190,11 +190,11 @@ static void clps711xuart_int_tx(int irq, void *dev_id, struct pt_regs *regs)
clps_writel
(
port
->
x_char
,
UARTDR
(
port
));
port
->
icount
.
tx
++
;
port
->
x_char
=
0
;
return
;
return
IRQ_HANDLED
;
}
if
(
uart_circ_empty
(
xmit
)
||
uart_tx_stopped
(
port
))
{
clps711xuart_stop_tx
(
port
,
0
);
return
;
return
IRQ_HANDLED
;
}
count
=
port
->
fifosize
>>
1
;
...
...
@@ -211,6 +211,8 @@ static void clps711xuart_int_tx(int irq, void *dev_id, struct pt_regs *regs)
if
(
uart_circ_empty
(
xmit
))
clps711xuart_stop_tx
(
port
,
0
);
return
IRQ_HANDLED
;
}
static
unsigned
int
clps711xuart_tx_empty
(
struct
uart_port
*
port
)
...
...
drivers/serial/sa1100.c
View file @
3cbbbd88
...
...
@@ -862,8 +862,8 @@ static int sa1100_serial_suspend(struct device *_dev, u32 state, u32 level)
{
struct
sa1100_port
*
sport
=
dev_get_drvdata
(
_dev
);
if
(
sport
)
uart_suspend_port
(
&
sa1100_reg
,
&
sport
->
port
,
level
);
if
(
sport
&&
level
==
SUSPEND_DISABLE
)
uart_suspend_port
(
&
sa1100_reg
,
&
sport
->
port
);
return
0
;
}
...
...
@@ -872,8 +872,8 @@ static int sa1100_serial_resume(struct device *_dev, u32 level)
{
struct
sa1100_port
*
sport
=
dev_get_drvdata
(
_dev
);
if
(
sport
)
uart_resume_port
(
&
sa1100_reg
,
&
sport
->
port
,
level
);
if
(
sport
&&
level
==
RESUME_ENABLE
)
uart_resume_port
(
&
sa1100_reg
,
&
sport
->
port
);
return
0
;
}
...
...
drivers/serial/core.c
→
drivers/serial/
serial_
core.c
View file @
3cbbbd88
...
...
@@ -1875,84 +1875,72 @@ static void uart_change_pm(struct uart_state *state, int pm_state)
state
->
pm_state
=
pm_state
;
}
int
uart_suspend_port
(
struct
uart_driver
*
drv
,
struct
uart_port
*
port
,
u32
level
)
int
uart_suspend_port
(
struct
uart_driver
*
drv
,
struct
uart_port
*
port
)
{
struct
uart_state
*
state
=
drv
->
state
+
port
->
line
;
down
(
&
state
->
sem
);
switch
(
level
)
{
case
SUSPEND_SAVE_STATE
:
if
(
state
->
info
&&
state
->
info
->
flags
&
UIF_INITIALIZED
)
{
struct
uart_ops
*
ops
=
port
->
ops
;
if
(
state
->
info
&&
state
->
info
->
flags
&
UIF_INITIALIZED
)
{
struct
uart_ops
*
ops
=
port
->
ops
;
spin_lock_irq
(
&
port
->
lock
);
ops
->
stop_tx
(
port
,
0
);
ops
->
set_mctrl
(
port
,
0
);
ops
->
stop_rx
(
port
);
spin_unlock_irq
(
&
port
->
lock
);
/*
* Wait for the transmitter to empty.
*/
while
(
!
ops
->
tx_empty
(
port
))
{
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
10
*
HZ
/
1000
);
}
set_current_state
(
TASK_RUNNING
);
ops
->
shutdown
(
port
);
}
break
;
spin_lock_irq
(
&
port
->
lock
);
ops
->
stop_tx
(
port
,
0
);
ops
->
set_mctrl
(
port
,
0
);
ops
->
stop_rx
(
port
);
spin_unlock_irq
(
&
port
->
lock
);
case
SUSPEND_POWER_DOWN
:
/*
*
Disable the console device before suspending
.
*
Wait for the transmitter to empty
.
*/
if
(
uart_console
(
port
))
port
->
cons
->
flags
&=
~
CON_ENABLED
;
while
(
!
ops
->
tx_empty
(
port
))
{
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
10
*
HZ
/
1000
);
}
set_current_state
(
TASK_RUNNING
);
uart_change_pm
(
state
,
3
);
break
;
ops
->
shutdown
(
port
);
}
/*
* Disable the console device before suspending.
*/
if
(
uart_console
(
port
))
port
->
cons
->
flags
&=
~
CON_ENABLED
;
uart_change_pm
(
state
,
3
);
up
(
&
state
->
sem
);
return
0
;
}
int
uart_resume_port
(
struct
uart_driver
*
drv
,
struct
uart_port
*
port
,
u32
level
)
int
uart_resume_port
(
struct
uart_driver
*
drv
,
struct
uart_port
*
port
)
{
struct
uart_state
*
state
=
drv
->
state
+
port
->
line
;
down
(
&
state
->
sem
);
switch
(
level
)
{
case
RESUME_POWER_ON
:
uart_change_pm
(
state
,
0
);
uart_change_pm
(
state
,
0
);
/*
* Re-enable the console device after suspending.
*/
if
(
uart_console
(
port
))
{
uart_change_speed
(
state
,
NULL
);
port
->
cons
->
flags
|=
CON_ENABLED
;
}
break
;
/*
* Re-enable the console device after suspending.
*/
if
(
uart_console
(
port
))
{
uart_change_speed
(
state
,
NULL
);
port
->
cons
->
flags
|=
CON_ENABLED
;
}
case
RESUME_RESTORE_STATE
:
if
(
state
->
info
&&
state
->
info
->
flags
&
UIF_INITIALIZED
)
{
struct
uart_ops
*
ops
=
port
->
ops
;
if
(
state
->
info
&&
state
->
info
->
flags
&
UIF_INITIALIZED
)
{
struct
uart_ops
*
ops
=
port
->
ops
;
ops
->
set_mctrl
(
port
,
0
);
ops
->
startup
(
port
);
uart_change_speed
(
state
,
NULL
);
spin_lock_irq
(
&
port
->
lock
);
ops
->
set_mctrl
(
port
,
port
->
mctrl
);
ops
->
start_tx
(
port
,
0
);
spin_unlock_irq
(
&
port
->
lock
);
}
break
;
ops
->
set_mctrl
(
port
,
0
);
ops
->
startup
(
port
);
uart_change_speed
(
state
,
NULL
);
spin_lock_irq
(
&
port
->
lock
);
ops
->
set_mctrl
(
port
,
port
->
mctrl
);
ops
->
start_tx
(
port
,
0
);
spin_unlock_irq
(
&
port
->
lock
);
}
up
(
&
state
->
sem
);
...
...
drivers/serial/
8250
_cs.c
→
drivers/serial/
serial
_cs.c
View file @
3cbbbd88
File moved
include/linux/serial_core.h
View file @
3cbbbd88
...
...
@@ -67,6 +67,12 @@
#define PORT_PC9861 45
#define PORT_PC9801_101 46
/* DZ */
#define PORT_DZ 47
/* Parisc type numbers. */
#define PORT_MUX 48
/* Macintosh Zilog type numbers */
#define PORT_MAC_ZILOG 50
/* m68k : not yet implemented */
#define PORT_PMAC_ZILOG 51
...
...
@@ -319,8 +325,8 @@ int uart_remove_one_port(struct uart_driver *reg, struct uart_port *port);
/*
* Power Management
*/
int
uart_suspend_port
(
struct
uart_driver
*
reg
,
struct
uart_port
*
port
,
u32
level
);
int
uart_resume_port
(
struct
uart_driver
*
reg
,
struct
uart_port
*
port
,
u32
level
);
int
uart_suspend_port
(
struct
uart_driver
*
reg
,
struct
uart_port
*
port
);
int
uart_resume_port
(
struct
uart_driver
*
reg
,
struct
uart_port
*
port
);
#define uart_circ_empty(circ) ((circ)->head == (circ)->tail)
#define uart_circ_clear(circ) ((circ)->head = (circ)->tail = 0)
...
...
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