~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-i386/ide.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  linux/include/asm-i386/ide.h
  3  *
  4  *  Copyright (C) 1994-1996  Linus Torvalds & authors
  5  */
  6 
  7 /*
  8  *  This file contains the i386 architecture specific IDE code.
  9  */
 10 
 11 #ifndef __ASMi386_IDE_H
 12 #define __ASMi386_IDE_H
 13 
 14 #ifdef __KERNEL__
 15 
 16 #include <linux/config.h>
 17 
 18 #ifndef MAX_HWIFS
 19 # ifdef CONFIG_BLK_DEV_IDEPCI
 20 #define MAX_HWIFS       10
 21 # else
 22 #define MAX_HWIFS       6
 23 # endif
 24 #endif
 25 
 26 #define ide__sti()      __sti()
 27 
 28 static __inline__ int ide_default_irq(ide_ioreg_t base)
 29 {
 30         switch (base) {
 31                 case 0x1f0: return 14;
 32                 case 0x170: return 15;
 33                 case 0x1e8: return 11;
 34                 case 0x168: return 10;
 35                 case 0x1e0: return 8;
 36                 case 0x160: return 12;
 37                 default:
 38                         return 0;
 39         }
 40 }
 41 
 42 static __inline__ ide_ioreg_t ide_default_io_base(int index)
 43 {
 44         switch (index) {
 45                 case 0: return 0x1f0;
 46                 case 1: return 0x170;
 47                 case 2: return 0x1e8;
 48                 case 3: return 0x168;
 49                 case 4: return 0x1e0;
 50                 case 5: return 0x160;
 51                 default:
 52                         return 0;
 53         }
 54 }
 55 
 56 static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq)
 57 {
 58         ide_ioreg_t reg = data_port;
 59         int i;
 60 
 61         for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
 62                 hw->io_ports[i] = reg;
 63                 reg += 1;
 64         }
 65         if (ctrl_port) {
 66                 hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
 67         } else {
 68                 hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206;
 69         }
 70         if (irq != NULL)
 71                 *irq = 0;
 72         hw->io_ports[IDE_IRQ_OFFSET] = 0;
 73 }
 74 
 75 static __inline__ void ide_init_default_hwifs(void)
 76 {
 77 #ifndef CONFIG_BLK_DEV_IDEPCI
 78         hw_regs_t hw;
 79         int index;
 80 
 81         for(index = 0; index < MAX_HWIFS; index++) {
 82                 ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL);
 83                 hw.irq = ide_default_irq(ide_default_io_base(index));
 84                 ide_register_hw(&hw, NULL);
 85         }
 86 #endif /* CONFIG_BLK_DEV_IDEPCI */
 87 }
 88 
 89 typedef union {
 90         unsigned all                    : 8;    /* all of the bits together */
 91         struct {
 92                 unsigned head           : 4;    /* always zeros here */
 93                 unsigned unit           : 1;    /* drive select number, 0 or 1 */
 94                 unsigned bit5           : 1;    /* always 1 */
 95                 unsigned lba            : 1;    /* using LBA instead of CHS */
 96                 unsigned bit7           : 1;    /* always 1 */
 97         } b;
 98         } select_t;
 99 
100 #define ide_request_irq(irq,hand,flg,dev,id)    request_irq((irq),(hand),(flg),(dev),(id))
101 #define ide_free_irq(irq,dev_id)                free_irq((irq), (dev_id))
102 #define ide_check_region(from,extent)           check_region((from), (extent))
103 #define ide_request_region(from,extent,name)    request_region((from), (extent), (name))
104 #define ide_release_region(from,extent)         release_region((from), (extent))
105 
106 /*
107  * The following are not needed for the non-m68k ports
108  */
109 #define ide_ack_intr(hwif)              (1)
110 #define ide_fix_driveid(id)             do {} while (0)
111 #define ide_release_lock(lock)          do {} while (0)
112 #define ide_get_lock(lock, hdlr, data)  do {} while (0)
113 
114 #endif /* __KERNEL__ */
115 
116 #endif /* __ASMi386_IDE_H */
117 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.