Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

413 lines
4.1 KiB

4 years ago
  1. #include "precomp.h"
  2. #pragma hdrstop
  3. #include "alphaapi.h"
  4. #define IO_MEMORY_SPACE 0
  5. #define IO_PORT_SPACE 1
  6. VOID
  7. InputIoAddress(
  8. IN ULONG Size,
  9. IN ULONG AddressSpace,
  10. IN PUCHAR Args
  11. );
  12. VOID
  13. OutputIoAddress(
  14. IN ULONG Size,
  15. IN ULONG AddressSpace,
  16. IN PUCHAR Args
  17. );
  18. DECLARE_API( inprtb )
  19. /*++
  20. Routine Description:
  21. Arguments:
  22. args -
  23. Return Value:
  24. None
  25. --*/
  26. {
  27. InputIoAddress( 1, IO_PORT_SPACE, (PSTR)args );
  28. return;
  29. }
  30. DECLARE_API( inprtw )
  31. /*++
  32. Routine Description:
  33. Arguments:
  34. args -
  35. Return Value:
  36. None
  37. --*/
  38. {
  39. InputIoAddress( 2, IO_PORT_SPACE, (PSTR)args );
  40. return;
  41. }
  42. DECLARE_API( inprtd )
  43. /*++
  44. Routine Description:
  45. Arguments:
  46. args -
  47. Return Value:
  48. None
  49. --*/
  50. {
  51. InputIoAddress( 4, IO_PORT_SPACE, (PSTR)args );
  52. return;
  53. }
  54. DECLARE_API( inmb )
  55. /*++
  56. Routine Description:
  57. Arguments:
  58. args -
  59. Return Value:
  60. None
  61. --*/
  62. {
  63. InputIoAddress( 1, IO_MEMORY_SPACE, (PSTR)args );
  64. return;
  65. }
  66. DECLARE_API( inmw )
  67. /*++
  68. Routine Description:
  69. Arguments:
  70. args -
  71. Return Value:
  72. None
  73. --*/
  74. {
  75. InputIoAddress( 2, IO_MEMORY_SPACE, (PSTR)args );
  76. return;
  77. }
  78. DECLARE_API( inmd )
  79. /*++
  80. Routine Description:
  81. Arguments:
  82. args -
  83. Return Value:
  84. None
  85. --*/
  86. {
  87. InputIoAddress( 4, IO_MEMORY_SPACE, (PSTR)args );
  88. return;
  89. }
  90. DECLARE_API( outprtb )
  91. /*++
  92. Routine Description:
  93. Arguments:
  94. args -
  95. Return Value:
  96. None
  97. --*/
  98. {
  99. OutputIoAddress( 1, IO_PORT_SPACE, (PSTR)args );
  100. return;
  101. }
  102. DECLARE_API( outprtw )
  103. /*++
  104. Routine Description:
  105. Arguments:
  106. args -
  107. Return Value:
  108. None
  109. --*/
  110. {
  111. OutputIoAddress( 2, IO_PORT_SPACE, (PSTR)args );
  112. return;
  113. }
  114. DECLARE_API( outprtd )
  115. /*++
  116. Routine Description:
  117. Arguments:
  118. args -
  119. Return Value:
  120. None
  121. --*/
  122. {
  123. OutputIoAddress( 4, IO_PORT_SPACE, (PSTR)args );
  124. return;
  125. }
  126. DECLARE_API( outmb )
  127. /*++
  128. Routine Description:
  129. Arguments:
  130. args -
  131. Return Value:
  132. None
  133. --*/
  134. {
  135. OutputIoAddress( 1, IO_MEMORY_SPACE, (PSTR)args );
  136. return;
  137. }
  138. DECLARE_API( outmw )
  139. /*++
  140. Routine Description:
  141. Arguments:
  142. args -
  143. Return Value:
  144. None
  145. --*/
  146. {
  147. OutputIoAddress( 2, IO_MEMORY_SPACE, (PSTR)args );
  148. return;
  149. }
  150. DECLARE_API( outmd )
  151. /*++
  152. Routine Description:
  153. Arguments:
  154. args -
  155. Return Value:
  156. None
  157. --*/
  158. {
  159. OutputIoAddress( 4, IO_MEMORY_SPACE, (PSTR)args );
  160. return;
  161. }
  162. VOID
  163. InputIoAddress(
  164. IN ULONG Size,
  165. IN ULONG AddressSpace,
  166. IN PUCHAR Args
  167. )
  168. /*++
  169. Routine Description:
  170. Reads data from the specified I/O space address (port or memory).
  171. Arguments:
  172. Size - the size in bytes for the read operation.
  173. Args - the I/O space address to read from.
  174. Return Value:
  175. None.
  176. --*/
  177. {
  178. ULONG ioAddress = 0xffffffff;
  179. ULONG data = 0;
  180. UCHAR Format[] = "%s%01lx\\%08lx: %01lx\n";
  181. sscanf( Args, "%lx", &ioAddress );
  182. if ( ioAddress == 0xffffffff ) {
  183. dprintf("no I/O address specified\n");
  184. return;
  185. }
  186. Format[17] = (UCHAR)('0' + (Size * 2 ));
  187. //dprintf("%s\n", Format);
  188. ReadIoSpaceEx(
  189. ioAddress,
  190. &data,
  191. &Size,
  192. BusInterfaceType,
  193. BusNumber,
  194. AddressSpace);
  195. if (Size > 0) {
  196. dprintf(Format, BusInterfaceName, BusNumber, ioAddress, data);
  197. } else {
  198. dprintf(" %08lx: ", ioAddress);
  199. while (Size--) {
  200. dprintf("??");
  201. }
  202. dprintf("\n");
  203. }
  204. }
  205. VOID
  206. OutputIoAddress(
  207. IN ULONG Size,
  208. IN ULONG AddressSpace,
  209. IN PUCHAR Args
  210. )
  211. /*++
  212. Routine Description:
  213. Sets the interface type and bus number for subsequent INP, OUTP,
  214. INM, OUTM commands.
  215. Arguments:
  216. Size - the size in bytes of the operation.
  217. Args - the port address to write to.
  218. Return Value:
  219. None.
  220. --*/
  221. {
  222. ULONG ioAddress = 0xffffffff;
  223. ULONG data = 0;
  224. sscanf( Args, "%lx %lx", &ioAddress, &data );
  225. if ( ioAddress == 0xffffffff ) {
  226. dprintf("no I/O address specified\n");
  227. return;
  228. }
  229. WriteIoSpaceEx(
  230. ioAddress,
  231. data,
  232. &Size,
  233. BusInterfaceType,
  234. BusNumber,
  235. AddressSpace);
  236. }