cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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 */