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