Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
b129cbc9
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b129cbc9
编写于
9月 11, 2018
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
amiserial: switch to ->[sg]et_serial()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
0aad5ad5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
45 deletion
+33
-45
drivers/tty/amiserial.c
drivers/tty/amiserial.c
+33
-45
未找到文件。
drivers/tty/amiserial.c
浏览文件 @
b129cbc9
...
...
@@ -996,63 +996,55 @@ static void rs_unthrottle(struct tty_struct * tty)
* ------------------------------------------------------------
*/
static
int
get_serial_info
(
struct
tty_struct
*
tty
,
struct
serial_state
*
state
,
struct
serial_struct
__user
*
retinfo
)
static
int
get_serial_info
(
struct
tty_struct
*
tty
,
struct
serial_struct
*
ss
)
{
struct
serial_struct
tmp
;
memset
(
&
tmp
,
0
,
sizeof
(
tmp
));
struct
serial_state
*
state
=
tty
->
driver_data
;
tty_lock
(
tty
);
tmp
.
line
=
tty
->
index
;
tmp
.
port
=
state
->
port
;
tmp
.
flags
=
state
->
tport
.
flags
;
tmp
.
xmit_fifo_size
=
state
->
xmit_fifo_size
;
tmp
.
baud_base
=
state
->
baud_base
;
tmp
.
close_delay
=
state
->
tport
.
close_delay
;
tmp
.
closing_wait
=
state
->
tport
.
closing_wait
;
tmp
.
custom_divisor
=
state
->
custom_divisor
;
ss
->
line
=
tty
->
index
;
ss
->
port
=
state
->
port
;
ss
->
flags
=
state
->
tport
.
flags
;
ss
->
xmit_fifo_size
=
state
->
xmit_fifo_size
;
ss
->
baud_base
=
state
->
baud_base
;
ss
->
close_delay
=
state
->
tport
.
close_delay
;
ss
->
closing_wait
=
state
->
tport
.
closing_wait
;
ss
->
custom_divisor
=
state
->
custom_divisor
;
tty_unlock
(
tty
);
if
(
copy_to_user
(
retinfo
,
&
tmp
,
sizeof
(
*
retinfo
)))
return
-
EFAULT
;
return
0
;
}
static
int
set_serial_info
(
struct
tty_struct
*
tty
,
struct
serial_state
*
state
,
struct
serial_struct
__user
*
new_info
)
static
int
set_serial_info
(
struct
tty_struct
*
tty
,
struct
serial_struct
*
ss
)
{
struct
serial_state
*
state
=
tty
->
driver_data
;
struct
tty_port
*
port
=
&
state
->
tport
;
struct
serial_struct
new_serial
;
bool
change_spd
;
int
retval
=
0
;
if
(
copy_from_user
(
&
new_serial
,
new_info
,
sizeof
(
new_serial
)))
return
-
EFAULT
;
tty_lock
(
tty
);
change_spd
=
((
new_serial
.
flags
^
port
->
flags
)
&
ASYNC_SPD_MASK
)
||
new_serial
.
custom_divisor
!=
state
->
custom_divisor
;
if
(
new_serial
.
irq
||
new_serial
.
port
!=
state
->
port
||
new_serial
.
xmit_fifo_size
!=
state
->
xmit_fifo_size
)
{
change_spd
=
((
ss
->
flags
^
port
->
flags
)
&
ASYNC_SPD_MASK
)
||
ss
->
custom_divisor
!=
state
->
custom_divisor
;
if
(
ss
->
irq
||
ss
->
port
!=
state
->
port
||
ss
->
xmit_fifo_size
!=
state
->
xmit_fifo_size
)
{
tty_unlock
(
tty
);
return
-
EINVAL
;
}
if
(
!
serial_isroot
())
{
if
((
new_serial
.
baud_base
!=
state
->
baud_base
)
||
(
new_serial
.
close_delay
!=
port
->
close_delay
)
||
(
new_serial
.
xmit_fifo_size
!=
state
->
xmit_fifo_size
)
||
((
new_serial
.
flags
&
~
ASYNC_USR_MASK
)
!=
if
((
ss
->
baud_base
!=
state
->
baud_base
)
||
(
ss
->
close_delay
!=
port
->
close_delay
)
||
(
ss
->
xmit_fifo_size
!=
state
->
xmit_fifo_size
)
||
((
ss
->
flags
&
~
ASYNC_USR_MASK
)
!=
(
port
->
flags
&
~
ASYNC_USR_MASK
)))
{
tty_unlock
(
tty
);
return
-
EPERM
;
}
port
->
flags
=
((
port
->
flags
&
~
ASYNC_USR_MASK
)
|
(
new_serial
.
flags
&
ASYNC_USR_MASK
));
state
->
custom_divisor
=
new_serial
.
custom_divisor
;
(
ss
->
flags
&
ASYNC_USR_MASK
));
state
->
custom_divisor
=
ss
->
custom_divisor
;
goto
check_and_exit
;
}
if
(
new_serial
.
baud_base
<
9600
)
{
if
(
ss
->
baud_base
<
9600
)
{
tty_unlock
(
tty
);
return
-
EINVAL
;
}
...
...
@@ -1062,19 +1054,19 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,
* At this point, we start making changes.....
*/
state
->
baud_base
=
new_serial
.
baud_base
;
state
->
baud_base
=
ss
->
baud_base
;
port
->
flags
=
((
port
->
flags
&
~
ASYNC_FLAGS
)
|
(
new_serial
.
flags
&
ASYNC_FLAGS
));
state
->
custom_divisor
=
new_serial
.
custom_divisor
;
port
->
close_delay
=
new_serial
.
close_delay
*
HZ
/
100
;
port
->
closing_wait
=
new_serial
.
closing_wait
*
HZ
/
100
;
(
ss
->
flags
&
ASYNC_FLAGS
));
state
->
custom_divisor
=
ss
->
custom_divisor
;
port
->
close_delay
=
ss
->
close_delay
*
HZ
/
100
;
port
->
closing_wait
=
ss
->
closing_wait
*
HZ
/
100
;
port
->
low_latency
=
(
port
->
flags
&
ASYNC_LOW_LATENCY
)
?
1
:
0
;
check_and_exit:
if
(
tty_port_initialized
(
port
))
{
if
(
change_spd
)
{
/* warn about deprecation unless clearing */
if
(
new_serial
.
flags
&
ASYNC_SPD_MASK
)
if
(
ss
->
flags
&
ASYNC_SPD_MASK
)
dev_warn_ratelimited
(
tty
->
dev
,
"use of SPD flags is deprecated
\n
"
);
change_speed
(
tty
,
state
,
NULL
);
}
...
...
@@ -1084,7 +1076,6 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,
return
retval
;
}
/*
* get_lsr_info - get line status register info
*
...
...
@@ -1224,18 +1215,13 @@ static int rs_ioctl(struct tty_struct *tty,
if
(
serial_paranoia_check
(
info
,
tty
->
name
,
"rs_ioctl"
))
return
-
ENODEV
;
if
((
cmd
!=
TIOCGSERIAL
)
&&
(
cmd
!=
TIOCSSERIAL
)
&&
(
cmd
!=
TIOCSERCONFIG
)
&&
(
cmd
!=
TIOCSERGSTRUCT
)
&&
if
((
cmd
!=
TIOCSERCONFIG
)
&&
(
cmd
!=
TIOCSERGSTRUCT
)
&&
(
cmd
!=
TIOCMIWAIT
)
&&
(
cmd
!=
TIOCGICOUNT
))
{
if
(
tty_io_error
(
tty
))
return
-
EIO
;
}
switch
(
cmd
)
{
case
TIOCGSERIAL
:
return
get_serial_info
(
tty
,
info
,
argp
);
case
TIOCSSERIAL
:
return
set_serial_info
(
tty
,
info
,
argp
);
case
TIOCSERCONFIG
:
return
0
;
...
...
@@ -1607,6 +1593,8 @@ static const struct tty_operations serial_ops = {
.
tiocmget
=
rs_tiocmget
,
.
tiocmset
=
rs_tiocmset
,
.
get_icount
=
rs_get_icount
,
.
set_serial
=
set_serial_info
,
.
get_serial
=
get_serial_info
,
.
proc_show
=
rs_proc_show
,
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录