patch-2.1.101 linux/include/asm-mips/ide.h

Next file: linux/include/asm-mips/init.h
Previous file: linux/include/asm-mips/hardirq.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.100/linux/include/asm-mips/ide.h linux/include/asm-mips/ide.h
@@ -21,40 +21,36 @@
 
 #define ide__sti()	__sti()
 
+struct ide_ops {
+	int (*ide_default_irq)(ide_ioreg_t base);
+	ide_ioreg_t (*ide_default_io_base)(int index);
+	void (*ide_init_hwif_ports)(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+	int (*ide_request_irq)(unsigned int irq, void (*handler)(int, void *,
+	                       struct pt_regs *), unsigned long flags,
+	                       const char *device, void *dev_id);
+	void (*ide_free_irq)(unsigned int irq, void *dev_id);
+	int (*ide_check_region) (ide_ioreg_t from, unsigned int extent);
+	void (*ide_request_region)(ide_ioreg_t from, unsigned int extent,
+	                        const char *name);
+	void (*ide_release_region)(ide_ioreg_t from, unsigned int extent);
+};
+
+extern struct ide_ops *ide_ops;
+
 static __inline__ int ide_default_irq(ide_ioreg_t base)
 {
-	switch (base) {
-		case 0x1f0: return 14;
-		case 0x170: return 15;
-		case 0x1e8: return 11;
-		case 0x168: return 10;
-		default:
-			return 0;
-	}
+	return ide_ops->ide_default_irq(base);
 }
 
 static __inline__ ide_ioreg_t ide_default_io_base(int index)
 {
-	switch (index) {
-		case 0:	return 0x1f0;
-		case 1:	return 0x170;
-		case 2: return 0x1e8;
-		case 3: return 0x168;
-		default:
-			return 0;
-	}
-}
-
-static __inline__ void ide_init_hwif_ports (ide_ioreg_t *p, ide_ioreg_t base, int *irq)
-{
-	ide_ioreg_t port = base;
-	int i = 8;
-
-	while (i--)
-		*p++ = port++;
-	*p++ = base + 0x206;
-	if (irq != NULL)
-		*irq = 0;
+	return ide_ops->ide_default_io_base(index);
+}
+
+static __inline__ void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base,
+                                           int *irq)
+{
+	ide_ops->ide_init_hwif_ports(p, base, irq);
 }
 
 typedef union {
@@ -68,38 +64,41 @@
 	} b;
 	} select_t;
 
-static __inline__ int ide_request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *),
+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);
-}			
+	return ide_ops->ide_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);
+	ide_ops->ide_free_irq(irq, dev_id);
 }
 
 static __inline__ int ide_check_region (ide_ioreg_t from, unsigned int extent)
 {
-	return check_region(from, extent);
+	return ide_ops->ide_check_region(from, extent);
 }
 
-static __inline__ void ide_request_region (ide_ioreg_t from, unsigned int extent, const char *name)
+static __inline__ void ide_request_region(ide_ioreg_t from,
+                                          unsigned int extent, const char *name)
 {
-	request_region(from, extent, name);
+	ide_ops->ide_request_region(from, extent, name);
 }
 
-static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent)
+static __inline__ void ide_release_region(ide_ioreg_t from,
+                                          unsigned int extent)
 {
-	release_region(from, extent);
+	ide_ops->ide_release_region(from, extent);
 }
 
 /*
  * The following are not needed for the non-m68k ports
  */
-static __inline__ int ide_ack_intr (ide_ioreg_t status_port, ide_ioreg_t irq_port)
+static __inline__ int ide_ack_intr (ide_ioreg_t status_port,
+                                    ide_ioreg_t irq_port)
 {
-	return(1);
+	return 1;
 }
 
 static __inline__ void ide_fix_driveid(struct hd_driveid *id)
@@ -110,7 +109,10 @@
 {
 }
 
-static __inline__ void ide_get_lock (int *ide_lock, void (*handler)(int, void *, struct pt_regs *), void *data)
+static __inline__ void ide_get_lock (int *ide_lock,
+                                     void (*handler)(int, void *,
+                                                    struct pt_regs *),
+                                     void *data)
 {
 }
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov