Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

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