Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nsp32_io.h
Go to the documentation of this file.
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 
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 
19 static inline unsigned char nsp32_read1(unsigned int base,
20  unsigned int index)
21 {
22  return inb(base + index);
23 }
24 
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 
32 static inline unsigned short nsp32_read2(unsigned int base,
33  unsigned int index)
34 {
35  return inw(base + index);
36 }
37 
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 
45 static inline unsigned long nsp32_read4(unsigned int base,
46  unsigned int index)
47 {
48  return inl(base + index);
49 }
50 
51 /*==============================================*/
52 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
176 static inline unsigned char nsp32_mmio_index_read1(unsigned long 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 
188 static inline void nsp32_mmio_index_write1(unsigned long 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 
201 static inline unsigned short nsp32_mmio_index_read2(unsigned long 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 
213 static inline void nsp32_mmio_index_write2(unsigned long 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 
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 
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 
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 
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 */