patch-2.1.97 linux/include/asm-ppc/ide.h
Next file: linux/include/asm-ppc/io.h
Previous file: linux/include/asm-ppc/elf.h
Back to the patch index
Back to the overall index
- Lines: 138
- Date:
Tue Apr 14 17:34:00 1998
- Orig file:
v2.1.96/linux/include/asm-ppc/ide.h
- Orig date:
Mon Jan 12 15:18:13 1998
diff -u --recursive --new-file v2.1.96/linux/include/asm-ppc/ide.h linux/include/asm-ppc/ide.h
@@ -28,17 +28,35 @@
#define ide_sti() sti()
-typedef unsigned long ide_ioreg_t;
+typedef unsigned int ide_ioreg_t;
void ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
void prep_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void mbx_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
void pmac_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
+void chrp_ide_init_hwif_ports(ide_ioreg_t *p, ide_ioreg_t base, int *irq);
void ide_insw(ide_ioreg_t port, void *buf, int ns);
void ide_outsw(ide_ioreg_t port, void *buf, int ns);
+extern int pmac_ide_ports_known;
+extern ide_ioreg_t pmac_ide_regbase[MAX_HWIFS];
+extern int pmac_ide_irq[MAX_HWIFS];
+extern void pmac_ide_probe(void);
+
+extern int chrp_ide_ports_known;
+extern ide_ioreg_t chrp_ide_regbase[MAX_HWIFS];
+extern ide_ioreg_t chrp_idedma_regbase; /* one for both channels */
+extern unsigned int chrp_ide_irq;
+extern void chrp_ide_probe(void);
+
static __inline__ int ide_default_irq(ide_ioreg_t base)
{
- if ( _machine == _MACH_Pmac )
+ if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) )
return 0;
+ else if ( _machine == _MACH_chrp) {
+ if (chrp_ide_ports_known == 0)
+ chrp_ide_probe();
+ return chrp_ide_irq;
+ }
switch (base) {
case 0x1f0: return 13;
case 0x170: return 13;
@@ -51,8 +69,17 @@
static __inline__ ide_ioreg_t ide_default_io_base(int index)
{
- if ( _machine == _MACH_Pmac )
- return index;
+ if (_machine == _MACH_Pmac) {
+ if (!pmac_ide_ports_known)
+ pmac_ide_probe();
+ return pmac_ide_regbase[index];
+ }
+ if (_machine == _MACH_mbx) return index;
+ if ( _machine == _MACH_chrp ) {
+ if (chrp_ide_ports_known == 0)
+ chrp_ide_probe();
+ return chrp_ide_regbase[index];
+ }
switch (index) {
case 0: return 0x1f0;
case 1: return 0x170;
@@ -65,21 +92,21 @@
static __inline__ int ide_check_region (ide_ioreg_t from, unsigned int extent)
{
- if ( _machine == _MACH_Pmac )
+ if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx))
return 0;
return check_region(from, extent);
}
static __inline__ void ide_request_region (ide_ioreg_t from, unsigned int extent, const char *name)
{
- if ( _machine == _MACH_Pmac )
+ if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) )
return;
request_region(from, extent, name);
}
static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent)
{
- if ( _machine == _MACH_Pmac )
+ if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) )
return;
release_region(from, extent);
}
@@ -87,7 +114,7 @@
#define ide_fix_driveid(id) do { \
int nh; \
unsigned short *p = (unsigned short *) id; \
- if ( _machine == _MACH_Pmac ) \
+ if (( _machine == _MACH_Pmac ) || (_machine == _MACH_chrp)|| (_machine == _MACH_mbx) ) \
for (nh = SECTOR_WORDS * 2; nh != 0; --nh, ++p) \
*p = (*p << 8) + (*p >> 8); \
} while (0)
@@ -95,20 +122,39 @@
#undef insw
#define insw(port, buf, ns) do { \
- if ( _machine != _MACH_Pmac ) \
+ if ( _machine == _MACH_chrp) {\
+ ide_insw((port)+_IO_BASE, (buf), (ns)); \
+ }\
+ else if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) ) \
+ ide_insw((port), (buf), (ns)); \
+ else \
/* this must be the same as insw in io.h!! */ \
_insw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
- else \
- ide_insw((port), (buf), (ns)); \
} while (0)
#undef outsw
+/* printk("port: %x buf: %p ns: %d\n",port,buf,ns); \ */
#define outsw(port, buf, ns) do { \
- if ( _machine != _MACH_Pmac ) \
+ if ( _machine == _MACH_chrp) {\
+ ide_outsw((port)+_IO_BASE, (buf), (ns)); \
+ }\
+ else if ( (_machine == _MACH_Pmac) || (_machine == _MACH_mbx) ) \
+ ide_outsw((port), (buf), (ns)); \
+ else \
/* this must be the same as outsw in io.h!! */ \
_outsw((unsigned short *)((port)+_IO_BASE), (buf), (ns)); \
- else \
- ide_outsw((port), (buf), (ns)); \
} while (0)
+
+#undef inb
+#define inb(port) \
+ in_8((unsigned char *)((port) + ((_machine==_MACH_Pmac)? 0: _IO_BASE)))
+#undef inb_p
+#define inb_p(port) inb(port)
+
+#undef outb
+#define outb(val, port) \
+ out_8((unsigned char *)((port) + ((_machine==_MACH_Pmac)? 0: _IO_BASE)), (val))
+#undef outb_p
+#define outb_p(val, port) outb(val, port)
typedef union {
unsigned all : 8; /* all of the bits together */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov