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