mirror of https://gitee.com/openkylin/linux.git
144 lines
3.4 KiB
C
144 lines
3.4 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(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)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
|
|
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _M68K_IDE_H */
|