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.

280 lines
4.9 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1992 Microsoft Corporation
  3. Module Name:
  4. miniport.c
  5. Abstract:
  6. NDIS wrapper functions
  7. Author:
  8. Sean Selitrennikoff (SeanSe) 05-Oct-93
  9. Environment:
  10. Kernel mode, FSD
  11. Revision History:
  12. --*/
  13. #include "precomp.h"
  14. #pragma hdrstop
  15. #undef NdisAllocateSpinLock
  16. #undef NdisFreeSpinLock
  17. #undef NdisAcquireSpinLock
  18. #undef NdisReleaseSpinLock
  19. #undef NdisDprAcquireSpinLock
  20. #undef NdisDprReleaseSpinLock
  21. #undef NdisFreeBuffer
  22. #undef NdisQueryBuffer
  23. #undef NdisQueryBufferOffset
  24. #undef NDIS_BUFFER_TO_SPAN_PAGES
  25. #undef NdisGetBufferPhysicalArraySize
  26. #undef NdisEqualString
  27. #undef NdisMStartBufferPhysicalMapping
  28. #undef NdisMCompleteBufferPhysicalMapping
  29. VOID
  30. NdisAllocateSpinLock(
  31. IN PNDIS_SPIN_LOCK SpinLock
  32. );
  33. VOID
  34. NdisFreeSpinLock(
  35. IN PNDIS_SPIN_LOCK SpinLock
  36. );
  37. VOID
  38. NdisAcquireSpinLock(
  39. IN PNDIS_SPIN_LOCK SpinLock
  40. );
  41. VOID
  42. NdisReleaseSpinLock(
  43. IN PNDIS_SPIN_LOCK SpinLock
  44. );
  45. VOID
  46. NdisDprAcquireSpinLock(
  47. IN PNDIS_SPIN_LOCK SpinLock
  48. );
  49. VOID
  50. NdisDprReleaseSpinLock(
  51. IN PNDIS_SPIN_LOCK SpinLock
  52. );
  53. VOID
  54. NdisFreeBuffer(
  55. IN PNDIS_BUFFER Buffer
  56. );
  57. VOID
  58. NdisQueryBuffer(
  59. IN PNDIS_BUFFER Buffer,
  60. OUT PVOID *VirtualAddress OPTIONAL,
  61. OUT PUINT Length
  62. );
  63. VOID
  64. NdisQueryBufferOffset(
  65. IN PNDIS_BUFFER Buffer,
  66. OUT PUINT Offset,
  67. OUT PUINT Length
  68. );
  69. ULONG
  70. NDIS_BUFFER_TO_SPAN_PAGES(
  71. IN PNDIS_BUFFER Buffer
  72. );
  73. VOID
  74. NdisGetBufferPhysicalArraySize(
  75. IN PNDIS_BUFFER Buffer,
  76. OUT PUINT ArraySize
  77. );
  78. BOOLEAN
  79. NdisEqualString(
  80. IN PNDIS_STRING String1,
  81. IN PNDIS_STRING String2,
  82. IN BOOLEAN CaseInsensitive
  83. );
  84. VOID
  85. NdisMStartBufferPhysicalMapping(
  86. IN NDIS_HANDLE MiniportAdapterHandle,
  87. IN PNDIS_BUFFER Buffer,
  88. IN ULONG PhysicalMapRegister,
  89. IN BOOLEAN WriteToDevice,
  90. OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
  91. OUT PUINT ArraySize
  92. );
  93. VOID
  94. NdisMCompleteBufferPhysicalMapping(
  95. IN NDIS_HANDLE MiniportAdapterHandle,
  96. IN PNDIS_BUFFER Buffer,
  97. IN ULONG PhysicalMapRegister
  98. );
  99. VOID
  100. NdisAllocateSpinLock(
  101. IN PNDIS_SPIN_LOCK SpinLock
  102. )
  103. {
  104. KeInitializeSpinLock(&SpinLock->SpinLock);
  105. }
  106. VOID
  107. NdisFreeSpinLock(
  108. IN PNDIS_SPIN_LOCK SpinLock
  109. )
  110. {
  111. UNREFERENCED_PARAMETER (SpinLock);
  112. }
  113. VOID
  114. NdisAcquireSpinLock(
  115. IN PNDIS_SPIN_LOCK SpinLock
  116. )
  117. {
  118. KeAcquireSpinLock(&SpinLock->SpinLock, &SpinLock->OldIrql);
  119. }
  120. VOID
  121. NdisReleaseSpinLock(
  122. IN PNDIS_SPIN_LOCK SpinLock
  123. )
  124. {
  125. KeReleaseSpinLock(&SpinLock->SpinLock, SpinLock->OldIrql);
  126. }
  127. VOID
  128. NdisDprAcquireSpinLock(
  129. IN PNDIS_SPIN_LOCK SpinLock
  130. )
  131. {
  132. KeAcquireSpinLockAtDpcLevel(&SpinLock->SpinLock);
  133. SpinLock->OldIrql = DISPATCH_LEVEL;
  134. }
  135. VOID
  136. NdisDprReleaseSpinLock(
  137. IN PNDIS_SPIN_LOCK SpinLock
  138. )
  139. {
  140. KeReleaseSpinLockFromDpcLevel(&SpinLock->SpinLock);
  141. }
  142. VOID
  143. NdisFreeBuffer(
  144. IN PNDIS_BUFFER Buffer
  145. )
  146. {
  147. IoFreeMdl(Buffer);
  148. }
  149. VOID
  150. NdisQueryBuffer(
  151. IN PNDIS_BUFFER Buffer,
  152. OUT PVOID *VirtualAddress OPTIONAL,
  153. OUT PUINT Length
  154. )
  155. {
  156. if ( ARGUMENT_PRESENT(VirtualAddress) ) {
  157. *VirtualAddress = MmGetSystemAddressForMdl(Buffer);
  158. }
  159. *Length = MmGetMdlByteCount(Buffer);
  160. }
  161. VOID
  162. NdisQueryBufferOffset(
  163. IN PNDIS_BUFFER Buffer,
  164. OUT PUINT Offset,
  165. OUT PUINT Length
  166. )
  167. {
  168. *Offset = MmGetMdlByteOffset(Buffer);
  169. *Length = MmGetMdlByteCount(Buffer);
  170. }
  171. ULONG
  172. NDIS_BUFFER_TO_SPAN_PAGES(
  173. IN PNDIS_BUFFER Buffer
  174. )
  175. {
  176. if (MmGetMdlByteCount(Buffer) == 0) {
  177. return 1;
  178. }
  179. return COMPUTE_PAGES_SPANNED(
  180. MmGetMdlVirtualAddress(Buffer),
  181. MmGetMdlByteCount(Buffer)
  182. );
  183. }
  184. VOID
  185. NdisGetBufferPhysicalArraySize(
  186. IN PNDIS_BUFFER Buffer,
  187. OUT PUINT ArraySize
  188. )
  189. {
  190. if (MmGetMdlByteCount(Buffer) == 0) {
  191. *ArraySize = 1;
  192. } else {
  193. *ArraySize = COMPUTE_PAGES_SPANNED(
  194. MmGetMdlVirtualAddress(Buffer),
  195. MmGetMdlByteCount(Buffer)
  196. );
  197. }
  198. }
  199. BOOLEAN
  200. NdisEqualString(
  201. IN PNDIS_STRING String1,
  202. IN PNDIS_STRING String2,
  203. IN BOOLEAN CaseInsensitive
  204. )
  205. {
  206. return RtlEqualUnicodeString(String1, String2, CaseInsensitive);
  207. }
  208. VOID
  209. NdisMStartBufferPhysicalMapping(
  210. IN NDIS_HANDLE MiniportAdapterHandle,
  211. IN PNDIS_BUFFER Buffer,
  212. IN ULONG PhysicalMapRegister,
  213. IN BOOLEAN WriteToDevice,
  214. OUT PNDIS_PHYSICAL_ADDRESS_UNIT PhysicalAddressArray,
  215. OUT PUINT ArraySize
  216. )
  217. {
  218. NdisMStartBufferPhysicalMappingMacro(
  219. MiniportAdapterHandle,
  220. Buffer,
  221. PhysicalMapRegister,
  222. WriteToDevice,
  223. PhysicalAddressArray,
  224. ArraySize
  225. );
  226. }
  227. VOID
  228. NdisMCompleteBufferPhysicalMapping(
  229. IN NDIS_HANDLE MiniportAdapterHandle,
  230. IN PNDIS_BUFFER Buffer,
  231. IN ULONG PhysicalMapRegister
  232. )
  233. {
  234. NdisMCompleteBufferPhysicalMappingMacro(
  235. MiniportAdapterHandle,
  236. Buffer,
  237. PhysicalMapRegister
  238. );
  239. }