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