xref: /openbmc/linux/drivers/scsi/pcmcia/nsp_io.h (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
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