|  | /* | 
|  | *  linux/include/asm-m68k/ide.h | 
|  | * | 
|  | *  Copyright (C) 1994-1996  Linus Torvalds & authors | 
|  | */ | 
|  |  | 
|  | /* Copyright(c) 1996 Kars de Jong */ | 
|  | /* Based on the ide driver from 1.2.13pl8 */ | 
|  |  | 
|  | /* | 
|  | * Credits (alphabetical): | 
|  | * | 
|  | *  - Bjoern Brauel | 
|  | *  - Kars de Jong | 
|  | *  - Torsten Ebeling | 
|  | *  - Dwight Engen | 
|  | *  - Thorsten Floeck | 
|  | *  - Roman Hodek | 
|  | *  - Guenther Kelleter | 
|  | *  - Chris Lawrence | 
|  | *  - Michael Rausch | 
|  | *  - Christian Sauer | 
|  | *  - Michael Schmitz | 
|  | *  - Jes Soerensen | 
|  | *  - Michael Thurm | 
|  | *  - Geert Uytterhoeven | 
|  | */ | 
|  |  | 
|  | #ifndef _M68K_IDE_H | 
|  | #define _M68K_IDE_H | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  |  | 
|  |  | 
|  | #include <asm/setup.h> | 
|  | #include <asm/io.h> | 
|  | #include <asm/irq.h> | 
|  |  | 
|  | #ifdef CONFIG_ATARI | 
|  | #include <linux/interrupt.h> | 
|  | #include <asm/atari_stdma.h> | 
|  | #endif | 
|  |  | 
|  | #ifdef CONFIG_MAC | 
|  | #include <asm/macints.h> | 
|  | #endif | 
|  |  | 
|  | #ifndef MAX_HWIFS | 
|  | #define MAX_HWIFS	4	/* same as the other archs */ | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * Get rid of defs from io.h - ide has its private and conflicting versions | 
|  | * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we | 
|  | * always use the `raw' MMIO versions | 
|  | */ | 
|  | #undef inb | 
|  | #undef inw | 
|  | #undef insw | 
|  | #undef inl | 
|  | #undef insl | 
|  | #undef outb | 
|  | #undef outw | 
|  | #undef outsw | 
|  | #undef outl | 
|  | #undef outsl | 
|  | #undef readb | 
|  | #undef readw | 
|  | #undef readl | 
|  | #undef writeb | 
|  | #undef writew | 
|  | #undef writel | 
|  |  | 
|  | #define inb				in_8 | 
|  | #define inw				in_be16 | 
|  | #define insw(port, addr, n)		raw_insw((u16 *)port, addr, n) | 
|  | #define inl				in_be32 | 
|  | #define insl(port, addr, n)		raw_insl((u32 *)port, addr, n) | 
|  | #define outb(val, port)			out_8(port, val) | 
|  | #define outw(val, port)			out_be16(port, val) | 
|  | #define outsw(port, addr, n)		raw_outsw((u16 *)port, addr, n) | 
|  | #define outl(val, port)			out_be32(port, val) | 
|  | #define outsl(port, addr, n)		raw_outsl((u32 *)port, addr, n) | 
|  | #define readb				in_8 | 
|  | #define readw				in_be16 | 
|  | #define __ide_mm_insw(port, addr, n)	raw_insw((u16 *)port, addr, n) | 
|  | #define readl				in_be32 | 
|  | #define __ide_mm_insl(port, addr, n)	raw_insl((u32 *)port, addr, n) | 
|  | #define writeb(val, port)		out_8(port, val) | 
|  | #define writew(val, port)		out_be16(port, val) | 
|  | #define __ide_mm_outsw(port, addr, n)	raw_outsw((u16 *)port, addr, n) | 
|  | #define writel(val, port)		out_be32(port, val) | 
|  | #define __ide_mm_outsl(port, addr, n)	raw_outsl((u32 *)port, addr, n) | 
|  | #if defined(CONFIG_ATARI) || defined(CONFIG_Q40) | 
|  | #define insw_swapw(port, addr, n)	raw_insw_swapw((u16 *)port, addr, n) | 
|  | #define outsw_swapw(port, addr, n)	raw_outsw_swapw((u16 *)port, addr, n) | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /* Q40 and Atari have byteswapped IDE busses and since many interesting | 
|  | * values in the identification string are text, chars and words they | 
|  | * happened to be almost correct without swapping.. However *_capacity | 
|  | * is needed for drives over 8 GB. RZ */ | 
|  | #if defined(CONFIG_Q40) || defined(CONFIG_ATARI) | 
|  | #define M68K_IDE_SWAPW  (MACH_IS_Q40 || MACH_IS_ATARI) | 
|  | #endif | 
|  |  | 
|  | #ifdef CONFIG_BLK_DEV_FALCON_IDE | 
|  | #define IDE_ARCH_LOCK | 
|  |  | 
|  | extern int falconide_intr_lock; | 
|  |  | 
|  | static __inline__ void ide_release_lock (void) | 
|  | { | 
|  | if (MACH_IS_ATARI) { | 
|  | if (falconide_intr_lock == 0) { | 
|  | printk("ide_release_lock: bug\n"); | 
|  | return; | 
|  | } | 
|  | falconide_intr_lock = 0; | 
|  | stdma_release(); | 
|  | } | 
|  | } | 
|  |  | 
|  | static __inline__ void | 
|  | ide_get_lock(irq_handler_t handler, void *data) | 
|  | { | 
|  | if (MACH_IS_ATARI) { | 
|  | if (falconide_intr_lock == 0) { | 
|  | if (in_interrupt() > 0) | 
|  | panic( "Falcon IDE hasn't ST-DMA lock in interrupt" ); | 
|  | stdma_lock(handler, data); | 
|  | falconide_intr_lock = 1; | 
|  | } | 
|  | } | 
|  | } | 
|  | #endif /* CONFIG_BLK_DEV_FALCON_IDE */ | 
|  |  | 
|  | #define IDE_ARCH_ACK_INTR | 
|  | #define ide_ack_intr(hwif)	((hwif)->ack_intr ? (hwif)->ack_intr(hwif) : 1) | 
|  |  | 
|  | #endif /* __KERNEL__ */ | 
|  | #endif /* _M68K_IDE_H */ |