Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
d309e0bb
Commit
d309e0bb
authored
Apr 28, 2008
by
Bartlomiej Zolnierkiewicz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ide: move ide_tf_{load,read} to ide-iops.c
Signed-off-by:
Bartlomiej Zolnierkiewicz
<
bzolnier@gmail.com
>
parent
089c5c7e
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
88 additions
and
88 deletions
+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
No files found.
drivers/ide/ide-io.c
View file @
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
View file @
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
View file @
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
;
...
...
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