nsp_io.h (7099B)
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.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 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 /*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#endif 274/* end */