1 /*
2 * Workbit NinjaSCSI-32Bi/UDE PCI/CardBus SCSI Host Bus Adapter driver
3 * I/O routine
4 *
5 * This software may be used and distributed according to the terms of
6 * the GNU General Public License.
7 */
8
9 #ifndef _NSP32_IO_H
10 #define _NSP32_IO_H
11
nsp32_write1(unsigned int base,unsigned int index,unsigned char val)12 static inline void nsp32_write1(unsigned int base,
13 unsigned int index,
14 unsigned char val)
15 {
16 outb(val, (base + index));
17 }
18
nsp32_read1(unsigned int base,unsigned int index)19 static inline unsigned char nsp32_read1(unsigned int base,
20 unsigned int index)
21 {
22 return inb(base + index);
23 }
24
nsp32_write2(unsigned int base,unsigned int index,unsigned short val)25 static inline void nsp32_write2(unsigned int base,
26 unsigned int index,
27 unsigned short val)
28 {
29 outw(val, (base + index));
30 }
31
nsp32_read2(unsigned int base,unsigned int index)32 static inline unsigned short nsp32_read2(unsigned int base,
33 unsigned int index)
34 {
35 return inw(base + index);
36 }
37
nsp32_write4(unsigned int base,unsigned int index,unsigned long val)38 static inline void nsp32_write4(unsigned int base,
39 unsigned int index,
40 unsigned long val)
41 {
42 outl(val, (base + index));
43 }
44
nsp32_read4(unsigned int base,unsigned int index)45 static inline unsigned long nsp32_read4(unsigned int base,
46 unsigned int index)
47 {
48 return inl(base + index);
49 }
50
51 /*==============================================*/
52
nsp32_mmio_write1(unsigned long base,unsigned int index,unsigned char val)53 static inline void nsp32_mmio_write1(unsigned long base,
54 unsigned int index,
55 unsigned char val)
56 {
57 volatile unsigned char *ptr;
58
59 ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index);
60
61 writeb(val, ptr);
62 }
63
nsp32_mmio_read1(unsigned long base,unsigned int index)64 static inline unsigned char nsp32_mmio_read1(unsigned long base,
65 unsigned int index)
66 {
67 volatile unsigned char *ptr;
68
69 ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index);
70
71 return readb(ptr);
72 }
73
nsp32_mmio_write2(unsigned long base,unsigned int index,unsigned short val)74 static inline void nsp32_mmio_write2(unsigned long base,
75 unsigned int index,
76 unsigned short val)
77 {
78 volatile unsigned short *ptr;
79
80 ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index);
81
82 writew(cpu_to_le16(val), ptr);
83 }
84
nsp32_mmio_read2(unsigned long base,unsigned int index)85 static inline unsigned short nsp32_mmio_read2(unsigned long base,
86 unsigned int index)
87 {
88 volatile unsigned short *ptr;
89
90 ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index);
91
92 return le16_to_cpu(readw(ptr));
93 }
94
nsp32_mmio_write4(unsigned long base,unsigned int index,unsigned long val)95 static inline void nsp32_mmio_write4(unsigned long base,
96 unsigned int index,
97 unsigned long val)
98 {
99 volatile unsigned long *ptr;
100
101 ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index);
102
103 writel(cpu_to_le32(val), ptr);
104 }
105
nsp32_mmio_read4(unsigned long base,unsigned int index)106 static inline unsigned long nsp32_mmio_read4(unsigned long base,
107 unsigned int index)
108 {
109 volatile unsigned long *ptr;
110
111 ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index);
112
113 return le32_to_cpu(readl(ptr));
114 }
115
116 /*==============================================*/
117
nsp32_index_read1(unsigned int base,unsigned int reg)118 static inline unsigned char nsp32_index_read1(unsigned int base,
119 unsigned int reg)
120 {
121 outb(reg, base + INDEX_REG);
122 return inb(base + DATA_REG_LOW);
123 }
124
nsp32_index_write1(unsigned int base,unsigned int reg,unsigned char val)125 static inline void nsp32_index_write1(unsigned int base,
126 unsigned int reg,
127 unsigned char val)
128 {
129 outb(reg, base + INDEX_REG );
130 outb(val, base + DATA_REG_LOW);
131 }
132
nsp32_index_read2(unsigned int base,unsigned int reg)133 static inline unsigned short nsp32_index_read2(unsigned int base,
134 unsigned int reg)
135 {
136 outb(reg, base + INDEX_REG);
137 return inw(base + DATA_REG_LOW);
138 }
139
nsp32_index_write2(unsigned int base,unsigned int reg,unsigned short val)140 static inline void nsp32_index_write2(unsigned int base,
141 unsigned int reg,
142 unsigned short val)
143 {
144 outb(reg, base + INDEX_REG );
145 outw(val, base + DATA_REG_LOW);
146 }
147
nsp32_index_read4(unsigned int base,unsigned int reg)148 static inline unsigned long nsp32_index_read4(unsigned int base,
149 unsigned int reg)
150 {
151 unsigned long h,l;
152
153 outb(reg, base + INDEX_REG);
154 l = inw(base + DATA_REG_LOW);
155 h = inw(base + DATA_REG_HI );
156
157 return ((h << 16) | l);
158 }
159
nsp32_index_write4(unsigned int base,unsigned int reg,unsigned long val)160 static inline void nsp32_index_write4(unsigned int base,
161 unsigned int reg,
162 unsigned long val)
163 {
164 unsigned long h,l;
165
166 h = (val & 0xffff0000) >> 16;
167 l = (val & 0x0000ffff) >> 0;
168
169 outb(reg, base + INDEX_REG );
170 outw(l, base + DATA_REG_LOW);
171 outw(h, base + DATA_REG_HI );
172 }
173
174 /*==============================================*/
175
nsp32_mmio_index_read1(unsigned int base,unsigned int reg)176 static inline unsigned char nsp32_mmio_index_read1(unsigned int base,
177 unsigned int reg)
178 {
179 volatile unsigned short *index_ptr, *data_ptr;
180
181 index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
182 data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
183
184 writeb(reg, index_ptr);
185 return readb(data_ptr);
186 }
187
nsp32_mmio_index_write1(unsigned int base,unsigned int reg,unsigned char val)188 static inline void nsp32_mmio_index_write1(unsigned int base,
189 unsigned int reg,
190 unsigned char val)
191 {
192 volatile unsigned short *index_ptr, *data_ptr;
193
194 index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
195 data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
196
197 writeb(reg, index_ptr);
198 writeb(val, data_ptr );
199 }
200
nsp32_mmio_index_read2(unsigned int base,unsigned int reg)201 static inline unsigned short nsp32_mmio_index_read2(unsigned int base,
202 unsigned int reg)
203 {
204 volatile unsigned short *index_ptr, *data_ptr;
205
206 index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
207 data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
208
209 writeb(reg, index_ptr);
210 return le16_to_cpu(readw(data_ptr));
211 }
212
nsp32_mmio_index_write2(unsigned int base,unsigned int reg,unsigned short val)213 static inline void nsp32_mmio_index_write2(unsigned int base,
214 unsigned int reg,
215 unsigned short val)
216 {
217 volatile unsigned short *index_ptr, *data_ptr;
218
219 index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
220 data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
221
222 writeb(reg, index_ptr);
223 writew(cpu_to_le16(val), data_ptr );
224 }
225
226 /*==============================================*/
227
nsp32_multi_read4(unsigned int base,unsigned int reg,void * buf,unsigned long count)228 static inline void nsp32_multi_read4(unsigned int base,
229 unsigned int reg,
230 void *buf,
231 unsigned long count)
232 {
233 insl(base + reg, buf, count);
234 }
235
nsp32_fifo_read(unsigned int base,void * buf,unsigned long count)236 static inline void nsp32_fifo_read(unsigned int base,
237 void *buf,
238 unsigned long count)
239 {
240 nsp32_multi_read4(base, FIFO_DATA_LOW, buf, count);
241 }
242
nsp32_multi_write4(unsigned int base,unsigned int reg,void * buf,unsigned long count)243 static inline void nsp32_multi_write4(unsigned int base,
244 unsigned int reg,
245 void *buf,
246 unsigned long count)
247 {
248 outsl(base + reg, buf, count);
249 }
250
nsp32_fifo_write(unsigned int base,void * buf,unsigned long count)251 static inline void nsp32_fifo_write(unsigned int base,
252 void *buf,
253 unsigned long count)
254 {
255 nsp32_multi_write4(base, FIFO_DATA_LOW, buf, count);
256 }
257
258 #endif /* _NSP32_IO_H */
259 /* end */
260