]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ide/ide-iops.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
[linux-2.6-omap-h63xx.git] / drivers / ide / ide-iops.c
index daa23b19440e1881d7fc4ed3bcc493f3a8c9113b..57d9a9a79a6f845842a9b1baeb7d20254754dda8 100644 (file)
@@ -227,11 +227,11 @@ static void ide_tf_read(ide_drive_t *drive, ide_task_t *task)
  * of the sector count register location, with interrupts disabled
  * to ensure that the reads all happen together.
  */
-static void ata_vlb_sync(ide_drive_t *drive, unsigned long port)
+static void ata_vlb_sync(unsigned long port)
 {
-       (void) HWIF(drive)->INB(port);
-       (void) HWIF(drive)->INB(port);
-       (void) HWIF(drive)->INB(port);
+       (void)inb(port);
+       (void)inb(port);
+       (void)inb(port);
 }
 
 /*
@@ -255,9 +255,9 @@ static void ata_input_data(ide_drive_t *drive, struct request *rq,
        if (io_32bit) {
                unsigned long uninitialized_var(flags);
 
-               if (io_32bit & 2) {
+               if ((io_32bit & 2) && !mmio) {
                        local_irq_save(flags);
-                       ata_vlb_sync(drive, io_ports->nsect_addr);
+                       ata_vlb_sync(io_ports->nsect_addr);
                }
 
                if (mmio)
@@ -265,7 +265,7 @@ static void ata_input_data(ide_drive_t *drive, struct request *rq,
                else
                        insl(data_addr, buf, len / 4);
 
-               if (io_32bit & 2)
+               if ((io_32bit & 2) && !mmio)
                        local_irq_restore(flags);
 
                if ((len & 3) >= 2) {
@@ -298,9 +298,9 @@ static void ata_output_data(ide_drive_t *drive, struct request *rq,
        if (io_32bit) {
                unsigned long uninitialized_var(flags);
 
-               if (io_32bit & 2) {
+               if ((io_32bit & 2) && !mmio) {
                        local_irq_save(flags);
-                       ata_vlb_sync(drive, io_ports->nsect_addr);
+                       ata_vlb_sync(io_ports->nsect_addr);
                }
 
                if (mmio)
@@ -308,7 +308,7 @@ static void ata_output_data(ide_drive_t *drive, struct request *rq,
                else
                        outsl(data_addr, buf, len / 4);
 
-               if (io_32bit & 2)
+               if ((io_32bit & 2) && !mmio)
                        local_irq_restore(flags);
 
                if ((len & 3) >= 2) {
@@ -625,6 +625,8 @@ static const struct drive_list_entry ivb_list[] = {
        { "TSSTcorp CDDVDW SH-S202J"    , "SB01"        },
        { "TSSTcorp CDDVDW SH-S202N"    , "SB00"        },
        { "TSSTcorp CDDVDW SH-S202N"    , "SB01"        },
+       { "TSSTcorp CDDVDW SH-S202H"    , "SB00"        },
+       { "TSSTcorp CDDVDW SH-S202H"    , "SB01"        },
        { NULL                          , NULL          }
 };