mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
144 lines
3.5 KiB
C
144 lines
3.5 KiB
C
|
/*
|
||
|
* 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(irqreturn_t (*handler)(int, void *, struct pt_regs *), 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)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
|
||
|
|
||
|
#endif /* __KERNEL__ */
|
||
|
#endif /* _M68K_IDE_H */
|