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