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