Linux Audio

Check our new training course

Loading...
  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
 15static inline          void nsp_write(unsigned int base,
 16				      unsigned int index,
 17				      unsigned char val);
 18static inline unsigned char nsp_read(unsigned int base,
 19				     unsigned int index);
 20static inline          void nsp_index_write(unsigned int BaseAddr,
 21					    unsigned int Register,
 22					    unsigned char Value);
 23static inline unsigned char nsp_index_read(unsigned int BaseAddr,
 24					   unsigned int Register);
 25
 26/*******************************************************************
 27 * Basic IO
 28 */
 29
 30static inline void nsp_write(unsigned int  base,
 31			     unsigned int  index,
 32			     unsigned char val)
 33{
 34	outb(val, (base + index));
 35}
 36
 37static 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 */
 47static 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
 54static 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 */
 67static 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
 75static 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 */
 86static 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
 94static 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 */
105static 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
113static 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 */
124static 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
132static 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 */
142static 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
150static 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 */
160static 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
168static 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
178static 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
187static 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
197static 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
207static 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 */
219static 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
237static 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
245static 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
263static 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 */