summaryrefslogtreecommitdiffstats
path: root/include/asm-ppc/ide.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-ppc/ide.h')
-rw-r--r--include/asm-ppc/ide.h107
1 files changed, 83 insertions, 24 deletions
diff --git a/include/asm-ppc/ide.h b/include/asm-ppc/ide.h
index 69838b8b1..bc16288a8 100644
--- a/include/asm-ppc/ide.h
+++ b/include/asm-ppc/ide.h
@@ -1,5 +1,5 @@
/*
- * linux/include/asm-i386/ide.h
+ * linux/include/asm-ppc/ide.h
*
* Copyright (C) 1994-1996 Linus Torvalds & authors
*/
@@ -13,7 +13,7 @@
#ifdef __KERNEL__
-typedef unsigned short ide_ioreg_t;
+#include <linux/config.h>
#ifndef MAX_HWIFS
#define MAX_HWIFS 4
@@ -21,11 +21,15 @@ typedef unsigned short ide_ioreg_t;
#define ide_sti() sti()
+#ifdef CONFIG_PREP
+
+typedef unsigned short ide_ioreg_t;
+
static __inline__ int ide_default_irq(ide_ioreg_t base)
{
switch (base) {
- case 0x1f0: return 14;
- case 0x170: return 15;
+ case 0x1f0: return 13;
+ case 0x170: return 13;
case 0x1e8: return 11;
case 0x168: return 10;
default:
@@ -66,18 +70,7 @@ typedef union {
unsigned lba : 1; /* using LBA instead of CHS */
unsigned bit7 : 1; /* always 1 */
} b;
- } select_t;
-
-static __inline__ int ide_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
- unsigned long flags, const char *device, void *dev_id)
-{
- return request_irq(irq, handler, flags, device, dev_id);
-}
-
-static __inline__ void ide_free_irq(unsigned int irq, void *dev_id)
-{
- free_irq(irq, dev_id);
-}
+} select_t;
static __inline__ int ide_check_region (ide_ioreg_t from, unsigned int extent)
{
@@ -94,26 +87,92 @@ static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent
release_region(from, extent);
}
-/*
- * The following are not needed for the non-m68k ports
- */
-static __inline__ int ide_ack_intr (ide_ioreg_t base_port, ide_ioreg_t irq_port)
+#define ide_fix_driveid(id) do {} while (0)
+
+#endif
+
+#ifdef CONFIG_PMAC
+
+#include <asm/io.h> /* so we can redefine insw/outsw */
+
+typedef unsigned long ide_ioreg_t;
+
+static __inline__ int ide_default_irq(ide_ioreg_t base)
+{
+ return 0;
+}
+
+extern __inline__ ide_ioreg_t ide_default_io_base(int index)
+{
+ return index;
+}
+
+extern void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+
+typedef union {
+ unsigned all : 8; /* all of the bits together */
+ struct {
+ unsigned bit7 : 1; /* always 1 */
+ unsigned lba : 1; /* using LBA instead of CHS */
+ unsigned bit5 : 1; /* always 1 */
+ unsigned unit : 1; /* drive select number, 0/1 */
+ unsigned head : 4; /* always zeros here */
+ } b;
+} select_t;
+
+#undef SUPPORT_SLOW_DATA_PORTS
+#define SUPPORT_SLOW_DATA_PORTS 0
+#undef SUPPORT_VLB_SYNC
+#define SUPPORT_VLB_SYNC 0
+
+static __inline__ int ide_check_region (ide_ioreg_t from, unsigned int extent)
{
- return(1);
+ return 0;
}
-static __inline__ void ide_fix_driveid(struct hd_driveid *id)
+static __inline__ void ide_request_region (ide_ioreg_t from, unsigned int extent, const char *name)
{
}
-static __inline__ void ide_release_lock (int *ide_lock)
+static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent)
{
}
-static __inline__ void ide_get_lock (int *ide_lock, void (*handler)(int, void *, struct pt_regs *), void *data)
+#undef insw
+#undef outsw
+#define insw(port, buf, ns) ide_insw((port), (buf), (ns))
+#define outsw(port, buf, ns) ide_outsw((port), (buf), (ns))
+
+void ide_insw(ide_ioreg_t port, void *buf, int ns);
+void ide_outsw(ide_ioreg_t port, void *buf, int ns);
+
+#define ide_fix_driveid(id) do { \
+ int nh; \
+ unsigned short *p = (unsigned short *) id; \
+ for (nh = SECTOR_WORDS * 2; nh != 0; --nh, ++p) \
+ *p = (*p << 8) + (*p >> 8); \
+} while (0)
+
+#endif
+
+static __inline__ int ide_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
+ unsigned long flags, const char *device, void *dev_id)
{
+ return request_irq(irq, handler, flags, device, dev_id);
+}
+
+static __inline__ void ide_free_irq(unsigned int irq, void *dev_id)
+{
+ free_irq(irq, dev_id);
}
+/*
+ * The following are not needed for the non-m68k ports
+ */
+#define ide_ack_intr(base, irq) (1)
+#define ide_release_lock(lock) do {} while (0)
+#define ide_get_lock(lock, hdlr, data) do {} while (0)
+
#endif /* __KERNEL__ */
#endif /* __ASMPPC_IDE_H */