Commit 35218d1ca808ed19b8c6f079ce91872b3deb2219

Authored by Sergei Shtylyov
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);