Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
8b87e1ba
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8b87e1ba
编写于
1月 12, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/home/rmk/linux-2.6-serial
上级
a2b421fe
f392ecfa
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
36 addition
and
35 deletion
+36
-35
drivers/serial/8250.c
drivers/serial/8250.c
+6
-5
drivers/serial/crisv10.c
drivers/serial/crisv10.c
+4
-7
drivers/serial/pmac_zilog.c
drivers/serial/pmac_zilog.c
+12
-11
drivers/serial/serial_core.c
drivers/serial/serial_core.c
+8
-7
drivers/serial/serial_txx9.c
drivers/serial/serial_txx9.c
+6
-5
未找到文件。
drivers/serial/8250.c
浏览文件 @
8b87e1ba
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include <linux/serial.h>
#include <linux/serial.h>
#include <linux/serial_8250.h>
#include <linux/serial_8250.h>
#include <linux/nmi.h>
#include <linux/nmi.h>
#include <linux/mutex.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -2467,7 +2468,7 @@ static struct platform_device *serial8250_isa_devs;
...
@@ -2467,7 +2468,7 @@ static struct platform_device *serial8250_isa_devs;
* 16x50 serial ports to be configured at run-time, to support PCMCIA
* 16x50 serial ports to be configured at run-time, to support PCMCIA
* modems and PCI multiport cards.
* modems and PCI multiport cards.
*/
*/
static
DE
CLARE_MUTEX
(
serial_sem
);
static
DE
FINE_MUTEX
(
serial_mutex
);
static
struct
uart_8250_port
*
serial8250_find_match_or_unused
(
struct
uart_port
*
port
)
static
struct
uart_8250_port
*
serial8250_find_match_or_unused
(
struct
uart_port
*
port
)
{
{
...
@@ -2522,7 +2523,7 @@ int serial8250_register_port(struct uart_port *port)
...
@@ -2522,7 +2523,7 @@ int serial8250_register_port(struct uart_port *port)
if
(
port
->
uartclk
==
0
)
if
(
port
->
uartclk
==
0
)
return
-
EINVAL
;
return
-
EINVAL
;
down
(
&
serial_sem
);
mutex_lock
(
&
serial_mutex
);
uart
=
serial8250_find_match_or_unused
(
port
);
uart
=
serial8250_find_match_or_unused
(
port
);
if
(
uart
)
{
if
(
uart
)
{
...
@@ -2544,7 +2545,7 @@ int serial8250_register_port(struct uart_port *port)
...
@@ -2544,7 +2545,7 @@ int serial8250_register_port(struct uart_port *port)
if
(
ret
==
0
)
if
(
ret
==
0
)
ret
=
uart
->
port
.
line
;
ret
=
uart
->
port
.
line
;
}
}
up
(
&
serial_sem
);
mutex_unlock
(
&
serial_mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -2561,7 +2562,7 @@ void serial8250_unregister_port(int line)
...
@@ -2561,7 +2562,7 @@ void serial8250_unregister_port(int line)
{
{
struct
uart_8250_port
*
uart
=
&
serial8250_ports
[
line
];
struct
uart_8250_port
*
uart
=
&
serial8250_ports
[
line
];
down
(
&
serial_sem
);
mutex_lock
(
&
serial_mutex
);
uart_remove_one_port
(
&
serial8250_reg
,
&
uart
->
port
);
uart_remove_one_port
(
&
serial8250_reg
,
&
uart
->
port
);
if
(
serial8250_isa_devs
)
{
if
(
serial8250_isa_devs
)
{
uart
->
port
.
flags
&=
~
UPF_BOOT_AUTOCONF
;
uart
->
port
.
flags
&=
~
UPF_BOOT_AUTOCONF
;
...
@@ -2571,7 +2572,7 @@ void serial8250_unregister_port(int line)
...
@@ -2571,7 +2572,7 @@ void serial8250_unregister_port(int line)
}
else
{
}
else
{
uart
->
port
.
dev
=
NULL
;
uart
->
port
.
dev
=
NULL
;
}
}
up
(
&
serial_sem
);
mutex_unlock
(
&
serial_mutex
);
}
}
EXPORT_SYMBOL
(
serial8250_unregister_port
);
EXPORT_SYMBOL
(
serial8250_unregister_port
);
...
...
drivers/serial/crisv10.c
浏览文件 @
8b87e1ba
...
@@ -442,6 +442,7 @@ static char *serial_version = "$Revision: 1.25 $";
...
@@ -442,6 +442,7 @@ static char *serial_version = "$Revision: 1.25 $";
#include <linux/init.h>
#include <linux/init.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/mutex.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -1315,11 +1316,7 @@ static const struct control_pins e100_modem_pins[NR_PORTS] =
...
@@ -1315,11 +1316,7 @@ static const struct control_pins e100_modem_pins[NR_PORTS] =
* memory if large numbers of serial ports are open.
* memory if large numbers of serial ports are open.
*/
*/
static
unsigned
char
*
tmp_buf
;
static
unsigned
char
*
tmp_buf
;
#ifdef DECLARE_MUTEX
static
DEFINE_MUTEX
(
tmp_buf_mutex
);
static
DECLARE_MUTEX
(
tmp_buf_sem
);
#else
static
struct
semaphore
tmp_buf_sem
=
MUTEX
;
#endif
/* Calculate the chartime depending on baudrate, numbor of bits etc. */
/* Calculate the chartime depending on baudrate, numbor of bits etc. */
static
void
update_char_time
(
struct
e100_serial
*
info
)
static
void
update_char_time
(
struct
e100_serial
*
info
)
...
@@ -3661,7 +3658,7 @@ rs_raw_write(struct tty_struct * tty, int from_user,
...
@@ -3661,7 +3658,7 @@ rs_raw_write(struct tty_struct * tty, int from_user,
* design.
* design.
*/
*/
if
(
from_user
)
{
if
(
from_user
)
{
down
(
&
tmp_buf_sem
);
mutex_lock
(
&
tmp_buf_mutex
);
while
(
1
)
{
while
(
1
)
{
int
c1
;
int
c1
;
c
=
CIRC_SPACE_TO_END
(
info
->
xmit
.
head
,
c
=
CIRC_SPACE_TO_END
(
info
->
xmit
.
head
,
...
@@ -3692,7 +3689,7 @@ rs_raw_write(struct tty_struct * tty, int from_user,
...
@@ -3692,7 +3689,7 @@ rs_raw_write(struct tty_struct * tty, int from_user,
count
-=
c
;
count
-=
c
;
ret
+=
c
;
ret
+=
c
;
}
}
up
(
&
tmp_buf_sem
);
mutex_unlock
(
&
tmp_buf_mutex
);
}
else
{
}
else
{
cli
();
cli
();
while
(
count
)
{
while
(
count
)
{
...
...
drivers/serial/pmac_zilog.c
浏览文件 @
8b87e1ba
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
#include <linux/pmu.h>
#include <linux/pmu.h>
#include <linux/bitops.h>
#include <linux/bitops.h>
#include <linux/sysrq.h>
#include <linux/sysrq.h>
#include <linux/mutex.h>
#include <asm/sections.h>
#include <asm/sections.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -96,7 +97,7 @@ MODULE_LICENSE("GPL");
...
@@ -96,7 +97,7 @@ MODULE_LICENSE("GPL");
*/
*/
static
struct
uart_pmac_port
pmz_ports
[
MAX_ZS_PORTS
];
static
struct
uart_pmac_port
pmz_ports
[
MAX_ZS_PORTS
];
static
int
pmz_ports_count
;
static
int
pmz_ports_count
;
static
DE
CLARE_MUTEX
(
pmz_irq_sem
);
static
DE
FINE_MUTEX
(
pmz_irq_mutex
);
static
struct
uart_driver
pmz_uart_reg
=
{
static
struct
uart_driver
pmz_uart_reg
=
{
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
...
@@ -922,7 +923,7 @@ static int pmz_startup(struct uart_port *port)
...
@@ -922,7 +923,7 @@ static int pmz_startup(struct uart_port *port)
if
(
uap
->
node
==
NULL
)
if
(
uap
->
node
==
NULL
)
return
-
ENODEV
;
return
-
ENODEV
;
down
(
&
pmz_irq_sem
);
mutex_lock
(
&
pmz_irq_mutex
);
uap
->
flags
|=
PMACZILOG_FLAG_IS_OPEN
;
uap
->
flags
|=
PMACZILOG_FLAG_IS_OPEN
;
...
@@ -940,11 +941,11 @@ static int pmz_startup(struct uart_port *port)
...
@@ -940,11 +941,11 @@ static int pmz_startup(struct uart_port *port)
dev_err
(
&
uap
->
dev
->
ofdev
.
dev
,
dev_err
(
&
uap
->
dev
->
ofdev
.
dev
,
"Unable to register zs interrupt handler.
\n
"
);
"Unable to register zs interrupt handler.
\n
"
);
pmz_set_scc_power
(
uap
,
0
);
pmz_set_scc_power
(
uap
,
0
);
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
return
-
ENXIO
;
return
-
ENXIO
;
}
}
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
/* Right now, we deal with delay by blocking here, I'll be
/* Right now, we deal with delay by blocking here, I'll be
* smarter later on
* smarter later on
...
@@ -981,7 +982,7 @@ static void pmz_shutdown(struct uart_port *port)
...
@@ -981,7 +982,7 @@ static void pmz_shutdown(struct uart_port *port)
if
(
uap
->
node
==
NULL
)
if
(
uap
->
node
==
NULL
)
return
;
return
;
down
(
&
pmz_irq_sem
);
mutex_lock
(
&
pmz_irq_mutex
);
/* Release interrupt handler */
/* Release interrupt handler */
free_irq
(
uap
->
port
.
irq
,
uap
);
free_irq
(
uap
->
port
.
irq
,
uap
);
...
@@ -1002,7 +1003,7 @@ static void pmz_shutdown(struct uart_port *port)
...
@@ -1002,7 +1003,7 @@ static void pmz_shutdown(struct uart_port *port)
if
(
ZS_IS_CONS
(
uap
)
||
ZS_IS_ASLEEP
(
uap
))
{
if
(
ZS_IS_CONS
(
uap
)
||
ZS_IS_ASLEEP
(
uap
))
{
spin_unlock_irqrestore
(
&
port
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
port
->
lock
,
flags
);
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
return
;
return
;
}
}
...
@@ -1019,7 +1020,7 @@ static void pmz_shutdown(struct uart_port *port)
...
@@ -1019,7 +1020,7 @@ static void pmz_shutdown(struct uart_port *port)
spin_unlock_irqrestore
(
&
port
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
port
->
lock
,
flags
);
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
pmz_debug
(
"pmz: shutdown() done.
\n
"
);
pmz_debug
(
"pmz: shutdown() done.
\n
"
);
}
}
...
@@ -1591,7 +1592,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
...
@@ -1591,7 +1592,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
state
=
pmz_uart_reg
.
state
+
uap
->
port
.
line
;
state
=
pmz_uart_reg
.
state
+
uap
->
port
.
line
;
down
(
&
pmz_irq_sem
);
mutex_lock
(
&
pmz_irq_mutex
);
down
(
&
state
->
sem
);
down
(
&
state
->
sem
);
spin_lock_irqsave
(
&
uap
->
port
.
lock
,
flags
);
spin_lock_irqsave
(
&
uap
->
port
.
lock
,
flags
);
...
@@ -1624,7 +1625,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
...
@@ -1624,7 +1625,7 @@ static int pmz_suspend(struct macio_dev *mdev, pm_message_t pm_state)
pmz_set_scc_power
(
uap
,
0
);
pmz_set_scc_power
(
uap
,
0
);
up
(
&
state
->
sem
);
up
(
&
state
->
sem
);
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
pmz_debug
(
"suspend, switching complete
\n
"
);
pmz_debug
(
"suspend, switching complete
\n
"
);
...
@@ -1651,7 +1652,7 @@ static int pmz_resume(struct macio_dev *mdev)
...
@@ -1651,7 +1652,7 @@ static int pmz_resume(struct macio_dev *mdev)
state
=
pmz_uart_reg
.
state
+
uap
->
port
.
line
;
state
=
pmz_uart_reg
.
state
+
uap
->
port
.
line
;
down
(
&
pmz_irq_sem
);
mutex_lock
(
&
pmz_irq_mutex
);
down
(
&
state
->
sem
);
down
(
&
state
->
sem
);
spin_lock_irqsave
(
&
uap
->
port
.
lock
,
flags
);
spin_lock_irqsave
(
&
uap
->
port
.
lock
,
flags
);
...
@@ -1685,7 +1686,7 @@ static int pmz_resume(struct macio_dev *mdev)
...
@@ -1685,7 +1686,7 @@ static int pmz_resume(struct macio_dev *mdev)
bail:
bail:
up
(
&
state
->
sem
);
up
(
&
state
->
sem
);
up
(
&
pmz_irq_sem
);
mutex_unlock
(
&
pmz_irq_mutex
);
/* Right now, we deal with delay by blocking here, I'll be
/* Right now, we deal with delay by blocking here, I'll be
* smarter later on
* smarter later on
...
...
drivers/serial/serial_core.c
浏览文件 @
8b87e1ba
...
@@ -33,6 +33,7 @@
...
@@ -33,6 +33,7 @@
#include <linux/device.h>
#include <linux/device.h>
#include <linux/serial.h>
/* for serial_state and serial_icounter_struct */
#include <linux/serial.h>
/* for serial_state and serial_icounter_struct */
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/mutex.h>
#include <asm/irq.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
...
@@ -47,7 +48,7 @@
...
@@ -47,7 +48,7 @@
/*
/*
* This is used to lock changes in serial line configuration.
* This is used to lock changes in serial line configuration.
*/
*/
static
DE
CLARE_MUTEX
(
port_sem
);
static
DE
FINE_MUTEX
(
port_mutex
);
#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
...
@@ -1472,7 +1473,7 @@ static struct uart_state *uart_get(struct uart_driver *drv, int line)
...
@@ -1472,7 +1473,7 @@ static struct uart_state *uart_get(struct uart_driver *drv, int line)
{
{
struct
uart_state
*
state
;
struct
uart_state
*
state
;
down
(
&
port_sem
);
mutex_lock
(
&
port_mutex
);
state
=
drv
->
state
+
line
;
state
=
drv
->
state
+
line
;
if
(
down_interruptible
(
&
state
->
sem
))
{
if
(
down_interruptible
(
&
state
->
sem
))
{
state
=
ERR_PTR
(
-
ERESTARTSYS
);
state
=
ERR_PTR
(
-
ERESTARTSYS
);
...
@@ -1509,7 +1510,7 @@ static struct uart_state *uart_get(struct uart_driver *drv, int line)
...
@@ -1509,7 +1510,7 @@ static struct uart_state *uart_get(struct uart_driver *drv, int line)
}
}
out:
out:
up
(
&
port_sem
);
mutex_unlock
(
&
port_mutex
);
return
state
;
return
state
;
}
}
...
@@ -2219,7 +2220,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
...
@@ -2219,7 +2220,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
state
=
drv
->
state
+
port
->
line
;
state
=
drv
->
state
+
port
->
line
;
down
(
&
port_sem
);
mutex_lock
(
&
port_mutex
);
if
(
state
->
port
)
{
if
(
state
->
port
)
{
ret
=
-
EINVAL
;
ret
=
-
EINVAL
;
goto
out
;
goto
out
;
...
@@ -2255,7 +2256,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
...
@@ -2255,7 +2256,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port)
register_console
(
port
->
cons
);
register_console
(
port
->
cons
);
out:
out:
up
(
&
port_sem
);
mutex_unlock
(
&
port_mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -2279,7 +2280,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
...
@@ -2279,7 +2280,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
printk
(
KERN_ALERT
"Removing wrong port: %p != %p
\n
"
,
printk
(
KERN_ALERT
"Removing wrong port: %p != %p
\n
"
,
state
->
port
,
port
);
state
->
port
,
port
);
down
(
&
port_sem
);
mutex_lock
(
&
port_mutex
);
/*
/*
* Remove the devices from devfs
* Remove the devices from devfs
...
@@ -2288,7 +2289,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
...
@@ -2288,7 +2289,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *port)
uart_unconfigure_port
(
drv
,
state
);
uart_unconfigure_port
(
drv
,
state
);
state
->
port
=
NULL
;
state
->
port
=
NULL
;
up
(
&
port_sem
);
mutex_unlock
(
&
port_mutex
);
return
0
;
return
0
;
}
}
...
...
drivers/serial/serial_txx9.c
浏览文件 @
8b87e1ba
...
@@ -52,6 +52,7 @@
...
@@ -52,6 +52,7 @@
#include <linux/tty_flip.h>
#include <linux/tty_flip.h>
#include <linux/serial_core.h>
#include <linux/serial_core.h>
#include <linux/serial.h>
#include <linux/serial.h>
#include <linux/mutex.h>
#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
...
@@ -1018,7 +1019,7 @@ static void serial_txx9_resume_port(int line)
...
@@ -1018,7 +1019,7 @@ static void serial_txx9_resume_port(int line)
uart_resume_port
(
&
serial_txx9_reg
,
&
serial_txx9_ports
[
line
].
port
);
uart_resume_port
(
&
serial_txx9_reg
,
&
serial_txx9_ports
[
line
].
port
);
}
}
static
DE
CLARE_MUTEX
(
serial_txx9_sem
);
static
DE
FINE_MUTEX
(
serial_txx9_mutex
);
/**
/**
* serial_txx9_register_port - register a serial port
* serial_txx9_register_port - register a serial port
...
@@ -1037,7 +1038,7 @@ static int __devinit serial_txx9_register_port(struct uart_port *port)
...
@@ -1037,7 +1038,7 @@ static int __devinit serial_txx9_register_port(struct uart_port *port)
struct
uart_txx9_port
*
uart
;
struct
uart_txx9_port
*
uart
;
int
ret
=
-
ENOSPC
;
int
ret
=
-
ENOSPC
;
down
(
&
serial_txx9_sem
);
mutex_lock
(
&
serial_txx9_mutex
);
for
(
i
=
0
;
i
<
UART_NR
;
i
++
)
{
for
(
i
=
0
;
i
<
UART_NR
;
i
++
)
{
uart
=
&
serial_txx9_ports
[
i
];
uart
=
&
serial_txx9_ports
[
i
];
if
(
uart
->
port
.
type
==
PORT_UNKNOWN
)
if
(
uart
->
port
.
type
==
PORT_UNKNOWN
)
...
@@ -1058,7 +1059,7 @@ static int __devinit serial_txx9_register_port(struct uart_port *port)
...
@@ -1058,7 +1059,7 @@ static int __devinit serial_txx9_register_port(struct uart_port *port)
if
(
ret
==
0
)
if
(
ret
==
0
)
ret
=
uart
->
port
.
line
;
ret
=
uart
->
port
.
line
;
}
}
up
(
&
serial_txx9_sem
);
mutex_unlock
(
&
serial_txx9_mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -1073,7 +1074,7 @@ static void __devexit serial_txx9_unregister_port(int line)
...
@@ -1073,7 +1074,7 @@ static void __devexit serial_txx9_unregister_port(int line)
{
{
struct
uart_txx9_port
*
uart
=
&
serial_txx9_ports
[
line
];
struct
uart_txx9_port
*
uart
=
&
serial_txx9_ports
[
line
];
down
(
&
serial_txx9_sem
);
mutex_lock
(
&
serial_txx9_mutex
);
uart_remove_one_port
(
&
serial_txx9_reg
,
&
uart
->
port
);
uart_remove_one_port
(
&
serial_txx9_reg
,
&
uart
->
port
);
uart
->
port
.
flags
=
0
;
uart
->
port
.
flags
=
0
;
uart
->
port
.
type
=
PORT_UNKNOWN
;
uart
->
port
.
type
=
PORT_UNKNOWN
;
...
@@ -1082,7 +1083,7 @@ static void __devexit serial_txx9_unregister_port(int line)
...
@@ -1082,7 +1083,7 @@ static void __devexit serial_txx9_unregister_port(int line)
uart
->
port
.
membase
=
0
;
uart
->
port
.
membase
=
0
;
uart
->
port
.
dev
=
NULL
;
uart
->
port
.
dev
=
NULL
;
uart_add_one_port
(
&
serial_txx9_reg
,
&
uart
->
port
);
uart_add_one_port
(
&
serial_txx9_reg
,
&
uart
->
port
);
up
(
&
serial_txx9_sem
);
mutex_unlock
(
&
serial_txx9_mutex
);
}
}
/*
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录