home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-m68k / ide.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.5 KB  |  144 lines

  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.  
  111. extern int falconide_intr_lock;
  112.  
  113. static __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.  
  125. static __inline__ void
  126. ide_get_lock(irqreturn_t (*handler)(int, void *, struct pt_regs *), 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.