aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-iops.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-17 18:46:26 -0400
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-04-17 18:46:26 -0400
commit23579a2a170265aacf78069f4817a41c1d6e9323 (patch)
treea20db3f337b64b13e482a2cb2f41e03b13d52e66 /drivers/ide/ide-iops.c
parent7616c0ad2087c7d244b8985390c63059a6223c45 (diff)
ide: remove IDE_*_REG macros
* Add IDE_{ALTSTATUS,IREASON,BCOUNTL,BCOUNTH}_OFFSET defines. * Remove IDE_*_REG macros - this results in more readable and slightly smaller code. There should be no functional changes caused by this patch. Cc: Borislav Petkov <petkovbb@gmail.com> Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-iops.c')
-rw-r--r--drivers/ide/ide-iops.c86
1 files changed, 50 insertions, 36 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index e77cee0e5d65..45944219eea0 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -158,9 +158,12 @@ EXPORT_SYMBOL(default_hwif_mmiops);
158 158
159void SELECT_DRIVE (ide_drive_t *drive) 159void SELECT_DRIVE (ide_drive_t *drive)
160{ 160{
161 if (HWIF(drive)->selectproc) 161 ide_hwif_t *hwif = drive->hwif;
162 HWIF(drive)->selectproc(drive); 162
163 HWIF(drive)->OUTB(drive->select.all, IDE_SELECT_REG); 163 if (hwif->selectproc)
164 hwif->selectproc(drive);
165
166 hwif->OUTB(drive->select.all, hwif->io_ports[IDE_SELECT_OFFSET]);
164} 167}
165 168
166void SELECT_MASK (ide_drive_t *drive, int mask) 169void SELECT_MASK (ide_drive_t *drive, int mask)
@@ -194,15 +197,18 @@ static void ata_input_data(ide_drive_t *drive, void *buffer, u32 wcount)
194 if (io_32bit) { 197 if (io_32bit) {
195 if (io_32bit & 2) { 198 if (io_32bit & 2) {
196 unsigned long flags; 199 unsigned long flags;
200
197 local_irq_save(flags); 201 local_irq_save(flags);
198 ata_vlb_sync(drive, IDE_NSECTOR_REG); 202 ata_vlb_sync(drive, hwif->io_ports[IDE_NSECTOR_OFFSET]);
199 hwif->INSL(IDE_DATA_REG, buffer, wcount); 203 hwif->INSL(hwif->io_ports[IDE_DATA_OFFSET], buffer,
204 wcount);
200 local_irq_restore(flags); 205 local_irq_restore(flags);
201 } else 206 } else
202 hwif->INSL(IDE_DATA_REG, buffer, wcount); 207 hwif->INSL(hwif->io_ports[IDE_DATA_OFFSET], buffer,
203 } else { 208 wcount);
204 hwif->INSW(IDE_DATA_REG, buffer, wcount<<1); 209 } else
205 } 210 hwif->INSW(hwif->io_ports[IDE_DATA_OFFSET], buffer,
211 wcount << 1);
206} 212}
207 213
208/* 214/*
@@ -216,15 +222,18 @@ static void ata_output_data(ide_drive_t *drive, void *buffer, u32 wcount)
216 if (io_32bit) { 222 if (io_32bit) {
217 if (io_32bit & 2) { 223 if (io_32bit & 2) {
218 unsigned long flags; 224 unsigned long flags;
225
219 local_irq_save(flags); 226 local_irq_save(flags);
220 ata_vlb_sync(drive, IDE_NSECTOR_REG); 227 ata_vlb_sync(drive, hwif->io_ports[IDE_NSECTOR_OFFSET]);
221 hwif->OUTSL(IDE_DATA_REG, buffer, wcount); 228 hwif->OUTSL(hwif->io_ports[IDE_DATA_OFFSET], buffer,
229 wcount);
222 local_irq_restore(flags); 230 local_irq_restore(flags);
223 } else 231 } else
224 hwif->OUTSL(IDE_DATA_REG, buffer, wcount); 232 hwif->OUTSL(hwif->io_ports[IDE_DATA_OFFSET], buffer,
225 } else { 233 wcount);
226 hwif->OUTSW(IDE_DATA_REG, buffer, wcount<<1); 234 } else
227 } 235 hwif->OUTSW(hwif->io_ports[IDE_DATA_OFFSET], buffer,
236 wcount << 1);
228} 237}
229 238
230/* 239/*
@@ -243,13 +252,15 @@ static void atapi_input_bytes(ide_drive_t *drive, void *buffer, u32 bytecount)
243#if defined(CONFIG_ATARI) || defined(CONFIG_Q40) 252#if defined(CONFIG_ATARI) || defined(CONFIG_Q40)
244 if (MACH_IS_ATARI || MACH_IS_Q40) { 253 if (MACH_IS_ATARI || MACH_IS_Q40) {
245 /* Atari has a byte-swapped IDE interface */ 254 /* Atari has a byte-swapped IDE interface */
246 insw_swapw(IDE_DATA_REG, buffer, bytecount / 2); 255 insw_swapw(hwif->io_ports[IDE_DATA_OFFSET], buffer,
256 bytecount / 2);
247 return; 257 return;
248 } 258 }
249#endif /* CONFIG_ATARI || CONFIG_Q40 */ 259#endif /* CONFIG_ATARI || CONFIG_Q40 */
250 hwif->ata_input_data(drive, buffer, bytecount / 4); 260 hwif->ata_input_data(drive, buffer, bytecount / 4);
251 if ((bytecount & 0x03) >= 2) 261 if ((bytecount & 0x03) >= 2)
252 hwif->INSW(IDE_DATA_REG, ((u8 *)buffer)+(bytecount & ~0x03), 1); 262 hwif->INSW(hwif->io_ports[IDE_DATA_OFFSET],
263 (u8 *)buffer + (bytecount & ~0x03), 1);
253} 264}
254 265
255static void atapi_output_bytes(ide_drive_t *drive, void *buffer, u32 bytecount) 266static void atapi_output_bytes(ide_drive_t *drive, void *buffer, u32 bytecount)
@@ -260,13 +271,15 @@ static void atapi_output_bytes(ide_drive_t *drive, void *buffer, u32 bytecount)
260#if defined(CONFIG_ATARI) || defined(CONFIG_Q40) 271#if defined(CONFIG_ATARI) || defined(CONFIG_Q40)
261 if (MACH_IS_ATARI || MACH_IS_Q40) { 272 if (MACH_IS_ATARI || MACH_IS_Q40) {
262 /* Atari has a byte-swapped IDE interface */ 273 /* Atari has a byte-swapped IDE interface */
263 outsw_swapw(IDE_DATA_REG, buffer, bytecount / 2); 274 outsw_swapw(hwif->io_ports[IDE_DATA_OFFSET], buffer,
275 bytecount / 2);
264 return; 276 return;
265 } 277 }
266#endif /* CONFIG_ATARI || CONFIG_Q40 */ 278#endif /* CONFIG_ATARI || CONFIG_Q40 */
267 hwif->ata_output_data(drive, buffer, bytecount / 4); 279 hwif->ata_output_data(drive, buffer, bytecount / 4);
268 if ((bytecount & 0x03) >= 2) 280 if ((bytecount & 0x03) >= 2)
269 hwif->OUTSW(IDE_DATA_REG, ((u8*)buffer)+(bytecount & ~0x03), 1); 281 hwif->OUTSW(hwif->io_ports[IDE_DATA_OFFSET],
282 (u8 *)buffer + (bytecount & ~0x03), 1);
270} 283}
271 284
272void default_hwif_transport(ide_hwif_t *hwif) 285void default_hwif_transport(ide_hwif_t *hwif)
@@ -429,7 +442,7 @@ int drive_is_ready (ide_drive_t *drive)
429 * an interrupt with another pci card/device. We make no assumptions 442 * an interrupt with another pci card/device. We make no assumptions
430 * about possible isa-pnp and pci-pnp issues yet. 443 * about possible isa-pnp and pci-pnp issues yet.
431 */ 444 */
432 if (IDE_CONTROL_REG) 445 if (hwif->io_ports[IDE_CONTROL_OFFSET])
433 stat = ide_read_altstatus(drive); 446 stat = ide_read_altstatus(drive);
434 else 447 else
435 /* Note: this may clear a pending IRQ!! */ 448 /* Note: this may clear a pending IRQ!! */
@@ -631,7 +644,7 @@ int ide_driveid_update(ide_drive_t *drive)
631 SELECT_MASK(drive, 1); 644 SELECT_MASK(drive, 1);
632 ide_set_irq(drive, 1); 645 ide_set_irq(drive, 1);
633 msleep(50); 646 msleep(50);
634 hwif->OUTB(WIN_IDENTIFY, IDE_COMMAND_REG); 647 hwif->OUTB(WIN_IDENTIFY, hwif->io_ports[IDE_COMMAND_OFFSET]);
635 timeout = jiffies + WAIT_WORSTCASE; 648 timeout = jiffies + WAIT_WORSTCASE;
636 do { 649 do {
637 if (time_after(jiffies, timeout)) { 650 if (time_after(jiffies, timeout)) {
@@ -718,9 +731,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
718 SELECT_MASK(drive, 0); 731 SELECT_MASK(drive, 0);
719 udelay(1); 732 udelay(1);
720 ide_set_irq(drive, 0); 733 ide_set_irq(drive, 0);
721 hwif->OUTB(speed, IDE_NSECTOR_REG); 734 hwif->OUTB(speed, hwif->io_ports[IDE_NSECTOR_OFFSET]);
722 hwif->OUTB(SETFEATURES_XFER, IDE_FEATURE_REG); 735 hwif->OUTB(SETFEATURES_XFER, hwif->io_ports[IDE_FEATURE_OFFSET]);
723 hwif->OUTBSYNC(drive, WIN_SETFEATURES, IDE_COMMAND_REG); 736 hwif->OUTBSYNC(drive, WIN_SETFEATURES,
737 hwif->io_ports[IDE_COMMAND_OFFSET]);
724 if (drive->quirk_list == 2) 738 if (drive->quirk_list == 2)
725 ide_set_irq(drive, 1); 739 ide_set_irq(drive, 1);
726 740
@@ -828,7 +842,7 @@ void ide_execute_command(ide_drive_t *drive, u8 cmd, ide_handler_t *handler,
828 842
829 spin_lock_irqsave(&ide_lock, flags); 843 spin_lock_irqsave(&ide_lock, flags);
830 __ide_set_handler(drive, handler, timeout, expiry); 844 __ide_set_handler(drive, handler, timeout, expiry);
831 hwif->OUTBSYNC(drive, cmd, IDE_COMMAND_REG); 845 hwif->OUTBSYNC(drive, cmd, hwif->io_ports[IDE_COMMAND_OFFSET]);
832 /* 846 /*
833 * Drive takes 400nS to respond, we must avoid the IRQ being 847 * Drive takes 400nS to respond, we must avoid the IRQ being
834 * serviced before that. 848 * serviced before that.
@@ -1009,7 +1023,8 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
1009 unsigned long flags; 1023 unsigned long flags;
1010 ide_hwif_t *hwif; 1024 ide_hwif_t *hwif;
1011 ide_hwgroup_t *hwgroup; 1025 ide_hwgroup_t *hwgroup;
1012 1026 u8 ctl;
1027
1013 spin_lock_irqsave(&ide_lock, flags); 1028 spin_lock_irqsave(&ide_lock, flags);
1014 hwif = HWIF(drive); 1029 hwif = HWIF(drive);
1015 hwgroup = HWGROUP(drive); 1030 hwgroup = HWGROUP(drive);
@@ -1023,7 +1038,8 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
1023 pre_reset(drive); 1038 pre_reset(drive);
1024 SELECT_DRIVE(drive); 1039 SELECT_DRIVE(drive);
1025 udelay (20); 1040 udelay (20);
1026 hwif->OUTBSYNC(drive, WIN_SRST, IDE_COMMAND_REG); 1041 hwif->OUTBSYNC(drive, WIN_SRST,
1042 hwif->io_ports[IDE_COMMAND_OFFSET]);
1027 ndelay(400); 1043 ndelay(400);
1028 hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE; 1044 hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE;
1029 hwgroup->polling = 1; 1045 hwgroup->polling = 1;
@@ -1039,7 +1055,7 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
1039 for (unit = 0; unit < MAX_DRIVES; ++unit) 1055 for (unit = 0; unit < MAX_DRIVES; ++unit)
1040 pre_reset(&hwif->drives[unit]); 1056 pre_reset(&hwif->drives[unit]);
1041 1057
1042 if (!IDE_CONTROL_REG) { 1058 if (hwif->io_ports[IDE_CONTROL_OFFSET] == 0) {
1043 spin_unlock_irqrestore(&ide_lock, flags); 1059 spin_unlock_irqrestore(&ide_lock, flags);
1044 return ide_stopped; 1060 return ide_stopped;
1045 } 1061 }
@@ -1054,16 +1070,14 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
1054 * recover from reset very quickly, saving us the first 50ms wait time. 1070 * recover from reset very quickly, saving us the first 50ms wait time.
1055 */ 1071 */
1056 /* set SRST and nIEN */ 1072 /* set SRST and nIEN */
1057 hwif->OUTBSYNC(drive, drive->ctl|6,IDE_CONTROL_REG); 1073 hwif->OUTBSYNC(drive, drive->ctl|6, hwif->io_ports[IDE_CONTROL_OFFSET]);
1058 /* more than enough time */ 1074 /* more than enough time */
1059 udelay(10); 1075 udelay(10);
1060 if (drive->quirk_list == 2) { 1076 if (drive->quirk_list == 2)
1061 /* clear SRST and nIEN */ 1077 ctl = drive->ctl; /* clear SRST and nIEN */
1062 hwif->OUTBSYNC(drive, drive->ctl, IDE_CONTROL_REG); 1078 else
1063 } else { 1079 ctl = drive->ctl | 2; /* clear SRST, leave nIEN */
1064 /* clear SRST, leave nIEN */ 1080 hwif->OUTBSYNC(drive, ctl, hwif->io_ports[IDE_CONTROL_OFFSET]);
1065 hwif->OUTBSYNC(drive, drive->ctl|2, IDE_CONTROL_REG);
1066 }
1067 /* more than enough time */ 1081 /* more than enough time */
1068 udelay(10); 1082 udelay(10);
1069 hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE; 1083 hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE;