Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | NinjaSCSI I/O funtions | |
3 | By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp> | |
4 | ||
5 | This software may be used and distributed according to the terms of | |
6 | the GNU General Public License. | |
7 | ||
8 | */ | |
9 | ||
10 | /* $Id: nsp_io.h,v 1.3 2003/08/04 21:15:26 elca Exp $ */ | |
11 | ||
12 | #ifndef __NSP_IO_H__ | |
13 | #define __NSP_IO_H__ | |
14 | ||
15 | static inline void nsp_write(unsigned int base, | |
16 | unsigned int index, | |
17 | unsigned char val); | |
18 | static inline unsigned char nsp_read(unsigned int base, | |
19 | unsigned int index); | |
20 | static inline void nsp_index_write(unsigned int BaseAddr, | |
21 | unsigned int Register, | |
22 | unsigned char Value); | |
23 | static inline unsigned char nsp_index_read(unsigned int BaseAddr, | |
24 | unsigned int Register); | |
25 | ||
26 | /******************************************************************* | |
27 | * Basic IO | |
28 | */ | |
29 | ||
30 | static inline void nsp_write(unsigned int base, | |
31 | unsigned int index, | |
32 | unsigned char val) | |
33 | { | |
34 | outb(val, (base + index)); | |
35 | } | |
36 | ||
37 | static inline unsigned char nsp_read(unsigned int base, | |
38 | unsigned int index) | |
39 | { | |
40 | return inb(base + index); | |
41 | } | |
42 | ||
43 | ||
44 | /********************************************************************** | |
45 | * Indexed IO | |
46 | */ | |
47 | static inline unsigned char nsp_index_read(unsigned int BaseAddr, | |
48 | unsigned int Register) | |
49 | { | |
50 | outb(Register, BaseAddr + INDEXREG); | |
51 | return inb(BaseAddr + DATAREG); | |
52 | } | |
53 | ||
54 | static inline void nsp_index_write(unsigned int BaseAddr, | |
55 | unsigned int Register, | |
56 | unsigned char Value) | |
57 | { | |
58 | outb(Register, BaseAddr + INDEXREG); | |
59 | outb(Value, BaseAddr + DATAREG); | |
60 | } | |
61 | ||
62 | /********************************************************************* | |
63 | * fifo func | |
64 | */ | |
65 | ||
66 | /* read 8 bit FIFO */ | |
67 | static inline void nsp_multi_read_1(unsigned int BaseAddr, | |
68 | unsigned int Register, | |
69 | void *buf, | |
70 | unsigned long count) | |
71 | { | |
72 | insb(BaseAddr + Register, buf, count); | |
73 | } | |
74 | ||
75 | static inline void nsp_fifo8_read(unsigned int base, | |
76 | void *buf, | |
77 | unsigned long count) | |
78 | { | |
79 | /*nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx", buf, count);*/ | |
80 | nsp_multi_read_1(base, FIFODATA, buf, count); | |
81 | } | |
82 | ||
83 | /*--------------------------------------------------------------*/ | |
84 | ||
85 | /* read 16 bit FIFO */ | |
86 | static inline void nsp_multi_read_2(unsigned int BaseAddr, | |
87 | unsigned int Register, | |
88 | void *buf, | |
89 | unsigned long count) | |
90 | { | |
91 | insw(BaseAddr + Register, buf, count); | |
92 | } | |
93 | ||
94 | static inline void nsp_fifo16_read(unsigned int base, | |
95 | void *buf, | |
96 | unsigned long count) | |
97 | { | |
98 | //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*2", buf, count); | |
99 | nsp_multi_read_2(base, FIFODATA, buf, count); | |
100 | } | |
101 | ||
102 | /*--------------------------------------------------------------*/ | |
103 | ||
104 | /* read 32bit FIFO */ | |
105 | static inline void nsp_multi_read_4(unsigned int BaseAddr, | |
106 | unsigned int Register, | |
107 | void *buf, | |
108 | unsigned long count) | |
109 | { | |
110 | insl(BaseAddr + Register, buf, count); | |
111 | } | |
112 | ||
113 | static inline void nsp_fifo32_read(unsigned int base, | |
114 | void *buf, | |
115 | unsigned long count) | |
116 | { | |
117 | //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count); | |
118 | nsp_multi_read_4(base, FIFODATA, buf, count); | |
119 | } | |
120 | ||
121 | /*----------------------------------------------------------*/ | |
122 | ||
123 | /* write 8bit FIFO */ | |
124 | static inline void nsp_multi_write_1(unsigned int BaseAddr, | |
125 | unsigned int Register, | |
126 | void *buf, | |
127 | unsigned long count) | |
128 | { | |
129 | outsb(BaseAddr + Register, buf, count); | |
130 | } | |
131 | ||
132 | static inline void nsp_fifo8_write(unsigned int base, | |
133 | void *buf, | |
134 | unsigned long count) | |
135 | { | |
136 | nsp_multi_write_1(base, FIFODATA, buf, count); | |
137 | } | |
138 | ||
139 | /*---------------------------------------------------------*/ | |
140 | ||
141 | /* write 16bit FIFO */ | |
142 | static inline void nsp_multi_write_2(unsigned int BaseAddr, | |
143 | unsigned int Register, | |
144 | void *buf, | |
145 | unsigned long count) | |
146 | { | |
147 | outsw(BaseAddr + Register, buf, count); | |
148 | } | |
149 | ||
150 | static inline void nsp_fifo16_write(unsigned int base, | |
151 | void *buf, | |
152 | unsigned long count) | |
153 | { | |
154 | nsp_multi_write_2(base, FIFODATA, buf, count); | |
155 | } | |
156 | ||
157 | /*---------------------------------------------------------*/ | |
158 | ||
159 | /* write 32bit FIFO */ | |
160 | static inline void nsp_multi_write_4(unsigned int BaseAddr, | |
161 | unsigned int Register, | |
162 | void *buf, | |
163 | unsigned long count) | |
164 | { | |
165 | outsl(BaseAddr + Register, buf, count); | |
166 | } | |
167 | ||
168 | static inline void nsp_fifo32_write(unsigned int base, | |
169 | void *buf, | |
170 | unsigned long count) | |
171 | { | |
172 | nsp_multi_write_4(base, FIFODATA, buf, count); | |
173 | } | |
174 | ||
175 | ||
176 | /*====================================================================*/ | |
177 | ||
178 | static inline void nsp_mmio_write(unsigned long base, | |
179 | unsigned int index, | |
180 | unsigned char val) | |
181 | { | |
182 | unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index); | |
183 | ||
184 | writeb(val, ptr); | |
185 | } | |
186 | ||
187 | static inline unsigned char nsp_mmio_read(unsigned long base, | |
188 | unsigned int index) | |
189 | { | |
190 | unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index); | |
191 | ||
192 | return readb(ptr); | |
193 | } | |
194 | ||
195 | /*-----------*/ | |
196 | ||
197 | static inline unsigned char nsp_mmio_index_read(unsigned long base, | |
198 | unsigned int reg) | |
199 | { | |
200 | unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG); | |
201 | unsigned char *data_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG); | |
202 | ||
203 | writeb((unsigned char)reg, index_ptr); | |
204 | return readb(data_ptr); | |
205 | } | |
206 | ||
207 | static inline void nsp_mmio_index_write(unsigned long base, | |
208 | unsigned int reg, | |
209 | unsigned char val) | |
210 | { | |
211 | unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG); | |
212 | unsigned char *data_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG); | |
213 | ||
214 | writeb((unsigned char)reg, index_ptr); | |
215 | writeb(val, data_ptr); | |
216 | } | |
217 | ||
218 | /* read 32bit FIFO */ | |
219 | static inline void nsp_mmio_multi_read_4(unsigned long base, | |
220 | unsigned int Register, | |
221 | void *buf, | |
222 | unsigned long count) | |
223 | { | |
224 | unsigned long *ptr = (unsigned long *)(base + Register); | |
225 | unsigned long *tmp = (unsigned long *)buf; | |
226 | int i; | |
227 | ||
228 | //nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr); | |
229 | ||
230 | for (i = 0; i < count; i++) { | |
231 | *tmp = readl(ptr); | |
232 | //nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp); | |
233 | tmp++; | |
234 | } | |
235 | } | |
236 | ||
237 | static inline void nsp_mmio_fifo32_read(unsigned int base, | |
238 | void *buf, | |
239 | unsigned long count) | |
240 | { | |
241 | //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count); | |
242 | nsp_mmio_multi_read_4(base, FIFODATA, buf, count); | |
243 | } | |
244 | ||
245 | static inline void nsp_mmio_multi_write_4(unsigned long base, | |
246 | unsigned int Register, | |
247 | void *buf, | |
248 | unsigned long count) | |
249 | { | |
250 | unsigned long *ptr = (unsigned long *)(base + Register); | |
251 | unsigned long *tmp = (unsigned long *)buf; | |
252 | int i; | |
253 | ||
254 | //nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr); | |
255 | ||
256 | for (i = 0; i < count; i++) { | |
257 | writel(*tmp, ptr); | |
258 | //nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp); | |
259 | tmp++; | |
260 | } | |
261 | } | |
262 | ||
263 | static inline void nsp_mmio_fifo32_write(unsigned int base, | |
264 | void *buf, | |
265 | unsigned long count) | |
266 | { | |
267 | //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count); | |
268 | nsp_mmio_multi_write_4(base, FIFODATA, buf, count); | |
269 | } | |
270 | ||
271 | ||
272 | ||
273 | #endif | |
274 | /* end */ |