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