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