xref: /openbmc/linux/drivers/scsi/nsp32_io.h (revision 1da177e4)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * Workbit NinjaSCSI-32Bi/UDE PCI/CardBus SCSI Host Bus Adapter driver
31da177e4SLinus Torvalds  * I/O routine
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 #ifndef _NSP32_IO_H
101da177e4SLinus Torvalds #define _NSP32_IO_H
111da177e4SLinus Torvalds 
nsp32_write1(unsigned int base,unsigned int index,unsigned char val)121da177e4SLinus Torvalds static inline void nsp32_write1(unsigned int  base,
131da177e4SLinus Torvalds 				unsigned int  index,
141da177e4SLinus Torvalds 				unsigned char val)
151da177e4SLinus Torvalds {
161da177e4SLinus Torvalds 	outb(val, (base + index));
171da177e4SLinus Torvalds }
181da177e4SLinus Torvalds 
nsp32_read1(unsigned int base,unsigned int index)191da177e4SLinus Torvalds static inline unsigned char nsp32_read1(unsigned int base,
201da177e4SLinus Torvalds 					unsigned int index)
211da177e4SLinus Torvalds {
221da177e4SLinus Torvalds 	return inb(base + index);
231da177e4SLinus Torvalds }
241da177e4SLinus Torvalds 
nsp32_write2(unsigned int base,unsigned int index,unsigned short val)251da177e4SLinus Torvalds static inline void nsp32_write2(unsigned int   base,
261da177e4SLinus Torvalds 				unsigned int   index,
271da177e4SLinus Torvalds 				unsigned short val)
281da177e4SLinus Torvalds {
291da177e4SLinus Torvalds 	outw(val, (base + index));
301da177e4SLinus Torvalds }
311da177e4SLinus Torvalds 
nsp32_read2(unsigned int base,unsigned int index)321da177e4SLinus Torvalds static inline unsigned short nsp32_read2(unsigned int base,
331da177e4SLinus Torvalds 					 unsigned int index)
341da177e4SLinus Torvalds {
351da177e4SLinus Torvalds 	return inw(base + index);
361da177e4SLinus Torvalds }
371da177e4SLinus Torvalds 
nsp32_write4(unsigned int base,unsigned int index,unsigned long val)381da177e4SLinus Torvalds static inline void nsp32_write4(unsigned int  base,
391da177e4SLinus Torvalds 				unsigned int  index,
401da177e4SLinus Torvalds 				unsigned long val)
411da177e4SLinus Torvalds {
421da177e4SLinus Torvalds 	outl(val, (base + index));
431da177e4SLinus Torvalds }
441da177e4SLinus Torvalds 
nsp32_read4(unsigned int base,unsigned int index)451da177e4SLinus Torvalds static inline unsigned long nsp32_read4(unsigned int base,
461da177e4SLinus Torvalds 					unsigned int index)
471da177e4SLinus Torvalds {
481da177e4SLinus Torvalds 	return inl(base + index);
491da177e4SLinus Torvalds }
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds /*==============================================*/
521da177e4SLinus Torvalds 
nsp32_mmio_write1(unsigned long base,unsigned int index,unsigned char val)531da177e4SLinus Torvalds static inline void nsp32_mmio_write1(unsigned long base,
541da177e4SLinus Torvalds 				     unsigned int  index,
551da177e4SLinus Torvalds 				     unsigned char val)
561da177e4SLinus Torvalds {
571da177e4SLinus Torvalds 	volatile unsigned char *ptr;
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds 	ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index);
601da177e4SLinus Torvalds 
611da177e4SLinus Torvalds 	writeb(val, ptr);
621da177e4SLinus Torvalds }
631da177e4SLinus Torvalds 
nsp32_mmio_read1(unsigned long base,unsigned int index)641da177e4SLinus Torvalds static inline unsigned char nsp32_mmio_read1(unsigned long base,
651da177e4SLinus Torvalds 					     unsigned int  index)
661da177e4SLinus Torvalds {
671da177e4SLinus Torvalds 	volatile unsigned char *ptr;
681da177e4SLinus Torvalds 
691da177e4SLinus Torvalds 	ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index);
701da177e4SLinus Torvalds 
711da177e4SLinus Torvalds 	return readb(ptr);
721da177e4SLinus Torvalds }
731da177e4SLinus Torvalds 
nsp32_mmio_write2(unsigned long base,unsigned int index,unsigned short val)741da177e4SLinus Torvalds static inline void nsp32_mmio_write2(unsigned long  base,
751da177e4SLinus Torvalds 				     unsigned int   index,
761da177e4SLinus Torvalds 				     unsigned short val)
771da177e4SLinus Torvalds {
781da177e4SLinus Torvalds 	volatile unsigned short *ptr;
791da177e4SLinus Torvalds 
801da177e4SLinus Torvalds 	ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index);
811da177e4SLinus Torvalds 
821da177e4SLinus Torvalds 	writew(cpu_to_le16(val), ptr);
831da177e4SLinus Torvalds }
841da177e4SLinus Torvalds 
nsp32_mmio_read2(unsigned long base,unsigned int index)851da177e4SLinus Torvalds static inline unsigned short nsp32_mmio_read2(unsigned long base,
861da177e4SLinus Torvalds 					      unsigned int  index)
871da177e4SLinus Torvalds {
881da177e4SLinus Torvalds 	volatile unsigned short *ptr;
891da177e4SLinus Torvalds 
901da177e4SLinus Torvalds 	ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index);
911da177e4SLinus Torvalds 
921da177e4SLinus Torvalds 	return le16_to_cpu(readw(ptr));
931da177e4SLinus Torvalds }
941da177e4SLinus Torvalds 
nsp32_mmio_write4(unsigned long base,unsigned int index,unsigned long val)951da177e4SLinus Torvalds static inline void nsp32_mmio_write4(unsigned long base,
961da177e4SLinus Torvalds 				     unsigned int  index,
971da177e4SLinus Torvalds 				     unsigned long val)
981da177e4SLinus Torvalds {
991da177e4SLinus Torvalds 	volatile unsigned long *ptr;
1001da177e4SLinus Torvalds 
1011da177e4SLinus Torvalds 	ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index);
1021da177e4SLinus Torvalds 
1031da177e4SLinus Torvalds 	writel(cpu_to_le32(val), ptr);
1041da177e4SLinus Torvalds }
1051da177e4SLinus Torvalds 
nsp32_mmio_read4(unsigned long base,unsigned int index)1061da177e4SLinus Torvalds static inline unsigned long nsp32_mmio_read4(unsigned long base,
1071da177e4SLinus Torvalds 					     unsigned int  index)
1081da177e4SLinus Torvalds {
1091da177e4SLinus Torvalds 	volatile unsigned long *ptr;
1101da177e4SLinus Torvalds 
1111da177e4SLinus Torvalds 	ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index);
1121da177e4SLinus Torvalds 
1131da177e4SLinus Torvalds 	return le32_to_cpu(readl(ptr));
1141da177e4SLinus Torvalds }
1151da177e4SLinus Torvalds 
1161da177e4SLinus Torvalds /*==============================================*/
1171da177e4SLinus Torvalds 
nsp32_index_read1(unsigned int base,unsigned int reg)1181da177e4SLinus Torvalds static inline unsigned char nsp32_index_read1(unsigned int base,
1191da177e4SLinus Torvalds 					      unsigned int reg)
1201da177e4SLinus Torvalds {
1211da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG);
1221da177e4SLinus Torvalds 	return inb(base + DATA_REG_LOW);
1231da177e4SLinus Torvalds }
1241da177e4SLinus Torvalds 
nsp32_index_write1(unsigned int base,unsigned int reg,unsigned char val)1251da177e4SLinus Torvalds static inline void nsp32_index_write1(unsigned int  base,
1261da177e4SLinus Torvalds 				      unsigned int  reg,
1271da177e4SLinus Torvalds 				      unsigned char val)
1281da177e4SLinus Torvalds {
1291da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG   );
1301da177e4SLinus Torvalds 	outb(val, base + DATA_REG_LOW);
1311da177e4SLinus Torvalds }
1321da177e4SLinus Torvalds 
nsp32_index_read2(unsigned int base,unsigned int reg)1331da177e4SLinus Torvalds static inline unsigned short nsp32_index_read2(unsigned int base,
1341da177e4SLinus Torvalds 					       unsigned int reg)
1351da177e4SLinus Torvalds {
1361da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG);
1371da177e4SLinus Torvalds 	return inw(base + DATA_REG_LOW);
1381da177e4SLinus Torvalds }
1391da177e4SLinus Torvalds 
nsp32_index_write2(unsigned int base,unsigned int reg,unsigned short val)1401da177e4SLinus Torvalds static inline void nsp32_index_write2(unsigned int   base,
1411da177e4SLinus Torvalds 				      unsigned int   reg,
1421da177e4SLinus Torvalds 				      unsigned short val)
1431da177e4SLinus Torvalds {
1441da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG   );
1451da177e4SLinus Torvalds 	outw(val, base + DATA_REG_LOW);
1461da177e4SLinus Torvalds }
1471da177e4SLinus Torvalds 
nsp32_index_read4(unsigned int base,unsigned int reg)1481da177e4SLinus Torvalds static inline unsigned long nsp32_index_read4(unsigned int base,
1491da177e4SLinus Torvalds 					      unsigned int reg)
1501da177e4SLinus Torvalds {
1511da177e4SLinus Torvalds 	unsigned long h,l;
1521da177e4SLinus Torvalds 
1531da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG);
1541da177e4SLinus Torvalds 	l = inw(base + DATA_REG_LOW);
1551da177e4SLinus Torvalds 	h = inw(base + DATA_REG_HI );
1561da177e4SLinus Torvalds 
1571da177e4SLinus Torvalds 	return ((h << 16) | l);
1581da177e4SLinus Torvalds }
1591da177e4SLinus Torvalds 
nsp32_index_write4(unsigned int base,unsigned int reg,unsigned long val)1601da177e4SLinus Torvalds static inline void nsp32_index_write4(unsigned int  base,
1611da177e4SLinus Torvalds 				      unsigned int  reg,
1621da177e4SLinus Torvalds 				      unsigned long val)
1631da177e4SLinus Torvalds {
1641da177e4SLinus Torvalds 	unsigned long h,l;
1651da177e4SLinus Torvalds 
1661da177e4SLinus Torvalds 	h = (val & 0xffff0000) >> 16;
1671da177e4SLinus Torvalds 	l = (val & 0x0000ffff) >>  0;
1681da177e4SLinus Torvalds 
1691da177e4SLinus Torvalds 	outb(reg, base + INDEX_REG   );
1701da177e4SLinus Torvalds 	outw(l,   base + DATA_REG_LOW);
1711da177e4SLinus Torvalds 	outw(h,   base + DATA_REG_HI );
1721da177e4SLinus Torvalds }
1731da177e4SLinus Torvalds 
1741da177e4SLinus Torvalds /*==============================================*/
1751da177e4SLinus Torvalds 
nsp32_mmio_index_read1(unsigned long base,unsigned int reg)1761da177e4SLinus Torvalds static inline unsigned char nsp32_mmio_index_read1(unsigned long base,
1771da177e4SLinus Torvalds 						   unsigned int reg)
1781da177e4SLinus Torvalds {
1791da177e4SLinus Torvalds 	volatile unsigned short *index_ptr, *data_ptr;
1801da177e4SLinus Torvalds 
1811da177e4SLinus Torvalds 	index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
1821da177e4SLinus Torvalds 	data_ptr  = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
1831da177e4SLinus Torvalds 
1841da177e4SLinus Torvalds 	writeb(reg, index_ptr);
1851da177e4SLinus Torvalds 	return readb(data_ptr);
1861da177e4SLinus Torvalds }
1871da177e4SLinus Torvalds 
nsp32_mmio_index_write1(unsigned long base,unsigned int reg,unsigned char val)1881da177e4SLinus Torvalds static inline void nsp32_mmio_index_write1(unsigned long base,
1891da177e4SLinus Torvalds 					   unsigned int  reg,
1901da177e4SLinus Torvalds 					   unsigned char val)
1911da177e4SLinus Torvalds {
1921da177e4SLinus Torvalds 	volatile unsigned short *index_ptr, *data_ptr;
1931da177e4SLinus Torvalds 
1941da177e4SLinus Torvalds 	index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
1951da177e4SLinus Torvalds 	data_ptr  = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
1961da177e4SLinus Torvalds 
1971da177e4SLinus Torvalds 	writeb(reg, index_ptr);
1981da177e4SLinus Torvalds 	writeb(val, data_ptr );
1991da177e4SLinus Torvalds }
2001da177e4SLinus Torvalds 
nsp32_mmio_index_read2(unsigned long base,unsigned int reg)2011da177e4SLinus Torvalds static inline unsigned short nsp32_mmio_index_read2(unsigned long base,
2021da177e4SLinus Torvalds 						    unsigned int  reg)
2031da177e4SLinus Torvalds {
2041da177e4SLinus Torvalds 	volatile unsigned short *index_ptr, *data_ptr;
2051da177e4SLinus Torvalds 
2061da177e4SLinus Torvalds 	index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
2071da177e4SLinus Torvalds 	data_ptr  = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
2081da177e4SLinus Torvalds 
2091da177e4SLinus Torvalds 	writeb(reg, index_ptr);
2101da177e4SLinus Torvalds 	return le16_to_cpu(readw(data_ptr));
2111da177e4SLinus Torvalds }
2121da177e4SLinus Torvalds 
nsp32_mmio_index_write2(unsigned long base,unsigned int reg,unsigned short val)2131da177e4SLinus Torvalds static inline void nsp32_mmio_index_write2(unsigned long  base,
2141da177e4SLinus Torvalds 					   unsigned int   reg,
2151da177e4SLinus Torvalds 					   unsigned short val)
2161da177e4SLinus Torvalds {
2171da177e4SLinus Torvalds 	volatile unsigned short *index_ptr, *data_ptr;
2181da177e4SLinus Torvalds 
2191da177e4SLinus Torvalds 	index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG);
2201da177e4SLinus Torvalds 	data_ptr  = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW);
2211da177e4SLinus Torvalds 
2221da177e4SLinus Torvalds 	writeb(reg,              index_ptr);
2231da177e4SLinus Torvalds 	writew(cpu_to_le16(val), data_ptr );
2241da177e4SLinus Torvalds }
2251da177e4SLinus Torvalds 
2261da177e4SLinus Torvalds /*==============================================*/
2271da177e4SLinus Torvalds 
nsp32_multi_read4(unsigned int base,unsigned int reg,void * buf,unsigned long count)2281da177e4SLinus Torvalds static inline void nsp32_multi_read4(unsigned int   base,
2291da177e4SLinus Torvalds 				     unsigned int   reg,
2301da177e4SLinus Torvalds 				     void          *buf,
2311da177e4SLinus Torvalds 				     unsigned long  count)
2321da177e4SLinus Torvalds {
2331da177e4SLinus Torvalds 	insl(base + reg, buf, count);
2341da177e4SLinus Torvalds }
2351da177e4SLinus Torvalds 
nsp32_fifo_read(unsigned int base,void * buf,unsigned long count)2361da177e4SLinus Torvalds static inline void nsp32_fifo_read(unsigned int   base,
2371da177e4SLinus Torvalds 				   void          *buf,
2381da177e4SLinus Torvalds 				   unsigned long  count)
2391da177e4SLinus Torvalds {
2401da177e4SLinus Torvalds 	nsp32_multi_read4(base, FIFO_DATA_LOW, buf, count);
2411da177e4SLinus Torvalds }
2421da177e4SLinus Torvalds 
nsp32_multi_write4(unsigned int base,unsigned int reg,void * buf,unsigned long count)2431da177e4SLinus Torvalds static inline void nsp32_multi_write4(unsigned int   base,
2441da177e4SLinus Torvalds 				      unsigned int   reg,
2451da177e4SLinus Torvalds 				      void          *buf,
2461da177e4SLinus Torvalds 				      unsigned long  count)
2471da177e4SLinus Torvalds {
2481da177e4SLinus Torvalds 	outsl(base + reg, buf, count);
2491da177e4SLinus Torvalds }
2501da177e4SLinus Torvalds 
nsp32_fifo_write(unsigned int base,void * buf,unsigned long count)2511da177e4SLinus Torvalds static inline void nsp32_fifo_write(unsigned int   base,
2521da177e4SLinus Torvalds 				    void          *buf,
2531da177e4SLinus Torvalds 				    unsigned long  count)
2541da177e4SLinus Torvalds {
2551da177e4SLinus Torvalds 	nsp32_multi_write4(base, FIFO_DATA_LOW, buf, count);
2561da177e4SLinus Torvalds }
2571da177e4SLinus Torvalds 
2581da177e4SLinus Torvalds #endif /* _NSP32_IO_H */
2591da177e4SLinus Torvalds /* end */
260