📄 nsp_io.h
字号:
/* 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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -