brintos

brintos / linux-shallow public Read only

0
0
Text · 6.9 KiB · 3b8746f Raw
275 lines · c
1/*2  NinjaSCSI I/O funtions 3      By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>4 5  This software may be used and distributed according to the terms of6  the GNU General Public License.7 8  */9 10/* $Id: nsp_io.h,v 1.3 2003/08/04 21:15:26 elca Exp $ */11 12#ifndef __NSP_IO_H__13#define __NSP_IO_H__14 15static inline          void nsp_write(unsigned int base,16				      unsigned int index,17				      unsigned char val);18static inline unsigned char nsp_read(unsigned int base,19				     unsigned int index);20static inline          void nsp_index_write(unsigned int BaseAddr,21					    unsigned int Register,22					    unsigned char Value);23static inline unsigned char nsp_index_read(unsigned int BaseAddr,24					   unsigned int Register);25 26/*******************************************************************27 * Basic IO28 */29 30static inline void nsp_write(unsigned int  base,31			     unsigned int  index,32			     unsigned char val)33{34	outb(val, (base + index));35}36 37static inline unsigned char nsp_read(unsigned int base,38				     unsigned int index)39{40	return inb(base + index);41}42 43 44/**********************************************************************45 * Indexed IO46 */47static inline unsigned char nsp_index_read(unsigned int BaseAddr,48					   unsigned int Register)49{50	outb(Register, BaseAddr + INDEXREG);51	return inb(BaseAddr + DATAREG);52}53 54static inline void nsp_index_write(unsigned int  BaseAddr,55				   unsigned int  Register,56				   unsigned char Value)57{58	outb(Register, BaseAddr + INDEXREG);59	outb(Value, BaseAddr + DATAREG);60}61 62/*********************************************************************63 * fifo func64 */65 66/* read 8 bit FIFO */67static inline void nsp_multi_read_1(unsigned int   BaseAddr,68				    unsigned int   Register,69				    void          *buf,70				    unsigned long  count)71{72	insb(BaseAddr + Register, buf, count);73}74 75static inline void nsp_fifo8_read(unsigned int   base,76				  void          *buf,77				  unsigned long  count)78{79	/*nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx", buf, count);*/80	nsp_multi_read_1(base, FIFODATA, buf, count);81}82 83/*--------------------------------------------------------------*/84 85/* read 16 bit FIFO */86static inline void nsp_multi_read_2(unsigned int   BaseAddr,87				    unsigned int   Register,88				    void          *buf,89				    unsigned long  count)90{91	insw(BaseAddr + Register, buf, count);92}93 94static inline void nsp_fifo16_read(unsigned int   base,95				   void          *buf,96				   unsigned long  count)97{98	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*2", buf, count);99	nsp_multi_read_2(base, FIFODATA, buf, count);100}101 102/*--------------------------------------------------------------*/103 104/* read 32bit FIFO */105static inline void nsp_multi_read_4(unsigned int   BaseAddr,106				    unsigned int   Register,107				    void          *buf,108				    unsigned long  count)109{110	insl(BaseAddr + Register, buf, count);111}112 113static inline void nsp_fifo32_read(unsigned int   base,114				   void          *buf,115				   unsigned long  count)116{117	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);118	nsp_multi_read_4(base, FIFODATA, buf, count);119}120 121/*----------------------------------------------------------*/122 123/* write 8bit FIFO */124static inline void nsp_multi_write_1(unsigned int   BaseAddr,125				     unsigned int   Register,126				     void          *buf,127				     unsigned long  count)128{129	outsb(BaseAddr + Register, buf, count);130}131 132static inline void nsp_fifo8_write(unsigned int   base,133				   void          *buf,134				   unsigned long  count)135{136	nsp_multi_write_1(base, FIFODATA, buf, count);137}138 139/*---------------------------------------------------------*/140 141/* write 16bit FIFO */142static inline void nsp_multi_write_2(unsigned int   BaseAddr,143				     unsigned int   Register,144				     void          *buf,145				     unsigned long  count)146{147	outsw(BaseAddr + Register, buf, count);148}149 150static inline void nsp_fifo16_write(unsigned int   base,151				    void          *buf,152				    unsigned long  count)153{154	nsp_multi_write_2(base, FIFODATA, buf, count);155}156 157/*---------------------------------------------------------*/158 159/* write 32bit FIFO */160static inline void nsp_multi_write_4(unsigned int   BaseAddr,161				     unsigned int   Register,162				     void          *buf,163				     unsigned long  count)164{165	outsl(BaseAddr + Register, buf, count);166}167 168static inline void nsp_fifo32_write(unsigned int   base,169				    void          *buf,170				    unsigned long  count)171{172	nsp_multi_write_4(base, FIFODATA, buf, count);173}174 175 176/*====================================================================*/177 178static inline void nsp_mmio_write(unsigned long base,179				  unsigned int  index,180				  unsigned char val)181{182	unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);183 184	writeb(val, ptr);185}186 187static inline unsigned char nsp_mmio_read(unsigned long base,188					  unsigned int  index)189{190	unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);191 192	return readb(ptr);193}194 195/*-----------*/196 197static inline unsigned char nsp_mmio_index_read(unsigned long base,198						unsigned int  reg)199{200	unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);201	unsigned char *data_ptr  = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);202 203	writeb((unsigned char)reg, index_ptr);204	return readb(data_ptr);205}206 207static inline void nsp_mmio_index_write(unsigned long base,208					unsigned int  reg,209					unsigned char val)210{211	unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);212	unsigned char *data_ptr  = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);213 214	writeb((unsigned char)reg, index_ptr);215	writeb(val,                data_ptr);216}217 218/* read 32bit FIFO */219static inline void nsp_mmio_multi_read_4(unsigned long  base,220					 unsigned int   Register,221					 void          *buf,222					 unsigned long  count)223{224	unsigned long *ptr = (unsigned long *)(base + Register);225	unsigned long *tmp = (unsigned long *)buf;226	int i;227 228	//nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);229 230	for (i = 0; i < count; i++) {231		*tmp = readl(ptr);232		//nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);233		tmp++;234	}235}236 237static inline void nsp_mmio_fifo32_read(unsigned int   base,238					void          *buf,239					unsigned long  count)240{241	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);242	nsp_mmio_multi_read_4(base, FIFODATA, buf, count);243}244 245static inline void nsp_mmio_multi_write_4(unsigned long  base,246					  unsigned int   Register,247					  void          *buf,248					  unsigned long  count)249{250	unsigned long *ptr = (unsigned long *)(base + Register);251	unsigned long *tmp = (unsigned long *)buf;252	int i;253 254	//nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);255 256	for (i = 0; i < count; i++) {257		writel(*tmp, ptr);258		//nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);259		tmp++;260	}261}262 263static inline void nsp_mmio_fifo32_write(unsigned int   base,264					 void          *buf,265					 unsigned long  count)266{267	//nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);268	nsp_mmio_multi_write_4(base, FIFODATA, buf, count);269}270 271 272 273#endif274/* end */275