18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Workbit NinjaSCSI-32Bi/UDE PCI/CardBus SCSI Host Bus Adapter driver 38c2ecf20Sopenharmony_ci * I/O routine 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * This software may be used and distributed according to the terms of 68c2ecf20Sopenharmony_ci * the GNU General Public License. 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef _NSP32_IO_H 108c2ecf20Sopenharmony_ci#define _NSP32_IO_H 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cistatic inline void nsp32_write1(unsigned int base, 138c2ecf20Sopenharmony_ci unsigned int index, 148c2ecf20Sopenharmony_ci unsigned char val) 158c2ecf20Sopenharmony_ci{ 168c2ecf20Sopenharmony_ci outb(val, (base + index)); 178c2ecf20Sopenharmony_ci} 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic inline unsigned char nsp32_read1(unsigned int base, 208c2ecf20Sopenharmony_ci unsigned int index) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci return inb(base + index); 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistatic inline void nsp32_write2(unsigned int base, 268c2ecf20Sopenharmony_ci unsigned int index, 278c2ecf20Sopenharmony_ci unsigned short val) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci outw(val, (base + index)); 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic inline unsigned short nsp32_read2(unsigned int base, 338c2ecf20Sopenharmony_ci unsigned int index) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci return inw(base + index); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic inline void nsp32_write4(unsigned int base, 398c2ecf20Sopenharmony_ci unsigned int index, 408c2ecf20Sopenharmony_ci unsigned long val) 418c2ecf20Sopenharmony_ci{ 428c2ecf20Sopenharmony_ci outl(val, (base + index)); 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistatic inline unsigned long nsp32_read4(unsigned int base, 468c2ecf20Sopenharmony_ci unsigned int index) 478c2ecf20Sopenharmony_ci{ 488c2ecf20Sopenharmony_ci return inl(base + index); 498c2ecf20Sopenharmony_ci} 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci/*==============================================*/ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic inline void nsp32_mmio_write1(unsigned long base, 548c2ecf20Sopenharmony_ci unsigned int index, 558c2ecf20Sopenharmony_ci unsigned char val) 568c2ecf20Sopenharmony_ci{ 578c2ecf20Sopenharmony_ci volatile unsigned char *ptr; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index); 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci writeb(val, ptr); 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cistatic inline unsigned char nsp32_mmio_read1(unsigned long base, 658c2ecf20Sopenharmony_ci unsigned int index) 668c2ecf20Sopenharmony_ci{ 678c2ecf20Sopenharmony_ci volatile unsigned char *ptr; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci ptr = (unsigned char *)(base + NSP32_MMIO_OFFSET + index); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci return readb(ptr); 728c2ecf20Sopenharmony_ci} 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_cistatic inline void nsp32_mmio_write2(unsigned long base, 758c2ecf20Sopenharmony_ci unsigned int index, 768c2ecf20Sopenharmony_ci unsigned short val) 778c2ecf20Sopenharmony_ci{ 788c2ecf20Sopenharmony_ci volatile unsigned short *ptr; 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index); 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci writew(cpu_to_le16(val), ptr); 838c2ecf20Sopenharmony_ci} 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_cistatic inline unsigned short nsp32_mmio_read2(unsigned long base, 868c2ecf20Sopenharmony_ci unsigned int index) 878c2ecf20Sopenharmony_ci{ 888c2ecf20Sopenharmony_ci volatile unsigned short *ptr; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + index); 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci return le16_to_cpu(readw(ptr)); 938c2ecf20Sopenharmony_ci} 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_cistatic inline void nsp32_mmio_write4(unsigned long base, 968c2ecf20Sopenharmony_ci unsigned int index, 978c2ecf20Sopenharmony_ci unsigned long val) 988c2ecf20Sopenharmony_ci{ 998c2ecf20Sopenharmony_ci volatile unsigned long *ptr; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index); 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci writel(cpu_to_le32(val), ptr); 1048c2ecf20Sopenharmony_ci} 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistatic inline unsigned long nsp32_mmio_read4(unsigned long base, 1078c2ecf20Sopenharmony_ci unsigned int index) 1088c2ecf20Sopenharmony_ci{ 1098c2ecf20Sopenharmony_ci volatile unsigned long *ptr; 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ci ptr = (unsigned long *)(base + NSP32_MMIO_OFFSET + index); 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci return le32_to_cpu(readl(ptr)); 1148c2ecf20Sopenharmony_ci} 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci/*==============================================*/ 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_cistatic inline unsigned char nsp32_index_read1(unsigned int base, 1198c2ecf20Sopenharmony_ci unsigned int reg) 1208c2ecf20Sopenharmony_ci{ 1218c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG); 1228c2ecf20Sopenharmony_ci return inb(base + DATA_REG_LOW); 1238c2ecf20Sopenharmony_ci} 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_cistatic inline void nsp32_index_write1(unsigned int base, 1268c2ecf20Sopenharmony_ci unsigned int reg, 1278c2ecf20Sopenharmony_ci unsigned char val) 1288c2ecf20Sopenharmony_ci{ 1298c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG ); 1308c2ecf20Sopenharmony_ci outb(val, base + DATA_REG_LOW); 1318c2ecf20Sopenharmony_ci} 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_cistatic inline unsigned short nsp32_index_read2(unsigned int base, 1348c2ecf20Sopenharmony_ci unsigned int reg) 1358c2ecf20Sopenharmony_ci{ 1368c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG); 1378c2ecf20Sopenharmony_ci return inw(base + DATA_REG_LOW); 1388c2ecf20Sopenharmony_ci} 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_cistatic inline void nsp32_index_write2(unsigned int base, 1418c2ecf20Sopenharmony_ci unsigned int reg, 1428c2ecf20Sopenharmony_ci unsigned short val) 1438c2ecf20Sopenharmony_ci{ 1448c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG ); 1458c2ecf20Sopenharmony_ci outw(val, base + DATA_REG_LOW); 1468c2ecf20Sopenharmony_ci} 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cistatic inline unsigned long nsp32_index_read4(unsigned int base, 1498c2ecf20Sopenharmony_ci unsigned int reg) 1508c2ecf20Sopenharmony_ci{ 1518c2ecf20Sopenharmony_ci unsigned long h,l; 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG); 1548c2ecf20Sopenharmony_ci l = inw(base + DATA_REG_LOW); 1558c2ecf20Sopenharmony_ci h = inw(base + DATA_REG_HI ); 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_ci return ((h << 16) | l); 1588c2ecf20Sopenharmony_ci} 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_cistatic inline void nsp32_index_write4(unsigned int base, 1618c2ecf20Sopenharmony_ci unsigned int reg, 1628c2ecf20Sopenharmony_ci unsigned long val) 1638c2ecf20Sopenharmony_ci{ 1648c2ecf20Sopenharmony_ci unsigned long h,l; 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci h = (val & 0xffff0000) >> 16; 1678c2ecf20Sopenharmony_ci l = (val & 0x0000ffff) >> 0; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci outb(reg, base + INDEX_REG ); 1708c2ecf20Sopenharmony_ci outw(l, base + DATA_REG_LOW); 1718c2ecf20Sopenharmony_ci outw(h, base + DATA_REG_HI ); 1728c2ecf20Sopenharmony_ci} 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci/*==============================================*/ 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_cistatic inline unsigned char nsp32_mmio_index_read1(unsigned long base, 1778c2ecf20Sopenharmony_ci unsigned int reg) 1788c2ecf20Sopenharmony_ci{ 1798c2ecf20Sopenharmony_ci volatile unsigned short *index_ptr, *data_ptr; 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ci index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG); 1828c2ecf20Sopenharmony_ci data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW); 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci writeb(reg, index_ptr); 1858c2ecf20Sopenharmony_ci return readb(data_ptr); 1868c2ecf20Sopenharmony_ci} 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_cistatic inline void nsp32_mmio_index_write1(unsigned long base, 1898c2ecf20Sopenharmony_ci unsigned int reg, 1908c2ecf20Sopenharmony_ci unsigned char val) 1918c2ecf20Sopenharmony_ci{ 1928c2ecf20Sopenharmony_ci volatile unsigned short *index_ptr, *data_ptr; 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG); 1958c2ecf20Sopenharmony_ci data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW); 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ci writeb(reg, index_ptr); 1988c2ecf20Sopenharmony_ci writeb(val, data_ptr ); 1998c2ecf20Sopenharmony_ci} 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_cistatic inline unsigned short nsp32_mmio_index_read2(unsigned long base, 2028c2ecf20Sopenharmony_ci unsigned int reg) 2038c2ecf20Sopenharmony_ci{ 2048c2ecf20Sopenharmony_ci volatile unsigned short *index_ptr, *data_ptr; 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ci index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG); 2078c2ecf20Sopenharmony_ci data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW); 2088c2ecf20Sopenharmony_ci 2098c2ecf20Sopenharmony_ci writeb(reg, index_ptr); 2108c2ecf20Sopenharmony_ci return le16_to_cpu(readw(data_ptr)); 2118c2ecf20Sopenharmony_ci} 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_cistatic inline void nsp32_mmio_index_write2(unsigned long base, 2148c2ecf20Sopenharmony_ci unsigned int reg, 2158c2ecf20Sopenharmony_ci unsigned short val) 2168c2ecf20Sopenharmony_ci{ 2178c2ecf20Sopenharmony_ci volatile unsigned short *index_ptr, *data_ptr; 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci index_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + INDEX_REG); 2208c2ecf20Sopenharmony_ci data_ptr = (unsigned short *)(base + NSP32_MMIO_OFFSET + DATA_REG_LOW); 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_ci writeb(reg, index_ptr); 2238c2ecf20Sopenharmony_ci writew(cpu_to_le16(val), data_ptr ); 2248c2ecf20Sopenharmony_ci} 2258c2ecf20Sopenharmony_ci 2268c2ecf20Sopenharmony_ci/*==============================================*/ 2278c2ecf20Sopenharmony_ci 2288c2ecf20Sopenharmony_cistatic inline void nsp32_multi_read4(unsigned int base, 2298c2ecf20Sopenharmony_ci unsigned int reg, 2308c2ecf20Sopenharmony_ci void *buf, 2318c2ecf20Sopenharmony_ci unsigned long count) 2328c2ecf20Sopenharmony_ci{ 2338c2ecf20Sopenharmony_ci insl(base + reg, buf, count); 2348c2ecf20Sopenharmony_ci} 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_cistatic inline void nsp32_fifo_read(unsigned int base, 2378c2ecf20Sopenharmony_ci void *buf, 2388c2ecf20Sopenharmony_ci unsigned long count) 2398c2ecf20Sopenharmony_ci{ 2408c2ecf20Sopenharmony_ci nsp32_multi_read4(base, FIFO_DATA_LOW, buf, count); 2418c2ecf20Sopenharmony_ci} 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_cistatic inline void nsp32_multi_write4(unsigned int base, 2448c2ecf20Sopenharmony_ci unsigned int reg, 2458c2ecf20Sopenharmony_ci void *buf, 2468c2ecf20Sopenharmony_ci unsigned long count) 2478c2ecf20Sopenharmony_ci{ 2488c2ecf20Sopenharmony_ci outsl(base + reg, buf, count); 2498c2ecf20Sopenharmony_ci} 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_cistatic inline void nsp32_fifo_write(unsigned int base, 2528c2ecf20Sopenharmony_ci void *buf, 2538c2ecf20Sopenharmony_ci unsigned long count) 2548c2ecf20Sopenharmony_ci{ 2558c2ecf20Sopenharmony_ci nsp32_multi_write4(base, FIFO_DATA_LOW, buf, count); 2568c2ecf20Sopenharmony_ci} 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ci#endif /* _NSP32_IO_H */ 2598c2ecf20Sopenharmony_ci/* end */ 260