2005-04-16 15:20:36 -07:00
/*
* 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
2006-10-09 12:19:47 +01:00
ide_get_lock ( irq_handler_t handler , void * data )
2005-04-16 15:20:36 -07:00
{
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 */