1/* 2 * linux/include/asm-m68k/ide.h 3 * 4 * Copyright (C) 1994-1996 Linus Torvalds & authors 5 */ 6 7/* Copyright(c) 1996 Kars de Jong */ 8/* Based on the ide driver from 1.2.13pl8 */ 9 10/* 11 * Credits (alphabetical): 12 * 13 * - Bjoern Brauel 14 * - Kars de Jong 15 * - Torsten Ebeling 16 * - Dwight Engen 17 * - Thorsten Floeck 18 * - Roman Hodek 19 * - Guenther Kelleter 20 * - Chris Lawrence 21 * - Michael Rausch 22 * - Christian Sauer 23 * - Michael Schmitz 24 * - Jes Soerensen 25 * - Michael Thurm 26 * - Geert Uytterhoeven 27 */ 28 29#ifndef _M68K_IDE_H 30#define _M68K_IDE_H 31 32#ifdef __KERNEL__ 33 34 35#include <asm/setup.h> 36#include <asm/io.h> 37#include <asm/irq.h> 38 39#ifdef CONFIG_ATARI 40#include <linux/interrupt.h> 41#include <asm/atari_stdma.h> 42#endif 43 44#ifdef CONFIG_MAC 45#include <asm/macints.h> 46#endif 47 48#ifndef MAX_HWIFS 49#define MAX_HWIFS 4 /* same as the other archs */ 50#endif 51 52/* 53 * Get rid of defs from io.h - ide has its private and conflicting versions 54 * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we 55 * always use the `raw' MMIO versions 56 */ 57#undef inb 58#undef inw 59#undef insw 60#undef inl 61#undef insl 62#undef outb 63#undef outw 64#undef outsw 65#undef outl 66#undef outsl 67#undef readb 68#undef readw 69#undef readl 70#undef writeb 71#undef writew 72#undef writel 73 74#define inb in_8 75#define inw in_be16 76#define insw(port, addr, n) raw_insw((u16 *)port, addr, n) 77#define inl in_be32 78#define insl(port, addr, n) raw_insl((u32 *)port, addr, n) 79#define outb(val, port) out_8(port, val) 80#define outw(val, port) out_be16(port, val) 81#define outsw(port, addr, n) raw_outsw((u16 *)port, addr, n) 82#define outl(val, port) out_be32(port, val) 83#define outsl(port, addr, n) raw_outsl((u32 *)port, addr, n) 84#define readb in_8 85#define readw in_be16 86#define __ide_mm_insw(port, addr, n) raw_insw((u16 *)port, addr, n) 87#define readl in_be32 88#define __ide_mm_insl(port, addr, n) raw_insl((u32 *)port, addr, n) 89#define writeb(val, port) out_8(port, val) 90#define writew(val, port) out_be16(port, val) 91#define __ide_mm_outsw(port, addr, n) raw_outsw((u16 *)port, addr, n) 92#define writel(val, port) out_be32(port, val) 93#define __ide_mm_outsl(port, addr, n) raw_outsl((u32 *)port, addr, n) 94#if defined(CONFIG_ATARI) || defined(CONFIG_Q40) 95#define insw_swapw(port, addr, n) raw_insw_swapw((u16 *)port, addr, n) 96#define outsw_swapw(port, addr, n) raw_outsw_swapw((u16 *)port, addr, n) 97#endif 98 99 100/* Q40 and Atari have byteswapped IDE busses and since many interesting 101 * values in the identification string are text, chars and words they 102 * happened to be almost correct without swapping.. However *_capacity 103 * is needed for drives over 8 GB. RZ */ 104#if defined(CONFIG_Q40) || defined(CONFIG_ATARI) 105#define M68K_IDE_SWAPW (MACH_IS_Q40 || MACH_IS_ATARI) 106#endif 107 108#ifdef CONFIG_BLK_DEV_FALCON_IDE 109#define IDE_ARCH_LOCK 110 111extern int falconide_intr_lock; 112 113static __inline__ void ide_release_lock (void) 114{ 115 if (MACH_IS_ATARI) { 116 if (falconide_intr_lock == 0) { 117 printk("ide_release_lock: bug\n"); 118 return; 119 } 120 falconide_intr_lock = 0; 121 stdma_release(); 122 } 123} 124 125static __inline__ void 126ide_get_lock(irq_handler_t handler, void *data) 127{ 128 if (MACH_IS_ATARI) { 129 if (falconide_intr_lock == 0) { 130 if (in_interrupt() > 0) 131 panic( "Falcon IDE hasn't ST-DMA lock in interrupt" ); 132 stdma_lock(handler, data); 133 falconide_intr_lock = 1; 134 } 135 } 136} 137#endif /* CONFIG_BLK_DEV_FALCON_IDE */ 138 139#define IDE_ARCH_ACK_INTR 140#define ide_ack_intr(hwif) ((hwif)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1) 141 142#endif /* __KERNEL__ */ 143#endif /* _M68K_IDE_H */ 144