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.1.1.1 2008/10/15 03:26:55 james26_jang 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	//DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx\n", 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	//DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*2\n", 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	//DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*4\n", 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#endif
176/* end */
177