xref: /openbmc/linux/drivers/scsi/pcmcia/nsp_io.h (revision 1da177e4)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds   NinjaSCSI I/O funtions
31da177e4SLinus Torvalds       By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds   This software may be used and distributed according to the terms of
61da177e4SLinus Torvalds   the GNU General Public License.
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds   */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds /* $Id: nsp_io.h,v 1.3 2003/08/04 21:15:26 elca Exp $ */
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #ifndef __NSP_IO_H__
131da177e4SLinus Torvalds #define __NSP_IO_H__
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds static inline          void nsp_write(unsigned int base,
161da177e4SLinus Torvalds 				      unsigned int index,
171da177e4SLinus Torvalds 				      unsigned char val);
181da177e4SLinus Torvalds static inline unsigned char nsp_read(unsigned int base,
191da177e4SLinus Torvalds 				     unsigned int index);
201da177e4SLinus Torvalds static inline          void nsp_index_write(unsigned int BaseAddr,
211da177e4SLinus Torvalds 					    unsigned int Register,
221da177e4SLinus Torvalds 					    unsigned char Value);
231da177e4SLinus Torvalds static inline unsigned char nsp_index_read(unsigned int BaseAddr,
241da177e4SLinus Torvalds 					   unsigned int Register);
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds /*******************************************************************
271da177e4SLinus Torvalds  * Basic IO
281da177e4SLinus Torvalds  */
291da177e4SLinus Torvalds 
nsp_write(unsigned int base,unsigned int index,unsigned char val)301da177e4SLinus Torvalds static inline void nsp_write(unsigned int  base,
311da177e4SLinus Torvalds 			     unsigned int  index,
321da177e4SLinus Torvalds 			     unsigned char val)
331da177e4SLinus Torvalds {
341da177e4SLinus Torvalds 	outb(val, (base + index));
351da177e4SLinus Torvalds }
361da177e4SLinus Torvalds 
nsp_read(unsigned int base,unsigned int index)371da177e4SLinus Torvalds static inline unsigned char nsp_read(unsigned int base,
381da177e4SLinus Torvalds 				     unsigned int index)
391da177e4SLinus Torvalds {
401da177e4SLinus Torvalds 	return inb(base + index);
411da177e4SLinus Torvalds }
421da177e4SLinus Torvalds 
431da177e4SLinus Torvalds 
441da177e4SLinus Torvalds /**********************************************************************
451da177e4SLinus Torvalds  * Indexed IO
461da177e4SLinus Torvalds  */
nsp_index_read(unsigned int BaseAddr,unsigned int Register)471da177e4SLinus Torvalds static inline unsigned char nsp_index_read(unsigned int BaseAddr,
481da177e4SLinus Torvalds 					   unsigned int Register)
491da177e4SLinus Torvalds {
501da177e4SLinus Torvalds 	outb(Register, BaseAddr + INDEXREG);
511da177e4SLinus Torvalds 	return inb(BaseAddr + DATAREG);
521da177e4SLinus Torvalds }
531da177e4SLinus Torvalds 
nsp_index_write(unsigned int BaseAddr,unsigned int Register,unsigned char Value)541da177e4SLinus Torvalds static inline void nsp_index_write(unsigned int  BaseAddr,
551da177e4SLinus Torvalds 				   unsigned int  Register,
561da177e4SLinus Torvalds 				   unsigned char Value)
571da177e4SLinus Torvalds {
581da177e4SLinus Torvalds 	outb(Register, BaseAddr + INDEXREG);
591da177e4SLinus Torvalds 	outb(Value, BaseAddr + DATAREG);
601da177e4SLinus Torvalds }
611da177e4SLinus Torvalds 
621da177e4SLinus Torvalds /*********************************************************************
631da177e4SLinus Torvalds  * fifo func
641da177e4SLinus Torvalds  */
651da177e4SLinus Torvalds 
661da177e4SLinus Torvalds /* read 8 bit FIFO */
nsp_multi_read_1(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)671da177e4SLinus Torvalds static inline void nsp_multi_read_1(unsigned int   BaseAddr,
681da177e4SLinus Torvalds 				    unsigned int   Register,
691da177e4SLinus Torvalds 				    void          *buf,
701da177e4SLinus Torvalds 				    unsigned long  count)
711da177e4SLinus Torvalds {
721da177e4SLinus Torvalds 	insb(BaseAddr + Register, buf, count);
731da177e4SLinus Torvalds }
741da177e4SLinus Torvalds 
nsp_fifo8_read(unsigned int base,void * buf,unsigned long count)751da177e4SLinus Torvalds static inline void nsp_fifo8_read(unsigned int   base,
761da177e4SLinus Torvalds 				  void          *buf,
771da177e4SLinus Torvalds 				  unsigned long  count)
781da177e4SLinus Torvalds {
791da177e4SLinus Torvalds 	/*nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx", buf, count);*/
801da177e4SLinus Torvalds 	nsp_multi_read_1(base, FIFODATA, buf, count);
811da177e4SLinus Torvalds }
821da177e4SLinus Torvalds 
831da177e4SLinus Torvalds /*--------------------------------------------------------------*/
841da177e4SLinus Torvalds 
851da177e4SLinus Torvalds /* read 16 bit FIFO */
nsp_multi_read_2(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)861da177e4SLinus Torvalds static inline void nsp_multi_read_2(unsigned int   BaseAddr,
871da177e4SLinus Torvalds 				    unsigned int   Register,
881da177e4SLinus Torvalds 				    void          *buf,
891da177e4SLinus Torvalds 				    unsigned long  count)
901da177e4SLinus Torvalds {
911da177e4SLinus Torvalds 	insw(BaseAddr + Register, buf, count);
921da177e4SLinus Torvalds }
931da177e4SLinus Torvalds 
nsp_fifo16_read(unsigned int base,void * buf,unsigned long count)941da177e4SLinus Torvalds static inline void nsp_fifo16_read(unsigned int   base,
951da177e4SLinus Torvalds 				   void          *buf,
961da177e4SLinus Torvalds 				   unsigned long  count)
971da177e4SLinus Torvalds {
981da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*2", buf, count);
991da177e4SLinus Torvalds 	nsp_multi_read_2(base, FIFODATA, buf, count);
1001da177e4SLinus Torvalds }
1011da177e4SLinus Torvalds 
1021da177e4SLinus Torvalds /*--------------------------------------------------------------*/
1031da177e4SLinus Torvalds 
1041da177e4SLinus Torvalds /* read 32bit FIFO */
nsp_multi_read_4(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)1051da177e4SLinus Torvalds static inline void nsp_multi_read_4(unsigned int   BaseAddr,
1061da177e4SLinus Torvalds 				    unsigned int   Register,
1071da177e4SLinus Torvalds 				    void          *buf,
1081da177e4SLinus Torvalds 				    unsigned long  count)
1091da177e4SLinus Torvalds {
1101da177e4SLinus Torvalds 	insl(BaseAddr + Register, buf, count);
1111da177e4SLinus Torvalds }
1121da177e4SLinus Torvalds 
nsp_fifo32_read(unsigned int base,void * buf,unsigned long count)1131da177e4SLinus Torvalds static inline void nsp_fifo32_read(unsigned int   base,
1141da177e4SLinus Torvalds 				   void          *buf,
1151da177e4SLinus Torvalds 				   unsigned long  count)
1161da177e4SLinus Torvalds {
1171da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
1181da177e4SLinus Torvalds 	nsp_multi_read_4(base, FIFODATA, buf, count);
1191da177e4SLinus Torvalds }
1201da177e4SLinus Torvalds 
1211da177e4SLinus Torvalds /*----------------------------------------------------------*/
1221da177e4SLinus Torvalds 
1231da177e4SLinus Torvalds /* write 8bit FIFO */
nsp_multi_write_1(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)1241da177e4SLinus Torvalds static inline void nsp_multi_write_1(unsigned int   BaseAddr,
1251da177e4SLinus Torvalds 				     unsigned int   Register,
1261da177e4SLinus Torvalds 				     void          *buf,
1271da177e4SLinus Torvalds 				     unsigned long  count)
1281da177e4SLinus Torvalds {
1291da177e4SLinus Torvalds 	outsb(BaseAddr + Register, buf, count);
1301da177e4SLinus Torvalds }
1311da177e4SLinus Torvalds 
nsp_fifo8_write(unsigned int base,void * buf,unsigned long count)1321da177e4SLinus Torvalds static inline void nsp_fifo8_write(unsigned int   base,
1331da177e4SLinus Torvalds 				   void          *buf,
1341da177e4SLinus Torvalds 				   unsigned long  count)
1351da177e4SLinus Torvalds {
1361da177e4SLinus Torvalds 	nsp_multi_write_1(base, FIFODATA, buf, count);
1371da177e4SLinus Torvalds }
1381da177e4SLinus Torvalds 
1391da177e4SLinus Torvalds /*---------------------------------------------------------*/
1401da177e4SLinus Torvalds 
1411da177e4SLinus Torvalds /* write 16bit FIFO */
nsp_multi_write_2(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)1421da177e4SLinus Torvalds static inline void nsp_multi_write_2(unsigned int   BaseAddr,
1431da177e4SLinus Torvalds 				     unsigned int   Register,
1441da177e4SLinus Torvalds 				     void          *buf,
1451da177e4SLinus Torvalds 				     unsigned long  count)
1461da177e4SLinus Torvalds {
1471da177e4SLinus Torvalds 	outsw(BaseAddr + Register, buf, count);
1481da177e4SLinus Torvalds }
1491da177e4SLinus Torvalds 
nsp_fifo16_write(unsigned int base,void * buf,unsigned long count)1501da177e4SLinus Torvalds static inline void nsp_fifo16_write(unsigned int   base,
1511da177e4SLinus Torvalds 				    void          *buf,
1521da177e4SLinus Torvalds 				    unsigned long  count)
1531da177e4SLinus Torvalds {
1541da177e4SLinus Torvalds 	nsp_multi_write_2(base, FIFODATA, buf, count);
1551da177e4SLinus Torvalds }
1561da177e4SLinus Torvalds 
1571da177e4SLinus Torvalds /*---------------------------------------------------------*/
1581da177e4SLinus Torvalds 
1591da177e4SLinus Torvalds /* write 32bit FIFO */
nsp_multi_write_4(unsigned int BaseAddr,unsigned int Register,void * buf,unsigned long count)1601da177e4SLinus Torvalds static inline void nsp_multi_write_4(unsigned int   BaseAddr,
1611da177e4SLinus Torvalds 				     unsigned int   Register,
1621da177e4SLinus Torvalds 				     void          *buf,
1631da177e4SLinus Torvalds 				     unsigned long  count)
1641da177e4SLinus Torvalds {
1651da177e4SLinus Torvalds 	outsl(BaseAddr + Register, buf, count);
1661da177e4SLinus Torvalds }
1671da177e4SLinus Torvalds 
nsp_fifo32_write(unsigned int base,void * buf,unsigned long count)1681da177e4SLinus Torvalds static inline void nsp_fifo32_write(unsigned int   base,
1691da177e4SLinus Torvalds 				    void          *buf,
1701da177e4SLinus Torvalds 				    unsigned long  count)
1711da177e4SLinus Torvalds {
1721da177e4SLinus Torvalds 	nsp_multi_write_4(base, FIFODATA, buf, count);
1731da177e4SLinus Torvalds }
1741da177e4SLinus Torvalds 
1751da177e4SLinus Torvalds 
1761da177e4SLinus Torvalds /*====================================================================*/
1771da177e4SLinus Torvalds 
nsp_mmio_write(unsigned long base,unsigned int index,unsigned char val)1781da177e4SLinus Torvalds static inline void nsp_mmio_write(unsigned long base,
1791da177e4SLinus Torvalds 				  unsigned int  index,
1801da177e4SLinus Torvalds 				  unsigned char val)
1811da177e4SLinus Torvalds {
1821da177e4SLinus Torvalds 	unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);
1831da177e4SLinus Torvalds 
1841da177e4SLinus Torvalds 	writeb(val, ptr);
1851da177e4SLinus Torvalds }
1861da177e4SLinus Torvalds 
nsp_mmio_read(unsigned long base,unsigned int index)1871da177e4SLinus Torvalds static inline unsigned char nsp_mmio_read(unsigned long base,
1881da177e4SLinus Torvalds 					  unsigned int  index)
1891da177e4SLinus Torvalds {
1901da177e4SLinus Torvalds 	unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);
1911da177e4SLinus Torvalds 
1921da177e4SLinus Torvalds 	return readb(ptr);
1931da177e4SLinus Torvalds }
1941da177e4SLinus Torvalds 
1951da177e4SLinus Torvalds /*-----------*/
1961da177e4SLinus Torvalds 
nsp_mmio_index_read(unsigned long base,unsigned int reg)1971da177e4SLinus Torvalds static inline unsigned char nsp_mmio_index_read(unsigned long base,
1981da177e4SLinus Torvalds 						unsigned int  reg)
1991da177e4SLinus Torvalds {
2001da177e4SLinus Torvalds 	unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);
2011da177e4SLinus Torvalds 	unsigned char *data_ptr  = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);
2021da177e4SLinus Torvalds 
2031da177e4SLinus Torvalds 	writeb((unsigned char)reg, index_ptr);
2041da177e4SLinus Torvalds 	return readb(data_ptr);
2051da177e4SLinus Torvalds }
2061da177e4SLinus Torvalds 
nsp_mmio_index_write(unsigned long base,unsigned int reg,unsigned char val)2071da177e4SLinus Torvalds static inline void nsp_mmio_index_write(unsigned long base,
2081da177e4SLinus Torvalds 					unsigned int  reg,
2091da177e4SLinus Torvalds 					unsigned char val)
2101da177e4SLinus Torvalds {
2111da177e4SLinus Torvalds 	unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);
2121da177e4SLinus Torvalds 	unsigned char *data_ptr  = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);
2131da177e4SLinus Torvalds 
2141da177e4SLinus Torvalds 	writeb((unsigned char)reg, index_ptr);
2151da177e4SLinus Torvalds 	writeb(val,                data_ptr);
2161da177e4SLinus Torvalds }
2171da177e4SLinus Torvalds 
2181da177e4SLinus Torvalds /* read 32bit FIFO */
nsp_mmio_multi_read_4(unsigned long base,unsigned int Register,void * buf,unsigned long count)2191da177e4SLinus Torvalds static inline void nsp_mmio_multi_read_4(unsigned long  base,
2201da177e4SLinus Torvalds 					 unsigned int   Register,
2211da177e4SLinus Torvalds 					 void          *buf,
2221da177e4SLinus Torvalds 					 unsigned long  count)
2231da177e4SLinus Torvalds {
2241da177e4SLinus Torvalds 	unsigned long *ptr = (unsigned long *)(base + Register);
2251da177e4SLinus Torvalds 	unsigned long *tmp = (unsigned long *)buf;
2261da177e4SLinus Torvalds 	int i;
2271da177e4SLinus Torvalds 
2281da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);
2291da177e4SLinus Torvalds 
2301da177e4SLinus Torvalds 	for (i = 0; i < count; i++) {
2311da177e4SLinus Torvalds 		*tmp = readl(ptr);
2321da177e4SLinus Torvalds 		//nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);
2331da177e4SLinus Torvalds 		tmp++;
2341da177e4SLinus Torvalds 	}
2351da177e4SLinus Torvalds }
2361da177e4SLinus Torvalds 
nsp_mmio_fifo32_read(unsigned int base,void * buf,unsigned long count)2371da177e4SLinus Torvalds static inline void nsp_mmio_fifo32_read(unsigned int   base,
2381da177e4SLinus Torvalds 					void          *buf,
2391da177e4SLinus Torvalds 					unsigned long  count)
2401da177e4SLinus Torvalds {
2411da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
2421da177e4SLinus Torvalds 	nsp_mmio_multi_read_4(base, FIFODATA, buf, count);
2431da177e4SLinus Torvalds }
2441da177e4SLinus Torvalds 
nsp_mmio_multi_write_4(unsigned long base,unsigned int Register,void * buf,unsigned long count)2451da177e4SLinus Torvalds static inline void nsp_mmio_multi_write_4(unsigned long  base,
2461da177e4SLinus Torvalds 					  unsigned int   Register,
2471da177e4SLinus Torvalds 					  void          *buf,
2481da177e4SLinus Torvalds 					  unsigned long  count)
2491da177e4SLinus Torvalds {
2501da177e4SLinus Torvalds 	unsigned long *ptr = (unsigned long *)(base + Register);
2511da177e4SLinus Torvalds 	unsigned long *tmp = (unsigned long *)buf;
2521da177e4SLinus Torvalds 	int i;
2531da177e4SLinus Torvalds 
2541da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);
2551da177e4SLinus Torvalds 
2561da177e4SLinus Torvalds 	for (i = 0; i < count; i++) {
2571da177e4SLinus Torvalds 		writel(*tmp, ptr);
2581da177e4SLinus Torvalds 		//nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);
2591da177e4SLinus Torvalds 		tmp++;
2601da177e4SLinus Torvalds 	}
2611da177e4SLinus Torvalds }
2621da177e4SLinus Torvalds 
nsp_mmio_fifo32_write(unsigned int base,void * buf,unsigned long count)2631da177e4SLinus Torvalds static inline void nsp_mmio_fifo32_write(unsigned int   base,
2641da177e4SLinus Torvalds 					 void          *buf,
2651da177e4SLinus Torvalds 					 unsigned long  count)
2661da177e4SLinus Torvalds {
2671da177e4SLinus Torvalds 	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
2681da177e4SLinus Torvalds 	nsp_mmio_multi_write_4(base, FIFODATA, buf, count);
2691da177e4SLinus Torvalds }
2701da177e4SLinus Torvalds 
2711da177e4SLinus Torvalds 
2721da177e4SLinus Torvalds 
2731da177e4SLinus Torvalds #endif
2741da177e4SLinus Torvalds /* end */
275