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