123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- /*
- NinjaSCSI I/O funtions
- By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>
-
- This software may be used and distributed according to the terms of
- the GNU General Public License.
- */
- /* $Id: nsp_io.h,v 1.3 2003/08/04 21:15:26 elca Exp $ */
- #ifndef __NSP_IO_H__
- #define __NSP_IO_H__
- static inline void nsp_write(unsigned int base,
- unsigned int index,
- unsigned char val);
- static inline unsigned char nsp_read(unsigned int base,
- unsigned int index);
- static inline void nsp_index_write(unsigned int BaseAddr,
- unsigned int Register,
- unsigned char Value);
- static inline unsigned char nsp_index_read(unsigned int BaseAddr,
- unsigned int Register);
- /*******************************************************************
- * Basic IO
- */
- static inline void nsp_write(unsigned int base,
- unsigned int index,
- unsigned char val)
- {
- outb(val, (base + index));
- }
- static inline unsigned char nsp_read(unsigned int base,
- unsigned int index)
- {
- return inb(base + index);
- }
- /**********************************************************************
- * Indexed IO
- */
- static inline unsigned char nsp_index_read(unsigned int BaseAddr,
- unsigned int Register)
- {
- outb(Register, BaseAddr + INDEXREG);
- return inb(BaseAddr + DATAREG);
- }
- static inline void nsp_index_write(unsigned int BaseAddr,
- unsigned int Register,
- unsigned char Value)
- {
- outb(Register, BaseAddr + INDEXREG);
- outb(Value, BaseAddr + DATAREG);
- }
- /*********************************************************************
- * fifo func
- */
- /* read 8 bit FIFO */
- static inline void nsp_multi_read_1(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- insb(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo8_read(unsigned int base,
- void *buf,
- unsigned long count)
- {
- /*nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx", buf, count);*/
- nsp_multi_read_1(base, FIFODATA, buf, count);
- }
- /*--------------------------------------------------------------*/
- /* read 16 bit FIFO */
- static inline void nsp_multi_read_2(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- insw(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo16_read(unsigned int base,
- void *buf,
- unsigned long count)
- {
- //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*2", buf, count);
- nsp_multi_read_2(base, FIFODATA, buf, count);
- }
- /*--------------------------------------------------------------*/
- /* read 32bit FIFO */
- static inline void nsp_multi_read_4(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- insl(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo32_read(unsigned int base,
- void *buf,
- unsigned long count)
- {
- //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
- nsp_multi_read_4(base, FIFODATA, buf, count);
- }
- /*----------------------------------------------------------*/
- /* write 8bit FIFO */
- static inline void nsp_multi_write_1(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- outsb(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo8_write(unsigned int base,
- void *buf,
- unsigned long count)
- {
- nsp_multi_write_1(base, FIFODATA, buf, count);
- }
- /*---------------------------------------------------------*/
- /* write 16bit FIFO */
- static inline void nsp_multi_write_2(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- outsw(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo16_write(unsigned int base,
- void *buf,
- unsigned long count)
- {
- nsp_multi_write_2(base, FIFODATA, buf, count);
- }
- /*---------------------------------------------------------*/
- /* write 32bit FIFO */
- static inline void nsp_multi_write_4(unsigned int BaseAddr,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- outsl(BaseAddr + Register, buf, count);
- }
- static inline void nsp_fifo32_write(unsigned int base,
- void *buf,
- unsigned long count)
- {
- nsp_multi_write_4(base, FIFODATA, buf, count);
- }
- /*====================================================================*/
- static inline void nsp_mmio_write(unsigned long base,
- unsigned int index,
- unsigned char val)
- {
- unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);
- writeb(val, ptr);
- }
- static inline unsigned char nsp_mmio_read(unsigned long base,
- unsigned int index)
- {
- unsigned char *ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + index);
- return readb(ptr);
- }
- /*-----------*/
- static inline unsigned char nsp_mmio_index_read(unsigned long base,
- unsigned int reg)
- {
- unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);
- unsigned char *data_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);
- writeb((unsigned char)reg, index_ptr);
- return readb(data_ptr);
- }
- static inline void nsp_mmio_index_write(unsigned long base,
- unsigned int reg,
- unsigned char val)
- {
- unsigned char *index_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + INDEXREG);
- unsigned char *data_ptr = (unsigned char *)(base + NSP_MMIO_OFFSET + DATAREG);
- writeb((unsigned char)reg, index_ptr);
- writeb(val, data_ptr);
- }
- /* read 32bit FIFO */
- static inline void nsp_mmio_multi_read_4(unsigned long base,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- unsigned long *ptr = (unsigned long *)(base + Register);
- unsigned long *tmp = (unsigned long *)buf;
- int i;
- //nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);
- for (i = 0; i < count; i++) {
- *tmp = readl(ptr);
- //nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);
- tmp++;
- }
- }
- static inline void nsp_mmio_fifo32_read(unsigned int base,
- void *buf,
- unsigned long count)
- {
- //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
- nsp_mmio_multi_read_4(base, FIFODATA, buf, count);
- }
- static inline void nsp_mmio_multi_write_4(unsigned long base,
- unsigned int Register,
- void *buf,
- unsigned long count)
- {
- unsigned long *ptr = (unsigned long *)(base + Register);
- unsigned long *tmp = (unsigned long *)buf;
- int i;
- //nsp_dbg(NSP_DEBUG_DATA_IO, "base 0x%0lx ptr 0x%p",base,ptr);
- for (i = 0; i < count; i++) {
- writel(*tmp, ptr);
- //nsp_dbg(NSP_DEBUG_DATA_IO, "<%d,%p,%p,%lx>", i, ptr, tmp, *tmp);
- tmp++;
- }
- }
- static inline void nsp_mmio_fifo32_write(unsigned int base,
- void *buf,
- unsigned long count)
- {
- //nsp_dbg(NSP_DEBUG_DATA_IO, "buf=0x%p, count=0x%lx*4", buf, count);
- nsp_mmio_multi_write_4(base, FIFODATA, buf, count);
- }
- #endif
- /* end */
|