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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* 
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Copyright (C) 2000-2002 Silicon Graphics, Inc. All rights reserved.
  7.  */
  8. #include <asm/io.h>
  9. #if 1 /* ##jh */
  10. #ifdef CONFIG_IA64_SGI_SN1
  11. #define mmiob sn1_mmiob
  12. #else
  13. #define mmiob sn2_mmiob
  14. #endif
  15. extern void mmiob(void);
  16. #endif /* ##jh */
  17. extern void * sn_io_addr(unsigned long port); /* defined in sn[12]/iomv.c */
  18. /**
  19.  * sn_inb - read a byte from a port
  20.  * @port: port to read from
  21.  *
  22.  * Reads a byte from @port and returns it to the caller.
  23.  */
  24. unsigned int
  25. sn_inb (unsigned long port)
  26. {
  27. volatile unsigned char *addr = sn_io_addr(port);
  28. unsigned char ret;
  29. ret = *addr;
  30. __ia64_mf_a();
  31. return ret;
  32. }
  33. /**
  34.  * sn_inw - read a word from a port
  35.  * @port: port to read from
  36.  *
  37.  * Reads a word from @port and returns it to the caller.
  38.  */
  39. unsigned int
  40. sn_inw (unsigned long port)
  41. {
  42. volatile unsigned short *addr = sn_io_addr(port);
  43. unsigned short ret;
  44. ret = *addr;
  45. __ia64_mf_a();
  46. return ret;
  47. }
  48. /**
  49.  * sn_inl - read a word from a port
  50.  * @port: port to read from
  51.  *
  52.  * Reads a word from @port and returns it to the caller.
  53.  */
  54. unsigned int
  55. sn_inl (unsigned long port)
  56. {
  57. volatile unsigned int *addr = sn_io_addr(port);
  58. unsigned int ret;
  59. ret = *addr;
  60. __ia64_mf_a();
  61. return ret;
  62. }
  63. /**
  64.  * sn_outb - write a byte to a port
  65.  * @port: port to write to
  66.  * @val: value to write
  67.  *
  68.  * Writes @val to @port.
  69.  */
  70. void
  71. sn_outb (unsigned char val, unsigned long port)
  72. {
  73. volatile unsigned char *addr = sn_io_addr(port);
  74. *addr = val;
  75. mmiob();
  76. }
  77. /**
  78.  * sn_outw - write a word to a port
  79.  * @port: port to write to
  80.  * @val: value to write
  81.  *
  82.  * Writes @val to @port.
  83.  */
  84. void
  85. sn_outw (unsigned short val, unsigned long port)
  86. {
  87. volatile unsigned short *addr = sn_io_addr(port);
  88. *addr = val;
  89. mmiob();
  90. }
  91. /**
  92.  * sn_outl - write a word to a port
  93.  * @port: port to write to
  94.  * @val: value to write
  95.  *
  96.  * Writes @val to @port.
  97.  */
  98. void
  99. sn_outl (unsigned int val, unsigned long port)
  100. {
  101. volatile unsigned int *addr = sn_io_addr(port);
  102. *addr = val;
  103. mmiob();
  104. }