]> git.neil.brown.name Git - history.git/commitdiff
PPC32: define bits that are needed for the IDE subsystem now.
authorPaul Mackerras <paulus@samba.org>
Wed, 28 Aug 2002 07:51:13 +0000 (17:51 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 28 Aug 2002 07:51:13 +0000 (17:51 +1000)
This puts back the definitions of ide_request/free_irq,
ide_check/request/release_region, ide_fix_driveid etc. that were
removed while Martin Dalecki was IDE maintainer.

arch/ppc/kernel/setup.c
include/asm-ppc/ide.h

index 09d516f526bbad6c2d5eb83926d8ad6987985a58..a397ae31150af18f61fce1cafcb7225e22238da2 100644 (file)
@@ -659,3 +659,100 @@ void __init setup_arch(char **cmdline_p)
        /* this is for modules since _machine can be a define -- Cort */
        ppc_md.ppc_machine = _machine;
 }
+
+#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
+/* Convert the shorts/longs in hd_driveid from little to big endian;
+ * chars are endian independant, of course, but strings need to be flipped.
+ * (Despite what it says in drivers/block/ide.h, they come up as little
+ * endian...)
+ *
+ * Changes to linux/hdreg.h may require changes here. */
+void ide_fix_driveid(struct hd_driveid *id)
+{
+        int i;
+       unsigned short *stringcast;
+
+       id->config         = __le16_to_cpu(id->config);
+       id->cyls           = __le16_to_cpu(id->cyls);
+       id->reserved2      = __le16_to_cpu(id->reserved2);
+       id->heads          = __le16_to_cpu(id->heads);
+       id->track_bytes    = __le16_to_cpu(id->track_bytes);
+       id->sector_bytes   = __le16_to_cpu(id->sector_bytes);
+       id->sectors        = __le16_to_cpu(id->sectors);
+       id->vendor0        = __le16_to_cpu(id->vendor0);
+       id->vendor1        = __le16_to_cpu(id->vendor1);
+       id->vendor2        = __le16_to_cpu(id->vendor2);
+       stringcast = (unsigned short *)&id->serial_no[0];
+       for (i = 0; i < (20/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       id->buf_type       = __le16_to_cpu(id->buf_type);
+       id->buf_size       = __le16_to_cpu(id->buf_size);
+       id->ecc_bytes      = __le16_to_cpu(id->ecc_bytes);
+       stringcast = (unsigned short *)&id->fw_rev[0];
+       for (i = 0; i < (8/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       stringcast = (unsigned short *)&id->model[0];
+       for (i = 0; i < (40/2); i++)
+               stringcast[i] = __le16_to_cpu(stringcast[i]);
+       id->dword_io       = __le16_to_cpu(id->dword_io);
+       id->reserved50     = __le16_to_cpu(id->reserved50);
+       id->field_valid    = __le16_to_cpu(id->field_valid);
+       id->cur_cyls       = __le16_to_cpu(id->cur_cyls);
+       id->cur_heads      = __le16_to_cpu(id->cur_heads);
+       id->cur_sectors    = __le16_to_cpu(id->cur_sectors);
+       id->cur_capacity0  = __le16_to_cpu(id->cur_capacity0);
+       id->cur_capacity1  = __le16_to_cpu(id->cur_capacity1);
+       id->lba_capacity   = __le32_to_cpu(id->lba_capacity);
+       id->dma_1word      = __le16_to_cpu(id->dma_1word);
+       id->dma_mword      = __le16_to_cpu(id->dma_mword);
+       id->eide_pio_modes = __le16_to_cpu(id->eide_pio_modes);
+       id->eide_dma_min   = __le16_to_cpu(id->eide_dma_min);
+       id->eide_dma_time  = __le16_to_cpu(id->eide_dma_time);
+       id->eide_pio       = __le16_to_cpu(id->eide_pio);
+       id->eide_pio_iordy = __le16_to_cpu(id->eide_pio_iordy);
+       for (i = 0; i < 2; i++)
+               id->words69_70[i] = __le16_to_cpu(id->words69_70[i]);
+        for (i = 0; i < 4; i++)
+                id->words71_74[i] = __le16_to_cpu(id->words71_74[i]);
+       id->queue_depth    = __le16_to_cpu(id->queue_depth);
+       for (i = 0; i < 4; i++)
+               id->words76_79[i] = __le16_to_cpu(id->words76_79[i]);
+       id->major_rev_num  = __le16_to_cpu(id->major_rev_num);
+       id->minor_rev_num  = __le16_to_cpu(id->minor_rev_num);
+       id->command_set_1  = __le16_to_cpu(id->command_set_1);
+       id->command_set_2  = __le16_to_cpu(id->command_set_2);
+       id->cfsse          = __le16_to_cpu(id->cfsse);
+       id->cfs_enable_1   = __le16_to_cpu(id->cfs_enable_1);
+       id->cfs_enable_2   = __le16_to_cpu(id->cfs_enable_2);
+       id->csf_default    = __le16_to_cpu(id->csf_default);
+       id->dma_ultra      = __le16_to_cpu(id->dma_ultra);
+       id->word89         = __le16_to_cpu(id->word89);
+       id->word90         = __le16_to_cpu(id->word90);
+       id->CurAPMvalues   = __le16_to_cpu(id->CurAPMvalues);
+       id->word92         = __le16_to_cpu(id->word92);
+       id->hw_config      = __le16_to_cpu(id->hw_config);
+       id->acoustic       = __le16_to_cpu(id->acoustic);
+       for (i = 0; i < 5; i++)
+               id->words95_99[i]  = __le16_to_cpu(id->words95_99[i]);
+       id->lba_capacity_2 = __le64_to_cpu(id->lba_capacity_2);
+       for (i = 0; i < 22; i++)
+               id->words104_125[i]   = __le16_to_cpu(id->words104_125[i]);
+       id->last_lun       = __le16_to_cpu(id->last_lun);
+       id->word127        = __le16_to_cpu(id->word127);
+       id->dlf            = __le16_to_cpu(id->dlf);
+       id->csfo           = __le16_to_cpu(id->csfo);
+       for (i = 0; i < 26; i++)
+               id->words130_155[i] = __le16_to_cpu(id->words130_155[i]);
+       id->word156        = __le16_to_cpu(id->word156);
+       for (i = 0; i < 3; i++)
+               id->words157_159[i] = __le16_to_cpu(id->words157_159[i]);
+       id->cfa_power      = __le16_to_cpu(id->cfa_power);
+       for (i = 0; i < 14; i++)
+               id->words161_175[i] = __le16_to_cpu(id->words161_175[i]);
+       for (i = 0; i < 31; i++)
+               id->words176_205[i] = __le16_to_cpu(id->words176_205[i]);
+       for (i = 0; i < 48; i++)
+               id->words206_254[i] = __le16_to_cpu(id->words206_254[i]);
+       id->integrity_word  = __le16_to_cpu(id->integrity_word);
+}
+#endif
index db9bd31d08c57877c9e192e3b3875f71b092c164..8a95ad1d5f46122f70a0d7fe0bedf1b4809e8d78 100644 (file)
@@ -98,14 +98,35 @@ static __inline__ void ide_init_default_hwifs(void)
                        continue;
                ide_init_hwif_ports(&hw, base, 0, NULL);
                hw.irq = ide_default_irq(base);
-               ide_register_hw(&hw);
+               ide_register_hw(&hw, NULL);
        }
 #endif
 }
 
+#if !defined(ide_request_irq)
+#define ide_request_irq(irq,hand,flg,dev,id)   request_irq((irq),(hand),(flg),(dev),(id))
+#endif
+
+#if !defined(ide_free_irq)
+#define ide_free_irq(irq,dev_id)               free_irq((irq), (dev_id))
+#endif
+#define ide_check_region(from,extent)          check_region((from), (extent))
+#define ide_request_region(from,extent,name)   request_region((from), (extent), (name))
+#define ide_release_region(from,extent)                release_region((from), (extent))
+
+extern void ide_fix_driveid(struct hd_driveid *id);
+
+/*
+ * The following are not needed for the non-m68k ports
+ * unless direct IDE on 8xx
+ */
 #if (defined CONFIG_APUS || defined CONFIG_BLK_DEV_MPC8xx_IDE )
-#define ATA_ARCH_ACK_INTR
+#define ide_ack_intr(hwif) (hwif->hw.ack_intr ? hwif->hw.ack_intr(hwif) : 1)
+#else
+#define ide_ack_intr(hwif)             (1)
 #endif
+#define ide_release_lock(lock)         do {} while (0)
+#define ide_get_lock(lock, hdlr, data) do {} while (0)
 
 #endif /* __KERNEL__ */