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