nsp_io.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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. /* $Id: nsp_io.h,v 1.9 2001/09/07 04:32:42 elca Exp $ */
  9. #ifndef __NSP_IO_H__
  10. #define __NSP_IO_H__
  11. static inline          void nsp_write(unsigned int base,
  12.       unsigned int index,
  13.       unsigned char val);
  14. static inline unsigned char nsp_read(unsigned int base,
  15.      unsigned int index);
  16. static inline          void nsp_index_write(unsigned int BaseAddr,
  17.     unsigned int Register,
  18.     unsigned char Value);
  19. static inline unsigned char nsp_index_read(unsigned int BaseAddr,
  20.    unsigned int Register);
  21. /*******************************************************************
  22.  * Basic IO
  23.  */
  24. static inline void nsp_write(unsigned int  base,
  25.      unsigned int  index,
  26.      unsigned char val)
  27. {
  28. outb(val, (base + index));
  29. }
  30. static inline unsigned char nsp_read(unsigned int base,
  31.      unsigned int index)
  32. {
  33. return inb(base + index);
  34. }
  35. /**********************************************************************
  36.  * Indexed IO
  37.  */
  38. static inline unsigned char nsp_index_read(unsigned int BaseAddr,
  39.    unsigned int Register)
  40. {
  41. outb(Register, BaseAddr + INDEXREG);
  42. return inb(BaseAddr + DATAREG);
  43. }
  44. static inline void nsp_index_write(unsigned int  BaseAddr,
  45.    unsigned int  Register,
  46.    unsigned char Value)
  47. {
  48. outb(Register, BaseAddr + INDEXREG);
  49. outb(Value, BaseAddr + DATAREG);
  50. }
  51. /*********************************************************************
  52.  * fifo func
  53.  */
  54. /* read 8 bit FIFO */
  55. static inline void nsp_multi_read_1(unsigned int   BaseAddr,
  56.     unsigned int   Register,
  57.     void          *buf,
  58.     unsigned long  count)
  59. {
  60. insb(BaseAddr + Register, buf, count);
  61. }
  62. static inline void nsp_fifo8_read(unsigned int   base,
  63.   void          *buf,
  64.   unsigned long  count)
  65. {
  66. //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lxn", buf, count);
  67. nsp_multi_read_1(base, FIFODATA, buf, count);
  68. }
  69. /*--------------------------------------------------------------*/
  70. /* read 16 bit FIFO */
  71. static inline void nsp_multi_read_2(unsigned int   BaseAddr,
  72.     unsigned int   Register,
  73.     void          *buf,
  74.     unsigned long  count)
  75. {
  76. insw(BaseAddr + Register, buf, count);
  77. }
  78. static inline void nsp_fifo16_read(unsigned int   base,
  79.    void          *buf,
  80.    unsigned long  count)
  81. {
  82. //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*2n", buf, count);
  83. nsp_multi_read_2(base, FIFODATA, buf, count);
  84. }
  85. /*--------------------------------------------------------------*/
  86. /* read 32bit FIFO */
  87. static inline void nsp_multi_read_4(unsigned int   BaseAddr,
  88.     unsigned int   Register,
  89.     void          *buf,
  90.     unsigned long  count)
  91. {
  92. insl(BaseAddr + Register, buf, count);
  93. }
  94. static inline void nsp_fifo32_read(unsigned int   base,
  95.    void          *buf,
  96.    unsigned long  count)
  97. {
  98. //DEBUG(0, __FUNCTION__ "() buf=0x%p, count=0x%lx*4n", buf, count);
  99. nsp_multi_read_4(base, FIFODATA, buf, count);
  100. }
  101. /*----------------------------------------------------------*/
  102. /* write 8bit FIFO */
  103. static inline void nsp_multi_write_1(unsigned int   BaseAddr,
  104.      unsigned int   Register,
  105.      void          *buf,
  106.      unsigned long  count)
  107. {
  108. outsb(BaseAddr + Register, buf, count);
  109. }
  110. static inline void nsp_fifo8_write(unsigned int   base,
  111.    void          *buf,
  112.    unsigned long  count)
  113. {
  114. nsp_multi_write_1(base, FIFODATA, buf, count);
  115. }
  116. /*---------------------------------------------------------*/
  117. /* write 16bit FIFO */
  118. static inline void nsp_multi_write_2(unsigned int   BaseAddr,
  119.      unsigned int   Register,
  120.      void          *buf,
  121.      unsigned long  count)
  122. {
  123. outsw(BaseAddr + Register, buf, count);
  124. }
  125. static inline void nsp_fifo16_write(unsigned int   base,
  126.     void          *buf,
  127.     unsigned long  count)
  128. {
  129. nsp_multi_write_2(base, FIFODATA, buf, count);
  130. }
  131. /*---------------------------------------------------------*/
  132. /* write 32bit FIFO */
  133. static inline void nsp_multi_write_4(unsigned int   BaseAddr,
  134.      unsigned int   Register,
  135.      void          *buf,
  136.      unsigned long  count)
  137. {
  138. outsl(BaseAddr + Register, buf, count);
  139. }
  140. static inline void nsp_fifo32_write(unsigned int   base,
  141.     void          *buf,
  142.     unsigned long  count)
  143. {
  144. nsp_multi_write_4(base, FIFODATA, buf, count);
  145. }
  146. #endif
  147. /* end */