Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d309e0bb
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看板
提交
d309e0bb
编写于
4月 28, 2008
作者:
B
Bartlomiej Zolnierkiewicz
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ide: move ide_tf_{load,read} to ide-iops.c
Signed-off-by:
N
Bartlomiej Zolnierkiewicz
<
bzolnier@gmail.com
>
上级
089c5c7e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
88 addition
and
88 deletion
+88
-88
drivers/ide/ide-io.c
drivers/ide/ide-io.c
+0
-43
drivers/ide/ide-iops.c
drivers/ide/ide-iops.c
+88
-0
drivers/ide/ide-taskfile.c
drivers/ide/ide-taskfile.c
+0
-45
未找到文件。
drivers/ide/ide-io.c
浏览文件 @
d309e0bb
...
...
@@ -295,49 +295,6 @@ static void ide_complete_pm_request (ide_drive_t *drive, struct request *rq)
spin_unlock_irqrestore
(
&
ide_lock
,
flags
);
}
void
ide_tf_read
(
ide_drive_t
*
drive
,
ide_task_t
*
task
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
struct
ide_io_ports
*
io_ports
=
&
hwif
->
io_ports
;
struct
ide_taskfile
*
tf
=
&
task
->
tf
;
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_DATA
)
{
u16
data
=
hwif
->
INW
(
io_ports
->
data_addr
);
tf
->
data
=
data
&
0xff
;
tf
->
hob_data
=
(
data
>>
8
)
&
0xff
;
}
/* be sure we're looking at the low order bits */
hwif
->
OUTB
(
drive
->
ctl
&
~
0x80
,
io_ports
->
ctl_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_NSECT
)
tf
->
nsect
=
hwif
->
INB
(
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAL
)
tf
->
lbal
=
hwif
->
INB
(
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAM
)
tf
->
lbam
=
hwif
->
INB
(
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAH
)
tf
->
lbah
=
hwif
->
INB
(
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_DEVICE
)
tf
->
device
=
hwif
->
INB
(
io_ports
->
device_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_LBA48
)
{
hwif
->
OUTB
(
drive
->
ctl
|
0x80
,
io_ports
->
ctl_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_FEATURE
)
tf
->
hob_feature
=
hwif
->
INB
(
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_NSECT
)
tf
->
hob_nsect
=
hwif
->
INB
(
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAL
)
tf
->
hob_lbal
=
hwif
->
INB
(
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAM
)
tf
->
hob_lbam
=
hwif
->
INB
(
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAH
)
tf
->
hob_lbah
=
hwif
->
INB
(
io_ports
->
lbah_addr
);
}
}
/**
* ide_end_drive_cmd - end an explicit drive command
* @drive: command
...
...
drivers/ide/ide-iops.c
浏览文件 @
d309e0bb
...
...
@@ -127,6 +127,94 @@ void SELECT_MASK (ide_drive_t *drive, int mask)
port_ops
->
maskproc
(
drive
,
mask
);
}
void
ide_tf_load
(
ide_drive_t
*
drive
,
ide_task_t
*
task
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
struct
ide_io_ports
*
io_ports
=
&
hwif
->
io_ports
;
struct
ide_taskfile
*
tf
=
&
task
->
tf
;
u8
HIHI
=
(
task
->
tf_flags
&
IDE_TFLAG_LBA48
)
?
0xE0
:
0xEF
;
if
(
task
->
tf_flags
&
IDE_TFLAG_FLAGGED
)
HIHI
=
0xFF
;
ide_set_irq
(
drive
,
1
);
if
((
task
->
tf_flags
&
IDE_TFLAG_NO_SELECT_MASK
)
==
0
)
SELECT_MASK
(
drive
,
0
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_DATA
)
hwif
->
OUTW
((
tf
->
hob_data
<<
8
)
|
tf
->
data
,
io_ports
->
data_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_FEATURE
)
hwif
->
OUTB
(
tf
->
hob_feature
,
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_NSECT
)
hwif
->
OUTB
(
tf
->
hob_nsect
,
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAL
)
hwif
->
OUTB
(
tf
->
hob_lbal
,
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAM
)
hwif
->
OUTB
(
tf
->
hob_lbam
,
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAH
)
hwif
->
OUTB
(
tf
->
hob_lbah
,
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_FEATURE
)
hwif
->
OUTB
(
tf
->
feature
,
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_NSECT
)
hwif
->
OUTB
(
tf
->
nsect
,
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAL
)
hwif
->
OUTB
(
tf
->
lbal
,
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAM
)
hwif
->
OUTB
(
tf
->
lbam
,
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAH
)
hwif
->
OUTB
(
tf
->
lbah
,
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_DEVICE
)
hwif
->
OUTB
((
tf
->
device
&
HIHI
)
|
drive
->
select
.
all
,
io_ports
->
device_addr
);
}
void
ide_tf_read
(
ide_drive_t
*
drive
,
ide_task_t
*
task
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
struct
ide_io_ports
*
io_ports
=
&
hwif
->
io_ports
;
struct
ide_taskfile
*
tf
=
&
task
->
tf
;
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_DATA
)
{
u16
data
=
hwif
->
INW
(
io_ports
->
data_addr
);
tf
->
data
=
data
&
0xff
;
tf
->
hob_data
=
(
data
>>
8
)
&
0xff
;
}
/* be sure we're looking at the low order bits */
hwif
->
OUTB
(
drive
->
ctl
&
~
0x80
,
io_ports
->
ctl_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_NSECT
)
tf
->
nsect
=
hwif
->
INB
(
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAL
)
tf
->
lbal
=
hwif
->
INB
(
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAM
)
tf
->
lbam
=
hwif
->
INB
(
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_LBAH
)
tf
->
lbah
=
hwif
->
INB
(
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_DEVICE
)
tf
->
device
=
hwif
->
INB
(
io_ports
->
device_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_LBA48
)
{
hwif
->
OUTB
(
drive
->
ctl
|
0x80
,
io_ports
->
ctl_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_FEATURE
)
tf
->
hob_feature
=
hwif
->
INB
(
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_NSECT
)
tf
->
hob_nsect
=
hwif
->
INB
(
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAL
)
tf
->
hob_lbal
=
hwif
->
INB
(
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAM
)
tf
->
hob_lbam
=
hwif
->
INB
(
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_IN_HOB_LBAH
)
tf
->
hob_lbah
=
hwif
->
INB
(
io_ports
->
lbah_addr
);
}
}
/*
* Some localbus EIDE interfaces require a special access sequence
* when using 32-bit I/O instructions to transfer data. We call this
...
...
drivers/ide/ide-taskfile.c
浏览文件 @
d309e0bb
...
...
@@ -47,51 +47,6 @@ void ide_tf_dump(const char *s, struct ide_taskfile *tf)
#endif
}
void
ide_tf_load
(
ide_drive_t
*
drive
,
ide_task_t
*
task
)
{
ide_hwif_t
*
hwif
=
drive
->
hwif
;
struct
ide_io_ports
*
io_ports
=
&
hwif
->
io_ports
;
struct
ide_taskfile
*
tf
=
&
task
->
tf
;
u8
HIHI
=
(
task
->
tf_flags
&
IDE_TFLAG_LBA48
)
?
0xE0
:
0xEF
;
if
(
task
->
tf_flags
&
IDE_TFLAG_FLAGGED
)
HIHI
=
0xFF
;
ide_set_irq
(
drive
,
1
);
if
((
task
->
tf_flags
&
IDE_TFLAG_NO_SELECT_MASK
)
==
0
)
SELECT_MASK
(
drive
,
0
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_DATA
)
hwif
->
OUTW
((
tf
->
hob_data
<<
8
)
|
tf
->
data
,
io_ports
->
data_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_FEATURE
)
hwif
->
OUTB
(
tf
->
hob_feature
,
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_NSECT
)
hwif
->
OUTB
(
tf
->
hob_nsect
,
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAL
)
hwif
->
OUTB
(
tf
->
hob_lbal
,
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAM
)
hwif
->
OUTB
(
tf
->
hob_lbam
,
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_HOB_LBAH
)
hwif
->
OUTB
(
tf
->
hob_lbah
,
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_FEATURE
)
hwif
->
OUTB
(
tf
->
feature
,
io_ports
->
feature_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_NSECT
)
hwif
->
OUTB
(
tf
->
nsect
,
io_ports
->
nsect_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAL
)
hwif
->
OUTB
(
tf
->
lbal
,
io_ports
->
lbal_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAM
)
hwif
->
OUTB
(
tf
->
lbam
,
io_ports
->
lbam_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_LBAH
)
hwif
->
OUTB
(
tf
->
lbah
,
io_ports
->
lbah_addr
);
if
(
task
->
tf_flags
&
IDE_TFLAG_OUT_DEVICE
)
hwif
->
OUTB
((
tf
->
device
&
HIHI
)
|
drive
->
select
.
all
,
io_ports
->
device_addr
);
}
int
taskfile_lib_get_identify
(
ide_drive_t
*
drive
,
u8
*
buf
)
{
ide_task_t
args
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录