diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-28 17:44:39 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-04-28 17:44:39 -0400 |
commit | d309e0bb8e5f29692f10790f3e966f05bbfc9355 (patch) | |
tree | 276c78c6960a88df3ade6f96e96331b708235ec9 /drivers | |
parent | 089c5c7e0089c3461545be936bcd236cbf16b79a (diff) |
ide: move ide_tf_{load,read} to ide-iops.c
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ide/ide-io.c | 43 | ||||
-rw-r--r-- | drivers/ide/ide-iops.c | 88 | ||||
-rw-r--r-- | drivers/ide/ide-taskfile.c | 45 |
3 files changed, 88 insertions, 88 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index a6f2186773fa..5b675a001382 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
@@ -295,49 +295,6 @@ static void ide_complete_pm_request (ide_drive_t *drive, struct request *rq) | |||
295 | spin_unlock_irqrestore(&ide_lock, flags); | 295 | spin_unlock_irqrestore(&ide_lock, flags); |
296 | } | 296 | } |
297 | 297 | ||
298 | void ide_tf_read(ide_drive_t *drive, ide_task_t *task) | ||
299 | { | ||
300 | ide_hwif_t *hwif = drive->hwif; | ||
301 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
302 | struct ide_taskfile *tf = &task->tf; | ||
303 | |||
304 | if (task->tf_flags & IDE_TFLAG_IN_DATA) { | ||
305 | u16 data = hwif->INW(io_ports->data_addr); | ||
306 | |||
307 | tf->data = data & 0xff; | ||
308 | tf->hob_data = (data >> 8) & 0xff; | ||
309 | } | ||
310 | |||
311 | /* be sure we're looking at the low order bits */ | ||
312 | hwif->OUTB(drive->ctl & ~0x80, io_ports->ctl_addr); | ||
313 | |||
314 | if (task->tf_flags & IDE_TFLAG_IN_NSECT) | ||
315 | tf->nsect = hwif->INB(io_ports->nsect_addr); | ||
316 | if (task->tf_flags & IDE_TFLAG_IN_LBAL) | ||
317 | tf->lbal = hwif->INB(io_ports->lbal_addr); | ||
318 | if (task->tf_flags & IDE_TFLAG_IN_LBAM) | ||
319 | tf->lbam = hwif->INB(io_ports->lbam_addr); | ||
320 | if (task->tf_flags & IDE_TFLAG_IN_LBAH) | ||
321 | tf->lbah = hwif->INB(io_ports->lbah_addr); | ||
322 | if (task->tf_flags & IDE_TFLAG_IN_DEVICE) | ||
323 | tf->device = hwif->INB(io_ports->device_addr); | ||
324 | |||
325 | if (task->tf_flags & IDE_TFLAG_LBA48) { | ||
326 | hwif->OUTB(drive->ctl | 0x80, io_ports->ctl_addr); | ||
327 | |||
328 | if (task->tf_flags & IDE_TFLAG_IN_HOB_FEATURE) | ||
329 | tf->hob_feature = hwif->INB(io_ports->feature_addr); | ||
330 | if (task->tf_flags & IDE_TFLAG_IN_HOB_NSECT) | ||
331 | tf->hob_nsect = hwif->INB(io_ports->nsect_addr); | ||
332 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAL) | ||
333 | tf->hob_lbal = hwif->INB(io_ports->lbal_addr); | ||
334 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAM) | ||
335 | tf->hob_lbam = hwif->INB(io_ports->lbam_addr); | ||
336 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAH) | ||
337 | tf->hob_lbah = hwif->INB(io_ports->lbah_addr); | ||
338 | } | ||
339 | } | ||
340 | |||
341 | /** | 298 | /** |
342 | * ide_end_drive_cmd - end an explicit drive command | 299 | * ide_end_drive_cmd - end an explicit drive command |
343 | * @drive: command | 300 | * @drive: command |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index dfe47d5eb157..ac9e063bcf93 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -127,6 +127,94 @@ void SELECT_MASK (ide_drive_t *drive, int mask) | |||
127 | port_ops->maskproc(drive, mask); | 127 | port_ops->maskproc(drive, mask); |
128 | } | 128 | } |
129 | 129 | ||
130 | void ide_tf_load(ide_drive_t *drive, ide_task_t *task) | ||
131 | { | ||
132 | ide_hwif_t *hwif = drive->hwif; | ||
133 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
134 | struct ide_taskfile *tf = &task->tf; | ||
135 | u8 HIHI = (task->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; | ||
136 | |||
137 | if (task->tf_flags & IDE_TFLAG_FLAGGED) | ||
138 | HIHI = 0xFF; | ||
139 | |||
140 | ide_set_irq(drive, 1); | ||
141 | |||
142 | if ((task->tf_flags & IDE_TFLAG_NO_SELECT_MASK) == 0) | ||
143 | SELECT_MASK(drive, 0); | ||
144 | |||
145 | if (task->tf_flags & IDE_TFLAG_OUT_DATA) | ||
146 | hwif->OUTW((tf->hob_data << 8) | tf->data, io_ports->data_addr); | ||
147 | |||
148 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) | ||
149 | hwif->OUTB(tf->hob_feature, io_ports->feature_addr); | ||
150 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) | ||
151 | hwif->OUTB(tf->hob_nsect, io_ports->nsect_addr); | ||
152 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) | ||
153 | hwif->OUTB(tf->hob_lbal, io_ports->lbal_addr); | ||
154 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) | ||
155 | hwif->OUTB(tf->hob_lbam, io_ports->lbam_addr); | ||
156 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) | ||
157 | hwif->OUTB(tf->hob_lbah, io_ports->lbah_addr); | ||
158 | |||
159 | if (task->tf_flags & IDE_TFLAG_OUT_FEATURE) | ||
160 | hwif->OUTB(tf->feature, io_ports->feature_addr); | ||
161 | if (task->tf_flags & IDE_TFLAG_OUT_NSECT) | ||
162 | hwif->OUTB(tf->nsect, io_ports->nsect_addr); | ||
163 | if (task->tf_flags & IDE_TFLAG_OUT_LBAL) | ||
164 | hwif->OUTB(tf->lbal, io_ports->lbal_addr); | ||
165 | if (task->tf_flags & IDE_TFLAG_OUT_LBAM) | ||
166 | hwif->OUTB(tf->lbam, io_ports->lbam_addr); | ||
167 | if (task->tf_flags & IDE_TFLAG_OUT_LBAH) | ||
168 | hwif->OUTB(tf->lbah, io_ports->lbah_addr); | ||
169 | |||
170 | if (task->tf_flags & IDE_TFLAG_OUT_DEVICE) | ||
171 | hwif->OUTB((tf->device & HIHI) | drive->select.all, | ||
172 | io_ports->device_addr); | ||
173 | } | ||
174 | |||
175 | void ide_tf_read(ide_drive_t *drive, ide_task_t *task) | ||
176 | { | ||
177 | ide_hwif_t *hwif = drive->hwif; | ||
178 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
179 | struct ide_taskfile *tf = &task->tf; | ||
180 | |||
181 | if (task->tf_flags & IDE_TFLAG_IN_DATA) { | ||
182 | u16 data = hwif->INW(io_ports->data_addr); | ||
183 | |||
184 | tf->data = data & 0xff; | ||
185 | tf->hob_data = (data >> 8) & 0xff; | ||
186 | } | ||
187 | |||
188 | /* be sure we're looking at the low order bits */ | ||
189 | hwif->OUTB(drive->ctl & ~0x80, io_ports->ctl_addr); | ||
190 | |||
191 | if (task->tf_flags & IDE_TFLAG_IN_NSECT) | ||
192 | tf->nsect = hwif->INB(io_ports->nsect_addr); | ||
193 | if (task->tf_flags & IDE_TFLAG_IN_LBAL) | ||
194 | tf->lbal = hwif->INB(io_ports->lbal_addr); | ||
195 | if (task->tf_flags & IDE_TFLAG_IN_LBAM) | ||
196 | tf->lbam = hwif->INB(io_ports->lbam_addr); | ||
197 | if (task->tf_flags & IDE_TFLAG_IN_LBAH) | ||
198 | tf->lbah = hwif->INB(io_ports->lbah_addr); | ||
199 | if (task->tf_flags & IDE_TFLAG_IN_DEVICE) | ||
200 | tf->device = hwif->INB(io_ports->device_addr); | ||
201 | |||
202 | if (task->tf_flags & IDE_TFLAG_LBA48) { | ||
203 | hwif->OUTB(drive->ctl | 0x80, io_ports->ctl_addr); | ||
204 | |||
205 | if (task->tf_flags & IDE_TFLAG_IN_HOB_FEATURE) | ||
206 | tf->hob_feature = hwif->INB(io_ports->feature_addr); | ||
207 | if (task->tf_flags & IDE_TFLAG_IN_HOB_NSECT) | ||
208 | tf->hob_nsect = hwif->INB(io_ports->nsect_addr); | ||
209 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAL) | ||
210 | tf->hob_lbal = hwif->INB(io_ports->lbal_addr); | ||
211 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAM) | ||
212 | tf->hob_lbam = hwif->INB(io_ports->lbam_addr); | ||
213 | if (task->tf_flags & IDE_TFLAG_IN_HOB_LBAH) | ||
214 | tf->hob_lbah = hwif->INB(io_ports->lbah_addr); | ||
215 | } | ||
216 | } | ||
217 | |||
130 | /* | 218 | /* |
131 | * Some localbus EIDE interfaces require a special access sequence | 219 | * Some localbus EIDE interfaces require a special access sequence |
132 | * when using 32-bit I/O instructions to transfer data. We call this | 220 | * when using 32-bit I/O instructions to transfer data. We call this |
diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index 416ce54af7ad..9ec3ecd4a3a5 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c | |||
@@ -47,51 +47,6 @@ void ide_tf_dump(const char *s, struct ide_taskfile *tf) | |||
47 | #endif | 47 | #endif |
48 | } | 48 | } |
49 | 49 | ||
50 | void ide_tf_load(ide_drive_t *drive, ide_task_t *task) | ||
51 | { | ||
52 | ide_hwif_t *hwif = drive->hwif; | ||
53 | struct ide_io_ports *io_ports = &hwif->io_ports; | ||
54 | struct ide_taskfile *tf = &task->tf; | ||
55 | u8 HIHI = (task->tf_flags & IDE_TFLAG_LBA48) ? 0xE0 : 0xEF; | ||
56 | |||
57 | if (task->tf_flags & IDE_TFLAG_FLAGGED) | ||
58 | HIHI = 0xFF; | ||
59 | |||
60 | ide_set_irq(drive, 1); | ||
61 | |||
62 | if ((task->tf_flags & IDE_TFLAG_NO_SELECT_MASK) == 0) | ||
63 | SELECT_MASK(drive, 0); | ||
64 | |||
65 | if (task->tf_flags & IDE_TFLAG_OUT_DATA) | ||
66 | hwif->OUTW((tf->hob_data << 8) | tf->data, io_ports->data_addr); | ||
67 | |||
68 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) | ||
69 | hwif->OUTB(tf->hob_feature, io_ports->feature_addr); | ||
70 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) | ||
71 | hwif->OUTB(tf->hob_nsect, io_ports->nsect_addr); | ||
72 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAL) | ||
73 | hwif->OUTB(tf->hob_lbal, io_ports->lbal_addr); | ||
74 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAM) | ||
75 | hwif->OUTB(tf->hob_lbam, io_ports->lbam_addr); | ||
76 | if (task->tf_flags & IDE_TFLAG_OUT_HOB_LBAH) | ||
77 | hwif->OUTB(tf->hob_lbah, io_ports->lbah_addr); | ||
78 | |||
79 | if (task->tf_flags & IDE_TFLAG_OUT_FEATURE) | ||
80 | hwif->OUTB(tf->feature, io_ports->feature_addr); | ||
81 | if (task->tf_flags & IDE_TFLAG_OUT_NSECT) | ||
82 | hwif->OUTB(tf->nsect, io_ports->nsect_addr); | ||
83 | if (task->tf_flags & IDE_TFLAG_OUT_LBAL) | ||
84 | hwif->OUTB(tf->lbal, io_ports->lbal_addr); | ||
85 | if (task->tf_flags & IDE_TFLAG_OUT_LBAM) | ||
86 | hwif->OUTB(tf->lbam, io_ports->lbam_addr); | ||
87 | if (task->tf_flags & IDE_TFLAG_OUT_LBAH) | ||
88 | hwif->OUTB(tf->lbah, io_ports->lbah_addr); | ||
89 | |||
90 | if (task->tf_flags & IDE_TFLAG_OUT_DEVICE) | ||
91 | hwif->OUTB((tf->device & HIHI) | drive->select.all, | ||
92 | io_ports->device_addr); | ||
93 | } | ||
94 | |||
95 | int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf) | 50 | int taskfile_lib_get_identify (ide_drive_t *drive, u8 *buf) |
96 | { | 51 | { |
97 | ide_task_t args; | 52 | ide_task_t args; |