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