This source file includes following definitions.
- __local_inb
- __local_outb
- __inb
- __outb
- __is_local
- inb
- outb
- inw
- outw
- outl
- readb
- readw
- readl
- writeb
- writew
- writel
1 #ifndef __ALPHA_IO_H
2 #define __ALPHA_IO_H
3
4
5
6
7
8 #ifndef mb
9 #define mb() __asm__ __volatile__("mb": : :"memory")
10 #endif
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 #define IDENT_ADDR (0xfffffc0000000000UL)
44
45
46
47
48 #define EISA_INTA (IDENT_ADDR + 0x100000000UL)
49
50
51
52
53 #define EISA_FEPROM0 (IDENT_ADDR + 0x180000000UL)
54 #define EISA_FEPROM1 (IDENT_ADDR + 0x1A0000000UL)
55
56
57
58
59 #define EISA_VL82C106 (IDENT_ADDR + 0x1C0000000UL)
60
61
62
63
64 #define EISA_HAE (IDENT_ADDR + 0x1D0000000UL)
65
66
67
68
69 #define EISA_SYSCTL (IDENT_ADDR + 0x1E0000000UL)
70
71
72
73
74 #define EISA_SPARE (IDENT_ADDR + 0x1F0000000UL)
75
76
77
78
79 #define EISA_MEM (IDENT_ADDR + 0x200000000UL)
80
81
82
83
84 #define EISA_IO (IDENT_ADDR + 0x300000000UL)
85
86
87
88
89
90
91
92
93
94
95
96
97 extern inline unsigned int __local_inb(unsigned long addr)
98 {
99 long result = *(volatile int *) ((addr << 9) + EISA_VL82C106);
100 return 0xffUL & result;
101 }
102
103 extern inline void __local_outb(unsigned char b, unsigned long addr)
104 {
105 *(volatile unsigned int *) ((addr << 9) + EISA_VL82C106) = b;
106 mb();
107 }
108
109 extern inline unsigned int __inb(unsigned long addr)
110 {
111 long result = *(volatile int *) ((addr << 7) + EISA_IO + 0x00);
112 result >>= (addr & 3) * 8;
113 return 0xffUL & result;
114 }
115
116 extern inline void __outb(unsigned char b, unsigned long addr)
117 {
118 *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x00) = b * 0x01010101;
119 mb();
120 }
121
122
123
124
125
126
127
128
129
130 extern inline int __is_local(unsigned long addr)
131 {
132
133 if (addr == 0x60 || addr == 0x64)
134 return 1;
135
136
137 if (addr == 0x170 || addr == 0x171)
138 return 1;
139
140
141 if (addr >= 0x2f8 && addr <= 0x2ff)
142 return 1;
143
144
145 if (addr >= 0x3bc && addr <= 0x3be)
146 return 1;
147
148
149 if (addr >= 0x3f8 && addr <= 0x3ff)
150 return 1;
151
152 return 0;
153 }
154
155 extern inline unsigned int inb(unsigned long addr)
156 {
157 if (__is_local(addr))
158 return __local_inb(addr);
159 return __inb(addr);
160 }
161
162 extern inline void outb(unsigned char b, unsigned long addr)
163 {
164 if (__is_local(addr))
165 __local_outb(b, addr);
166 else
167 __outb(b, addr);
168 }
169
170 extern inline unsigned int inw(unsigned long addr)
171 {
172 long result = *(volatile int *) ((addr << 7) + EISA_IO + 0x20);
173 result >>= (addr & 3) * 8;
174 return 0xffffUL & result;
175 }
176
177 extern inline unsigned int inl(unsigned long addr)
178 {
179 return *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x60);
180 }
181
182 extern inline void outw(unsigned short b, unsigned long addr)
183 {
184 *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x20) = b * 0x00010001;
185 mb();
186 }
187
188 extern inline void outl(unsigned int b, unsigned long addr)
189 {
190 *(volatile unsigned int *) ((addr << 7) + EISA_IO + 0x60) = b;
191 mb();
192 }
193
194
195
196
197 extern inline unsigned long readb(unsigned long addr)
198 {
199 long result = *(volatile int *) ((addr << 7) + EISA_MEM + 0x00);
200 result >>= (addr & 3) * 8;
201 return 0xffUL & result;
202 }
203
204 extern inline unsigned long readw(unsigned long addr)
205 {
206 long result = *(volatile int *) ((addr << 7) + EISA_MEM + 0x20);
207 result >>= (addr & 3) * 8;
208 return 0xffffUL & result;
209 }
210
211 extern inline unsigned long readl(unsigned long addr)
212 {
213 return *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x60);
214 }
215
216 extern inline void writeb(unsigned short b, unsigned long addr)
217 {
218 *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x00) = b * 0x01010101;
219 }
220
221 extern inline void writew(unsigned short b, unsigned long addr)
222 {
223 *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x20) = b * 0x00010001;
224 }
225
226 extern inline void writel(unsigned int b, unsigned long addr)
227 {
228 *(volatile unsigned int *) ((addr << 7) + EISA_MEM + 0x60) = b;
229 }
230
231 #define inb_p inb
232 #define outb_p outb
233
234 #endif