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