Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d830fa45
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
d830fa45
编写于
12月 16, 2008
作者:
P
Paul Mundt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
serial: sh-sci: Tidy up fifo overrun error handling.
Signed-off-by:
N
Paul Mundt
<
lethal@linux-sh.org
>
上级
762c69e3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
29 addition
and
27 deletion
+29
-27
drivers/serial/sh-sci.c
drivers/serial/sh-sci.c
+24
-21
drivers/serial/sh-sci.h
drivers/serial/sh-sci.h
+5
-6
未找到文件。
drivers/serial/sh-sci.c
浏览文件 @
d830fa45
...
...
@@ -625,6 +625,27 @@ static inline int sci_handle_errors(struct uart_port *port)
return
copied
;
}
static
inline
int
sci_handle_fifo_overrun
(
struct
uart_port
*
port
)
{
struct
tty_struct
*
tty
=
port
->
info
->
port
.
tty
;
int
copied
=
0
;
if
(
port
->
type
!=
PORT_SCIF
)
return
0
;
if
((
sci_in
(
port
,
SCLSR
)
&
SCIF_ORER
)
!=
0
)
{
sci_out
(
port
,
SCLSR
,
0
);
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
tty_flip_buffer_push
(
tty
);
dev_notice
(
port
->
dev
,
"overrun error
\n
"
);
copied
++
;
}
return
copied
;
}
static
inline
int
sci_handle_breaks
(
struct
uart_port
*
port
)
{
int
copied
=
0
;
...
...
@@ -647,20 +668,11 @@ static inline int sci_handle_breaks(struct uart_port *port)
dev_dbg
(
port
->
dev
,
"BREAK detected
\n
"
);
}
#if defined(SCIF_ORER)
/* XXX: Handle SCIF overrun error */
if
(
port
->
type
!=
PORT_SCI
&&
(
sci_in
(
port
,
SCLSR
)
&
SCIF_ORER
)
!=
0
)
{
sci_out
(
port
,
SCLSR
,
0
);
if
(
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
))
{
copied
++
;
dev_notice
(
port
->
dev
,
"overrun error
\n
"
);
}
}
#endif
if
(
copied
)
tty_flip_buffer_push
(
tty
);
copied
+=
sci_handle_fifo_overrun
(
port
);
return
copied
;
}
...
...
@@ -698,16 +710,7 @@ static irqreturn_t sci_er_interrupt(int irq, void *ptr)
sci_out
(
port
,
SCxSR
,
SCxSR_RDxF_CLEAR
(
port
));
}
}
else
{
#if defined(SCIF_ORER)
if
((
sci_in
(
port
,
SCLSR
)
&
SCIF_ORER
)
!=
0
)
{
struct
tty_struct
*
tty
=
port
->
info
->
port
.
tty
;
sci_out
(
port
,
SCLSR
,
0
);
tty_insert_flip_char
(
tty
,
0
,
TTY_OVERRUN
);
tty_flip_buffer_push
(
tty
);
dev_notice
(
port
->
dev
,
"overrun error
\n
"
);
}
#endif
sci_handle_fifo_overrun
(
port
);
sci_rx_interrupt
(
irq
,
ptr
);
}
...
...
drivers/serial/sh-sci.h
浏览文件 @
d830fa45
...
...
@@ -232,6 +232,10 @@
# define SCIF_TXROOM_MAX 16
#endif
#ifndef SCIF_ORER
#define SCIF_ORER 0x0000
#endif
#define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
#define SCxSR_ERRORS(port) (((port)->type == PORT_SCI) ? SCI_ERRORS : SCIF_ERRORS)
#define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_RDF)
...
...
@@ -239,12 +243,7 @@
#define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
#define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
#define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
#if defined(CONFIG_CPU_SUBTYPE_SH7705)
# define SCxSR_ORER(port) (((port)->type == PORT_SCI) ? SCI_ORER : SCIF_ORER)
#else
# define SCxSR_ORER(port) (((port)->type == PORT_SCI) ? SCI_ORER : 0x0000)
#endif
#define SCxSR_ORER(port) (((port)->type == PORT_SCI) ? SCI_ORER : SCIF_ORER)
#if defined(CONFIG_CPU_SUBTYPE_SH7705) || \
defined(CONFIG_CPU_SUBTYPE_SH7720) || \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录