Commit 35218d1ca808ed19b8c6f079ce91872b3deb2219
Committed by
Bartlomiej Zolnierkiewicz
1 parent
bac08cee93
ide: move data register access out of tf_{read|load}() methods (take 2)
Move IDE_FTFLAG_{IN|OUT}_DATA flag handling out of tf_{read|load}() methods into the only two functions where these flags actually need to be handled: do_rw_taskfile() and ide_complete_cmd()... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Showing 9 changed files with 17 additions and 100 deletions Side-by-side Diff
drivers/ide/at91_ide.c
... | ... | @@ -195,12 +195,6 @@ |
195 | 195 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
196 | 196 | HIHI = 0xFF; |
197 | 197 | |
198 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
199 | - u8 data[2] = { tf->data, tf->hob_data }; | |
200 | - | |
201 | - at91_ide_output_data(drive, cmd, data, 2); | |
202 | - } | |
203 | - | |
204 | 198 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
205 | 199 | ide_mm_outb(tf->hob_feature, io_ports->feature_addr); |
206 | 200 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -232,15 +226,6 @@ |
232 | 226 | ide_hwif_t *hwif = drive->hwif; |
233 | 227 | struct ide_io_ports *io_ports = &hwif->io_ports; |
234 | 228 | struct ide_taskfile *tf = &cmd->tf; |
235 | - | |
236 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
237 | - u8 data[2]; | |
238 | - | |
239 | - at91_ide_input_data(drive, cmd, data, 2); | |
240 | - | |
241 | - tf->data = data[0]; | |
242 | - tf->hob_data = data[1]; | |
243 | - } | |
244 | 229 | |
245 | 230 | /* be sure we're looking at the low order bits */ |
246 | 231 | ide_mm_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |
drivers/ide/ide-h8300.c
... | ... | @@ -54,12 +54,6 @@ |
54 | 54 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
55 | 55 | HIHI = 0xFF; |
56 | 56 | |
57 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
58 | - u8 data[2] = { tf->data, tf->hob_data }; | |
59 | - | |
60 | - h8300_output_data(drive, cmd, data, 2); | |
61 | - } | |
62 | - | |
63 | 57 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
64 | 58 | outb(tf->hob_feature, io_ports->feature_addr); |
65 | 59 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -92,15 +86,6 @@ |
92 | 86 | ide_hwif_t *hwif = drive->hwif; |
93 | 87 | struct ide_io_ports *io_ports = &hwif->io_ports; |
94 | 88 | struct ide_taskfile *tf = &cmd->tf; |
95 | - | |
96 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
97 | - u8 data[2]; | |
98 | - | |
99 | - h8300_input_data(drive, cmd, data, 2); | |
100 | - | |
101 | - tf->data = data[0]; | |
102 | - tf->hob_data = data[1]; | |
103 | - } | |
104 | 89 | |
105 | 90 | /* be sure we're looking at the low order bits */ |
106 | 91 | outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |
drivers/ide/ide-io-std.c
... | ... | @@ -90,12 +90,6 @@ |
90 | 90 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
91 | 91 | HIHI = 0xFF; |
92 | 92 | |
93 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
94 | - u8 data[2] = { tf->data, tf->hob_data }; | |
95 | - | |
96 | - ide_output_data(drive, cmd, data, 2); | |
97 | - } | |
98 | - | |
99 | 93 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
100 | 94 | tf_outb(tf->hob_feature, io_ports->feature_addr); |
101 | 95 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -139,15 +133,6 @@ |
139 | 133 | } else { |
140 | 134 | tf_outb = ide_outb; |
141 | 135 | tf_inb = ide_inb; |
142 | - } | |
143 | - | |
144 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
145 | - u8 data[2]; | |
146 | - | |
147 | - ide_input_data(drive, cmd, data, 2); | |
148 | - | |
149 | - tf->data = data[0]; | |
150 | - tf->hob_data = data[1]; | |
151 | 136 | } |
152 | 137 | |
153 | 138 | /* be sure we're looking at the low order bits */ |
drivers/ide/ide-io.c
... | ... | @@ -73,6 +73,7 @@ |
73 | 73 | |
74 | 74 | void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) |
75 | 75 | { |
76 | + const struct ide_tp_ops *tp_ops = drive->hwif->tp_ops; | |
76 | 77 | struct ide_taskfile *tf = &cmd->tf; |
77 | 78 | struct request *rq = cmd->rq; |
78 | 79 | u8 tf_cmd = tf->command; |
... | ... | @@ -80,7 +81,16 @@ |
80 | 81 | tf->error = err; |
81 | 82 | tf->status = stat; |
82 | 83 | |
83 | - drive->hwif->tp_ops->tf_read(drive, cmd); | |
84 | + if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
85 | + u8 data[2]; | |
86 | + | |
87 | + tp_ops->input_data(drive, cmd, data, 2); | |
88 | + | |
89 | + tf->data = data[0]; | |
90 | + tf->hob_data = data[1]; | |
91 | + } | |
92 | + | |
93 | + tp_ops->tf_read(drive, cmd); | |
84 | 94 | |
85 | 95 | if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) && |
86 | 96 | tf_cmd == ATA_CMD_IDLEIMMEDIATE) { |
drivers/ide/ide-taskfile.c
... | ... | @@ -82,6 +82,12 @@ |
82 | 82 | ide_tf_dump(drive->name, tf); |
83 | 83 | tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS); |
84 | 84 | SELECT_MASK(drive, 0); |
85 | + | |
86 | + if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
87 | + u8 data[2] = { tf->data, tf->hob_data }; | |
88 | + | |
89 | + tp_ops->output_data(drive, cmd, data, 2); | |
90 | + } | |
85 | 91 | tp_ops->tf_load(drive, cmd); |
86 | 92 | } |
87 | 93 |
drivers/ide/ns87415.c
... | ... | @@ -66,15 +66,6 @@ |
66 | 66 | struct ide_io_ports *io_ports = &drive->hwif->io_ports; |
67 | 67 | struct ide_taskfile *tf = &cmd->tf; |
68 | 68 | |
69 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
70 | - u8 data[2]; | |
71 | - | |
72 | - ide_input_data(drive, cmd, data, 2); | |
73 | - | |
74 | - tf->data = data[0]; | |
75 | - tf->hob_data = data[1]; | |
76 | - } | |
77 | - | |
78 | 69 | /* be sure we're looking at the low order bits */ |
79 | 70 | outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |
80 | 71 |
drivers/ide/scc_pata.c
... | ... | @@ -656,12 +656,6 @@ |
656 | 656 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
657 | 657 | HIHI = 0xFF; |
658 | 658 | |
659 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
660 | - u8 data[2] = { tf->data, tf->hob_data }; | |
661 | - | |
662 | - scc_output_data(drive, NULL, data, 2); | |
663 | - } | |
664 | - | |
665 | 659 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
666 | 660 | scc_ide_outb(tf->hob_feature, io_ports->feature_addr); |
667 | 661 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -693,15 +687,6 @@ |
693 | 687 | { |
694 | 688 | struct ide_io_ports *io_ports = &drive->hwif->io_ports; |
695 | 689 | struct ide_taskfile *tf = &cmd->tf; |
696 | - | |
697 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
698 | - u8 data[2]; | |
699 | - | |
700 | - scc_input_data(drive, cmd, data, 2); | |
701 | - | |
702 | - tf->data = data[0]; | |
703 | - tf->hob_data = data[1]; | |
704 | - } | |
705 | 690 | |
706 | 691 | /* be sure we're looking at the low order bits */ |
707 | 692 | scc_ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |
drivers/ide/tx4938ide.c
... | ... | @@ -92,12 +92,6 @@ |
92 | 92 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
93 | 93 | HIHI = 0xFF; |
94 | 94 | |
95 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
96 | - u8 data[2] = { tf->data, tf->hob_data }; | |
97 | - | |
98 | - hwif->tp_ops->output_data(drive, cmd, data, 2); | |
99 | - } | |
100 | - | |
101 | 95 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
102 | 96 | tx4938ide_outb(tf->hob_feature, io_ports->feature_addr); |
103 | 97 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -130,15 +124,6 @@ |
130 | 124 | ide_hwif_t *hwif = drive->hwif; |
131 | 125 | struct ide_io_ports *io_ports = &hwif->io_ports; |
132 | 126 | struct ide_taskfile *tf = &cmd->tf; |
133 | - | |
134 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
135 | - u8 data[2]; | |
136 | - | |
137 | - hwif->tp_ops->input_data(drive, cmd, data, 2); | |
138 | - | |
139 | - tf->data = data[0]; | |
140 | - tf->hob_data = data[1]; | |
141 | - } | |
142 | 127 | |
143 | 128 | /* be sure we're looking at the low order bits */ |
144 | 129 | tx4938ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |
drivers/ide/tx4939ide.c
... | ... | @@ -457,12 +457,6 @@ |
457 | 457 | if (cmd->ftf_flags & IDE_FTFLAG_FLAGGED) |
458 | 458 | HIHI = 0xFF; |
459 | 459 | |
460 | - if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { | |
461 | - u8 data[2] = { tf->data, tf->hob_data }; | |
462 | - | |
463 | - hwif->tp_ops->output_data(drive, cmd, data, 2); | |
464 | - } | |
465 | - | |
466 | 460 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_FEATURE) |
467 | 461 | tx4939ide_outb(tf->hob_feature, io_ports->feature_addr); |
468 | 462 | if (cmd->tf_flags & IDE_TFLAG_OUT_HOB_NSECT) |
... | ... | @@ -497,15 +491,6 @@ |
497 | 491 | ide_hwif_t *hwif = drive->hwif; |
498 | 492 | struct ide_io_ports *io_ports = &hwif->io_ports; |
499 | 493 | struct ide_taskfile *tf = &cmd->tf; |
500 | - | |
501 | - if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) { | |
502 | - u8 data[2]; | |
503 | - | |
504 | - hwif->tp_ops->input_data(drive, cmd, data, 2); | |
505 | - | |
506 | - tf->data = data[0]; | |
507 | - tf->hob_data = data[1]; | |
508 | - } | |
509 | 494 | |
510 | 495 | /* be sure we're looking at the low order bits */ |
511 | 496 | tx4939ide_outb(ATA_DEVCTL_OBS, io_ports->ctl_addr); |