diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-03-17 22:05:47 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-03-17 22:05:47 +0000 |
commit | 27cfca1ec98e91261b1a5355d10a8996464b63af (patch) | |
tree | 8e895a53e372fa682b4c0a585b9377d67ed70d0e /include/asm-ppc/ide.h | |
parent | 6a76fb7214c477ccf6582bd79c5b4ccc4f9c41b1 (diff) |
Look Ma' what I found on my harddisk ...
o New faster syscalls for 2.1.x, too
o Upgrade to 2.1.89.
Don't try to run this. It's flaky as hell. But feel free to debug ...
Diffstat (limited to 'include/asm-ppc/ide.h')
-rw-r--r-- | include/asm-ppc/ide.h | 112 |
1 files changed, 44 insertions, 68 deletions
diff --git a/include/asm-ppc/ide.h b/include/asm-ppc/ide.h index 4cce72d28..14f8d3312 100644 --- a/include/asm-ppc/ide.h +++ b/include/asm-ppc/ide.h @@ -13,22 +13,32 @@ #ifdef __KERNEL__ -#include <linux/config.h> +#include <linux/ioport.h> +#include <asm/io.h> /* so we can redefine insw/outsw */ #ifndef MAX_HWIFS #define MAX_HWIFS 4 #endif +#undef SUPPORT_SLOW_DATA_PORTS +#define SUPPORT_SLOW_DATA_PORTS 0 +#undef SUPPORT_VLB_SYNC +#define SUPPORT_VLB_SYNC 0 + + #define ide_sti() sti() -typedef unsigned short ide_ioreg_t; +typedef unsigned long 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 pmac_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); -#if defined(CONFIG_PREP) || defined(CONFIG_CHRP) static __inline__ int ide_default_irq(ide_ioreg_t base) { + if ( _machine == _MACH_Pmac ) + return 0; switch (base) { case 0x1f0: return 13; case 0x170: return 13; @@ -41,6 +51,8 @@ static __inline__ int ide_default_irq(ide_ioreg_t base) static __inline__ ide_ioreg_t ide_default_io_base(int index) { + if ( _machine == _MACH_Pmac ) + return index; switch (index) { case 0: return 0x1f0; case 1: return 0x170; @@ -51,53 +63,52 @@ static __inline__ ide_ioreg_t ide_default_io_base(int index) } } -typedef union { - unsigned all : 8; /* all of the bits together */ - struct { - unsigned head : 4; /* always zeros here */ - unsigned unit : 1; /* drive select number, 0 or 1 */ - unsigned bit5 : 1; /* always 1 */ - unsigned lba : 1; /* using LBA instead of CHS */ - unsigned bit7 : 1; /* always 1 */ - } b; -} select_t; - static __inline__ int ide_check_region (ide_ioreg_t from, unsigned int extent) { + if ( _machine == _MACH_Pmac ) + 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 ) + return; request_region(from, extent, name); } static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent) { + if ( _machine == _MACH_Pmac ) + return; release_region(from, extent); } -#define ide_fix_driveid(id) do {} while (0) - -#endif /* CONFIG_CHRP || CONFIG_PREP */ - - -#ifdef CONFIG_PMAC - -#include <asm/io.h> /* so we can redefine insw/outsw */ - -typedef unsigned long ide_ioreg_t; +#define ide_fix_driveid(id) do { \ + int nh; \ + unsigned short *p = (unsigned short *) id; \ + if ( _machine == _MACH_Pmac ) \ + for (nh = SECTOR_WORDS * 2; nh != 0; --nh, ++p) \ + *p = (*p << 8) + (*p >> 8); \ +} while (0) -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; -} +#undef insw +#define insw(port, buf, ns) do { \ + if ( _machine != _MACH_Pmac ) \ + /* 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 +#define outsw(port, buf, ns) do { \ + if ( _machine != _MACH_Pmac ) \ + /* 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) typedef union { unsigned all : 8; /* all of the bits together */ @@ -110,41 +121,6 @@ typedef union { } 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 0; -} - -static __inline__ void ide_request_region (ide_ioreg_t from, unsigned int extent, const char *name) -{ -} - -static __inline__ void ide_release_region (ide_ioreg_t from, unsigned int extent) -{ -} - -#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) { |