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 of 6 the GNU General Public License. 7 8 */ 9 10/* $Id: nsp_io.h,v 1.1.1.1 2008/10/15 03:26:55 james26_jang 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 IO 28 */ 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 IO 46 */ 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 func 64 */ 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 //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx\n", 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 //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*2\n", 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 //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*4\n", 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#endif 176/* end */ 177