Advertisement
Guest User

Untitled

a guest
May 10th, 2022
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 384.29 KB | None | 0 0
  1. diff --strip-trailing-cr -ur ./driver/acpisym/acpisym.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/acpisym/acpisym.c"
  2. --- ./driver/acpisym/acpisym.c 2003-02-26 17:15:50.000000000 +0500
  3. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/acpisym/acpisym.c" 2022-04-28 11:28:50.548828100 +0500
  4. @@ -42,6 +42,7 @@
  5. #include "acpiterm.h"
  6. #include "acpiirp.h"
  7. #include "acpilog.h"
  8. +#include "arblib.h"
  9. #include "acpiosnt.h"
  10. #include "..\nt\irqarb.h"
  11.  
  12. Only in c:\ACPI\ACPI_W2003\Base\busdrv\acpi/driver/acpisym: obj
  13. diff --strip-trailing-cr -ur ./driver/amlinew/acpins.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/acpins.c"
  14. --- ./driver/amlinew/acpins.c 2003-02-26 17:15:50.000000000 +0500
  15. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/acpins.c" 2022-04-04 04:05:08.000000000 +0500
  16. @@ -740,7 +740,7 @@
  17.  
  18. EXIT(3, ("EvalPackageElement=%x (Type=%s,Value=%x,Len=%d,Buff=%x)\n",
  19. rc, GetObjectTypeName(pdataResult->dwDataType),
  20. - pdataResult->uipDataValue, pdataResult->dwDataLen,
  21. + pdataResult->dwDataValue, pdataResult->dwDataLen,
  22. pdataResult->pbDataBuff));
  23. return rc;
  24. } //EvalPackageElement
  25. diff --strip-trailing-cr -ur ./driver/amlinew/amldebug.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amldebug.c"
  26. --- ./driver/amlinew/amldebug.c 2003-02-26 17:15:50.000000000 +0500
  27. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amldebug.c" 2022-04-06 03:31:36.000000000 +0500
  28. @@ -1915,7 +1915,7 @@
  29. else if (icArgs < MAX_NUM_ARGS)
  30. {
  31. MEMZERO(&Args[icArgs], sizeof(OBJDATA));
  32. - if (IsNumber(pszArg, 0, &Args[icArgs].uipDataValue))
  33. + if (IsNumber(pszArg, 0, (PULONG_PTR) &Args[icArgs].dwDataValue))
  34. {
  35. Args[icArgs].dwDataType = OBJTYPE_INTDATA;
  36. icArgs++;
  37. @@ -2230,7 +2230,7 @@
  38. switch (pdata->dwDataType)
  39. {
  40. case OBJTYPE_INTDATA:
  41. - PRINTF("0x%p", pdata->uipDataValue);
  42. + PRINTF("0x%p", pdata->dwDataValue);
  43. break;
  44.  
  45. case OBJTYPE_STRDATA:
  46. @@ -2260,7 +2260,7 @@
  47. default:
  48. PRINTF("<Obj=%p,Type=%s,Value=0x%p,Buff=%p,Len=%d>",
  49. pdata, GetObjectTypeName(pdata->dwDataType),
  50. - pdata->uipDataValue, pdata->pbDataBuff, pdata->dwDataLen);
  51. + pdata->dwDataValue, pdata->pbDataBuff, pdata->dwDataLen);
  52. }
  53.  
  54. EXIT(4, ("PrintObject!\n"));
  55. diff --strip-trailing-cr -ur ./driver/amlinew/amliapi.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amliapi.c"
  56. --- ./driver/amlinew/amliapi.c 2003-02-26 17:15:50.000000000 +0500
  57. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amliapi.c" 2022-04-04 04:02:00.000000000 +0500
  58. @@ -160,7 +160,7 @@
  59. &pns, 0)) == STATUS_SUCCESS))
  60. {
  61. pns->ObjData.dwDataType = OBJTYPE_INTDATA;
  62. - pns->ObjData.uipDataValue = AMLI_REVISION;
  63. + pns->ObjData.dwDataValue = AMLI_REVISION;
  64. }
  65.  
  66. if ((rc == STATUS_SUCCESS) &&
  67. diff --strip-trailing-cr -ur ./driver/amlinew/amlipriv.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amlipriv.h"
  68. --- ./driver/amlinew/amlipriv.h 2003-02-26 17:15:50.000000000 +0500
  69. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amlipriv.h" 2022-03-31 20:01:00.000000000 +0500
  70. @@ -285,6 +285,7 @@
  71. #define AMLISTA_CONTINUE 0x00008003
  72. #define AMLISTA_PENDING 0x00008004
  73. #define AMLISTA_TIMEOUT 0x00008005
  74. +#define AMLISTA_CONTINUEOP 0x00008006
  75.  
  76. // Global AMLI flags
  77. #define AMLIF_LOCKED 0x00000001
  78. @@ -331,6 +332,7 @@
  79. #define ARGOBJ_BASICDATA 'D' //INTDATA,STRDATA,BUFFDATA
  80. #define ARGOBJ_COMPLEXDATA 'C' //BUFFDATA,PKGDATA
  81. #define ARGOBJ_REFERENCE 'R' //OBJALIAS,DATAALIAS,BUFFFIELD
  82. +#define ARGOBJ_STRBUFDATA 'T' //OBJTYPE_STRDATA/OBJTYPE_BUFFDATA
  83.  
  84. #define MAX_BYTE 0xff
  85. #define MAX_WORD 0xffff
  86. diff --strip-trailing-cr -ur ./driver/amlinew/amlitest.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amlitest.c"
  87. --- ./driver/amlinew/amlitest.c 2003-02-26 17:15:50.000000000 +0500
  88. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/amlitest.c" 2022-04-02 22:47:12.000000000 +0500
  89. @@ -52,6 +52,7 @@
  90. PCCHAR DebugMessage,
  91. ...)
  92. {
  93. + int index;
  94. va_list ap;
  95. va_start(ap, DebugMessage);
  96.  
  97. @@ -61,17 +62,16 @@
  98.  
  99.  
  100.  
  101. - if(_vsnprintf(AmliTestDebugBuffer,
  102. + index = _vsnprintf(AmliTestDebugBuffer,
  103. 200,
  104. DebugMessage,
  105. - ap) < 0)
  106. + ap);
  107. + if(index == -1)
  108. {
  109. - //
  110. - // _vsnprintf failed, don't print out anything.
  111. - //
  112. - AmliTestDebugBuffer[0] = '\0';
  113. + AmliTestDebugBuffer[0] = '\0';
  114. + } else {
  115. + AmliTestDebugBuffer[index] = '\0';
  116. }
  117. - AmliTestDebugBuffer[199] = '\0';
  118.  
  119. DbgPrint(AmliTestDebugBuffer);
  120. }
  121. diff --strip-trailing-cr -ur ./driver/amlinew/data.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/data.c"
  122. --- ./driver/amlinew/data.c 2003-02-26 17:15:50.000000000 +0500
  123. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/data.c" 2022-03-31 19:47:44.000000000 +0500
  124. @@ -188,6 +188,22 @@
  125. atToBCD = {"ToBCD", OP_TOBCD, "CS", C2, 0, NULL, 0, ExprOp1},
  126. atWait = {"Wait", OP_WAIT, "SC", C2, 0, NULL, 0, Wait},
  127. atXOr = {"XOr", OP_XOR, "CCS", C2, 0, NULL, 0, ExprOp2},
  128. +
  129. + // ACPI 2.0
  130. + atToBuffer = {"ToBuffer", OP_TOBUFFER, "CS", C2, 0, NULL, 0, ToBuffer},
  131. + atToDecString = {"ToDecimalString", OP_TODECSTRING, "CS", C2, 0, NULL, 0, ToDecimalString},
  132. + atToHexString = {"ToHexString", OP_TOHEXSTRING, "CS", C2, 0, NULL, 0, ToHexString},
  133. + atToInteger = {"ToInteger", OP_TOINTEGER, "CS", C2, 0, NULL, 0, ToInteger},
  134. + atQWordField = {"CreateQWordField", OP_QWORDFIELD, "CCN", OB, 0, NULL, 0, CreateQWordField},
  135. + atConcatRes = {"ConcatenateResTemplate", OP_CONCATRESTMPL, "CCS", C2, 0, NULL, 0, ConcatenateResTemplate},
  136. + atMod = {"Mod", OP_MOD, "CCS", C2, 0, NULL, 0, ExprOp2},
  137. + atToString = {"ToString", OP_TOSTRING, "CCS", C2, 0, NULL, 0, ToString},
  138. + atCopyObject = {"CopyObject", OP_COPYOBJECT, "CS", C2, 0, NULL, 0, CopyObject},
  139. + atMid = {"Mid", OP_MID, "CCCS", C2, 0, NULL, 0, MidString},
  140. + atContinue = {"Continue", OP_CONTINUE, NULL, C1, 0, NULL, 0, Continue},
  141. + atTimer = {"Timer", OP_TIMER , NULL, C2, 0, NULL, 0, Timer},
  142. + // OP_QWORD=0xE - see atDataObj
  143. +
  144. //
  145. // Misc. Opcodes
  146. //
  147. @@ -206,7 +222,7 @@
  148. //0x08 0x09 0x0a 0x0b
  149. &atName, NULL, &atDataObj, &atDataObj,
  150. //0x0c 0x0d 0x0e 0x0f
  151. - &atDataObj, &atString, NULL, NULL,
  152. + &atDataObj, &atString, &atDataObj, NULL,
  153. //0x10 0x11 0x12 0x13
  154. &atScope, &atBuffer, &atPackage, NULL,
  155. //0x14 0x15 0x16 0x17
  156. @@ -266,19 +282,19 @@
  157. //0x80 0x81 0x82 0x83
  158. &atNot, &atFindSetLBit, &atFindSetRBit, &atDerefOf,
  159. //0x84 0x85 0x86 0x87
  160. - NULL, NULL, &atNotify, &atSizeOf,
  161. + &atConcatRes, &atMod, &atNotify, &atSizeOf,
  162. //0x88 0x89 0x8a 0x8b
  163. &atIndex, &atMatch, &atDWordField, &atWordField,
  164. //0x8c 0x8d 0x8e 0x8f
  165. - &atByteField, &atBitField, &atObjType, NULL,
  166. + &atByteField, &atBitField, &atObjType, &atQWordField,
  167. //0x90 0x91 0x92 0x93
  168. &atLAnd, &atLOr, &atLNot, &atLEq,
  169. //0x94 0x95 0x96 0x97
  170. - &atLG, &atLL, NULL, NULL,
  171. + &atLG, &atLL, &atToBuffer, &atToDecString,
  172. //0x98 0x99 0x9a 0x9b
  173. - NULL, NULL, NULL, NULL,
  174. + &atToHexString, &atToInteger, NULL, NULL,
  175. //0x9c 0x9d 0x9e 0x9f
  176. - NULL, NULL, NULL, NULL,
  177. + &atToString, &atCopyObject, &atMid, &atContinue,
  178. //0xa0 0xa1 0xa2 0xa3
  179. &atIf, &atElse, &atWhile, &atNOP,
  180. //0xa4 0xa5 0xa6 0xa7
  181. @@ -349,6 +365,7 @@
  182. EXOP_REVISION, &atDataObj,
  183. EXOP_DEBUG, &atDebugObj,
  184. EXOP_FATAL, &atFatal,
  185. + EXOP_TIMER, &atTimer,
  186. EXOP_OPREGION, &atOpRegion,
  187. EXOP_FIELD, &atField,
  188. EXOP_DEVICE, &atDevice,
  189. diff --strip-trailing-cr -ur ./driver/amlinew/misc.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/misc.c"
  190. --- ./driver/amlinew/misc.c 2003-02-26 17:15:50.000000000 +0500
  191. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/misc.c" 2022-04-05 16:20:27.692382800 +0500
  192. @@ -597,7 +597,7 @@
  193.  
  194. MEMZERO(&data, sizeof(OBJDATA));
  195. data.dwDataType = OBJTYPE_INTDATA;
  196. - data.uipDataValue = (ULONG_PTR)dwData;
  197. + data.dwDataValue = (ULONG)dwData;
  198.  
  199. rc = WriteObject(pctxt, pdataObj, &data);
  200.  
  201. @@ -830,7 +830,7 @@
  202. switch (pdata->dwDataType)
  203. {
  204. case OBJTYPE_INTDATA:
  205. - pb = (PUCHAR)&pdata->uipDataValue;
  206. + pb = (PUCHAR)&pdata->dwDataValue;
  207. dwcb = sizeof(ULONG);
  208. break;
  209.  
  210. @@ -1334,6 +1334,17 @@
  211. i,
  212. GetObjectTypeName(pArgs[i].dwDataType)));
  213. }
  214. + break;
  215. +
  216. + case ARGOBJ_STRBUFDATA:
  217. + if ((pArgs[i].dwDataType != OBJTYPE_STRDATA) &&
  218. + (pArgs[i].dwDataType != OBJTYPE_BUFFDATA))
  219. + {
  220. + rc = AMLI_LOGERR(AMLIERR_UNEXPECTED_OBJTYPE,
  221. + ("ValidateArgTypes: expected Arg%d to be type str/buff (Type=%s)",
  222. + i,
  223. + GetObjectTypeName(pArgs[i].dwDataType)));
  224. + }
  225. break;
  226.  
  227. default:
  228. diff --strip-trailing-cr -ur ./driver/amlinew/namedobj.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/namedobj.c"
  229. --- ./driver/amlinew/namedobj.c 2003-02-26 17:15:50.000000000 +0500
  230. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/namedobj.c" 2022-04-27 21:32:06.390625000 +0500
  231. @@ -78,9 +78,9 @@
  232. pbf = (PBANKFIELDOBJ)pterm->pnsObj->ObjData.pbDataBuff;
  233. pbf->pnsBase = pnsBase;
  234. pbf->pnsBank = pnsBank;
  235. - pbf->dwBankValue = (ULONG)pterm->pdataArgs[2].uipDataValue;
  236. + pbf->dwBankValue = (ULONG)pterm->pdataArgs[2].dwDataValue;
  237. rc = ParseFieldList(pctxt, pterm->pbOpEnd, pterm->pnsObj,
  238. - (ULONG)pterm->pdataArgs[3].uipDataValue,
  239. + (ULONG)pterm->pdataArgs[3].dwDataValue,
  240. ((POPREGIONOBJ)pnsBase->ObjData.pbDataBuff)->dwLen);
  241. }
  242. }
  243. @@ -169,9 +169,9 @@
  244. STATUS_SUCCESS)
  245. {
  246. pbf->FieldDesc.dwByteOffset = (ULONG)
  247. - (pterm->pdataArgs[1].uipDataValue/8);
  248. + (pterm->pdataArgs[1].dwDataValue/8);
  249. pbf->FieldDesc.dwStartBitPos = (ULONG)
  250. - (pterm->pdataArgs[1].uipDataValue -
  251. + (pterm->pdataArgs[1].dwDataValue -
  252. pbf->FieldDesc.dwByteOffset*8);
  253. pbf->FieldDesc.dwNumBits = 1;
  254. pbf->FieldDesc.dwFieldFlags = ACCTYPE_BYTE;
  255. @@ -205,7 +205,7 @@
  256. if ((rc = CreateXField(pctxt, pterm, &pterm->pdataArgs[2], &pbf)) ==
  257. STATUS_SUCCESS)
  258. {
  259. - pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].uipDataValue;
  260. + pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].dwDataValue;
  261. pbf->FieldDesc.dwStartBitPos = 0;
  262. pbf->FieldDesc.dwNumBits = 8*sizeof(UCHAR);
  263. pbf->FieldDesc.dwFieldFlags = ACCTYPE_BYTE;
  264. @@ -239,7 +239,7 @@
  265. if ((rc = CreateXField(pctxt, pterm, &pterm->pdataArgs[2], &pbf)) ==
  266. STATUS_SUCCESS)
  267. {
  268. - pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].uipDataValue;
  269. + pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].dwDataValue;
  270. pbf->FieldDesc.dwStartBitPos = 0;
  271. pbf->FieldDesc.dwNumBits = 8*sizeof(USHORT);
  272. pbf->FieldDesc.dwFieldFlags = ACCTYPE_WORD;
  273. @@ -273,7 +273,7 @@
  274. if ((rc = CreateXField(pctxt, pterm, &pterm->pdataArgs[2], &pbf)) ==
  275. STATUS_SUCCESS)
  276. {
  277. - pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].uipDataValue;
  278. + pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].dwDataValue;
  279. pbf->FieldDesc.dwStartBitPos = 0;
  280. pbf->FieldDesc.dwNumBits = 8*sizeof(ULONG);
  281. pbf->FieldDesc.dwFieldFlags = ACCTYPE_DWORD;
  282. @@ -310,11 +310,11 @@
  283. STATUS_SUCCESS)
  284. {
  285. pbf->FieldDesc.dwByteOffset = (ULONG)
  286. - (pterm->pdataArgs[1].uipDataValue/8);
  287. + (pterm->pdataArgs[1].dwDataValue/8);
  288. pbf->FieldDesc.dwStartBitPos = (ULONG)
  289. - (pterm->pdataArgs[1].uipDataValue -
  290. + (pterm->pdataArgs[1].dwDataValue -
  291. pbf->FieldDesc.dwByteOffset*8);
  292. - pbf->FieldDesc.dwNumBits = (ULONG)pterm->pdataArgs[2].uipDataValue;
  293. + pbf->FieldDesc.dwNumBits = (ULONG)pterm->pdataArgs[2].dwDataValue;
  294. pbf->FieldDesc.dwFieldFlags = ACCTYPE_BYTE | FDF_BUFFER_TYPE;
  295. }
  296. }
  297. @@ -344,6 +344,7 @@
  298. {
  299. TRACENAME("DEVICE")
  300. NTSTATUS rc = STATUS_SUCCESS;
  301. + PUCHAR NextOp, OneByte, TwoByte, ThreeByte, FourByte;
  302.  
  303. ENTER(2, ("Device(pctxt=%x,pbOp=%x,pterm=%x)\n",
  304. pctxt, pctxt->pbOp, pterm));
  305. @@ -361,6 +362,34 @@
  306. rc = PushScope(pctxt, pctxt->pbOp, pterm->pbOpEnd, NULL, pterm->pnsObj,
  307. pctxt->powner, pctxt->pheapCurrent, pterm->pdataResult);
  308. }
  309. + else
  310. + if (rc == AMLIERR_OBJ_ALREADY_EXIST) {
  311. + // Doubled device definition workaround, change OpCode pointer to next object
  312. + NextOp = pctxt->pbOp; // next OP
  313. + OneByte = NextOp - 7 ; // 5B 82 (3F) NN AA MM EE
  314. + TwoByte = NextOp - 8 ; // 5B 82 (4F L2) NN AA MM EE
  315. + ThreeByte = NextOp - 9 ; // 5B 82 (8F L2 L3) NN AA MM EE
  316. + FourByte = NextOp - 10 ; // 5B 82 (CF L3 L3 L4) NN AA MM EE
  317. +
  318. + rc = STATUS_SUCCESS;
  319. +
  320. + if (NextOp) { // next OP exist
  321. + if (OneByte[0] == 0x5B && OneByte[1] == 0x82) { // 0x5B 0x82 Device() Opcode
  322. + pctxt->pbOp = OneByte + OneByte[2] + 2; // start + pkglength + opcodelength
  323. + } else
  324. + if (TwoByte[0] == 0x5B && TwoByte[1] == 0x82) {
  325. + pctxt->pbOp = TwoByte + (TwoByte[3] << 4) + (TwoByte[2] & 0x0F) + 2; // pkglength magic
  326. + } else
  327. + if (ThreeByte[0] == 0x5B && ThreeByte[1] == 0x82) {
  328. + pctxt->pbOp = ThreeByte + (ThreeByte[4] << (4+8)) + (ThreeByte[3] << 4) + (ThreeByte[2] & 0x0F) + 2;
  329. + } else
  330. + if (FourByte[0] == 0x5B && FourByte[1] == 0x82) {
  331. + pctxt->pbOp = FourByte + (FourByte[5] << (4+8+8)) + (FourByte[4] << (4+8)) + (FourByte[3] << 4) + (FourByte[2] & 0x0F) + 2;
  332. + }
  333. + else
  334. + rc = AMLIERR_OBJ_ALREADY_EXIST; // unknow Device() opcode coding
  335. + }
  336. + }
  337.  
  338. EXIT(2, ("Device=%x (pnsObj=%x)\n", rc, pterm->pnsObj));
  339. return rc;
  340. @@ -488,7 +517,7 @@
  341. pfd = (PFIELDOBJ)pterm->pnsObj->ObjData.pbDataBuff;
  342. pfd->pnsBase = pnsBase;
  343. rc = ParseFieldList(pctxt, pterm->pbOpEnd, pterm->pnsObj,
  344. - (ULONG)pterm->pdataArgs[1].uipDataValue,
  345. + (ULONG)pterm->pdataArgs[1].dwDataValue,
  346. ((POPREGIONOBJ)pnsBase->ObjData.pbDataBuff)->dwLen);
  347. }
  348. }
  349. @@ -563,7 +592,7 @@
  350. pif->pnsIndex = pnsIdx;
  351. pif->pnsData = pnsData;
  352. rc = ParseFieldList(pctxt, pterm->pbOpEnd, pterm->pnsObj,
  353. - (ULONG)pterm->pdataArgs[2].uipDataValue,
  354. + (ULONG)pterm->pdataArgs[2].dwDataValue,
  355. 0xffffffff);
  356. }
  357. }
  358. @@ -694,7 +723,7 @@
  359. &pterm->pnsObj, 0)) == STATUS_SUCCESS)
  360. {
  361. rc = InitMutex(pctxt->pheapCurrent, pterm->pnsObj,
  362. - (ULONG)pterm->pdataArgs[1].uipDataValue);
  363. + (ULONG)pterm->pdataArgs[1].dwDataValue);
  364. }
  365.  
  366. EXIT(2, ("Mutex=%x (pnsObj=%x)\n", rc, pterm->pnsObj));
  367. @@ -742,9 +771,9 @@
  368. MEMZERO(pterm->pnsObj->ObjData.pbDataBuff,
  369. pterm->pnsObj->ObjData.dwDataLen);
  370. pop = (POPREGIONOBJ)pterm->pnsObj->ObjData.pbDataBuff;
  371. - pop->bRegionSpace = (UCHAR)pterm->pdataArgs[1].uipDataValue;
  372. - pop->uipOffset = pterm->pdataArgs[2].uipDataValue;
  373. - pop->dwLen = (ULONG)pterm->pdataArgs[3].uipDataValue;
  374. + pop->bRegionSpace = (UCHAR)pterm->pdataArgs[1].dwDataValue;
  375. + pop->uipOffset = pterm->pdataArgs[2].dwDataValue;
  376. + pop->dwLen = (ULONG)pterm->pdataArgs[3].dwDataValue;
  377. KeInitializeSpinLock(&pop->listLock);
  378. if (pop->bRegionSpace == REGSPACE_MEM)
  379. {
  380. @@ -831,8 +860,8 @@
  381. MEMZERO(pterm->pnsObj->ObjData.pbDataBuff,
  382. pterm->pnsObj->ObjData.dwDataLen);
  383. ppr = (PPOWERRESOBJ)pterm->pnsObj->ObjData.pbDataBuff;
  384. - ppr->bSystemLevel = (UCHAR)pterm->pdataArgs[1].uipDataValue;
  385. - ppr->bResOrder = (UCHAR)pterm->pdataArgs[2].uipDataValue;
  386. + ppr->bSystemLevel = (UCHAR)pterm->pdataArgs[1].dwDataValue;
  387. + ppr->bResOrder = (UCHAR)pterm->pdataArgs[2].dwDataValue;
  388. if (ghCreate.pfnHandler != NULL)
  389. {
  390. ((PFNOO)ghCreate.pfnHandler)(OBJTYPE_POWERRES, pterm->pnsObj);
  391. @@ -890,9 +919,9 @@
  392. MEMZERO(pterm->pnsObj->ObjData.pbDataBuff,
  393. pterm->pnsObj->ObjData.dwDataLen);
  394. pproc = (PPROCESSOROBJ)pterm->pnsObj->ObjData.pbDataBuff;
  395. - pproc->bApicID = (UCHAR)pterm->pdataArgs[1].uipDataValue;
  396. - pproc->dwPBlk = (ULONG)pterm->pdataArgs[2].uipDataValue;
  397. - pproc->dwPBlkLen = (ULONG)pterm->pdataArgs[3].uipDataValue;
  398. + pproc->bApicID = (UCHAR)pterm->pdataArgs[1].dwDataValue;
  399. + pproc->dwPBlk = (ULONG)pterm->pdataArgs[2].dwDataValue;
  400. + pproc->dwPBlkLen = (ULONG)pterm->pdataArgs[3].dwDataValue;
  401. if (ghCreate.pfnHandler != NULL)
  402. {
  403. ((PFNOO)ghCreate.pfnHandler)(OBJTYPE_PROCESSOR, pterm->pnsObj);
  404. diff --strip-trailing-cr -ur ./driver/amlinew/nsmod.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/nsmod.c"
  405. --- ./driver/amlinew/nsmod.c 2003-02-26 17:15:50.000000000 +0500
  406. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/nsmod.c" 2022-04-04 04:13:00.000000000 +0500
  407. @@ -45,7 +45,7 @@
  408. &pterm->pnsObj, 0)) == STATUS_SUCCESS))
  409. {
  410. pterm->pnsObj->ObjData.dwDataType = OBJTYPE_OBJALIAS;
  411. - pterm->pnsObj->ObjData.uipDataValue = (ULONG_PTR)pnsSrc;
  412. + pterm->pnsObj->ObjData.pnsAlias = pnsSrc;
  413. }
  414.  
  415. EXIT(2, ("Alias=%x (pnsObj=%x)\n", rc, pterm->pnsObj));
  416. Only in c:\ACPI\ACPI_W2003\Base\busdrv\acpi/driver/amlinew: obj
  417. diff --strip-trailing-cr -ur ./driver/amlinew/object.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/object.c"
  418. --- ./driver/amlinew/object.c 2003-02-26 17:15:50.000000000 +0500
  419. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/object.c" 2022-04-07 21:31:58.486328100 +0500
  420. @@ -71,7 +71,7 @@
  421.  
  422. EXIT(3, ("ReadObject=%x (Type=%s,Value=%x,Buff=%x)\n",
  423. rc, GetObjectTypeName(pdataResult->dwDataType),
  424. - pdataResult->uipDataValue, pdataResult->pbDataBuff));
  425. + pdataResult->dwDataValue, pdataResult->pbDataBuff));
  426. return rc;
  427. } //ReadObject
  428.  
  429. @@ -135,7 +135,7 @@
  430. break;
  431.  
  432. case OBJTYPE_INTDATA:
  433. - rc = CopyObjBuffer((PUCHAR)&pdataObj->uipDataValue, sizeof(ULONG),
  434. + rc = CopyObjBuffer((PUCHAR)&pdataObj->dwDataValue, sizeof(ULONG),
  435. pdataSrc);
  436. break;
  437.  
  438. @@ -157,7 +157,7 @@
  439.  
  440. EXIT(3, ("WriteObject=%x (ObjType=%s,DataType=%x,Value=%x,Buff=%x)\n",
  441. rc, GetObjectTypeName(pdataObj->dwDataType), pdataSrc->dwDataType,
  442. - pdataSrc->uipDataValue, pdataSrc->pbDataBuff));
  443. + pdataSrc->dwDataValue, pdataSrc->pbDataBuff));
  444. return rc;
  445. } //WriteObject
  446.  
  447. @@ -300,7 +300,7 @@
  448. ENTER(3, ("ReadField(pctxt=%x,pdataObj=%x,FieldDesc=%x,pdataResult=%x)\n",
  449. pctxt, pdataObj, pfd, pdataResult));
  450.  
  451. - if ((pfd->dwFieldFlags & ACCTYPE_MASK) <= ACCTYPE_DWORD)
  452. + if ((pfd->dwFieldFlags & ACCTYPE_MASK) <= ACCTYPE_QWORD)
  453. {
  454. PUCHAR pb;
  455. ULONG dwcb;
  456. @@ -309,10 +309,10 @@
  457. {
  458. case OBJTYPE_UNKNOWN:
  459. if (!(pfd->dwFieldFlags & FDF_BUFFER_TYPE) &&
  460. - (pfd->dwNumBits <= sizeof(ULONG)*8))
  461. + (pfd->dwNumBits <= sizeof(ULONG64)*8)) // dwNumBits = 64 for QWORD field
  462. {
  463. pdataResult->dwDataType = OBJTYPE_INTDATA;
  464. - pb = (PUCHAR)&pdataResult->uipDataValue;
  465. + pb = (PUCHAR)&pdataResult->dwDataValue;
  466. dwcb = sizeof(ULONG);
  467. }
  468. else
  469. @@ -340,8 +340,8 @@
  470. break;
  471.  
  472. case OBJTYPE_INTDATA:
  473. - pb = (PUCHAR)&pdataResult->uipDataValue;
  474. - dwcb = sizeof(ULONG);
  475. + pb = (PUCHAR)&pdataResult->dwDataValue;
  476. + dwcb = sizeof(ULONG); // acpi 2.0: sizeof(ULONG64)
  477. break;
  478.  
  479. case OBJTYPE_STRDATA:
  480. @@ -410,7 +410,7 @@
  481. ENTER(3, ("WriteField(pctxt=%x,pdataObj=%x,FieldDesc=%x,pdataSrc=%x)\n",
  482. pctxt, pdataObj, pfd, pdataSrc));
  483.  
  484. - if ((pfd->dwFieldFlags & ACCTYPE_MASK) <= ACCTYPE_DWORD)
  485. + if ((pfd->dwFieldFlags & ACCTYPE_MASK) <= ACCTYPE_QWORD)
  486. {
  487. PWRFIELDLOOP pwfl;
  488.  
  489. @@ -418,7 +418,7 @@
  490. {
  491. case OBJTYPE_INTDATA:
  492. dwBuffSize = MIN(sizeof(ULONG), dwDataInc);
  493. - pbBuff = (PUCHAR)&pdataSrc->uipDataValue;
  494. + pbBuff = (PUCHAR)&pdataSrc->dwDataValue;
  495. break;
  496.  
  497. case OBJTYPE_STRDATA:
  498. @@ -584,6 +584,8 @@
  499. * returns AMLIERR_ code
  500. */
  501.  
  502. +#ifdef _X86_
  503. +
  504. NTSTATUS LOCAL ReadFieldObj(PCTXT pctxt, PACCFIELDOBJ pafo, NTSTATUS rc)
  505. {
  506. TRACENAME("READFIELDOBJ")
  507. @@ -844,6 +846,8 @@
  508. return rc;
  509. } //WriteFieldObj
  510.  
  511. +#endif // _X86_
  512. +
  513. /***LP RawFieldAccess - Find and call the RawAccess handler for the RegionSpace
  514. *
  515. * ENTRY
  516. @@ -976,6 +980,7 @@
  517. * EXIT-FAILURE
  518. * returns AMLIERR_ code
  519. */
  520. +#ifdef _X86_
  521.  
  522. NTSTATUS LOCAL AccessFieldData(PCTXT pctxt, POBJDATA pdataObj, PFIELDDESC pfd,
  523. PULONG pdwData, BOOLEAN fRead)
  524. @@ -1051,6 +1056,8 @@
  525. return rc;
  526. } //AccessFieldData
  527.  
  528. +#endif // _X86_
  529. +
  530. /***LP PushPreserveWriteObj - Push a PreserveWrObj frame on the stack
  531. *
  532. * ENTRY
  533. @@ -1164,6 +1171,8 @@
  534. * If pdwData is NULL, it implies a read access.
  535. */
  536.  
  537. +#ifdef _X86_
  538. +
  539. NTSTATUS LOCAL AccessBaseField(PCTXT pctxt, PNSOBJ pnsBase, PFIELDDESC pfd,
  540. PULONG pdwData, BOOLEAN fRead)
  541. {
  542. @@ -1303,6 +1312,8 @@
  543. return rc;
  544. } //AccessBaseField
  545.  
  546. +#endif // _X86_
  547. +
  548. /***LP WriteCookAccess - do a region space write cook access
  549. *
  550. * ENTRY
  551. @@ -1500,6 +1511,8 @@
  552. * returns AMLIERR_ code
  553. */
  554.  
  555. +#ifdef _X86_
  556. +
  557. NTSTATUS LOCAL ReadBuffField(PBUFFFIELDOBJ pbf, PFIELDDESC pfd, PULONG pdwData)
  558. {
  559. TRACENAME("READBUFFFIELD")
  560. @@ -1568,6 +1581,7 @@
  561. return rc;
  562. } //WriteBuffField
  563.  
  564. +#endif // _X86_
  565.  
  566. /***LP ReadSystemMem - Read system memory
  567. *
  568. @@ -1579,6 +1593,7 @@
  569. * EXIT
  570. * return memory content
  571. */
  572. +#ifdef _X86_
  573.  
  574. ULONG LOCAL ReadSystemMem(ULONG_PTR uipAddr, ULONG dwSize, ULONG dwMask)
  575. {
  576. @@ -1748,7 +1763,7 @@
  577. EXIT(3, ("WriteSystemMem!\n"));
  578. } //WriteSystemMem
  579.  
  580. -
  581. +#endif // _X86_
  582.  
  583. /***LP ReadSystemIO - Read system IO
  584. *
  585. @@ -1909,7 +1924,7 @@
  586.  
  587. case OBJTYPE_INTDATA:
  588. PRINTF("Integer(%s:Value=0x%08x[%d])",
  589. - pszName, pdata->uipDataValue, pdata->uipDataValue);
  590. + pszName, pdata->dwDataValue, pdata->dwDataValue);
  591. break;
  592.  
  593. case OBJTYPE_STRDATA:
  594. diff --strip-trailing-cr -ur ./driver/amlinew/parser.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/parser.c"
  595. --- ./driver/amlinew/parser.c 2003-02-26 17:15:50.000000000 +0500
  596. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/parser.c" 2022-05-11 02:01:41.366210900 +0500
  597. @@ -30,7 +30,9 @@
  598. NTSTATUS LOCAL ParseScope(PCTXT pctxt, PSCOPE pscope, NTSTATUS rc)
  599. {
  600. TRACENAME("PARSESCOPE")
  601. - ULONG dwStage = ((rc == STATUS_SUCCESS) || (rc == AMLISTA_BREAK))?
  602. + ULONG dwStage = ((rc == STATUS_SUCCESS) ||
  603. + (rc == AMLISTA_BREAK) ||
  604. + (rc == AMLISTA_CONTINUEOP))?
  605. (pscope->FrameHdr.dwfFrame & FRAMEF_STAGE_MASK): 2;
  606.  
  607. ENTER(2, ("ParseScope(Stage=%d,pctxt=%p,pbOp=%p,pscope=%p,rc=%x)\n",
  608. @@ -67,9 +69,20 @@
  609. if (rc == AMLISTA_BREAK)
  610. {
  611. pctxt->pbOp = pscope->pbOpEnd;
  612. - rc = STATUS_SUCCESS;
  613. - }
  614. - else
  615. +
  616. + pscope->pbOpRet = pscope->pbOpEnd;
  617. + if (pscope->FrameHdr.dwfFrame & CALLF_ACQ_MUTEX) { // test byte ptr [esi+0Ah], 2
  618. + rc = STATUS_SUCCESS;
  619. + }
  620. + } else
  621. + if (rc == AMLISTA_CONTINUEOP)
  622. + {
  623. + pctxt->pbOp = pscope->pbOpEnd;
  624. +
  625. + if (pscope->FrameHdr.dwfFrame & CALLF_ACQ_MUTEX) { // test byte ptr [esi+0Ah], 2
  626. + rc = STATUS_SUCCESS;
  627. + }
  628. + } else
  629. {
  630. while (pctxt->pbOp < pscope->pbOpEnd)
  631. {
  632. @@ -113,7 +126,19 @@
  633. if (rc == AMLISTA_BREAK)
  634. {
  635. pctxt->pbOp = pscope->pbOpEnd;
  636. - rc = STATUS_SUCCESS;
  637. +
  638. + pscope->pbOpRet = pscope->pbOpEnd;
  639. + if (pscope->FrameHdr.dwfFrame & CALLF_ACQ_MUTEX) { // test byte ptr [esi+0Ah], 2
  640. + rc = STATUS_SUCCESS;
  641. + }
  642. + }
  643. + else if (rc == AMLISTA_CONTINUEOP)
  644. + {
  645. + pctxt->pbOp = pscope->pbOpEnd;
  646. +
  647. + if (pscope->FrameHdr.dwfFrame & CALLF_ACQ_MUTEX) { // test byte ptr [esi+0Ah], 2
  648. + rc = STATUS_SUCCESS;
  649. + }
  650. }
  651. else if ((rc == AMLISTA_PENDING) ||
  652. (&pscope->FrameHdr !=
  653. @@ -723,12 +748,12 @@
  654. pacq->pdataResult->dwDataType = OBJTYPE_INTDATA;
  655. if (rc == AMLISTA_TIMEOUT)
  656. {
  657. - pacq->pdataResult->uipDataValue = DATAVALUE_ONES;
  658. + pacq->pdataResult->dwDataValue = DATAVALUE_ONES;
  659. rc = STATUS_SUCCESS;
  660. }
  661. else
  662. {
  663. - pacq->pdataResult->uipDataValue = DATAVALUE_ZERO;
  664. + pacq->pdataResult->dwDataValue = DATAVALUE_ZERO;
  665. }
  666. }
  667. }
  668. @@ -1233,12 +1258,12 @@
  669. bOp = **ppbOp;
  670. (*ppbOp)++;
  671. pdataResult->dwDataType = OBJTYPE_INTDATA;
  672. - pdataResult->uipDataValue = 0;
  673. + pdataResult->dwDataValue = 0;
  674.  
  675. switch (bOp)
  676. {
  677. case OP_ZERO:
  678. - pdataResult->uipDataValue = DATAVALUE_ZERO;
  679. + pdataResult->dwDataValue = DATAVALUE_ZERO;
  680. #ifdef DEBUGGER
  681. if (gDebugger.dwfDebugger &
  682. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  683. @@ -1249,7 +1274,7 @@
  684. break;
  685.  
  686. case OP_ONE:
  687. - pdataResult->uipDataValue = DATAVALUE_ONE;
  688. + pdataResult->dwDataValue = DATAVALUE_ONE;
  689. #ifdef DEBUGGER
  690. if (gDebugger.dwfDebugger &
  691. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  692. @@ -1260,7 +1285,7 @@
  693. break;
  694.  
  695. case OP_ONES:
  696. - pdataResult->uipDataValue = DATAVALUE_ONES;
  697. + pdataResult->dwDataValue = DATAVALUE_ONES;
  698. #ifdef DEBUGGER
  699. if (gDebugger.dwfDebugger &
  700. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  701. @@ -1271,7 +1296,7 @@
  702. break;
  703.  
  704. case OP_REVISION:
  705. - pdataResult->uipDataValue = AMLI_REVISION;
  706. + pdataResult->dwDataValue = AMLI_REVISION;
  707. #ifdef DEBUGGER
  708. if (gDebugger.dwfDebugger &
  709. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  710. @@ -1282,37 +1307,49 @@
  711. break;
  712.  
  713. case OP_BYTE:
  714. - MEMCPY(&pdataResult->uipDataValue, *ppbOp, sizeof(UCHAR));
  715. + MEMCPY(&pdataResult->dwDataValue, *ppbOp, sizeof(UCHAR));
  716. (*ppbOp) += sizeof(UCHAR);
  717. #ifdef DEBUGGER
  718. if (gDebugger.dwfDebugger &
  719. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  720. {
  721. - PRINTF("0x%x", pdataResult->uipDataValue);
  722. + PRINTF("0x%x", pdataResult->dwDataValue);
  723. }
  724. #endif
  725. break;
  726.  
  727. case OP_WORD:
  728. - MEMCPY(&pdataResult->uipDataValue, *ppbOp, sizeof(USHORT));
  729. + MEMCPY(&pdataResult->dwDataValue, *ppbOp, sizeof(USHORT));
  730. (*ppbOp) += sizeof(USHORT);
  731. #ifdef DEBUGGER
  732. if (gDebugger.dwfDebugger &
  733. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  734. {
  735. - PRINTF("0x%x", pdataResult->uipDataValue);
  736. + PRINTF("0x%x", pdataResult->dwDataValue);
  737. }
  738. #endif
  739. break;
  740.  
  741. case OP_DWORD:
  742. - MEMCPY(&pdataResult->uipDataValue, *ppbOp, sizeof(ULONG));
  743. + MEMCPY(&pdataResult->dwDataValue, *ppbOp, sizeof(ULONG));
  744. (*ppbOp) += sizeof(ULONG);
  745. #ifdef DEBUGGER
  746. if (gDebugger.dwfDebugger &
  747. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  748. {
  749. - PRINTF("0x%x", pdataResult->uipDataValue);
  750. + PRINTF("0x%x", pdataResult->dwDataValue);
  751. + }
  752. + #endif
  753. + break;
  754. +
  755. + case OP_QWORD:
  756. + MEMCPY(&pdataResult->dwDataValue, *ppbOp, sizeof(ULONG)); // ignores high 4 bytes
  757. + (*ppbOp) += sizeof(ULONG64);
  758. + #ifdef DEBUGGER
  759. + if (gDebugger.dwfDebugger &
  760. + (DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
  761. + {
  762. + PRINTF("0x%x", pdataResult->dwDataValue);
  763. }
  764. #endif
  765. break;
  766. @@ -1332,7 +1369,7 @@
  767. }
  768.  
  769. EXIT(2, ("ParseIntObj=%x (pbOp=%x,Value=%x)\n",
  770. - rc, *ppbOp, pdataResult->uipDataValue));
  771. + rc, *ppbOp, pdataResult->dwDataValue));
  772. return rc;
  773. } //ParseIntObj
  774.  
  775. @@ -1650,8 +1687,8 @@
  776.  
  777. ASSERT(pdata != NULL);
  778. pdata->dwDataType = OBJTYPE_INTDATA;
  779. - pdata->uipDataValue = 0;
  780. - MEMCPY(&pdata->uipDataValue, *ppbOp, dwDataLen);
  781. + pdata->dwDataValue = 0;
  782. + MEMCPY(&pdata->dwDataValue, *ppbOp, dwDataLen);
  783. (*ppbOp) += dwDataLen;
  784.  
  785. #ifdef DEBUGGER
  786. @@ -1660,12 +1697,12 @@
  787. (DBGF_AMLTRACE_ON | DBGF_STEP_MODES)))
  788.  
  789. {
  790. - PRINTF("0x%x", pdata->uipDataValue);
  791. + PRINTF("0x%x", pdata->dwDataValue);
  792. }
  793. #endif
  794.  
  795. EXIT(2, ("ParseInteger=%x (Value=%x,pbOp=%x)\n",
  796. - rc, pdata->uipDataValue, *ppbOp));
  797. + rc, pdata->dwDataValue, *ppbOp));
  798. return rc;
  799. } //ParseInteger
  800.  
  801. @@ -1692,6 +1729,22 @@
  802.  
  803. ENTER(2, ("ParseField(pctxt=%x,pbOp=%x,pnsParent=%x,FieldFlags=%x,BitPos=%x)\n",
  804. pctxt, pctxt->pbOp, pnsParent, *pdwFieldFlags, *pdwBitPos));
  805. +
  806. + // Connection Field, skip Connection() and jump to field definition
  807. + if (*pctxt->pbOp == 0x02) {
  808. + PUCHAR pbOp = pctxt->pbOp + 1;
  809. +
  810. + if (*pbOp == 0x11) { // BufferOp()
  811. + ULONG dwcbBits;
  812. + pbOp++;
  813. + dwcbBits = ParsePackageLen(&pbOp, NULL);
  814. + pctxt->pbOp += 2; // 0x02, 0x11, [Buffer]
  815. + pctxt->pbOp += dwcbBits; // Buffer len
  816. + } else { // NAMESEG
  817. + pctxt->pbOp += 1; // 0x02, NAMESEG
  818. + pctxt->pbOp += 4; // sizeof(NAMESEG)
  819. + }
  820. + }
  821.  
  822. if (*pctxt->pbOp == 0x01)
  823. {
  824. diff --strip-trailing-cr -ur ./driver/amlinew/pch.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/pch.h"
  825. --- ./driver/amlinew/pch.h 2003-02-26 17:15:50.000000000 +0500
  826. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/pch.h" 2022-04-04 00:10:34.000000000 +0500
  827. @@ -18,7 +18,7 @@
  828. //
  829. #include <ntacpi.h>
  830.  
  831. -
  832. +#include "arblib.h"
  833. #include "amlipriv.h"
  834. #include "ctxt.h"
  835. #include "data.h"
  836. diff --strip-trailing-cr -ur ./driver/amlinew/proto.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/proto.h"
  837. --- ./driver/amlinew/proto.h 2003-02-26 17:15:50.000000000 +0500
  838. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/proto.h" 2022-03-31 19:33:10.000000000 +0500
  839. @@ -150,6 +150,20 @@
  840. BOOLEAN LOCAL MatchData(ULONG dwPkgData, ULONG dwOp, ULONG dwData);
  841. NTSTATUS LOCAL OSInterface(PCTXT pctxt, PTERM pterm);
  842.  
  843. +// ACPI 2.0
  844. +NTSTATUS LOCAL ToInteger(PCTXT pctxt, PTERM pterm);
  845. +NTSTATUS LOCAL ToHexString(PCTXT pctxt, PTERM pterm);
  846. +NTSTATUS LOCAL ToDecimalString(PCTXT pctxt, PTERM pterm);
  847. +NTSTATUS LOCAL ToBuffer(PCTXT pctxt, PTERM pterm);
  848. +NTSTATUS LOCAL CreateQWordField(PCTXT pctxt, PTERM pterm);
  849. +NTSTATUS LOCAL ConcatenateResTemplate(PCTXT pctxt, PTERM pterm);
  850. +NTSTATUS LOCAL Mod(PCTXT pctxt, PTERM pterm);
  851. +NTSTATUS LOCAL ToString(PCTXT pctxt, PTERM pterm);
  852. +NTSTATUS LOCAL CopyObject(PCTXT pctxt, PTERM pterm);
  853. +NTSTATUS LOCAL MidString(PCTXT pctxt, PTERM pterm);
  854. +NTSTATUS LOCAL Continue(PCTXT pctxt, PTERM pterm);
  855. +NTSTATUS LOCAL Timer(PCTXT pctxt, PTERM pterm);
  856. +
  857. //object.c
  858. NTSTATUS LOCAL ReadObject(PCTXT pctxt, POBJDATA pdataObj, POBJDATA pdataResult);
  859. NTSTATUS LOCAL WriteObject(PCTXT pctxt, POBJDATA pdataObj, POBJDATA pdataSrc);
  860. diff --strip-trailing-cr -ur ./driver/amlinew/strlib.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/strlib.c"
  861. --- ./driver/amlinew/strlib.c 2003-02-26 17:15:50.000000000 +0500
  862. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/strlib.c" 2022-04-04 01:34:22.000000000 +0500
  863. @@ -27,15 +27,20 @@
  864. ULONG EXPORT StrLen(PSZ psz, ULONG n)
  865. {
  866. TRACENAME("STRLEN")
  867. - ULONG dwLen;
  868. + ULONG dwLen = 0;
  869.  
  870. ENTER(5, ("StrLen(str=%s,n=%d)\n", psz, n));
  871. -
  872. ASSERT(psz != NULL);
  873. - if (n != (ULONG)-1)
  874. - n++;
  875. - for (dwLen = 0; (dwLen <= n) && (*psz != '\0'); psz++)
  876. - dwLen++;
  877. +
  878. + if (n > 0) {
  879. + do {
  880. + if ( !(*psz) )
  881. + break;
  882. + ++dwLen;
  883. + ++psz;
  884. + }
  885. + while (dwLen < n);
  886. + }
  887.  
  888. EXIT(5, ("StrLen=%u\n", dwLen));
  889. return dwLen;
  890. @@ -62,9 +67,12 @@
  891. ASSERT(pszDst != NULL);
  892. ASSERT(pszSrc != NULL);
  893.  
  894. - dwSrcLen = StrLen(pszSrc, n);
  895. - if ((n == (ULONG)(-1)) || (n > dwSrcLen))
  896. - n = dwSrcLen;
  897. + if (n == (ULONG)(-1)) {
  898. + dwSrcLen = StrLen(pszSrc, (ULONG)(-1));
  899. +
  900. + if (dwSrcLen < (ULONG)(-1))
  901. + n = dwSrcLen;
  902. + }
  903.  
  904. MEMCPY(pszDst, pszSrc, n);
  905. pszDst[n] = '\0';
  906. diff --strip-trailing-cr -ur ./driver/amlinew/sync.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/sync.c"
  907. --- ./driver/amlinew/sync.c 2003-02-26 17:15:50.000000000 +0500
  908. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/sync.c" 2022-04-04 05:24:12.000000000 +0500
  909. @@ -63,23 +63,22 @@
  910. (ULONG_PTR)pvContext);
  911. EvalMethodComplete(pctxt, rcCtxt, (PSYNCEVENT)pvContext);
  912. }
  913. - else if (pfnAsyncCallBack != NULL)
  914. + else
  915. + if (rcCtxt == AMLISTA_CONTINUE)
  916. {
  917. - if (rcCtxt == AMLISTA_CONTINUE)
  918. - {
  919. - //
  920. - // We are not done yet, restart the AsyncEval context using
  921. - // current thread.
  922. - //
  923. - ASSERT(pctxt->dwfCtxt & CTXTF_ASYNC_EVAL);
  924. - RestartContext(pctxt, FALSE);
  925. - }
  926. - else
  927. - {
  928. - LOGSCHEDEVENT('ASCB', (ULONG_PTR)pnsObj, (ULONG_PTR)rcCtxt,
  929. - (ULONG_PTR)pvContext);
  930. - pfnAsyncCallBack(pnsObj, rcCtxt, pdataCallBack, pvContext);
  931. - }
  932. + //
  933. + // We are not done yet, restart the AsyncEval context using
  934. + // current thread.
  935. + //
  936. + ASSERT(pctxt->dwfCtxt & CTXTF_ASYNC_EVAL);
  937. + RestartContext(pctxt, FALSE);
  938. + }
  939. + else
  940. + if (pfnAsyncCallBack != NULL)
  941. + {
  942. + LOGSCHEDEVENT('ASCB', (ULONG_PTR)pnsObj, (ULONG_PTR)rcCtxt,
  943. + (ULONG_PTR)pvContext);
  944. + pfnAsyncCallBack(pnsObj, rcCtxt, pdataCallBack, pvContext);
  945. }
  946.  
  947. EXIT(2, ("AsyncCallBack!\n"));
  948. diff --strip-trailing-cr -ur ./driver/amlinew/trace.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/trace.c"
  949. --- ./driver/amlinew/trace.c 2003-02-26 17:15:50.000000000 +0500
  950. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/trace.c" 2022-04-06 04:46:41.037109300 +0500
  951. @@ -43,6 +43,16 @@
  952. {
  953. BOOLEAN rc = FALSE;
  954.  
  955. + if (
  956. + !_stricmp(pszProcName, "VALIDATEARGTYPES") ||
  957. + !_stricmp(pszProcName, "VALIDATETARGET") ||
  958. + !_stricmp(pszProcName, "xxx") ||
  959. + !_stricmp(pszProcName, "yyy")
  960. + )
  961. + {
  962. + rc = TRUE;
  963. + }
  964. +
  965. if (!(gDebugger.dwfDebugger & (DBGF_IN_DEBUGGER | DBGF_CHECKING_TRACE)))
  966. {
  967. gDebugger.dwfDebugger |= DBGF_CHECKING_TRACE;
  968. diff --strip-trailing-cr -ur ./driver/amlinew/type1op.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/type1op.c"
  969. --- ./driver/amlinew/type1op.c 2003-02-26 17:15:50.000000000 +0500
  970. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/type1op.c" 2022-04-04 04:02:00.000000000 +0500
  971. @@ -93,9 +93,9 @@
  972. {
  973. if (ghFatal.pfnHandler != NULL)
  974. {
  975. - ((PFNFT)ghFatal.pfnHandler)((ULONG)pterm->pdataArgs[0].uipDataValue,
  976. - (ULONG)pterm->pdataArgs[1].uipDataValue,
  977. - (ULONG)pterm->pdataArgs[2].uipDataValue,
  978. + ((PFNFT)ghFatal.pfnHandler)((ULONG)pterm->pdataArgs[0].dwDataValue,
  979. + (ULONG)pterm->pdataArgs[1].dwDataValue,
  980. + (ULONG)pterm->pdataArgs[2].dwDataValue,
  981. (ULONG_PTR) pctxt,
  982. ghFatal.uipParam);
  983. }
  984. @@ -133,7 +133,7 @@
  985. {
  986. if ((rc = ValidateArgTypes(pterm->pdataArgs, "I")) == STATUS_SUCCESS)
  987. {
  988. - if (pterm->pdataArgs[0].uipDataValue == 0)
  989. + if (pterm->pdataArgs[0].dwDataValue == 0)
  990. {
  991. //
  992. // FALSE case, we must skip TRUE scope.
  993. @@ -187,7 +187,7 @@
  994. ("IfElse: Else statement found without matching If"));
  995. }
  996.  
  997. - EXIT(2, ("IfElse=%x (value=%x)\n", rc, pterm->pdataArgs[0].uipDataValue));
  998. + EXIT(2, ("IfElse=%x (value=%x)\n", rc, pterm->pdataArgs[0].dwDataValue));
  999. return rc;
  1000. } //IfElse
  1001.  
  1002. @@ -303,22 +303,22 @@
  1003. DEREF(pctxt);
  1004. if ((rc = ValidateArgTypes(pterm->pdataArgs, "OI")) == STATUS_SUCCESS)
  1005. {
  1006. - if (pterm->pdataArgs[1].uipDataValue > MAX_BYTE)
  1007. + if (pterm->pdataArgs[1].dwDataValue > MAX_BYTE)
  1008. {
  1009. rc = AMLI_LOGERR(AMLIERR_INVALID_DATA,
  1010. ("Notify: Notification value is greater than a byte value (Value=%x)",
  1011. - pterm->pdataArgs[1].uipDataValue));
  1012. + pterm->pdataArgs[1].dwDataValue));
  1013. }
  1014. else if (ghNotify.pfnHandler != NULL)
  1015. {
  1016. pterm->pnsObj = pterm->pdataArgs[0].pnsAlias;
  1017.  
  1018. ENTER(2, ("pfnNotify(Value=%x,Obj=%s,Param=%x)\n",
  1019. - pterm->pdataArgs[1].uipDataValue,
  1020. + pterm->pdataArgs[1].dwDataValue,
  1021. GetObjectPath(pterm->pnsObj), ghNotify.uipParam));
  1022.  
  1023. rc = ((PFNNH)ghNotify.pfnHandler)(EVTYPE_NOTIFY,
  1024. - (ULONG)pterm->pdataArgs[1].uipDataValue,
  1025. + (ULONG)pterm->pdataArgs[1].dwDataValue,
  1026. pterm->pnsObj, (ULONG)ghNotify.uipParam,
  1027. RestartCtxtCallback,
  1028. &(pctxt->CtxtData));
  1029. @@ -508,18 +508,18 @@
  1030. {
  1031. if (pterm->pamlterm->dwOpcode == OP_SLEEP)
  1032. {
  1033. - ENTER(2, ("Sleep(dwMS=%d)\n", pterm->pdataArgs[0].uipDataValue));
  1034. - if (pterm->pdataArgs[0].uipDataValue > MAX_WORD)
  1035. + ENTER(2, ("Sleep(dwMS=%d)\n", pterm->pdataArgs[0].dwDataValue));
  1036. + if (pterm->pdataArgs[0].dwDataValue > MAX_WORD)
  1037. {
  1038. rc = AMLI_LOGERR(AMLIERR_INVALID_DATA,
  1039. ("Sleep: sleep value is greater than a word value (Value=%x)",
  1040. - pterm->pdataArgs[0].uipDataValue));
  1041. + pterm->pdataArgs[0].dwDataValue));
  1042. }
  1043. - else if (pterm->pdataArgs[0].uipDataValue != 0)
  1044. + else if (pterm->pdataArgs[0].dwDataValue != 0)
  1045. {
  1046. if ((rc = SleepQueueRequest(
  1047. pctxt,
  1048. - (ULONG)pterm->pdataArgs[0].uipDataValue)) ==
  1049. + (ULONG)pterm->pdataArgs[0].dwDataValue)) ==
  1050. STATUS_SUCCESS)
  1051. {
  1052. rc = AMLISTA_PENDING;
  1053. @@ -527,16 +527,16 @@
  1054. }
  1055. EXIT(2, ("Sleep=%x\n", rc));
  1056. }
  1057. - else if (pterm->pdataArgs[0].uipDataValue > MAX_BYTE)
  1058. + else if (pterm->pdataArgs[0].dwDataValue > MAX_BYTE)
  1059. {
  1060. rc = AMLI_LOGERR(AMLIERR_INVALID_DATA,
  1061. ("Stall: stall value is greater than a byte value (Value=%x)",
  1062. - pterm->pdataArgs[0].uipDataValue));
  1063. + pterm->pdataArgs[0].dwDataValue));
  1064. }
  1065. else
  1066. {
  1067. - ENTER(2, ("Stall(dwUS=%d)\n", pterm->pdataArgs[0].uipDataValue));
  1068. - KeStallExecutionProcessor((ULONG)pterm->pdataArgs[0].uipDataValue);
  1069. + ENTER(2, ("Stall(dwUS=%d)\n", pterm->pdataArgs[0].dwDataValue));
  1070. + KeStallExecutionProcessor((ULONG)pterm->pdataArgs[0].dwDataValue);
  1071. EXIT(2, ("Stall=%x\n", rc));
  1072. }
  1073. }
  1074. @@ -566,7 +566,7 @@
  1075.  
  1076. if ((rc = ValidateArgTypes(pterm->pdataArgs, "I")) == STATUS_SUCCESS)
  1077. {
  1078. - if (pterm->pdataArgs[0].uipDataValue == 0)
  1079. + if (pterm->pdataArgs[0].dwDataValue == 0)
  1080. {
  1081. //
  1082. // FALSE case, skip the while scope.
  1083. @@ -581,9 +581,12 @@
  1084. rc = PushScope(pctxt, pctxt->pbOp, pterm->pbOpEnd, pterm->pbOpTerm,
  1085. pctxt->pnsScope, pctxt->powner, pctxt->pheapCurrent,
  1086. pterm->pdataResult);
  1087. + if (!rc) {
  1088. + ((PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd)->dwfFrame |= CALLF_ACQ_MUTEX;
  1089. + }
  1090. }
  1091. }
  1092.  
  1093. - EXIT(2, ("While=%x (value=%x)\n", rc, pterm->pdataArgs[0].uipDataValue));
  1094. + EXIT(2, ("While=%x (value=%x)\n", rc, pterm->pdataArgs[0].dwDataValue));
  1095. return rc;
  1096. } //While
  1097. diff --strip-trailing-cr -ur ./driver/amlinew/type2op.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/type2op.c"
  1098. --- ./driver/amlinew/type2op.c 2003-02-26 17:15:50.000000000 +0500
  1099. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/amlinew/type2op.c" 2022-04-27 21:42:56.965820300 +0500
  1100. @@ -28,6 +28,7 @@
  1101.  
  1102. NTSTATUS LOCAL Buffer(PCTXT pctxt, PTERM pterm)
  1103. {
  1104. + USHORT* wIOBuf;
  1105. TRACENAME("BUFFER")
  1106. NTSTATUS rc = STATUS_SUCCESS;
  1107. ULONG dwInitSize = (ULONG)(pterm->pbOpEnd - pctxt->pbOp);
  1108. @@ -44,35 +45,73 @@
  1109. }
  1110. #endif
  1111.  
  1112. - if ((ULONG)pterm->pdataArgs[0].uipDataValue < dwInitSize)
  1113. + if ((ULONG)pterm->pdataArgs[0].dwDataValue < dwInitSize)
  1114. {
  1115. rc = AMLI_LOGERR(AMLIERR_BUFF_TOOSMALL,
  1116. ("Buffer: too many initializers (buffsize=%d,InitSize=%d)",
  1117. - pterm->pdataArgs[0].uipDataValue, dwInitSize));
  1118. + pterm->pdataArgs[0].dwDataValue, dwInitSize));
  1119. }
  1120. - else if (pterm->pdataArgs[0].uipDataValue == 0)
  1121. + else if (pterm->pdataArgs[0].dwDataValue == 0)
  1122. {
  1123. rc = AMLI_LOGERR(AMLIERR_INVALID_BUFFSIZE,
  1124. ("Buffer: invalid buffer size (size=%d)",
  1125. - pterm->pdataArgs[0].uipDataValue));
  1126. + pterm->pdataArgs[0].dwDataValue));
  1127. +
  1128. + // Zero length buffer BSOD workaround
  1129. + pterm->pdataResult->pbDataBuff = NEWBDOBJ(gpheapGlobal, 1); // alloc 1 byte fake buffer
  1130. + pterm->pdataResult->dwDataType = OBJTYPE_BUFFDATA;
  1131. + pterm->pdataResult->dwDataLen = 1;
  1132. + MEMZERO(pterm->pdataResult->pbDataBuff, 1);
  1133. + pctxt->pbOp = pterm->pbOpEnd;
  1134. +
  1135. + rc = STATUS_SUCCESS;
  1136. +
  1137. }
  1138. else if ((pterm->pdataResult->pbDataBuff =
  1139. NEWBDOBJ(gpheapGlobal,
  1140. - (ULONG)pterm->pdataArgs[0].uipDataValue)) == NULL)
  1141. + (ULONG)pterm->pdataArgs[0].dwDataValue)) == NULL)
  1142. {
  1143. rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  1144. ("Buffer: failed to allocate data buffer (size=%d)",
  1145. - pterm->pdataArgs[0].uipDataValue));
  1146. + pterm->pdataArgs[0].dwDataValue));
  1147. }
  1148. else
  1149. {
  1150. pterm->pdataResult->dwDataType = OBJTYPE_BUFFDATA;
  1151. pterm->pdataResult->dwDataLen = (ULONG)
  1152. - pterm->pdataArgs[0].uipDataValue;
  1153. + pterm->pdataArgs[0].dwDataValue;
  1154. MEMZERO(pterm->pdataResult->pbDataBuff,
  1155. pterm->pdataResult->dwDataLen);
  1156. MEMCPY(pterm->pdataResult->pbDataBuff, pctxt->pbOp, dwInitSize);
  1157. pctxt->pbOp = pterm->pbOpEnd;
  1158. +
  1159. + /* IOTRAPS range 0xFF00-0xFFFF vs VGA (10-bit decode!) conflict workaround
  1160. + Device (IOTR)
  1161. + {
  1162. + ...
  1163. + Name (BUF0, ResourceTemplate ()
  1164. + {
  1165. + IO (Decode16,
  1166. + 0x0000, // Range Minimum
  1167. + 0x0000, // Range Maximum
  1168. + 0x01, // Alignment
  1169. + 0xFF, // Length > 1
  1170. + _Y21)
  1171. + }) binary: 11 0D 0A _47 01 00 00 00 00 01 FF 79 00_
  1172. + ...
  1173. + }
  1174. + */
  1175. +
  1176. + if (dwInitSize == 10) {
  1177. + wIOBuf = (USHORT*) pterm->pdataResult->pbDataBuff;
  1178. + if (wIOBuf[0] == 0x0147 &&
  1179. + wIOBuf[1] == 0x0000 &&
  1180. + wIOBuf[2] == 0x0000 &&
  1181. + wIOBuf[3] == 0xFF01 &&
  1182. + wIOBuf[4] == 0x0079 ) {
  1183. + pterm->pdataResult->pbDataBuff[7] = 1; // limit range to one adress
  1184. + }
  1185. + }
  1186. }
  1187. }
  1188.  
  1189. @@ -107,7 +146,7 @@
  1190. pterm->pdataResult->dwDataLen = (ULONG)
  1191. (FIELD_OFFSET(PACKAGEOBJ, adata) +
  1192. sizeof(OBJDATA)*
  1193. - pterm->pdataArgs[0].uipDataValue);
  1194. + pterm->pdataArgs[0].dwDataValue);
  1195.  
  1196. if ((ppkgobj = (PPACKAGEOBJ)NEWPKOBJ(gpheapGlobal,
  1197. pterm->pdataResult->dwDataLen)) ==
  1198. @@ -124,7 +163,7 @@
  1199. pterm->pdataResult->dwDataType = OBJTYPE_PKGDATA;
  1200. MEMZERO(ppkgobj, pterm->pdataResult->dwDataLen);
  1201. pterm->pdataResult->pbDataBuff = (PUCHAR)ppkgobj;
  1202. - ppkgobj->dwcElements = (UCHAR)pterm->pdataArgs[0].uipDataValue;
  1203. + ppkgobj->dwcElements = (UCHAR)pterm->pdataArgs[0].dwDataValue;
  1204.  
  1205. if ((rc = PushFrame(pctxt, SIG_PACKAGE, sizeof(PACKAGE),
  1206. ParsePackage, &ppkg)) == STATUS_SUCCESS)
  1207. @@ -319,7 +358,7 @@
  1208. DATAF_GLOBAL_LOCK)?
  1209. ACQF_SET_RESULT | ACQF_NEED_GLOBALLOCK:
  1210. ACQF_SET_RESULT;
  1211. - pacq->wTimeout = (USHORT)pterm->pdataArgs[1].uipDataValue;
  1212. + pacq->wTimeout = (USHORT)pterm->pdataArgs[1].dwDataValue;
  1213. pacq->pdataResult = pterm->pdataResult;
  1214. }
  1215. }
  1216. @@ -392,9 +431,9 @@
  1217. else if (pterm->pdataArgs[0].dwDataType == OBJTYPE_INTDATA)
  1218. {
  1219. MEMCPY(pterm->pdataResult->pbDataBuff,
  1220. - &pterm->pdataArgs[0].uipDataValue, sizeof(ULONG));
  1221. + &pterm->pdataArgs[0].dwDataValue, sizeof(ULONG));
  1222. MEMCPY(pterm->pdataResult->pbDataBuff + sizeof(ULONG),
  1223. - &pterm->pdataArgs[1].uipDataValue, sizeof(ULONG));
  1224. + &pterm->pdataArgs[1].dwDataValue, sizeof(ULONG));
  1225. }
  1226. else if (pterm->pdataArgs[0].dwDataType == OBJTYPE_STRDATA)
  1227. {
  1228. @@ -463,7 +502,7 @@
  1229.  
  1230. EXIT(2, ("DerefOf=%x (type=%s,value=%x,len=%d,buff=%x)\n",
  1231. rc, GetObjectTypeName(pterm->pdataResult->dwDataType),
  1232. - pterm->pdataResult->uipDataValue, pterm->pdataResult->dwDataLen,
  1233. + pterm->pdataResult->dwDataValue, pterm->pdataResult->dwDataLen,
  1234. pterm->pdataResult->pbDataBuff));
  1235. return rc;
  1236. } //DerefOf
  1237. @@ -501,10 +540,10 @@
  1238. {
  1239. case OP_FINDSETLBIT:
  1240. ENTER(2, ("FindSetLeftBit(Value=%x)\n",
  1241. - pterm->pdataArgs[0].uipDataValue));
  1242. + pterm->pdataArgs[0].dwDataValue));
  1243. for (i = 31; i >= 0; --i)
  1244. {
  1245. - if (pterm->pdataArgs[0].uipDataValue & (1 << i))
  1246. + if (pterm->pdataArgs[0].dwDataValue & (1 << i))
  1247. {
  1248. dwResult = i + 1;
  1249. break;
  1250. @@ -515,10 +554,10 @@
  1251.  
  1252. case OP_FINDSETRBIT:
  1253. ENTER(2, ("FindSetRightBit(Value=%x)\n",
  1254. - pterm->pdataArgs[0].uipDataValue));
  1255. + pterm->pdataArgs[0].dwDataValue));
  1256. for (i = 0; i <= 31; ++i)
  1257. {
  1258. - if (pterm->pdataArgs[0].uipDataValue & (1 << i))
  1259. + if (pterm->pdataArgs[0].dwDataValue & (1 << i))
  1260. {
  1261. dwResult = i + 1;
  1262. break;
  1263. @@ -529,8 +568,8 @@
  1264.  
  1265. case OP_FROMBCD:
  1266. ENTER(2, ("FromBCD(Value=%x)\n",
  1267. - pterm->pdataArgs[0].uipDataValue));
  1268. - for (dwData1 = (ULONG)pterm->pdataArgs[0].uipDataValue,
  1269. + pterm->pdataArgs[0].dwDataValue));
  1270. + for (dwData1 = (ULONG)pterm->pdataArgs[0].dwDataValue,
  1271. dwData2 = 1;
  1272. dwData1 != 0;
  1273. dwData2 *= 10, dwData1 >>= 4)
  1274. @@ -542,8 +581,8 @@
  1275.  
  1276. case OP_TOBCD:
  1277. ENTER(2, ("ToBCD(Value=%x)\n",
  1278. - pterm->pdataArgs[0].uipDataValue));
  1279. - for (i = 0, dwData1 = (ULONG)pterm->pdataArgs[0].uipDataValue;
  1280. + pterm->pdataArgs[0].dwDataValue));
  1281. + for (i = 0, dwData1 = (ULONG)pterm->pdataArgs[0].dwDataValue;
  1282. dwData1 != 0;
  1283. ++i, dwData1 /= 10)
  1284. {
  1285. @@ -554,13 +593,13 @@
  1286.  
  1287. case OP_NOT:
  1288. ENTER(2, ("Not(Value=%x)\n",
  1289. - pterm->pdataArgs[0].uipDataValue));
  1290. - dwResult = ~(ULONG)pterm->pdataArgs[0].uipDataValue;
  1291. + pterm->pdataArgs[0].dwDataValue));
  1292. + dwResult = ~(ULONG)pterm->pdataArgs[0].dwDataValue;
  1293. EXIT(2, ("Not=%x (Result=%x)\n", rc, dwResult));
  1294. }
  1295.  
  1296. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1297. - pterm->pdataResult->uipDataValue = (ULONG_PTR)dwResult;
  1298. + pterm->pdataResult->dwDataValue = (ULONG)dwResult;
  1299. rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  1300. }
  1301.  
  1302. @@ -598,118 +637,128 @@
  1303. {
  1304. case OP_ADD:
  1305. ENTER(2, ("Add(Value1=%x,Value2=%x)\n",
  1306. - pterm->pdataArgs[0].uipDataValue,
  1307. - pterm->pdataArgs[1].uipDataValue));
  1308. - pterm->pdataResult->uipDataValue =
  1309. - pterm->pdataArgs[0].uipDataValue +
  1310. - pterm->pdataArgs[1].uipDataValue;
  1311. + pterm->pdataArgs[0].dwDataValue,
  1312. + pterm->pdataArgs[1].dwDataValue));
  1313. + pterm->pdataResult->dwDataValue =
  1314. + pterm->pdataArgs[0].dwDataValue +
  1315. + pterm->pdataArgs[1].dwDataValue;
  1316. EXIT(2, ("Add=%x (Result=%x)\n",
  1317. - rc, pterm->pdataResult->uipDataValue));
  1318. + rc, pterm->pdataResult->dwDataValue));
  1319. break;
  1320.  
  1321. case OP_AND:
  1322. ENTER(2, ("And(Value1=%x,Value2=%x)\n",
  1323. - pterm->pdataArgs[0].uipDataValue,
  1324. - pterm->pdataArgs[1].uipDataValue));
  1325. - pterm->pdataResult->uipDataValue =
  1326. - pterm->pdataArgs[0].uipDataValue &
  1327. - pterm->pdataArgs[1].uipDataValue;
  1328. + pterm->pdataArgs[0].dwDataValue,
  1329. + pterm->pdataArgs[1].dwDataValue));
  1330. + pterm->pdataResult->dwDataValue =
  1331. + pterm->pdataArgs[0].dwDataValue &
  1332. + pterm->pdataArgs[1].dwDataValue;
  1333. EXIT(2, ("And=%x (Result=%x)\n",
  1334. - rc, pterm->pdataResult->uipDataValue));
  1335. + rc, pterm->pdataResult->dwDataValue));
  1336. break;
  1337.  
  1338. case OP_MULTIPLY:
  1339. ENTER(2, ("Multiply(Value1=%x,Value2=%x)\n",
  1340. - pterm->pdataArgs[0].uipDataValue,
  1341. - pterm->pdataArgs[1].uipDataValue));
  1342. - pterm->pdataResult->uipDataValue =
  1343. - pterm->pdataArgs[0].uipDataValue *
  1344. - pterm->pdataArgs[1].uipDataValue;
  1345. + pterm->pdataArgs[0].dwDataValue,
  1346. + pterm->pdataArgs[1].dwDataValue));
  1347. + pterm->pdataResult->dwDataValue =
  1348. + pterm->pdataArgs[0].dwDataValue *
  1349. + pterm->pdataArgs[1].dwDataValue;
  1350. EXIT(2, ("Multiply=%x (Result=%x)\n",
  1351. - rc, pterm->pdataResult->uipDataValue));
  1352. + rc, pterm->pdataResult->dwDataValue));
  1353. break;
  1354.  
  1355. case OP_NAND:
  1356. ENTER(2, ("NAnd(Value1=%x,Value2=%x)\n",
  1357. - pterm->pdataArgs[0].uipDataValue,
  1358. - pterm->pdataArgs[1].uipDataValue));
  1359. - pterm->pdataResult->uipDataValue =
  1360. - ~(pterm->pdataArgs[0].uipDataValue &
  1361. - pterm->pdataArgs[1].uipDataValue);
  1362. + pterm->pdataArgs[0].dwDataValue,
  1363. + pterm->pdataArgs[1].dwDataValue));
  1364. + pterm->pdataResult->dwDataValue =
  1365. + ~(pterm->pdataArgs[0].dwDataValue &
  1366. + pterm->pdataArgs[1].dwDataValue);
  1367. EXIT(2, ("NAnd=%x (Result=%x)\n",
  1368. - rc, pterm->pdataResult->uipDataValue));
  1369. + rc, pterm->pdataResult->dwDataValue));
  1370. break;
  1371.  
  1372. case OP_NOR:
  1373. ENTER(2, ("NOr(Value1=%x,Value2=%x)\n",
  1374. - pterm->pdataArgs[0].uipDataValue,
  1375. - pterm->pdataArgs[1].uipDataValue));
  1376. - pterm->pdataResult->uipDataValue =
  1377. - ~(pterm->pdataArgs[0].uipDataValue |
  1378. - pterm->pdataArgs[1].uipDataValue);
  1379. + pterm->pdataArgs[0].dwDataValue,
  1380. + pterm->pdataArgs[1].dwDataValue));
  1381. + pterm->pdataResult->dwDataValue =
  1382. + ~(pterm->pdataArgs[0].dwDataValue |
  1383. + pterm->pdataArgs[1].dwDataValue);
  1384. EXIT(2, ("NOr=%x (Result=%x)\n",
  1385. - rc, pterm->pdataResult->uipDataValue));
  1386. + rc, pterm->pdataResult->dwDataValue));
  1387. break;
  1388.  
  1389. case OP_OR:
  1390. ENTER(2, ("Or(Value1=%x,Value2=%x)\n",
  1391. - pterm->pdataArgs[0].uipDataValue,
  1392. - pterm->pdataArgs[1].uipDataValue));
  1393. - pterm->pdataResult->uipDataValue =
  1394. - pterm->pdataArgs[0].uipDataValue |
  1395. - pterm->pdataArgs[1].uipDataValue;
  1396. + pterm->pdataArgs[0].dwDataValue,
  1397. + pterm->pdataArgs[1].dwDataValue));
  1398. + pterm->pdataResult->dwDataValue =
  1399. + pterm->pdataArgs[0].dwDataValue |
  1400. + pterm->pdataArgs[1].dwDataValue;
  1401. EXIT(2, ("Or=%x (Result=%x)\n",
  1402. - rc, pterm->pdataResult->uipDataValue));
  1403. + rc, pterm->pdataResult->dwDataValue));
  1404. break;
  1405.  
  1406. case OP_SHIFTL:
  1407. ENTER(2, ("ShiftLeft(Value1=%x,Value2=%x)\n",
  1408. - pterm->pdataArgs[0].uipDataValue,
  1409. - pterm->pdataArgs[1].uipDataValue));
  1410. - pterm->pdataResult->uipDataValue =
  1411. - SHIFTLEFT(pterm->pdataArgs[0].uipDataValue,
  1412. - pterm->pdataArgs[1].uipDataValue);
  1413. + pterm->pdataArgs[0].dwDataValue,
  1414. + pterm->pdataArgs[1].dwDataValue));
  1415. + pterm->pdataResult->dwDataValue =
  1416. + SHIFTLEFT(pterm->pdataArgs[0].dwDataValue,
  1417. + pterm->pdataArgs[1].dwDataValue);
  1418. EXIT(2, ("ShiftLeft=%x (Result=%x)\n",
  1419. - rc, pterm->pdataResult->uipDataValue));
  1420. + rc, pterm->pdataResult->dwDataValue));
  1421. break;
  1422.  
  1423. case OP_SHIFTR:
  1424. ENTER(2, ("ShiftRight(Value1=%x,Value2=%x)\n",
  1425. - pterm->pdataArgs[0].uipDataValue,
  1426. - pterm->pdataArgs[1].uipDataValue));
  1427. - pterm->pdataResult->uipDataValue =
  1428. - SHIFTRIGHT(pterm->pdataArgs[0].uipDataValue,
  1429. - pterm->pdataArgs[1].uipDataValue);
  1430. + pterm->pdataArgs[0].dwDataValue,
  1431. + pterm->pdataArgs[1].dwDataValue));
  1432. + pterm->pdataResult->dwDataValue =
  1433. + SHIFTRIGHT(pterm->pdataArgs[0].dwDataValue,
  1434. + pterm->pdataArgs[1].dwDataValue);
  1435. EXIT(2, ("ShiftRight=%x (Result=%x)\n",
  1436. - rc, pterm->pdataResult->uipDataValue));
  1437. + rc, pterm->pdataResult->dwDataValue));
  1438. break;
  1439.  
  1440. case OP_SUBTRACT:
  1441. ENTER(2, ("Subtract(Value1=%x,Value2=%x)\n",
  1442. - pterm->pdataArgs[0].uipDataValue,
  1443. - pterm->pdataArgs[1].uipDataValue));
  1444. - pterm->pdataResult->uipDataValue =
  1445. - pterm->pdataArgs[0].uipDataValue -
  1446. - pterm->pdataArgs[1].uipDataValue;
  1447. + pterm->pdataArgs[0].dwDataValue,
  1448. + pterm->pdataArgs[1].dwDataValue));
  1449. + pterm->pdataResult->dwDataValue =
  1450. + pterm->pdataArgs[0].dwDataValue -
  1451. + pterm->pdataArgs[1].dwDataValue;
  1452. EXIT(2, ("Subtract=%x (Result=%x)\n",
  1453. - rc, pterm->pdataResult->uipDataValue));
  1454. + rc, pterm->pdataResult->dwDataValue));
  1455. break;
  1456.  
  1457. case OP_XOR:
  1458. ENTER(2, ("XOr(Value1=%x,Value2=%x)\n",
  1459. - pterm->pdataArgs[0].uipDataValue,
  1460. - pterm->pdataArgs[1].uipDataValue));
  1461. - pterm->pdataResult->uipDataValue =
  1462. - pterm->pdataArgs[0].uipDataValue ^
  1463. - pterm->pdataArgs[1].uipDataValue;
  1464. + pterm->pdataArgs[0].dwDataValue,
  1465. + pterm->pdataArgs[1].dwDataValue));
  1466. + pterm->pdataResult->dwDataValue =
  1467. + pterm->pdataArgs[0].dwDataValue ^
  1468. + pterm->pdataArgs[1].dwDataValue;
  1469. EXIT(2, ("XOr=%x (Result=%x)\n",
  1470. - rc, pterm->pdataResult->uipDataValue));
  1471. + rc, pterm->pdataResult->dwDataValue));
  1472. +
  1473. + case OP_MOD:
  1474. + ENTER(2, ("Mod(Value1=%x,Value2=%x)\n",
  1475. + pterm->pdataArgs[0].dwDataValue,
  1476. + pterm->pdataArgs[1].dwDataValue));
  1477. + pterm->pdataResult->dwDataValue =
  1478. + pterm->pdataArgs[0].dwDataValue %
  1479. + pterm->pdataArgs[1].dwDataValue;
  1480. + EXIT(2, ("Mod=%x (Result=%x)\n",
  1481. + rc, pterm->pdataResult->dwDataValue));
  1482. }
  1483.  
  1484. rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  1485. }
  1486.  
  1487. - EXIT(2, ("ExprOp2=%x (value=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1488. + EXIT(2, ("ExprOp2=%x (value=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1489. return rc;
  1490. } //ExprOp2
  1491.  
  1492. @@ -741,17 +790,17 @@
  1493. == STATUS_SUCCESS))
  1494. {
  1495. ENTER(2, ("Divide(Value1=%x,Value2=%x)\n",
  1496. - pterm->pdataArgs[0].uipDataValue,
  1497. - pterm->pdataArgs[1].uipDataValue));
  1498. + pterm->pdataArgs[0].dwDataValue,
  1499. + pterm->pdataArgs[1].dwDataValue));
  1500. //
  1501. // Check for divide by zero case.
  1502. //
  1503. - if(pterm->pdataArgs[1].uipDataValue != 0)
  1504. + if(pterm->pdataArgs[1].dwDataValue != 0)
  1505. {
  1506. - dwDividend = (ULONG)(pterm->pdataArgs[0].uipDataValue /
  1507. - pterm->pdataArgs[1].uipDataValue);
  1508. - dwRemainder = (ULONG)(pterm->pdataArgs[0].uipDataValue %
  1509. - pterm->pdataArgs[1].uipDataValue);
  1510. + dwDividend = (ULONG)(pterm->pdataArgs[0].dwDataValue /
  1511. + pterm->pdataArgs[1].dwDataValue);
  1512. + dwRemainder = (ULONG)(pterm->pdataArgs[0].dwDataValue %
  1513. + pterm->pdataArgs[1].dwDataValue);
  1514. }
  1515. else
  1516. {
  1517. @@ -764,7 +813,7 @@
  1518. rc, dwDividend, dwRemainder));
  1519.  
  1520. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1521. - pterm->pdataResult->uipDataValue = (ULONG_PTR)dwDividend;
  1522. + pterm->pdataResult->dwDataValue = (ULONG)dwDividend;
  1523.  
  1524. if ((rc = PushPost(pctxt, ProcessDivide, (ULONG_PTR)pdata2, 0,
  1525. pterm->pdataResult)) == STATUS_SUCCESS)
  1526. @@ -826,7 +875,7 @@
  1527. }
  1528.  
  1529. EXIT(2, ("ProcessDivide=%x (value=%x)\n",
  1530. - rc, ppost->pdataResult->uipDataValue));
  1531. + rc, ppost->pdataResult->dwDataValue));
  1532. return rc;
  1533. } //ProcessDivide
  1534.  
  1535. @@ -904,18 +953,18 @@
  1536. else if (ppost->uipData1 == OP_INCREMENT)
  1537. {
  1538. ENTER(2, ("Increment(Value=%x)\n",
  1539. - ppost->pdataResult->uipDataValue));
  1540. - ppost->pdataResult->uipDataValue++;
  1541. + ppost->pdataResult->dwDataValue));
  1542. + ppost->pdataResult->dwDataValue++;
  1543. EXIT(2, ("Increment=%x (Value=%x)\n",
  1544. - rc, ppost->pdataResult->uipDataValue));
  1545. + rc, ppost->pdataResult->dwDataValue));
  1546. }
  1547. else
  1548. {
  1549. ENTER(2, ("Decrement(Value=%x)\n",
  1550. - ppost->pdataResult->uipDataValue));
  1551. - ppost->pdataResult->uipDataValue--;
  1552. + ppost->pdataResult->dwDataValue));
  1553. + ppost->pdataResult->dwDataValue--;
  1554. EXIT(2, ("Decrement=%x (Value=%x)\n",
  1555. - rc, ppost->pdataResult->uipDataValue));
  1556. + rc, ppost->pdataResult->dwDataValue));
  1557. }
  1558.  
  1559. if (rc == STATUS_SUCCESS)
  1560. @@ -938,7 +987,7 @@
  1561. }
  1562.  
  1563. EXIT(2, ("ProcessIncDec=%x (value=%x)\n",
  1564. - rc, ppost->pdataResult->uipDataValue));
  1565. + rc, ppost->pdataResult->dwDataValue));
  1566. return rc;
  1567. } //ProcessIncDec
  1568.  
  1569. @@ -970,24 +1019,24 @@
  1570. {
  1571. PPACKAGEOBJ ppkg = (PPACKAGEOBJ)pterm->pdataArgs[0].pbDataBuff;
  1572.  
  1573. - if ((ULONG)pterm->pdataArgs[1].uipDataValue < ppkg->dwcElements)
  1574. + if ((ULONG)pterm->pdataArgs[1].dwDataValue < ppkg->dwcElements)
  1575. {
  1576. pterm->pdataResult->dwDataType = OBJTYPE_DATAALIAS;
  1577. pterm->pdataResult->pdataAlias =
  1578. - &ppkg->adata[pterm->pdataArgs[1].uipDataValue];
  1579. + &ppkg->adata[pterm->pdataArgs[1].dwDataValue];
  1580. }
  1581. else
  1582. {
  1583. rc = AMLI_LOGERR(AMLIERR_INDEX_TOO_BIG,
  1584. ("Index: index out-of-bound (index=%d,max=%d)",
  1585. - pterm->pdataArgs[1].uipDataValue,
  1586. + pterm->pdataArgs[1].dwDataValue,
  1587. ppkg->dwcElements));
  1588. }
  1589. }
  1590. else
  1591. {
  1592. ASSERT(pterm->pdataArgs[0].dwDataType == OBJTYPE_BUFFDATA);
  1593. - if ((ULONG)pterm->pdataArgs[1].uipDataValue <
  1594. + if ((ULONG)pterm->pdataArgs[1].dwDataValue <
  1595. pterm->pdataArgs[0].dwDataLen)
  1596. {
  1597. pterm->pdataResult->dwDataType = OBJTYPE_BUFFFIELD;
  1598. @@ -1004,7 +1053,7 @@
  1599. PBUFFFIELDOBJ pbf = (PBUFFFIELDOBJ)pterm->pdataResult->pbDataBuff;
  1600.  
  1601. pbf->FieldDesc.dwByteOffset =
  1602. - (ULONG)pterm->pdataArgs[1].uipDataValue;
  1603. + (ULONG)pterm->pdataArgs[1].dwDataValue;
  1604. pbf->FieldDesc.dwStartBitPos = 0;
  1605. pbf->FieldDesc.dwNumBits = 8;
  1606. pbf->pbDataBuff = pterm->pdataArgs[0].pbDataBuff;
  1607. @@ -1015,7 +1064,7 @@
  1608. {
  1609. rc = AMLI_LOGERR(AMLIERR_INDEX_TOO_BIG,
  1610. ("Index: index out-of-bound (index=%d,max=%d)",
  1611. - pterm->pdataArgs[1].uipDataValue,
  1612. + pterm->pdataArgs[1].dwDataValue,
  1613. pterm->pdataArgs[0].dwDataLen));
  1614. }
  1615. }
  1616. @@ -1028,7 +1077,7 @@
  1617.  
  1618. EXIT(2, ("Index=%x (Type=%s,Value=%x,Len=%x,Buff=%x)\n",
  1619. rc, GetObjectTypeName(pterm->pdataResult->dwDataType),
  1620. - pterm->pdataResult->uipDataValue, pterm->pdataResult->dwDataLen,
  1621. + pterm->pdataResult->dwDataValue, pterm->pdataResult->dwDataLen,
  1622. pterm->pdataResult->pbDataBuff));
  1623. return rc;
  1624. } //Index
  1625. @@ -1055,16 +1104,16 @@
  1626. DEREF(pctxt);
  1627. if ((rc = ValidateArgTypes(pterm->pdataArgs, "I")) == STATUS_SUCCESS)
  1628. {
  1629. - ENTER(2, ("LNot(Value=%x)\n", pterm->pdataArgs[0].uipDataValue));
  1630. + ENTER(2, ("LNot(Value=%x)\n", pterm->pdataArgs[0].dwDataValue));
  1631. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1632. - if (pterm->pdataArgs[0].uipDataValue == 0)
  1633. - pterm->pdataResult->uipDataValue = DATAVALUE_ONES;
  1634. + if (pterm->pdataArgs[0].dwDataValue == 0)
  1635. + pterm->pdataResult->dwDataValue = DATAVALUE_ONES;
  1636. else
  1637. - pterm->pdataResult->uipDataValue = DATAVALUE_ZERO;
  1638. - EXIT(2, ("LNot=%x (Value=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1639. + pterm->pdataResult->dwDataValue = DATAVALUE_ZERO;
  1640. + EXIT(2, ("LNot=%x (Value=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1641. }
  1642.  
  1643. - EXIT(2, ("LNot=%x (value=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1644. + EXIT(2, ("LNot=%x (value=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1645. return rc;
  1646. } //LNot
  1647.  
  1648. @@ -1097,54 +1146,54 @@
  1649. {
  1650. case OP_LAND:
  1651. ENTER(2, ("LAnd(Value1=%x,Value2=%x)\n",
  1652. - pterm->pdataArgs[0].uipDataValue,
  1653. - pterm->pdataArgs[1].uipDataValue));
  1654. - fResult = (BOOLEAN)(pterm->pdataArgs[0].uipDataValue &&
  1655. - pterm->pdataArgs[1].uipDataValue);
  1656. + pterm->pdataArgs[0].dwDataValue,
  1657. + pterm->pdataArgs[1].dwDataValue));
  1658. + fResult = (BOOLEAN)(pterm->pdataArgs[0].dwDataValue &&
  1659. + pterm->pdataArgs[1].dwDataValue);
  1660. EXIT(2, ("LAnd=%x (Result=%x)\n", rc, fResult));
  1661. break;
  1662.  
  1663. case OP_LOR:
  1664. ENTER(2, ("LOr(Value1=%x,Value2=%x)\n",
  1665. - pterm->pdataArgs[0].uipDataValue,
  1666. - pterm->pdataArgs[1].uipDataValue));
  1667. - fResult = (BOOLEAN)(pterm->pdataArgs[0].uipDataValue ||
  1668. - pterm->pdataArgs[1].uipDataValue);
  1669. + pterm->pdataArgs[0].dwDataValue,
  1670. + pterm->pdataArgs[1].dwDataValue));
  1671. + fResult = (BOOLEAN)(pterm->pdataArgs[0].dwDataValue ||
  1672. + pterm->pdataArgs[1].dwDataValue);
  1673. EXIT(2, ("LOr=%x (Result=%x)\n", rc, fResult));
  1674. break;
  1675.  
  1676. case OP_LG:
  1677. ENTER(2, ("LGreater(Value1=%x,Value2=%x)\n",
  1678. - pterm->pdataArgs[0].uipDataValue,
  1679. - pterm->pdataArgs[1].uipDataValue));
  1680. - fResult = (BOOLEAN)(pterm->pdataArgs[0].uipDataValue >
  1681. - pterm->pdataArgs[1].uipDataValue);
  1682. + pterm->pdataArgs[0].dwDataValue,
  1683. + pterm->pdataArgs[1].dwDataValue));
  1684. + fResult = (BOOLEAN)(pterm->pdataArgs[0].dwDataValue >
  1685. + pterm->pdataArgs[1].dwDataValue);
  1686. EXIT(2, ("LGreater=%x (Result=%x)\n", rc, fResult));
  1687. break;
  1688.  
  1689. case OP_LL:
  1690. ENTER(2, ("LLess(Value1=%x,Value2=%x)\n",
  1691. - pterm->pdataArgs[0].uipDataValue,
  1692. - pterm->pdataArgs[1].uipDataValue));
  1693. - fResult = (BOOLEAN)(pterm->pdataArgs[0].uipDataValue <
  1694. - pterm->pdataArgs[1].uipDataValue);
  1695. + pterm->pdataArgs[0].dwDataValue,
  1696. + pterm->pdataArgs[1].dwDataValue));
  1697. + fResult = (BOOLEAN)(pterm->pdataArgs[0].dwDataValue <
  1698. + pterm->pdataArgs[1].dwDataValue);
  1699. EXIT(2, ("LLess=%x (Result=%x)\n", rc, fResult));
  1700. break;
  1701.  
  1702. case OP_LEQ:
  1703. ENTER(2, ("LEqual(Value1=%x,Value2=%x)\n",
  1704. - pterm->pdataArgs[0].uipDataValue,
  1705. - pterm->pdataArgs[1].uipDataValue));
  1706. - fResult = (BOOLEAN)(pterm->pdataArgs[0].uipDataValue ==
  1707. - pterm->pdataArgs[1].uipDataValue);
  1708. + pterm->pdataArgs[0].dwDataValue,
  1709. + pterm->pdataArgs[1].dwDataValue));
  1710. + fResult = (BOOLEAN)(pterm->pdataArgs[0].dwDataValue ==
  1711. + pterm->pdataArgs[1].dwDataValue);
  1712. EXIT(2, ("LEqual=%x (Result=%x)\n", rc, fResult));
  1713. }
  1714. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1715. - pterm->pdataResult->uipDataValue = fResult?
  1716. + pterm->pdataResult->dwDataValue = fResult?
  1717. DATAVALUE_ONES: DATAVALUE_ZERO;
  1718. }
  1719.  
  1720. - EXIT(2, ("LogOp2=%x (value=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1721. + EXIT(2, ("LogOp2=%x (value=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1722. return rc;
  1723. } //LogOp2
  1724.  
  1725. @@ -1175,7 +1224,7 @@
  1726. if (pterm->pamlterm->dwOpcode == OP_OBJTYPE)
  1727. {
  1728. ENTER(2, ("ObjectType(pdataObj=%x)\n", pdata));
  1729. - pterm->pdataResult->uipDataValue = (ULONG_PTR)pdata->dwDataType;
  1730. + pterm->pdataResult->dwDataValue = (ULONG)pdata->dwDataType;
  1731. EXIT(2, ("ObjectType=%x (Type=%s)\n",
  1732. rc, GetObjectTypeName(pdata->dwDataType)));
  1733. }
  1734. @@ -1185,16 +1234,16 @@
  1735. switch (pdata->dwDataType)
  1736. {
  1737. case OBJTYPE_BUFFDATA:
  1738. - pterm->pdataResult->uipDataValue = (ULONG_PTR)pdata->dwDataLen;
  1739. + pterm->pdataResult->dwDataValue = (ULONG)pdata->dwDataLen;
  1740. break;
  1741.  
  1742. case OBJTYPE_STRDATA:
  1743. - pterm->pdataResult->uipDataValue = (ULONG_PTR)
  1744. + pterm->pdataResult->dwDataValue = (ULONG)
  1745. (pdata->dwDataLen - 1);
  1746. break;
  1747.  
  1748. case OBJTYPE_PKGDATA:
  1749. - pterm->pdataResult->uipDataValue = (ULONG_PTR)
  1750. + pterm->pdataResult->dwDataValue = (ULONG)
  1751. ((PPACKAGEOBJ)pdata->pbDataBuff)->dwcElements;
  1752. break;
  1753.  
  1754. @@ -1203,11 +1252,11 @@
  1755. ("SizeOf: expected argument type string/buffer/package (type=%s)",
  1756. GetObjectTypeName(pdata->dwDataType)));
  1757. }
  1758. - EXIT(2, ("Sizeof=%x (Size=%d)\n", rc, pterm->pdataResult->uipDataValue));
  1759. + EXIT(2, ("Sizeof=%x (Size=%d)\n", rc, pterm->pdataResult->dwDataValue));
  1760. }
  1761.  
  1762. EXIT(2, ("ObjTypeSizeOf=%x (value=%x)\n",
  1763. - rc, pterm->pdataResult->uipDataValue));
  1764. + rc, pterm->pdataResult->dwDataValue));
  1765. return rc;
  1766. } //ObjTypeSizeOf
  1767.  
  1768. @@ -1233,7 +1282,7 @@
  1769. DEREF(pctxt);
  1770. MoveObjData(pterm->pdataResult, &pterm->pdataArgs[0]);
  1771.  
  1772. - EXIT(2, ("RefOf=%x (ObjAlias=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1773. + EXIT(2, ("RefOf=%x (ObjAlias=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1774. return rc;
  1775. } //RefOf
  1776.  
  1777. @@ -1265,17 +1314,17 @@
  1778. if ((pterm->pdataArgs[0].dwDataType == OBJTYPE_OBJALIAS) ||
  1779. (pterm->pdataArgs[0].dwDataType == OBJTYPE_DATAALIAS))
  1780. {
  1781. - pterm->pdataResult->uipDataValue = DATAVALUE_ONES;
  1782. + pterm->pdataResult->dwDataValue = DATAVALUE_ONES;
  1783. rc = WriteObject(pctxt, pdata, &pterm->pdataArgs[0]);
  1784. }
  1785. else
  1786. {
  1787. - pterm->pdataResult->uipDataValue = DATAVALUE_ZERO;
  1788. + pterm->pdataResult->dwDataValue = DATAVALUE_ZERO;
  1789. }
  1790. }
  1791.  
  1792. EXIT(2, ("CondRefOf=%x (ObjAlias=%x)\n",
  1793. - rc, pterm->pdataResult->uipDataValue));
  1794. + rc, pterm->pdataResult->dwDataValue));
  1795. return rc;
  1796. } //CondRefOf
  1797.  
  1798. @@ -1308,7 +1357,7 @@
  1799.  
  1800. EXIT(2, ("Store=%x (type=%s,value=%x,buff=%x,len=%x)\n",
  1801. rc, GetObjectTypeName(pterm->pdataArgs[0].dwDataType),
  1802. - pterm->pdataArgs[0].uipDataValue, pterm->pdataArgs[0].pbDataBuff,
  1803. + pterm->pdataArgs[0].dwDataValue, pterm->pdataArgs[0].pbDataBuff,
  1804. pterm->pdataArgs[0].dwDataLen));
  1805. return rc;
  1806. } //Store
  1807. @@ -1347,11 +1396,11 @@
  1808. {
  1809. rc = WaitASLEvent(pctxt,
  1810. (PEVENTOBJ)pterm->pnsObj->ObjData.pbDataBuff,
  1811. - (USHORT)pterm->pdataArgs[1].uipDataValue);
  1812. + (USHORT)pterm->pdataArgs[1].dwDataValue);
  1813. }
  1814. }
  1815.  
  1816. - EXIT(2, ("Wait=%x (value=%x)\n", rc, pterm->pdataResult->uipDataValue));
  1817. + EXIT(2, ("Wait=%x (value=%x)\n", rc, pterm->pdataResult->dwDataValue));
  1818. return rc;
  1819. } //Wait
  1820.  
  1821. @@ -1379,17 +1428,17 @@
  1822. ppost->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1823. if (rc == AMLISTA_TIMEOUT)
  1824. {
  1825. - ppost->pdataResult->uipDataValue = DATAVALUE_ONES;
  1826. + ppost->pdataResult->dwDataValue = DATAVALUE_ONES;
  1827. rc = STATUS_SUCCESS;
  1828. }
  1829. else
  1830. {
  1831. - ppost->pdataResult->uipDataValue = DATAVALUE_ZERO;
  1832. + ppost->pdataResult->dwDataValue = DATAVALUE_ZERO;
  1833. }
  1834. PopFrame(pctxt);
  1835.  
  1836. EXIT(2, ("ProcessWait=%x (value=%x)\n",
  1837. - rc, ppost->pdataResult->uipDataValue));
  1838. + rc, ppost->pdataResult->dwDataValue));
  1839. return rc;
  1840. } //ProcessWait
  1841.  
  1842. @@ -1420,7 +1469,7 @@
  1843. int i;
  1844.  
  1845. MEMZERO(&data, sizeof(data));
  1846. - for (i = (int)pterm->pdataArgs[5].uipDataValue;
  1847. + for (i = (int)pterm->pdataArgs[5].dwDataValue;
  1848. rc == STATUS_SUCCESS;
  1849. ++i)
  1850. {
  1851. @@ -1432,12 +1481,12 @@
  1852. if (((rc = EvalPackageElement(ppkgobj, i, &data)) ==
  1853. STATUS_SUCCESS) &&
  1854. (data.dwDataType == OBJTYPE_INTDATA) &&
  1855. - MatchData((ULONG)data.uipDataValue,
  1856. - (ULONG)pterm->pdataArgs[1].uipDataValue,
  1857. - (ULONG)pterm->pdataArgs[2].uipDataValue) &&
  1858. - MatchData((ULONG)data.uipDataValue,
  1859. - (ULONG)pterm->pdataArgs[3].uipDataValue,
  1860. - (ULONG)pterm->pdataArgs[4].uipDataValue))
  1861. + MatchData((ULONG)data.dwDataValue,
  1862. + (ULONG)pterm->pdataArgs[1].dwDataValue,
  1863. + (ULONG)pterm->pdataArgs[2].dwDataValue) &&
  1864. + MatchData((ULONG)data.dwDataValue,
  1865. + (ULONG)pterm->pdataArgs[3].dwDataValue,
  1866. + (ULONG)pterm->pdataArgs[4].dwDataValue))
  1867. {
  1868. break;
  1869. }
  1870. @@ -1446,12 +1495,12 @@
  1871. if (rc == STATUS_SUCCESS)
  1872. {
  1873. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1874. - pterm->pdataResult->uipDataValue = (ULONG_PTR)i;
  1875. + pterm->pdataResult->dwDataValue = (ULONG)i;
  1876. }
  1877. else if (rc == AMLIERR_INDEX_TOO_BIG)
  1878. {
  1879. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1880. - pterm->pdataResult->uipDataValue = DATAVALUE_ONES;
  1881. + pterm->pdataResult->dwDataValue = DATAVALUE_ONES;
  1882. rc = STATUS_SUCCESS;
  1883. }
  1884.  
  1885. @@ -1538,16 +1587,20 @@
  1886. TRACENAME("OSInterface")
  1887. NTSTATUS rc;
  1888. // Add future OS strings here.
  1889. - char Win2000[] = "Windows 2000";
  1890. - char Win2001[] = "Windows 2001";
  1891. - char Win2001SP1[] = "Windows 2001 SP1";
  1892. - char Win2001_1[] = "Windows 2001.1";
  1893. + char Win2000[] = "Windows 2000";
  1894. + char Win2001[] = "Windows 2001";
  1895. + char Win2001SP1[] = "Windows 2001 SP1";
  1896. + char Win2001_1[] = "Windows 2001.1";
  1897. + char Win2001SP2[] = "Windows 2001 SP2";
  1898. + char Win2001_1SP1[] = "Windows 2001.1 SP1";
  1899.  
  1900. char* SupportedOSList[] = {
  1901. Win2000,
  1902. Win2001,
  1903. Win2001SP1,
  1904. - Win2001_1
  1905. + Win2001_1,
  1906. + Win2001SP2,
  1907. + Win2001_1SP1
  1908. };
  1909. ULONG ListSize = sizeof(SupportedOSList) / sizeof(char*);
  1910. ULONG i = 0;
  1911. @@ -1560,13 +1613,13 @@
  1912. if ((rc = ValidateArgTypes((pterm->pdataArgs)->pdataAlias, "Z")) == STATUS_SUCCESS)
  1913. {
  1914. pterm->pdataResult->dwDataType = OBJTYPE_INTDATA;
  1915. - pterm->pdataResult->uipDataValue = DATAVALUE_ZERO;
  1916. + pterm->pdataResult->dwDataValue = DATAVALUE_ZERO;
  1917.  
  1918. for(i=0; i<ListSize; i++)
  1919. {
  1920. if(STRCMPI(SupportedOSList[i], (pterm->pdataArgs)->pdataAlias->pbDataBuff) == 0)
  1921. {
  1922. - pterm->pdataResult->uipDataValue = DATAVALUE_ONES;
  1923. + pterm->pdataResult->dwDataValue = DATAVALUE_ONES;
  1924. rc = STATUS_SUCCESS;
  1925.  
  1926. //
  1927. @@ -1575,8 +1628,8 @@
  1928. // 1 == Windows 2001
  1929. // 2 == Windows 2001 SP1
  1930. // 3 == Windows 2001.1
  1931. - // .
  1932. - // .
  1933. + // 4 == Windows 2001 SP2
  1934. + // 5 == Windows 2001.1 SP1
  1935. //
  1936. if(gdwHighestOSVerQueried < i)
  1937. {
  1938. @@ -1594,3 +1647,842 @@
  1939. } //OSInterface
  1940.  
  1941.  
  1942. +
  1943. +///////////////////////////////////////////////
  1944. +// ACPI 2.0
  1945. +
  1946. +NTSTATUS LOCAL ConvertToInteger(POBJDATA In, POBJDATA Out) {
  1947. + ULONG dwDataLen;
  1948. + OBJDATA data;
  1949. +
  1950. + MEMZERO(&data, sizeof(data));
  1951. + data.dwDataType = OBJTYPE_INTDATA;
  1952. + switch (In->dwDataType) {
  1953. + case OBJTYPE_INTDATA:
  1954. + data.dwDataValue = In->dwDataValue;
  1955. +
  1956. + FreeDataBuffs(Out, 1);
  1957. + MEMCPY(Out, &data, sizeof(data));
  1958. + return STATUS_SUCCESS;
  1959. + break;
  1960. + case OBJTYPE_STRDATA:
  1961. + data.dwDataValue = StrToUL((PSZ)In->pbDataBuff, NULL, 0);
  1962. +
  1963. + FreeDataBuffs(Out, 1);
  1964. + MEMCPY(Out, &data, sizeof(data));
  1965. + return STATUS_SUCCESS;
  1966. + break;
  1967. + case OBJTYPE_BUFFDATA:
  1968. + dwDataLen = In->dwDataLen;
  1969. + if (dwDataLen > 4) // 8 - int64
  1970. + dwDataLen = 4;
  1971. + MEMCPY(&data.dwDataValue, In->pbDataBuff, dwDataLen);
  1972. +
  1973. + FreeDataBuffs(Out, 1);
  1974. + MEMCPY(Out, &data, sizeof(data));
  1975. + return STATUS_SUCCESS;
  1976. + break;
  1977. + default:
  1978. + return AMLIERR_UNEXPECTED_OBJTYPE;
  1979. + break;
  1980. + }
  1981. +}
  1982. +
  1983. +
  1984. +NTSTATUS LOCAL ToInteger(PCTXT pctxt, PTERM pterm)
  1985. +{
  1986. + NTSTATUS rc = STATUS_SUCCESS;
  1987. + POBJDATA pdata;
  1988. + TRACENAME("TOINTEGER")
  1989. + ENTER(2, ("ToInteger(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  1990. +
  1991. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "D")) == STATUS_SUCCESS) &&
  1992. + ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  1993. + if ((rc = ConvertToInteger(pterm->pdataArgs, pterm->pdataResult)) == STATUS_SUCCESS)
  1994. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  1995. + }
  1996. +
  1997. + EXIT(2, ("ToInteger=%x (Result=%x)\n", rc, pterm->pdataResult));
  1998. + return rc;
  1999. +}
  2000. +
  2001. +
  2002. +char HTOALookupTable[]="0123456789ABCDEF";
  2003. +
  2004. +
  2005. +NTSTATUS LOCAL ToHexString(PCTXT pctxt, PTERM pterm)
  2006. +{
  2007. + NTSTATUS rc = STATUS_SUCCESS;
  2008. + POBJDATA pdata;
  2009. + int StrLen;
  2010. + POBJDATA In = pterm->pdataArgs;
  2011. + POBJDATA Out = pterm->pdataResult;
  2012. + ULONG int32;
  2013. + ULONG SrcIdx;
  2014. + int i;
  2015. + UCHAR pair;
  2016. + TRACENAME("TOHEXSTRING")
  2017. + ENTER(2, ("ToHexString(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2018. +
  2019. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "D")) == STATUS_SUCCESS) &&
  2020. + ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  2021. + StrLen = 2;
  2022. + Out->dwDataType = OBJTYPE_STRDATA;
  2023. + switch (In->dwDataType) {
  2024. + case OBJTYPE_INTDATA:
  2025. + int32 = In->dwDataValue;
  2026. + do {
  2027. + int32 >>= 4;
  2028. + ++StrLen;
  2029. + } while (int32);
  2030. +
  2031. + Out->dwDataLen = StrLen + 1;
  2032. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2033. +
  2034. + if (Out->pbDataBuff == NULL) {
  2035. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2036. + ("ToHexString: failed to allocate target buffer"));
  2037. + } else {
  2038. + Out->pbDataBuff[0] = '0';
  2039. + Out->pbDataBuff[1] = 'x';
  2040. + int32 = In->dwDataValue;
  2041. + for (i = StrLen - 1; i >= 2; --i) {
  2042. + Out->pbDataBuff[i] = HTOALookupTable[int32 & 0xF];
  2043. + int32 >>= 4;
  2044. + }
  2045. +
  2046. + Out->pbDataBuff[Out->dwDataLen - 1] = '\0'; // ending zero
  2047. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2048. + }
  2049. + break;
  2050. + case OBJTYPE_STRDATA:
  2051. + Out->dwDataLen = In->dwDataLen;
  2052. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2053. +
  2054. + if (Out->pbDataBuff == NULL) {
  2055. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2056. + ("ToHexString: failed to allocate target buffer"));
  2057. + } else {
  2058. + MEMCPY(Out->pbDataBuff, In->pbDataBuff, Out->dwDataLen);
  2059. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2060. + }
  2061. + break;
  2062. + case OBJTYPE_BUFFDATA:
  2063. + Out->dwDataLen = 5 * In->dwDataLen;
  2064. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2065. +
  2066. + if (Out->pbDataBuff == NULL) {
  2067. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2068. + ("ToHexString: failed to allocate target buffer"));
  2069. + } else {
  2070. + i = 0;
  2071. + if (In->dwDataLen) {
  2072. + for (SrcIdx = 0; SrcIdx < In->dwDataLen; SrcIdx++) {
  2073. + Out->pbDataBuff[i] = '0';
  2074. + Out->pbDataBuff[i+1] = 'x';
  2075. + pair = In->pbDataBuff[SrcIdx];
  2076. + Out->pbDataBuff[i+2] = HTOALookupTable[pair >> 4];
  2077. + Out->pbDataBuff[i+3] = HTOALookupTable[pair & 0xF];
  2078. + Out->pbDataBuff[i+4] = ',';
  2079. + i += 5;
  2080. + }
  2081. + }
  2082. +
  2083. + Out->pbDataBuff[Out->dwDataLen - 1] = '\0'; // ending zero
  2084. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2085. + }
  2086. + break;
  2087. + default:
  2088. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2089. + ("ToHexString: invalid arg0 type"));
  2090. + break;
  2091. + }
  2092. + }
  2093. +
  2094. + EXIT(2, ("ToHexString=%x (Result=%x)\n", rc, pterm->pdataResult));
  2095. + return rc;
  2096. +}
  2097. +
  2098. +
  2099. +NTSTATUS LOCAL ConvertToBuffer(POBJDATA In, POBJDATA Out) {
  2100. + OBJDATA data;
  2101. + int Len;
  2102. + int i;
  2103. + ULONG int32;
  2104. + NTSTATUS rc = STATUS_SUCCESS;
  2105. +
  2106. + MEMZERO(&data, sizeof(data));
  2107. + data.dwDataType = OBJTYPE_BUFFDATA;
  2108. + switch (In->dwDataType) {
  2109. + case OBJTYPE_INTDATA:
  2110. + int32 = In->dwDataValue;
  2111. + Len = 4;
  2112. +
  2113. + data.dwDataLen = Len;
  2114. + data.pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Len);
  2115. + if (data.pbDataBuff == NULL) {
  2116. + rc = AMLIERR_OUT_OF_MEM;
  2117. + } else {
  2118. + for (i = 0; i < Len; i++) {
  2119. + data.pbDataBuff[i] = (UCHAR) int32;
  2120. + int32 >>= 8;
  2121. + }
  2122. +
  2123. + FreeDataBuffs(Out, 1);
  2124. + MEMCPY(Out, &data, sizeof(data));
  2125. + }
  2126. + break;
  2127. + case OBJTYPE_STRDATA:
  2128. + case OBJTYPE_BUFFDATA:
  2129. + Len = In->dwDataLen;
  2130. + data.dwDataLen = Len;
  2131. +
  2132. + data.pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Len);
  2133. + if (data.pbDataBuff == NULL) {
  2134. + rc = AMLIERR_OUT_OF_MEM;
  2135. + } else {
  2136. + MEMCPY(data.pbDataBuff, In->pbDataBuff, Len);
  2137. +
  2138. + FreeDataBuffs(Out, 1);
  2139. + MEMCPY(Out, &data, sizeof(data));
  2140. + }
  2141. + break;
  2142. + default:
  2143. + rc = AMLIERR_UNEXPECTED_OBJTYPE;
  2144. + break;
  2145. + }
  2146. +
  2147. + return rc;
  2148. +}
  2149. +
  2150. +
  2151. +NTSTATUS LOCAL ToBuffer(PCTXT pctxt, PTERM pterm)
  2152. +{
  2153. + NTSTATUS rc = STATUS_SUCCESS;
  2154. + POBJDATA pdata;
  2155. + TRACENAME("TOBUFFER")
  2156. + ENTER(2, ("ToBuffer(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2157. +
  2158. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "D")) == STATUS_SUCCESS) &&
  2159. + ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  2160. + if ((rc = ConvertToBuffer(pterm->pdataArgs, pterm->pdataResult)) == STATUS_SUCCESS)
  2161. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2162. + }
  2163. +
  2164. + EXIT(2, ("ToBuffer=%x (Result=%x)\n", rc, pterm->pdataResult));
  2165. + return rc;
  2166. +}
  2167. +
  2168. +
  2169. +NTSTATUS LOCAL ToDecimalString(PCTXT pctxt, PTERM pterm)
  2170. +{
  2171. + NTSTATUS rc = STATUS_SUCCESS;
  2172. + POBJDATA pdata;
  2173. + POBJDATA In = pterm->pdataArgs;
  2174. + POBJDATA Out = pterm->pdataResult;
  2175. + ULONG int32;
  2176. + ULONG StrLen;
  2177. + int SrcBufLen;
  2178. + ULONG SrcIdx;
  2179. + int i;
  2180. + int j;
  2181. + UCHAR number;
  2182. + TRACENAME("TODECSTRING")
  2183. + ENTER(2, ("ToDecimalString(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2184. +
  2185. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "D")) == STATUS_SUCCESS) &&
  2186. + ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  2187. + Out->dwDataType = OBJTYPE_STRDATA;
  2188. + switch (In->dwDataType) {
  2189. + case OBJTYPE_INTDATA:
  2190. + int32 = In->dwDataValue;
  2191. + StrLen = 0;
  2192. + do {
  2193. + int32 /= 10;
  2194. + ++StrLen;
  2195. + } while (int32);
  2196. +
  2197. + Out->dwDataLen = StrLen + 1;
  2198. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2199. +
  2200. + if (Out->pbDataBuff == NULL) {
  2201. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2202. + ("ToDecimalString: failed to allocate target buffer"));
  2203. + } else {
  2204. + int32 = In->dwDataValue;
  2205. + if (StrLen >= 1) {
  2206. + for (i = StrLen - 1; i >= 0; --i) {
  2207. + Out->pbDataBuff[i] = HTOALookupTable[int32 % 10];
  2208. + int32 /= 10;
  2209. + }
  2210. + }
  2211. +
  2212. + Out->pbDataBuff[Out->dwDataLen - 1] = '\0'; // ending zero
  2213. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2214. + }
  2215. + break;
  2216. + case OBJTYPE_STRDATA:
  2217. + Out->dwDataLen = In->dwDataLen;
  2218. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2219. +
  2220. + if (Out->pbDataBuff == NULL) {
  2221. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2222. + ("ToDecimalString: failed to allocate target buffer"));
  2223. + } else {
  2224. + MEMCPY(Out->pbDataBuff, In->pbDataBuff, Out->dwDataLen);
  2225. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2226. + }
  2227. + break;
  2228. + case OBJTYPE_BUFFDATA:
  2229. + SrcBufLen = In->dwDataLen;
  2230. + StrLen = SrcBufLen - 1;
  2231. + if (SrcBufLen) {
  2232. + for (i = 0; i < SrcBufLen; i++) {
  2233. + number = In->pbDataBuff[i];
  2234. + if (number >= 10) {
  2235. + if (number >= 100)
  2236. + StrLen += 3;
  2237. + else
  2238. + StrLen += 2;
  2239. + } else {
  2240. + StrLen++;
  2241. + }
  2242. + }
  2243. + }
  2244. +
  2245. + Out->dwDataLen = StrLen + 1;
  2246. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, Out->dwDataLen);
  2247. +
  2248. + if (Out->pbDataBuff == NULL) {
  2249. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2250. + ("ToDecimalString: failed to allocate target buffer"));
  2251. + } else {
  2252. + j = 0; // result buffer index
  2253. + for ( SrcIdx = 0; SrcIdx < In->dwDataLen; SrcIdx++ ) {
  2254. + number = In->pbDataBuff[SrcIdx];
  2255. + if (number >= 10) {
  2256. + if (number >= 100)
  2257. + Out->pbDataBuff[j++] = HTOALookupTable[(number / 100) % 10]; // 2xx
  2258. +
  2259. + Out->pbDataBuff[j++] = HTOALookupTable[(number / 10) % 10]; // x2x
  2260. + Out->pbDataBuff[j++] = HTOALookupTable[number % 10]; // xx2
  2261. + } else {
  2262. + Out->pbDataBuff[j++] = HTOALookupTable[number];
  2263. + }
  2264. + Out->pbDataBuff[j++] = ',';
  2265. + }
  2266. +
  2267. + Out->pbDataBuff[Out->dwDataLen - 1] = '\0'; // ending zero
  2268. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2269. + }
  2270. + break;
  2271. + default:
  2272. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2273. + ("ToDecimalString: invalid arg0 type"));
  2274. + break;
  2275. + }
  2276. + }
  2277. +
  2278. + EXIT(2, ("ToDecimalString=%x (Result=%x)\n", rc, pterm->pdataResult));
  2279. + return rc;
  2280. +}
  2281. +
  2282. +
  2283. +NTSTATUS LOCAL CreateQWordField(PCTXT pctxt, PTERM pterm)
  2284. +{
  2285. + TRACENAME("CREATEQWORDFIELD")
  2286. + NTSTATUS rc = STATUS_SUCCESS;
  2287. + PBUFFFIELDOBJ pbf;
  2288. + ENTER(2, ("CreateQWordField(pctxt=%x,pbOp=%x,pterm=%x)\n",
  2289. + pctxt, pctxt->pbOp, pterm));
  2290. +
  2291. + if ((rc = CreateXField(pctxt, pterm, &pterm->pdataArgs[2], &pbf)) ==
  2292. + STATUS_SUCCESS)
  2293. + {
  2294. + pbf->FieldDesc.dwByteOffset = (ULONG)pterm->pdataArgs[1].dwDataValue;
  2295. + pbf->FieldDesc.dwStartBitPos = 0;
  2296. + pbf->FieldDesc.dwNumBits = 8*sizeof(ULONG); // 8*sizeof(ULONG64) ACPI 2.0
  2297. + pbf->FieldDesc.dwFieldFlags = ACCTYPE_DWORD; // ACCTYPE_QWORD ACPI 2.0
  2298. + }
  2299. +
  2300. + EXIT(2, ("CreateQWordField=%x (pnsObj=%x)\n", rc, pterm->pnsObj));
  2301. + return rc;
  2302. +}
  2303. +
  2304. +
  2305. +UCHAR LOCAL ComputeDataChkSum(UCHAR *Buffer, int Len) {
  2306. + UCHAR checksum = 0;
  2307. +
  2308. + for ( ; Len; --Len ) {
  2309. + checksum += *Buffer;
  2310. + Buffer++;
  2311. + }
  2312. +
  2313. + return -(checksum);
  2314. +}
  2315. +
  2316. +
  2317. +NTSTATUS LOCAL ConcatenateResTemplate(PCTXT pctxt, PTERM pterm)
  2318. +{
  2319. + NTSTATUS rc = STATUS_SUCCESS;
  2320. + POBJDATA pdata;
  2321. + POBJDATA In = pterm->pdataArgs;
  2322. + POBJDATA Out = pterm->pdataResult;
  2323. + ULONG i,j;
  2324. + ULONG NewLength;
  2325. + TRACENAME("CONCATENATERESTEMPLATE")
  2326. + ENTER(2, ("ConcatenateResTemplate(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2327. +
  2328. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "BB")) == STATUS_SUCCESS) &&
  2329. + ((rc = ValidateTarget(&pterm->pdataArgs[2], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  2330. + if (In[0].dwDataLen <= 1 || In[1].dwDataLen <= 1 ) {
  2331. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2332. + ("ConcatenateResTemplate: arg0 or arg1 has length <= 1"));
  2333. + } else {
  2334. + Out->dwDataType = OBJTYPE_BUFFDATA;
  2335. + NewLength = In[0].dwDataLen + In[1].dwDataLen - 2;
  2336. + Out->dwDataLen = NewLength;
  2337. +
  2338. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, NewLength);
  2339. + if (Out->pbDataBuff == NULL) {
  2340. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2341. + ("ConcatenateResTemplate: failed to allocate target buffer"));
  2342. + } else {
  2343. + j = 0;
  2344. +
  2345. + i = 0;
  2346. + if (In[0].dwDataLen != 2) {
  2347. + do {
  2348. + Out->pbDataBuff[j++] = In[0].pbDataBuff[i++];
  2349. + } while (i < In[0].dwDataLen - 2);
  2350. + }
  2351. +
  2352. + i = 0;
  2353. + if (In[1].dwDataLen != 2) {
  2354. + do {
  2355. + Out->pbDataBuff[j++] = In[1].pbDataBuff[i++];
  2356. + } while (i < In[1].dwDataLen - 2);
  2357. + }
  2358. +
  2359. + Out->pbDataBuff[j++] = 0x79; //EndTag
  2360. + Out->pbDataBuff[j] = ComputeDataChkSum(Out->pbDataBuff, NewLength - 1);
  2361. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2362. + }
  2363. +
  2364. + }
  2365. + }
  2366. +
  2367. + EXIT(2, ("ConcatenateResTemplate=%x (Result=%x)\n", rc, pterm->pdataResult));
  2368. + return rc;
  2369. +}
  2370. +
  2371. +
  2372. +size_t LOCAL strnlen(const char *Str, size_t MaxCount)
  2373. +{
  2374. + size_t result;
  2375. +
  2376. + for (result = 0; result < MaxCount; ++Str) {
  2377. + if (!*Str)
  2378. + break;
  2379. +
  2380. + result++;
  2381. + }
  2382. + return result;
  2383. +}
  2384. +
  2385. +
  2386. +#define STRSAFE_MAX_CCH 2147483647
  2387. +
  2388. +// ntstrsafe.c
  2389. +NTSTATUS RtlStringVPrintfWorkerA(char* pszDest, size_t cchDest, const char* pszFormat, va_list argList)
  2390. +{
  2391. + NTSTATUS status = STATUS_SUCCESS;
  2392. +
  2393. + if (cchDest == 0)
  2394. + {
  2395. + // can not null terminate a zero-byte dest buffer
  2396. + status = STATUS_INVALID_PARAMETER;
  2397. + }
  2398. + else
  2399. + {
  2400. + int iRet;
  2401. + size_t cchMax;
  2402. +
  2403. + // leave the last space for the null terminator
  2404. + cchMax = cchDest - 1;
  2405. +
  2406. + iRet = _vsnprintf(pszDest, cchMax, pszFormat, argList);
  2407. +
  2408. + if ((iRet < 0) || (((size_t)iRet) > cchMax))
  2409. + {
  2410. + // need to null terminate the string
  2411. + pszDest += cchMax;
  2412. + *pszDest = '\0';
  2413. +
  2414. + // we have truncated pszDest
  2415. + status = STATUS_BUFFER_OVERFLOW;
  2416. + }
  2417. + else if (((size_t)iRet) == cchMax)
  2418. + {
  2419. + // need to null terminate the string
  2420. + pszDest += cchMax;
  2421. + *pszDest = '\0';
  2422. + }
  2423. + }
  2424. +
  2425. + return status;
  2426. +}
  2427. +
  2428. +
  2429. +// ntstrsafe.c
  2430. +NTSTATUS RtlStringCchPrintfA(char* pszDest, size_t cchDest, const char* pszFormat, ...)
  2431. +{
  2432. + NTSTATUS status;
  2433. +
  2434. + if (cchDest > STRSAFE_MAX_CCH)
  2435. + {
  2436. + status = STATUS_INVALID_PARAMETER;
  2437. + }
  2438. + else
  2439. + {
  2440. + va_list argList;
  2441. +
  2442. + va_start(argList, pszFormat);
  2443. +
  2444. + status = RtlStringVPrintfWorkerA(pszDest, cchDest, pszFormat, argList);
  2445. +
  2446. + va_end(argList);
  2447. + }
  2448. +
  2449. + return status;
  2450. +}
  2451. +
  2452. +
  2453. +NTSTATUS LOCAL ConvertToString(POBJDATA In, ULONG MaxLen, POBJDATA Out)
  2454. +{
  2455. + NTSTATUS rc = STATUS_SUCCESS;
  2456. + ULONG StrLen = MaxLen;
  2457. + char TmpBuf[9]; // 17 ACPI 2.0
  2458. + OBJDATA data;
  2459. + ULONG BufLen;
  2460. + ULONG InStrLen;
  2461. +
  2462. + MEMZERO(&TmpBuf, sizeof(TmpBuf));
  2463. + MEMZERO(&data, sizeof(data));
  2464. + data.dwDataType = OBJTYPE_STRDATA;
  2465. +
  2466. + switch (In->dwDataType) {
  2467. + case OBJTYPE_INTDATA:
  2468. + BufLen = 9;
  2469. + RtlStringCchPrintfA(TmpBuf, 9, "%x", In->dwDataValue);
  2470. + if (!MaxLen || MaxLen >= BufLen)
  2471. + StrLen = strnlen(TmpBuf, BufLen);
  2472. + data.dwDataLen = StrLen + 1;
  2473. +
  2474. + data.pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, data.dwDataLen);
  2475. + if (data.pbDataBuff == NULL) {
  2476. + rc = STATUS_INSUFFICIENT_RESOURCES;
  2477. + } else {
  2478. + MEMCPY(data.pbDataBuff, TmpBuf, data.dwDataLen);
  2479. + data.pbDataBuff[data.dwDataLen - 1] = '\0'; // ending zero
  2480. + FreeDataBuffs(Out, 1);
  2481. + MEMCPY(Out, &data, sizeof(data));
  2482. + }
  2483. + break;
  2484. + case OBJTYPE_STRDATA:
  2485. + if (MaxLen > In->dwDataLen - 1)
  2486. + rc = STATUS_ACPI_FATAL;
  2487. + else {
  2488. + if (!MaxLen)
  2489. + StrLen = In->dwDataLen - 1;
  2490. + data.dwDataLen = StrLen + 1;
  2491. +
  2492. + data.pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, data.dwDataLen);
  2493. + if (data.pbDataBuff == NULL) {
  2494. + rc = STATUS_INSUFFICIENT_RESOURCES;
  2495. + } else {
  2496. + MEMCPY(data.pbDataBuff, In->pbDataBuff, data.dwDataLen);
  2497. + data.pbDataBuff[data.dwDataLen - 1] = '\0'; // ending zero
  2498. + FreeDataBuffs(Out, 1);
  2499. + MEMCPY(Out, &data, sizeof(data));
  2500. + }
  2501. + }
  2502. + break;
  2503. + case OBJTYPE_BUFFDATA:
  2504. + InStrLen = In->dwDataLen;
  2505. + if (InStrLen >= 201)
  2506. + InStrLen = 201;
  2507. + if (!MaxLen) {
  2508. + StrLen = strnlen((PCHAR)In->pbDataBuff, InStrLen);
  2509. + if (StrLen == InStrLen)
  2510. + return STATUS_INVALID_BUFFER_SIZE;
  2511. + } else {
  2512. + if (MaxLen > InStrLen || MaxLen > 200)
  2513. + return STATUS_ACPI_FATAL;
  2514. + }
  2515. +
  2516. + data.dwDataLen = StrLen + 1;
  2517. + data.pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, data.dwDataLen);
  2518. + if (data.pbDataBuff == NULL) {
  2519. + rc = STATUS_INSUFFICIENT_RESOURCES;
  2520. + } else {
  2521. + MEMCPY(data.pbDataBuff, In->pbDataBuff, data.dwDataLen - 1);
  2522. + data.pbDataBuff[data.dwDataLen - 1] = '\0'; // ending zero
  2523. + FreeDataBuffs(Out, 1);
  2524. + MEMCPY(Out, &data, sizeof(data));
  2525. + }
  2526. + break;
  2527. + default:
  2528. + rc = STATUS_ACPI_INVALID_OBJTYPE;
  2529. + }
  2530. +
  2531. + return rc;
  2532. +}
  2533. +
  2534. +
  2535. +NTSTATUS LOCAL ToString(PCTXT pctxt, PTERM pterm)
  2536. +{
  2537. + NTSTATUS rc = STATUS_SUCCESS;
  2538. + POBJDATA pdata;
  2539. + ULONG MaxLen;
  2540. + TRACENAME("TOSTRING")
  2541. + ENTER(2, ("ToString(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2542. +
  2543. + //// stop
  2544. + //__asm {
  2545. + // L1: jmp L1
  2546. + //}
  2547. + //// unstop
  2548. +
  2549. + if ( pterm->icArgs == 2 &&
  2550. + ((rc = ValidateArgTypes(pterm->pdataArgs, "B")) == STATUS_SUCCESS) &&
  2551. + ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATA, &pdata)) == STATUS_SUCCESS) ) {
  2552. + rc = ConvertToString(pterm->pdataArgs, 0, pterm->pdataResult);
  2553. +
  2554. + switch (rc) {
  2555. + case STATUS_INSUFFICIENT_RESOURCES:
  2556. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2557. + ("ToString: failed to allocate target buffer"));
  2558. + break;
  2559. + case STATUS_INVALID_BUFFER_SIZE:
  2560. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2561. + ("ToString: buffer length exceeds maximum value"));
  2562. + break;
  2563. + case STATUS_ACPI_FATAL:
  2564. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2565. + ("ToString: length specified exceeds input buffer length or maximum value"));
  2566. + break;
  2567. + }
  2568. + } else
  2569. + if ( pterm->icArgs == 3 &&
  2570. + ((rc = ValidateArgTypes(pterm->pdataArgs, "BI")) == STATUS_SUCCESS) &&
  2571. + ((rc = ValidateTarget(&pterm->pdataArgs[2], OBJTYPE_DATA, &pdata)) == STATUS_SUCCESS) ) {
  2572. + MaxLen = pterm->pdataArgs[1].dwDataValue;
  2573. + if (MaxLen != 0 &&
  2574. + MaxLen != 0xFFFFFFFF) {
  2575. + rc = ConvertToString(pterm->pdataArgs, MaxLen, pterm->pdataResult);
  2576. + } else {
  2577. + rc = ConvertToString(pterm->pdataArgs, 0, pterm->pdataResult);
  2578. + }
  2579. +
  2580. + switch (rc) {
  2581. + case STATUS_INSUFFICIENT_RESOURCES:
  2582. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2583. + ("ToString: failed to allocate target buffer"));
  2584. + break;
  2585. + case STATUS_INVALID_BUFFER_SIZE:
  2586. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2587. + ("ToString: buffer length exceeds maximum value"));
  2588. + break;
  2589. + case STATUS_ACPI_FATAL:
  2590. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2591. + ("ToString: length specified exceeds input buffer length or maximum value"));
  2592. + break;
  2593. + }
  2594. + } else {
  2595. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2596. + ("ToString: invalid # of arguments: %x", pterm->icArgs));
  2597. + }
  2598. +
  2599. + EXIT(2, ("ToString=%x (Result=%x)\n", rc, pterm->pdataResult));
  2600. + return rc;
  2601. +}
  2602. +
  2603. +
  2604. +NTSTATUS LOCAL CopyObject(PCTXT pctxt, PTERM pterm)
  2605. +{
  2606. + NTSTATUS rc = STATUS_SUCCESS;
  2607. + POBJDATA In = pterm->pdataArgs;
  2608. + POBJDATA Out = pterm->pdataResult;
  2609. + POBJDATA pdata;
  2610. + BOOLEAN bWrite;
  2611. + TRACENAME("COPYOBJECT")
  2612. + ENTER(2, ("CopyObject(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2613. +
  2614. + bWrite = FALSE;
  2615. + rc = ValidateTarget(&pterm->pdataArgs[1], 0, &pdata);
  2616. + if (rc) {
  2617. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2618. + ("CopyObject: failed because target object is not a supername"));
  2619. + } else {
  2620. + if (MatchObjType(pdata->dwDataType, OBJTYPE_DATAFIELD)) {
  2621. + if (In->dwDataType != OBJTYPE_INTDATA &&
  2622. + In->dwDataType != OBJTYPE_BUFFDATA)
  2623. + {
  2624. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2625. + ("CopyObject: Only Integer and Buffer data can be copied to a Field unit or Buffer Field"));
  2626. + goto Exit;
  2627. + }
  2628. + bWrite = TRUE;
  2629. + }
  2630. +
  2631. + MoveObjData(Out, In);
  2632. + if (bWrite)
  2633. + rc = WriteObject(pctxt, pdata, Out);
  2634. + else
  2635. + rc = DupObjData(gpheapGlobal, pdata, Out);
  2636. +
  2637. + if (rc) {
  2638. + AMLI_LOGERR(rc,
  2639. + ("CopyObject: failed to duplicate objdata"));
  2640. + }
  2641. + }
  2642. +
  2643. +Exit:
  2644. + EXIT(2, ("CopyObject=%x (type=%s,value=%I64x,buff=%x,len=%x)\n",
  2645. + rc,
  2646. + GetObjectTypeName(In->dwDataType),
  2647. + In->dwDataValue,
  2648. + In->pbDataBuff,
  2649. + In->dwDataLen));
  2650. + return rc;
  2651. +}
  2652. +
  2653. +
  2654. +NTSTATUS LOCAL MidString(PCTXT pctxt, PTERM pterm)
  2655. +{
  2656. + NTSTATUS rc = STATUS_SUCCESS;
  2657. + POBJDATA In = pterm->pdataArgs;
  2658. + POBJDATA Out = pterm->pdataResult;
  2659. + POBJDATA pdata;
  2660. + ULONG DataLen, NewLength;
  2661. + ULONG MidIndex, MidSize;
  2662. + ULONG i,j;
  2663. + TRACENAME("MID")
  2664. + ENTER(2, ("MidString(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2665. +
  2666. + if (((rc = ValidateArgTypes(pterm->pdataArgs, "TII")) == STATUS_SUCCESS) &&
  2667. + ((rc = ValidateTarget(&pterm->pdataArgs[3], OBJTYPE_DATAOBJ, &pdata)) == STATUS_SUCCESS)) {
  2668. + if (In->dwDataType > OBJTYPE_BUFFDATA) {
  2669. + rc = AMLI_LOGERR(AMLIERR_FATAL,
  2670. + ("Mid: invalid arg0 type"));
  2671. + } else {
  2672. + Out->dwDataType = In->dwDataType;
  2673. + DataLen = In->dwDataLen;
  2674. + MidIndex = In[1].dwDataValue;
  2675. + MidSize = In[2].dwDataValue;
  2676. + if (MidIndex < DataLen) {
  2677. + NewLength = MidSize;
  2678. +
  2679. + if (Out->dwDataType == OBJTYPE_STRDATA) {
  2680. + DataLen--; // exclude ending zero
  2681. + if ((MidIndex + MidSize) > DataLen)
  2682. + NewLength = DataLen - MidIndex;
  2683. +
  2684. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, NewLength + 1);
  2685. + if (Out->pbDataBuff == NULL) {
  2686. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2687. + ("Mid: failed to allocate target string"));
  2688. + } else {
  2689. + Out->dwDataLen = NewLength + 1;
  2690. + Out->pbDataBuff[Out->dwDataLen - 1] = '\0'; // ending zero
  2691. + }
  2692. + } else {
  2693. + if ( Out->dwDataType != OBJTYPE_BUFFDATA ) {
  2694. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2695. + ("Mid: pterm->pdataResult->dwDataType != OBJTYPE_BUFFDATA"));
  2696. + } else {
  2697. + if ((MidIndex + MidSize) > DataLen)
  2698. + NewLength = DataLen - MidIndex;
  2699. +
  2700. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, NewLength);
  2701. + if (Out->pbDataBuff == NULL) {
  2702. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2703. + ("Mid: failed to allocate target string"));
  2704. + } else {
  2705. + Out->dwDataLen = NewLength;
  2706. + }
  2707. + }
  2708. + }
  2709. +
  2710. + if (!rc) {
  2711. + i = MidIndex;
  2712. + j = 0;
  2713. + if (NewLength) {
  2714. + do {
  2715. + Out->pbDataBuff[j++] = In->pbDataBuff[i++];
  2716. + } while (j < NewLength);
  2717. + }
  2718. +
  2719. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2720. + }
  2721. + } else { // MidIndex >= DataLen, set len = 0
  2722. + if (In->dwDataType == OBJTYPE_STRDATA) {
  2723. + Out->pbDataBuff = (PUCHAR) NEWSDOBJ(gpheapGlobal, 1);
  2724. + if (Out->pbDataBuff == NULL) {
  2725. + rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
  2726. + ("Mid: failed to allocate target string"));
  2727. + } else {
  2728. + Out->pbDataBuff[0] = '\0'; // ending zero
  2729. + Out->dwDataLen = 1;
  2730. +
  2731. + rc = WriteObject(pctxt, pdata, pterm->pdataResult);
  2732. + }
  2733. + }
  2734. + }
  2735. + }
  2736. + }
  2737. +
  2738. + EXIT(2, ("MidString=%x (Result=%x)\n", rc, pterm->pdataResult));
  2739. + return rc;
  2740. +}
  2741. +
  2742. +
  2743. +NTSTATUS LOCAL Continue(PCTXT pctxt, PTERM pterm)
  2744. +{
  2745. + TRACENAME("CONTINUE")
  2746. + ENTER(2, ("Continue(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
  2747. +
  2748. + ;
  2749. +
  2750. + EXIT(2, ("Continue=%x\n", AMLISTA_CONTINUEOP));
  2751. + return AMLISTA_CONTINUEOP;
  2752. +}
  2753. +
  2754. +
  2755. +NTSTATUS LOCAL Timer(PCTXT pctxt, PTERM pterm)
  2756. +{
  2757. + TRACENAME("TIMER")
  2758. + ENTER(2, ("Timer(pctxt=%x,pbOp=%x,pterm=%x, Querying for %s)\n",
  2759. + pctxt,
  2760. + pctxt->pbOp,
  2761. + pterm,
  2762. + pterm->pdataArgs->pbDataBuff));
  2763. +
  2764. + pterm->pdataResult->dwDataType = 1;
  2765. + pterm->pdataResult->dwDataValue = (ULONG)KeQueryInterruptTime();
  2766. +
  2767. + EXIT(2, ("Timer=%x (pnsObj=%x)\n", 0, pterm->pnsObj));
  2768. + return AMLIERR_NONE;
  2769. +}
  2770. +
  2771. +
  2772. + //// stop
  2773. + //__asm {
  2774. + // L1: jmp L1
  2775. + //}
  2776. + //// unstop
  2777. +
  2778. +
  2779. +// ACPI 2.0
  2780. +///////////////////////////////////////////////
  2781. Only in c:\ACPI\ACPI_W2003\Base\busdrv\acpi/driver: build.log
  2782. diff --strip-trailing-cr -ur ./driver/inc/aml.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/inc/aml.h"
  2783. --- ./driver/inc/aml.h 2003-02-26 17:15:50.000000000 +0500
  2784. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/inc/aml.h" 2022-03-31 19:42:16.000000000 +0500
  2785. @@ -90,6 +90,23 @@
  2786. #define OP_LEQ 0x93
  2787. #define OP_LG 0x94
  2788. #define OP_LL 0x95
  2789. +
  2790. +// Win7 ACPI 2.0
  2791. +#define OP_QWORD 0x0e
  2792. +#define OP_CONCATRESTMPL 0x84
  2793. +#define OP_MOD 0x85
  2794. +#define OP_QWORDFIELD 0x8f
  2795. +#define OP_TOBUFFER 0x96
  2796. +#define OP_TODECSTRING 0x97
  2797. +#define OP_TOHEXSTRING 0x98
  2798. +#define OP_TOINTEGER 0x99
  2799. +#define OP_TOSTRING 0x9c
  2800. +#define OP_COPYOBJECT 0x9d
  2801. +#define OP_MID 0x9e
  2802. +#define OP_CONTINUE 0x9f
  2803. +#define EXOP_TIMER 0x33
  2804. +#define OP_TIMER EXOP(EXOP_TIMER) // 5B33
  2805. +
  2806. #define OP_IF 0xa0
  2807. #define OP_ELSE 0xa1
  2808. #define OP_WHILE 0xa2
  2809. @@ -174,11 +191,11 @@
  2810. #define ACCATTRIB_MASK 0xff00
  2811.  
  2812. //
  2813. -// Returns 1, 2 or 4 for BYTE, WORD or DWORD respectively and returns 1 for
  2814. -// any other sizes.
  2815. -//
  2816. +// Returns 1, 2 or 4 for BYTE, WORD or DWORD respectively and returns 1 for any other sizes.
  2817. +// ACPI 2.0: return 8 for QWORD
  2818. +
  2819. #define ACCSIZE(f) (((((f) & ACCTYPE_MASK) >= ACCTYPE_BYTE) && \
  2820. - (((f) & ACCTYPE_MASK) <= ACCTYPE_DWORD))? \
  2821. + (((f) & ACCTYPE_MASK) <= ACCTYPE_QWORD))? \
  2822. (1 << (((f) & ACCTYPE_MASK) - 1)): 1)
  2823.  
  2824. /*** Operation region space
  2825. diff --strip-trailing-cr -ur ./driver/inc/amli.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/inc/amli.h"
  2826. --- ./driver/inc/amli.h 2003-02-26 17:15:50.000000000 +0500
  2827. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/inc/amli.h" 2022-04-04 04:03:08.000000000 +0500
  2828. @@ -194,7 +194,7 @@
  2829. union
  2830. {
  2831. ULONG dwDataValue; //data value of object 32-bit
  2832. - ULONG_PTR uipDataValue; //data value of object 64-bit
  2833. + //ULONG_PTR uipDataValue; //data value of object 64-bit
  2834. PNSOBJ pnsAlias; //alias ptr to base obj (OBJTYPE_OBJALIAS)
  2835. POBJDATA pdataAlias; //alias ptr to base obj (OBJTYPE_DATAALIAS)
  2836. PVOID powner; //object owner (OBJTYPE_DDBHANDLE)
  2837. diff --strip-trailing-cr -ur ./driver/nt/acpiosnt.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.c"
  2838. --- ./driver/nt/acpiosnt.c 2003-02-26 17:15:50.000000000 +0500
  2839. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.c" 2022-04-04 04:05:08.000000000 +0500
  2840. @@ -843,7 +843,7 @@
  2841. // register.
  2842. //
  2843. AMLIEvalPackageElement (pnsobj, 0, &data);
  2844. - sleepVals[state].Pm1aVal = (UCHAR)data.uipDataValue;
  2845. + sleepVals[state].Pm1aVal = (UCHAR)data.dwDataValue;
  2846. AMLIFreeDataBuffs(&data, 1);
  2847.  
  2848. //
  2849. @@ -851,7 +851,7 @@
  2850. // register
  2851. //
  2852. AMLIEvalPackageElement (pnsobj, 1, &data);
  2853. - sleepVals[state].Pm1bVal = (UCHAR)data.uipDataValue;
  2854. + sleepVals[state].Pm1bVal = (UCHAR)data.dwDataValue;
  2855. AMLIFreeDataBuffs(&data, 1);
  2856.  
  2857. }
  2858. @@ -932,7 +932,7 @@
  2859.  
  2860. RtlZeroMemory(&data, sizeof(data));
  2861. data.dwDataType = OBJTYPE_INTDATA;
  2862. - data.uipDataValue = InterruptModel;
  2863. + data.dwDataValue = InterruptModel;
  2864.  
  2865. status = AMLIEvalNameSpaceObject(pnsobj, NULL, 1, &data);
  2866. if (!NT_SUCCESS(status)) {
  2867. diff --strip-trailing-cr -ur ./driver/nt/acpiosnt.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.h"
  2868. --- ./driver/nt/acpiosnt.h 2003-02-26 17:15:50.000000000 +0500
  2869. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.h" 2022-04-04 04:42:36.000000000 +0500
  2870. @@ -389,6 +389,14 @@
  2871.  
  2872. } PROCESSOR_DEVICE_EXTENSION, *PPROCESSOR_DEVICE_EXTENSION;
  2873.  
  2874. +
  2875. +typedef struct { // Size=0x1c
  2876. + EXTENSION_WORKER WorkQueue; // Offset=0x0 Size=0xc
  2877. + unsigned char ArbitersNeeded; // Offset=0xc Size=0x1
  2878. + //unsigned char __align0[3]; // Offset=0xd Size=0x3
  2879. + ACPI_ARBITER_INSTANCE *Arbiters[3]; // Offset=0x10 Size=0xc
  2880. +} MODULE_DEVICE_EXTENSION;
  2881. +
  2882. //
  2883. // The Device Extension Structure
  2884. //
  2885. @@ -546,6 +554,9 @@
  2886. //
  2887. PROCESSOR_DEVICE_EXTENSION Processor;
  2888.  
  2889. +
  2890. + MODULE_DEVICE_EXTENSION Module;
  2891. +
  2892. };
  2893.  
  2894. //
  2895. @@ -801,5 +812,8 @@
  2896. #define ACPI_OVERRIDE_DISABLE_S1 0x00000010
  2897. #define ACPI_OVERRIDE_DISABLE_S2 0x00000020
  2898. #define ACPI_OVERRIDE_DISABLE_S3 0x00000040
  2899. -#define ACPI_OVERRIDE_DELL_MAXULONG_BUGCHECK 0x00000080
  2900. +#define ACPI_OVERRIDE_IGNORE_QWORD_LENGTH 0x00000080 //DELL_MAXULONG_BUGCHECK
  2901. +#define ACPI_OVERRIDE_GPE_PENDING 0x00000100
  2902. +#define ACPI_OVERRIDE_DEVICE_EXCLUSIVE 0x00000800
  2903. +#define ACPI_OVERRIDE_IGNORE_PCI_SEGMENTS 0x00001000
  2904. #endif
  2905. diff --strip-trailing-cr -ur ./driver/nt/acpiosnt.rc "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.rc"
  2906. --- ./driver/nt/acpiosnt.rc 2003-02-26 17:15:50.000000000 +0500
  2907. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/acpiosnt.rc" 2022-04-07 00:37:40.066406200 +0500
  2908. @@ -1,9 +1,11 @@
  2909. #include <windows.h>
  2910. #include <ntverp.h>
  2911. +#define VER_FILEVERSION 5,2,3790,7777
  2912. +#define VER_FILEVERSION_STR "5,2,3790,7777"
  2913.  
  2914. #define VER_FILETYPE VFT_DRV
  2915. #define VER_FILESUBTYPE VFT2_DRV_SYSTEM
  2916. -#define VER_FILEDESCRIPTION_STR "ACPI Driver for NT"
  2917. +#define VER_FILEDESCRIPTION_STR "ACPI 2.0 Driver for NT"
  2918. #define VER_INTERNALNAME_STR "ACPI.sys"
  2919. #define VER_ORIGINALFILENAME_STR "ACPI.sys"
  2920.  
  2921. diff --strip-trailing-cr -ur ./driver/nt/amd64/amd64_helpers.asm "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/amd64/amd64_helpers.asm"
  2922. --- ./driver/nt/amd64/amd64_helpers.asm 2022-04-16 11:04:41.014648400 +0500
  2923. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/amd64/amd64_helpers.asm" 2022-04-08 06:14:16.079101500 +0500
  2924. @@ -0,0 +1,5194 @@
  2925. +;macro
  2926. +EXTRNTHUNK macro Func
  2927. + IFNDEF __imp_&Func
  2928. + extrn __imp_&Func:PROC
  2929. + ;&Func equ <__imp_&Func>
  2930. + ENDIF
  2931. + endm
  2932. +
  2933. +callex macro Func
  2934. + call qword ptr [__imp_&Func]
  2935. + endm
  2936. +
  2937. +ALIGN16 macro
  2938. + align 16
  2939. + endm
  2940. +
  2941. +;export
  2942. +PUBLIC ACPIConvertStringDelimitation
  2943. +PUBLIC ReadSystemMem
  2944. +PUBLIC WriteSystemMem
  2945. +PUBLIC ReadBuffField
  2946. +PUBLIC ReadFieldObj
  2947. +PUBLIC WriteFieldObj
  2948. +PUBLIC AccessBaseField
  2949. +PUBLIC AccessFieldData
  2950. +PUBLIC ACPIGetConvertToHardwareID
  2951. +PUBLIC ACPIGetConvertToHardwareIDWide
  2952. +PUBLIC ACPIDevicePowerProcessPhase3
  2953. +PUBLIC OSNotifyDeviceCheck
  2954. +PUBLIC AcpiArblibReferenceArbiter
  2955. +PUBLIC AcpiArblibDereferenceArbiter
  2956. +PUBLIC AcpiArblibEjectInterface
  2957. +PUBLIC ACPIBusIrpQueryInterface
  2958. +PUBLIC AcpiPortarbAddAllocation
  2959. +PUBLIC AcpiArblibIsAliasedRangeAvailable
  2960. +PUBLIC AcpiPortarbFindSuitableRange
  2961. +PUBLIC AcpiArblibGetNextAlias
  2962. +PUBLIC AcpiPortarbBacktrackAllocation
  2963. +PUBLIC AcpiMemarbFindSuitableRange
  2964. +PUBLIC AcpiInitializePortArbiter
  2965. +PUBLIC AcpiInitializeMemoryArbiter
  2966. +PUBLIC AcpiArblibUnpackRequirement
  2967. +PUBLIC AcpiArblibPackResource
  2968. +PUBLIC AcpiArblibUnpackResource
  2969. +PUBLIC AcpiArblibScoreRequirement
  2970. +PUBLIC AcpiInitializeBusNumberArbiter
  2971. +PUBLIC AcpiArblibAllocateArbiterInstance
  2972. +PUBLIC AcpiArblibInitializeArbiter
  2973. +PUBLIC AcpiArblibCommitResources
  2974. +PUBLIC AcpiArblibFreeArbiterInstance
  2975. +PUBLIC ACPIBuildPdo
  2976. +PUBLIC PnpDeviceBiosResourcesToNtResources
  2977. +PUBLIC ACPIGetProcessorID
  2978. +PUBLIC ACPIGetProcessorIDWide
  2979. +PUBLIC ACPIRegReadEntireSimulatorAcpiTable
  2980. +PUBLIC ACPIRegGetTableFromSimulatorRegistryEntry
  2981. +PUBLIC ACPIEnumerateTables
  2982. +PUBLIC ACPIMapNamedTable
  2983. +PUBLIC ACPIEnumMapTableHandler
  2984. +PUBLIC ACPIInitializeKernelTableHandler
  2985. +
  2986. +
  2987. +; ntoskrnl.exe import
  2988. +EXTRNTHUNK RtlFreeRangeList
  2989. +EXTRNTHUNK RtlInitializeRangeList
  2990. +EXTRNTHUNK RtlAddRange
  2991. +EXTRNTHUNK RtlInvertRangeList
  2992. +EXTRNTHUNK ExAllocatePoolWithTag
  2993. +EXTRNTHUNK ExFreePoolWithTag
  2994. +EXTRNTHUNK ZwSetSystemInformation
  2995. +EXTRNTHUNK MmMapIoSpace
  2996. +EXTRNTHUNK MmUnmapIoSpace
  2997. +EXTRNTHUNK strstr
  2998. +EXTRNTHUNK sprintf
  2999. +EXTRNTHUNK swprintf
  3000. +EXTRNTHUNK _snwprintf
  3001. +EXTRNTHUNK KeReleaseSpinLock
  3002. +EXTRNTHUNK KeAcquireSpinLockRaiseToDpc
  3003. +EXTRNTHUNK IoGetAttachedDeviceReference
  3004. +EXTRNTHUNK IoCreateDevice
  3005. +EXTRNTHUNK IoDeleteDevice
  3006. +EXTRNTHUNK RtlDeleteRange
  3007. +EXTRNTHUNK RtlFindRange
  3008. +EXTRNTHUNK RtlIsRangeAvailable
  3009. +EXTRNTHUNK IofCompleteRequest
  3010. +EXTRNTHUNK RtlCompareMemory
  3011. +EXTRNTHUNK IoInvalidateDeviceRelations
  3012. +EXTRNTHUNK IoRequestDeviceEject
  3013. +EXTRNTHUNK KeAcquireSpinLockAtDpcLevel
  3014. +EXTRNTHUNK KeReleaseSpinLockFromDpcLevel
  3015. +EXTRNTHUNK KeInsertQueueDpc
  3016. +EXTRNTHUNK KeAcquireSpinLockAtDpcLevel
  3017. +EXTRNTHUNK strncpy
  3018. +
  3019. +;acpi import
  3020. +EXTRN ArbDeleteArbiterInstance:PROC
  3021. +EXTRN AcpiInformation:QWORD
  3022. +EXTRN g_AmliHookEnabled:DWORD
  3023. +EXTRN memcpy:PROC
  3024. +EXTRN memset:PROC
  3025. +EXTRN ACPIRegReadAMLRegistryEntry:PROC
  3026. +EXTRN SimulatorRegEntry:PROC
  3027. +EXTRN OSCloseHandle:PROC
  3028. +EXTRN OSOpenHandle:PROC
  3029. +EXTRN OSOpenLargestSubkey:PROC
  3030. +EXTRN __security_cookie:QWORD
  3031. +EXTRN asmFormat1Name:PROC
  3032. +EXTRN OSReadRegValue:PROC
  3033. +EXTRN __security_check_cookie:PROC
  3034. +EXTRN asmACPISlashName:QWORD
  3035. +EXTRN asmModelName:PROC
  3036. +EXTRN asmFamilyName:PROC
  3037. +EXTRN asmStrStrName:PROC
  3038. +EXTRN AcpiProcessorString:QWORD
  3039. +EXTRN AcpiDeviceTreeLock:PROC
  3040. +EXTRN PnpBiosResourcesToNtResources:PROC
  3041. +EXTRN AcpiInternalDeviceTable:QWORD
  3042. +EXTRN ACPIAmliGetNamedChild:PROC
  3043. +EXTRN ACPIInternalUpdateFlags:PROC
  3044. +EXTRN AcpiPdoIrpDispatch:PROC
  3045. +EXTRN AcpiBusFilterIrpDispatch:PROC
  3046. +EXTRN AcpiArbiterResourceTypes:PROC
  3047. +EXTRN FixedButtonDeviceObject:QWORD
  3048. +EXTRN AcpiProcessorIrpDispatch:PROC
  3049. +EXTRN AcpiArbiterInstanceCount:DWORD
  3050. +EXTRN asmPortName:PROC
  3051. +EXTRN asmMemoryName:PROC
  3052. +EXTRN asmBusNumberName:PROC
  3053. +EXTRN asmACPIName:PROC
  3054. +EXTRN asmFormat2Name:PROC
  3055. +EXTRN asmFormat3Name:PROC
  3056. +EXTRN asmRootName:PROC
  3057. +EXTRN asmSTRSTRBIGName:PROC
  3058. +EXTRN ArbInitializeArbiterInstance:PROC
  3059. +EXTRN _ACPIInternalError:PROC
  3060. +EXTRN ArbFindSuitableRange:PROC
  3061. +EXTRN ArbBacktrackAllocation:PROC
  3062. +EXTRN GUID_ACPI_INTERFACE_STANDARD:PROC
  3063. +EXTRN GUID_TRANSLATOR_INTERFACE_STANDARD:PROC
  3064. +EXTRN GUID_ARBITER_INTERFACE_STANDARD:PROC
  3065. +EXTRN GUID_PCI_BUS_INTERFACE_STANDARD:PROC
  3066. +EXTRN GUID_BUS_INTERFACE_STANDARD:PROC
  3067. +EXTRN ACPIInternalGetDeviceExtension:PROC
  3068. +EXTRN ACPIInterfaceTable:PROC
  3069. +EXTRN TranslateEjectInterface:PROC
  3070. +EXTRN PciBusEjectInterface:PROC
  3071. +EXTRN ACPIInternalSendSynchronousIrp:PROC
  3072. +EXTRN IsPciBus:PROC
  3073. +EXTRN ArbArbiterHandler:PROC
  3074. +EXTRN ACPIDockIsDockDevice:PROC
  3075. +EXTRN ACPIDockFindCorrespondingDock:PROC
  3076. +EXTRN AcpiPowerNodeList:QWORD
  3077. +EXTRN ACPIDeviceCompletePhase3On:PROC
  3078. +EXTRN ACPIDeviceCompletePhase3Off:PROC
  3079. +EXTRN AMLIAsyncEvalObject:PROC
  3080. +EXTRN AcpiPowerDpcRunning:BYTE
  3081. +EXTRN AcpiPowerWorkDone:BYTE
  3082. +EXTRN AcpiPowerQueueLock:QWORD
  3083. +EXTRN AcpiPowerDpc:PROC ; struct
  3084. +EXTRN AcpiPowerLock:QWORD
  3085. +EXTRN ACPIAmliDoubleToName:PROC
  3086. +EXTRN asmPciBarName:PROC
  3087. +EXTRN asmACPI2Name:PROC
  3088. +EXTRN asmStar2Name:PROC
  3089. +EXTRN asmACPI2NameL:PROC
  3090. +EXTRN asmStar2NameL:PROC
  3091. +EXTRN GetFieldUnitRegionObj:PROC
  3092. +EXTRN PushAccFieldObj:PROC
  3093. +EXTRN PushPreserveWriteObj:PROC
  3094. +EXTRN RestartCtxtCallback:PROC
  3095. +EXTRN FindRSAccess:PROC
  3096. +EXTRN WriteCookAccess:PROC
  3097. +EXTRN PushFrame:PROC
  3098. +EXTRN PopFrame:PROC
  3099. +EXTRN CheckSystemIOAddressValidity:PROC
  3100. +EXTRN ReadSystemIO:PROC
  3101. +
  3102. +_TEXT SEGMENT
  3103. +
  3104. +ACPIConvertStringDelimitation PROC
  3105. + push rdi
  3106. + test rcx, rcx
  3107. + mov r9, rcx
  3108. + jz short loc_29460
  3109. + xor eax, eax
  3110. + mov rcx, 0FFFFFFFFFFFFFFFFh
  3111. + mov rdi, r9
  3112. + repne scasb
  3113. + not rcx
  3114. + lea r8, [r9+rcx-1]
  3115. + cmp [r8+1], al
  3116. + jz short loc_29460
  3117. +
  3118. + ALIGN16
  3119. +loc_29440:
  3120. + mov [r8], dl
  3121. + xor eax, eax
  3122. + mov rdi, r8
  3123. + mov rcx, 0FFFFFFFFFFFFFFFFh
  3124. + repne scasb
  3125. + not rcx
  3126. + dec rcx
  3127. + add r8, rcx
  3128. + cmp [r8+1], al
  3129. + jnz short loc_29440
  3130. +
  3131. +loc_29460:
  3132. + pop rdi
  3133. + ret
  3134. +ACPIConvertStringDelimitation ENDP
  3135. +
  3136. +ReadSystemMem PROC
  3137. + push rbx
  3138. + sub rsp, 20h
  3139. + mov r10d, edx
  3140. + mov ebx, r8d
  3141. + mov r8d, edx
  3142. + xor edx, edx
  3143. + mov rax, rcx
  3144. + xor r9d, r9d
  3145. + div r10
  3146. + mov [rsp+38h], r9d
  3147. + test rdx, rdx
  3148. + jz short loc_2D4F2
  3149. + mov rdx, rcx
  3150. + lea rcx, [rsp+38h]
  3151. + call memcpy
  3152. + mov r9d, [rsp+38h]
  3153. + and r9d, ebx
  3154. + mov eax, r9d
  3155. + add rsp, 20h
  3156. + pop rbx
  3157. + ret
  3158. +
  3159. +loc_2D4F2:
  3160. + dec r10d
  3161. + jz short loc_2D521
  3162. + dec r10d
  3163. + jz short loc_2D511
  3164. + cmp r10d, 2
  3165. + jnz short loc_2D525
  3166. + mov r9d, [rcx]
  3167. + and r9d, ebx
  3168. + mov eax, r9d
  3169. + add rsp, 20h
  3170. + pop rbx
  3171. + ret
  3172. +
  3173. +loc_2D511:
  3174. + movzx r9d, word ptr [rcx]
  3175. + and r9d, ebx
  3176. + mov eax, r9d
  3177. + add rsp, 20h
  3178. + pop rbx
  3179. + ret
  3180. +
  3181. +loc_2D521:
  3182. + movzx r9d, byte ptr [rcx]
  3183. +
  3184. +loc_2D525:
  3185. + and r9d, ebx
  3186. + mov eax, r9d
  3187. + add rsp, 20h
  3188. + pop rbx
  3189. + ret
  3190. +ReadSystemMem ENDP
  3191. +
  3192. +
  3193. +WriteSystemMem PROC
  3194. + mov rax, rsp
  3195. + sub rsp, 48h
  3196. + mov [rax+8], rbx
  3197. + mov [rax+10h], rbp
  3198. + mov [rax+18h], rsi
  3199. + mov [rax+20h], rdi
  3200. + mov dword ptr [rax-1Ch], 0FFh
  3201. + mov dword ptr [rax-18h], 0FFFFh
  3202. + mov dword ptr [rax-10h], 0FFFFFFFFh
  3203. + mov r10d, edx
  3204. + mov rdi, rcx
  3205. + mov ebx, r9d
  3206. + xor r9d, r9d
  3207. + mov ebp, edx
  3208. + mov [rax-20h], r9d
  3209. + mov [rax-14h], r9d
  3210. + mov [rax-28h], r9d
  3211. + xor al, al
  3212. + cmp ebx, [rsp+r10*4+28h]
  3213. + mov esi, r8d
  3214. + movzx ecx, al
  3215. + mov eax, 1
  3216. + cmovz ecx, eax
  3217. + xor edx, edx
  3218. + mov rax, rdi
  3219. + div r10
  3220. + test rdx, rdx
  3221. + jz short loc_2D5DE
  3222. + test cl, cl
  3223. + jnz short loc_2D5C1
  3224. + lea rcx, [rsp+20h]
  3225. + mov r8, r10
  3226. + mov rdx, rdi
  3227. + call memcpy
  3228. + mov r9d, [rsp+20h]
  3229. +
  3230. +loc_2D5C1:
  3231. + not ebx
  3232. + lea rdx, [rsp+20h]
  3233. + mov r8, rbp
  3234. + and ebx, r9d
  3235. + mov rcx, rdi
  3236. + or ebx, esi
  3237. + mov [rsp+20h], ebx
  3238. + call memcpy
  3239. + jmp short loc_2D639
  3240. +
  3241. +loc_2D5DE:
  3242. + dec r10d
  3243. + jz short loc_2D61E
  3244. + dec r10d
  3245. + jz short loc_2D605
  3246. + cmp r10d, 2
  3247. + jnz short loc_2D639
  3248. + test cl, cl
  3249. + jnz short loc_2D5F5
  3250. + mov r9d, [rdi]
  3251. +
  3252. +loc_2D5F5:
  3253. + not ebx
  3254. + and ebx, r9d
  3255. + or ebx, r8d
  3256. + mov [rsp+20h], ebx
  3257. + mov [rdi], ebx
  3258. + jmp short loc_2D634
  3259. +
  3260. +loc_2D605:
  3261. + test cl, cl
  3262. + jnz short loc_2D60D
  3263. + movzx r9d, word ptr [rdi]
  3264. +
  3265. +loc_2D60D:
  3266. + not ebx
  3267. + and ebx, r9d
  3268. + or ebx, r8d
  3269. + mov [rsp+20h], ebx
  3270. + mov [rdi], bx
  3271. + jmp short loc_2D634
  3272. +
  3273. +loc_2D61E:
  3274. + test cl, cl
  3275. + jnz short loc_2D626
  3276. + movzx r9d, byte ptr [rdi]
  3277. +
  3278. +loc_2D626:
  3279. + not ebx
  3280. + and ebx, r9d
  3281. + or ebx, r8d
  3282. + mov [rsp+20h], ebx
  3283. + mov [rdi], bl
  3284. +
  3285. +loc_2D634:
  3286. + lock or dword ptr [rsp], 0
  3287. +
  3288. +loc_2D639:
  3289. + mov rdi, [rsp+68h]
  3290. + mov rsi, [rsp+60h]
  3291. + mov rbp, [rsp+58h]
  3292. + mov rbx, [rsp+50h]
  3293. + add rsp, 48h
  3294. + ret
  3295. +WriteSystemMem ENDP
  3296. +
  3297. +
  3298. +ReadBuffField PROC
  3299. + sub rsp, 38h
  3300. + mov r11, rcx
  3301. + mov ecx, [rdx+0Ch]
  3302. + mov [rsp+58h], rdi
  3303. + and ecx, 0Fh
  3304. + mov rdi, r8
  3305. + mov r9, rdx
  3306. + cmp ecx, 1
  3307. + jb short loc_2D801
  3308. + cmp ecx, 3
  3309. + ja short loc_2D801
  3310. + mov edx, 1
  3311. + dec ecx
  3312. + mov r8d, edx
  3313. + shl r8d, cl
  3314. + jmp short loc_2D809
  3315. +
  3316. +loc_2D801:
  3317. + mov edx, 1
  3318. + mov r8d, edx
  3319. +
  3320. +loc_2D809:
  3321. + mov r10d, [r9]
  3322. + lea eax, [r10+r8]
  3323. + cmp eax, [r11+18h]
  3324. + ja loc_2D8D7
  3325. + mov ecx, [r9+8]
  3326. + cmp ecx, 20h
  3327. + jb short loc_2D827
  3328. + xor edx, edx
  3329. + jmp short loc_2D829
  3330. +
  3331. +loc_2D827:
  3332. + shl edx, cl
  3333. +
  3334. +loc_2D829:
  3335. + mov ecx, [r9+4]
  3336. + mov r9, r10
  3337. +
  3338. +loc_2D830:
  3339. + mov [rsp+50h], rbx
  3340. + add r9, [r11+10h]
  3341. + lea ebx, [rdx-1]
  3342. + xor edx, edx
  3343. + mov rax, r9
  3344. + mov r10d, r8d
  3345. + shl ebx, cl
  3346. + div r10
  3347. + xor ecx, ecx
  3348. + test rdx, rdx
  3349. + mov [rsp+20h], ecx
  3350. + jz short loc_2D87D
  3351. + lea rcx, [rsp+20h]
  3352. + mov r8, r10
  3353. + mov rdx, r9
  3354. + call memcpy
  3355. + mov ecx, [rsp+20h]
  3356. + and ecx, ebx
  3357. + mov rbx, [rsp+50h]
  3358. + xor eax, eax
  3359. + mov [rdi], ecx
  3360. + mov rdi, [rsp+58h]
  3361. + add rsp, 38h
  3362. + ret
  3363. +
  3364. +loc_2D87D:
  3365. + dec r8d
  3366. + jz short loc_2D8BE
  3367. + dec r8d
  3368. + jz short loc_2D8A5
  3369. + cmp r8d, 2
  3370. + jnz short loc_2D8C2
  3371. + mov ecx, [r9]
  3372. + and ecx, ebx
  3373. + mov rbx, [rsp+50h]
  3374. + xor eax, eax
  3375. + mov [rdi], ecx
  3376. + mov rdi, [rsp+58h]
  3377. + add rsp, 38h
  3378. + ret
  3379. +
  3380. +loc_2D8A5:
  3381. + movzx ecx, word ptr [r9]
  3382. + and ecx, ebx
  3383. + mov rbx, [rsp+50h]
  3384. + xor eax, eax
  3385. + mov [rdi], ecx
  3386. + mov rdi, [rsp+58h]
  3387. + add rsp, 38h
  3388. + ret
  3389. +
  3390. +loc_2D8BE:
  3391. + movzx ecx, byte ptr [r9]
  3392. +
  3393. +loc_2D8C2:
  3394. + and ecx, ebx
  3395. + mov rbx, [rsp+50h]
  3396. + xor eax, eax
  3397. + mov [rdi], ecx
  3398. + mov rdi, [rsp+58h]
  3399. + add rsp, 38h
  3400. + ret
  3401. +
  3402. +loc_2D8D7:
  3403. + mov eax, 0C0140004h
  3404. + mov rdi, [rsp+58h]
  3405. + add rsp, 38h
  3406. + ret
  3407. +ReadBuffField ENDP
  3408. +
  3409. +
  3410. +ReadFieldObj PROC
  3411. + sub rsp, 58h
  3412. + test r8d, r8d
  3413. + mov [rsp+60h], rbx
  3414. + mov [rsp+78h], rdi
  3415. + mov [rsp+50h], r12
  3416. + mov edi, r8d
  3417. + mov rbx, rdx
  3418. + mov r12, rcx
  3419. + jnz short loc_2E529
  3420. + mov eax, [rdx+8]
  3421. + and eax, 0Fh
  3422. + jmp short loc_2E52E
  3423. +
  3424. +loc_2E529:
  3425. + mov eax, 3
  3426. +
  3427. +loc_2E52E:
  3428. + mov [rsp+68h], rbp
  3429. + mov [rsp+70h], rsi
  3430. + mov [rsp+48h], r13
  3431. + xor r13d, r13d
  3432. + test eax, eax
  3433. + jz short loc_2E560
  3434. + dec eax
  3435. + jz short loc_2E58E
  3436. + dec eax
  3437. + jz loc_2E63F
  3438. + dec eax
  3439. + jz loc_2E75A
  3440. + mov eax, r8d
  3441. + jmp loc_2E764
  3442. +
  3443. +loc_2E560:
  3444. + mov eax, [rbx+34h]
  3445. + cmp [rbx+44h], eax
  3446. + jge loc_2E720
  3447. + mov rax, [rbx+18h]
  3448. + inc dword ptr [rbx+8]
  3449. + cmp word ptr [rax+2], 5
  3450. + jnz short loc_2E58E
  3451. + mov rax, [rax+20h]
  3452. + mov rax, [rax+10h]
  3453. + cmp word ptr [rax+3Ah], 84h
  3454. + jz loc_2E726
  3455. +
  3456. +loc_2E58E:
  3457. + mov rax, [rbx+18h]
  3458. + inc dword ptr [rbx+8]
  3459. + lea rsi, [rbx+48h]
  3460. + cmp word ptr [rax+2], 0Eh
  3461. + jnz short loc_2E5B4
  3462. + mov rcx, [rax+20h]
  3463. + lea rdx, [rbx+4Ch]
  3464. + mov r8, rsi
  3465. + call ReadBuffField
  3466. + mov edi, eax
  3467. + jmp short loc_2E629
  3468. +
  3469. +loc_2E5B4:
  3470. + mov rcx, [rax+20h]
  3471. + mov [rsp+30h], r13
  3472. + mov rax, [rcx+10h]
  3473. + cmp word ptr [rax+3Ah], 84h
  3474. + jnz short loc_2E5F9
  3475. + mov rax, [rax+58h]
  3476. + lea rdx, ReadFieldObj
  3477. + mov rcx, r12
  3478. + mov r9, [rax+8]
  3479. + mov dword ptr [rsp+28h], 4
  3480. + mov [rsp+20h], rsi
  3481. + lea r8, [r9+38h]
  3482. + mov r9, [r9+58h]
  3483. + call PushAccFieldObj
  3484. + mov edi, eax
  3485. + jmp short loc_2E629
  3486. +
  3487. +loc_2E5F9:
  3488. + lea rdx, [rsp+30h]
  3489. + call GetFieldUnitRegionObj
  3490. + test eax, eax
  3491. + mov edi, eax
  3492. + jnz short loc_2E629
  3493. + mov rdx, [rsp+30h]
  3494. + test rdx, rdx
  3495. + jz short loc_2E629
  3496. + lea r8, [rbx+4Ch]
  3497. + mov r9, rsi
  3498. + mov rcx, r12
  3499. + mov byte ptr [rsp+20h], 1
  3500. + call AccessBaseField
  3501. + mov edi, eax
  3502. +
  3503. +loc_2E629:
  3504. + test edi, edi
  3505. + jnz loc_2E762
  3506. + cmp rbx, [r12+170h]
  3507. + jnz loc_2E762
  3508. +
  3509. +loc_2E63F:
  3510. + cmp [rbx+44h], r13d
  3511. + jle short loc_2E69C
  3512. + mov ecx, [rbx+40h]
  3513. + cmp ecx, 20h
  3514. + jl short loc_2E652
  3515. + mov r9d, r13d
  3516. + jmp short loc_2E65B
  3517. +
  3518. +loc_2E652:
  3519. + mov r9d, 1
  3520. + shl r9d, cl
  3521. +
  3522. +loc_2E65B:
  3523. + mov ecx, [rbx+3Ch]
  3524. + cmp ecx, 20h
  3525. + jl short loc_2E668
  3526. + mov eax, r13d
  3527. + jmp short loc_2E66D
  3528. +
  3529. +loc_2E668:
  3530. + mov eax, [rbx+48h]
  3531. + shl eax, cl
  3532. +
  3533. +loc_2E66D:
  3534. + mov r8d, [rbx+38h]
  3535. + mov edx, [rbx+30h]
  3536. + dec r9d
  3537. + shl r9d, cl
  3538. + mov rcx, [rbx+20h]
  3539. + and r8d, eax
  3540. + call WriteSystemMem
  3541. + mov r11d, [rbx+30h]
  3542. + add [rbx+20h], r11
  3543. + mov rax, [rbx+20h]
  3544. + cmp rax, [rbx+28h]
  3545. + jnb loc_2E757
  3546. +
  3547. +loc_2E69C:
  3548. + mov r8d, [rbx+40h]
  3549. + mov edx, [rbx+3Ch]
  3550. + mov ecx, r8d
  3551. + shr dword ptr [rbx+48h], cl
  3552. + mov ecx, [rbx+54h]
  3553. + cmp ecx, edx
  3554. + jge short loc_2E6C9
  3555. + cmp ecx, 20h
  3556. + jb short loc_2E6BA
  3557. + mov eax, r13d
  3558. + jmp short loc_2E6C1
  3559. +
  3560. +loc_2E6BA:
  3561. + mov eax, 1
  3562. + shl eax, cl
  3563. +
  3564. +loc_2E6C1:
  3565. + dec eax
  3566. + and eax, [rbx+48h]
  3567. + mov [rbx+48h], eax
  3568. +
  3569. +loc_2E6C9:
  3570. + cmp edx, 20h
  3571. + jl short loc_2E6D3
  3572. + mov r9d, r13d
  3573. + jmp short loc_2E6DE
  3574. +
  3575. +loc_2E6D3:
  3576. + mov ecx, edx
  3577. + mov r9d, 1
  3578. + shl r9d, cl
  3579. +
  3580. +loc_2E6DE:
  3581. + mov edx, [rbx+30h]
  3582. + mov ecx, r8d
  3583. + mov r8d, [rbx+48h]
  3584. + dec r9d
  3585. + sar r9d, cl
  3586. + mov rcx, [rbx+20h]
  3587. + call WriteSystemMem
  3588. + mov eax, [rbx+30h]
  3589. + mov ecx, [rbx+50h]
  3590. + add [rbx+4Ch], eax
  3591. + inc dword ptr [rbx+44h]
  3592. + shl eax, 3
  3593. + sub ecx, eax
  3594. + mov eax, [rbx+44h]
  3595. + mov [rbx+50h], r13d
  3596. + add [rbx+54h], ecx
  3597. + cmp eax, [rbx+34h]
  3598. + jge short loc_2E757
  3599. + add dword ptr [rbx+8], 0FFFFFFFEh
  3600. + jmp loc_2E560
  3601. +
  3602. +loc_2E720:
  3603. + add dword ptr [rbx+8], 3
  3604. + jmp short loc_2E75A
  3605. +
  3606. +loc_2E726:
  3607. + mov rax, [rax+58h]
  3608. + lea rdx, WriteFieldObj
  3609. + mov rcx, r12
  3610. + mov r9, [rax]
  3611. + lea rax, [rbx+4Ch]
  3612. + mov dword ptr [rsp+28h], 4
  3613. + lea r8, [r9+38h]
  3614. + mov r9, [r9+58h]
  3615. + mov [rsp+20h], rax
  3616. + call PushAccFieldObj
  3617. + jmp short loc_2E764
  3618. +
  3619. +loc_2E757:
  3620. + inc dword ptr [rbx+8]
  3621. +
  3622. +loc_2E75A:
  3623. + mov rcx, r12
  3624. + call PopFrame
  3625. +
  3626. +loc_2E762:
  3627. + mov eax, edi
  3628. +
  3629. +loc_2E764:
  3630. + mov r13, [rsp+48h]
  3631. + mov r12, [rsp+50h]
  3632. + mov rdi, [rsp+78h]
  3633. + mov rsi, [rsp+70h]
  3634. + mov rbp, [rsp+68h]
  3635. + mov rbx, [rsp+60h]
  3636. + add rsp, 58h
  3637. + ret
  3638. +ReadFieldObj ENDP
  3639. +
  3640. +
  3641. +WriteFieldObj PROC
  3642. + sub rsp, 48h
  3643. + test r8d, r8d
  3644. + mov [rsp+50h], rbx
  3645. + mov [rsp+58h], rbp
  3646. + mov [rsp+68h], rdi
  3647. + mov rbx, rdx
  3648. + mov rbp, rcx
  3649. + mov edi, r8d
  3650. + jnz short loc_2E239
  3651. + mov eax, [rdx+8]
  3652. + and eax, 0Fh
  3653. + jmp short loc_2E23E
  3654. +
  3655. +loc_2E239:
  3656. + mov eax, 3
  3657. +
  3658. +loc_2E23E:
  3659. + mov [rsp+60h], rsi
  3660. + mov [rsp+40h], r12
  3661. + xor r12d, r12d
  3662. + test eax, eax
  3663. + jz short loc_2E26B
  3664. + dec eax
  3665. + jz short loc_2E299
  3666. + dec eax
  3667. + jz loc_2E3B1
  3668. + dec eax
  3669. + jz loc_2E414
  3670. + mov eax, r8d
  3671. + jmp loc_2E41E
  3672. +
  3673. +loc_2E26B:
  3674. + mov eax, [rbx+34h]
  3675. + cmp [rbx+44h], eax
  3676. + jge loc_2E3DA
  3677. + mov rax, [rbx+18h]
  3678. + inc dword ptr [rbx+8]
  3679. + cmp word ptr [rax+2], 5
  3680. + jnz short loc_2E299
  3681. + mov rax, [rax+20h]
  3682. + mov rax, [rax+10h]
  3683. + cmp word ptr [rax+3Ah], 84h
  3684. + jz loc_2E3E0
  3685. +
  3686. +loc_2E299:
  3687. + mov ecx, [rbx+30h]
  3688. + mov r10, [rbx+20h]
  3689. + inc dword ptr [rbx+8]
  3690. + mov edi, [rbx+38h]
  3691. + xor edx, edx
  3692. + mov rax, r10
  3693. + div rcx
  3694. + mov r9d, r12d
  3695. + mov [rsp+30h], r12d
  3696. + test rdx, rdx
  3697. + mov r8, rcx
  3698. + jz short loc_2E2D2
  3699. + lea rcx, [rsp+30h]
  3700. + mov rdx, r10
  3701. + call memcpy
  3702. + mov r9d, [rsp+30h]
  3703. + jmp short loc_2E2EE
  3704. +
  3705. +loc_2E2D2:
  3706. + dec ecx
  3707. + jz short loc_2E2EA
  3708. + dec ecx
  3709. + jz short loc_2E2E4
  3710. + cmp ecx, 2
  3711. + jnz short loc_2E2EE
  3712. + mov r9d, [r10]
  3713. + jmp short loc_2E2EE
  3714. +
  3715. +loc_2E2E4:
  3716. + movzx r9d, word ptr [r10]
  3717. + jmp short loc_2E2EE
  3718. +
  3719. +loc_2E2EA:
  3720. + movzx r9d, byte ptr [r10]
  3721. +
  3722. +loc_2E2EE:
  3723. + and r9d, edi
  3724. + cmp [rbx+44h], r12d
  3725. + jle short loc_2E373
  3726. + mov ecx, [rbx+3Ch]
  3727. + lea rdi, [rbx+48h]
  3728. + shr r9d, cl
  3729. + mov ecx, [rbx+30h]
  3730. + add [rbx+20h], rcx
  3731. + mov r10, [rbx+20h]
  3732. + mov [rdi], r9d
  3733. + cmp r10, [rbx+28h]
  3734. + jb short loc_2E31A
  3735. + mov r9d, r12d
  3736. + jmp short loc_2E37A
  3737. +
  3738. +loc_2E31A:
  3739. + mov esi, [rbx+38h]
  3740. + xor edx, edx
  3741. + mov rax, r10
  3742. + div rcx
  3743. + mov r9d, r12d
  3744. + mov [rsp+34h], r12d
  3745. + test rdx, rdx
  3746. + mov r8, rcx
  3747. + jz short loc_2E34C
  3748. + lea rcx, [rsp+34h]
  3749. + mov rdx, r10
  3750. + call memcpy
  3751. + mov r9d, [rsp+34h]
  3752. + and r9d, esi
  3753. + jmp short loc_2E37A
  3754. +
  3755. +loc_2E34C:
  3756. + dec ecx
  3757. + jz short loc_2E36A
  3758. + dec ecx
  3759. + jz short loc_2E361
  3760. + cmp ecx, 2
  3761. + jnz short loc_2E36E
  3762. + mov r9d, [r10]
  3763. + and r9d, esi
  3764. + jmp short loc_2E37A
  3765. +
  3766. +loc_2E361:
  3767. + movzx r9d, word ptr [r10]
  3768. + and r9d, esi
  3769. + jmp short loc_2E37A
  3770. +
  3771. +loc_2E36A:
  3772. + movzx r9d, byte ptr [r10]
  3773. +
  3774. +loc_2E36E:
  3775. + and r9d, esi
  3776. + jmp short loc_2E37A
  3777. +
  3778. +loc_2E373:
  3779. + lea rdi, [rbx+48h]
  3780. + mov [rdi], r12d
  3781. +
  3782. +loc_2E37A:
  3783. + mov ecx, [rbx+40h]
  3784. + mov rdx, [rbx+18h]
  3785. + lea r8, [rbx+4Ch]
  3786. + shl r9d, cl
  3787. + mov rcx, rbp
  3788. + mov [rsp+20h], r12b
  3789. + and r9d, [rbx+38h]
  3790. + or [rdi], r9d
  3791. + mov r9, rdi
  3792. + call AccessFieldData
  3793. + cmp eax, 8004h
  3794. + mov edi, eax
  3795. + jz short loc_2E41E
  3796. + cmp rbx, [rbp+170h]
  3797. + jnz short loc_2E41E
  3798. +
  3799. +loc_2E3B1:
  3800. + mov eax, [rbx+30h]
  3801. + mov ecx, [rbx+50h]
  3802. + inc dword ptr [rbx+44h]
  3803. + add [rbx+4Ch], eax
  3804. + shl eax, 3
  3805. + mov [rbx+50h], r12d
  3806. + sub ecx, eax
  3807. + mov eax, [rbx+44h]
  3808. + add [rbx+54h], ecx
  3809. + cmp eax, [rbx+34h]
  3810. + jge short loc_2E411
  3811. + add dword ptr [rbx+8], 0FFFFFFFEh
  3812. + jmp loc_2E26B
  3813. +
  3814. +loc_2E3DA:
  3815. + add dword ptr [rbx+8], 3
  3816. + jmp short loc_2E414
  3817. +
  3818. +loc_2E3E0:
  3819. + mov rax, [rax+58h]
  3820. + lea rdx, WriteFieldObj
  3821. + mov rcx, rbp
  3822. + mov r9, [rax]
  3823. + lea rax, [rbx+4Ch]
  3824. + mov dword ptr [rsp+28h], 4
  3825. + lea r8, [r9+38h]
  3826. + mov r9, [r9+58h]
  3827. + mov [rsp+20h], rax
  3828. + call PushAccFieldObj
  3829. + jmp short loc_2E41E
  3830. +
  3831. +loc_2E411:
  3832. + inc dword ptr [rbx+8]
  3833. +
  3834. +loc_2E414:
  3835. + mov rcx, rbp
  3836. + call PopFrame
  3837. + mov eax, edi
  3838. +
  3839. +loc_2E41E:
  3840. + mov r12, [rsp+40h]
  3841. + mov rdi, [rsp+68h]
  3842. + mov rsi, [rsp+60h]
  3843. + mov rbp, [rsp+58h]
  3844. + mov rbx, [rsp+50h]
  3845. + add rsp, 48h
  3846. + ret
  3847. +WriteFieldObj ENDP
  3848. +
  3849. +
  3850. +AccessBaseField PROC
  3851. + mov [rsp+10h], rdx
  3852. + mov [rsp+8], rcx
  3853. + mov rax, rsp
  3854. + sub rsp, 88h
  3855. + mov r10, [rdx+58h]
  3856. + mov [rax-8], rbx
  3857. + mov [rax-18h], rsi
  3858. + mov [rax-20h], rdi
  3859. + mov edi, [r8]
  3860. + mov [rax-28h], r12
  3861. + add rdi, [r10]
  3862. + mov r12, r9
  3863. + mov r9d, [r8+0Ch]
  3864. + mov ecx, r9d
  3865. + xor esi, esi
  3866. + and ecx, 0Fh
  3867. + cmp ecx, 1
  3868. + jb short loc_2DC44
  3869. + cmp ecx, 3
  3870. + ja short loc_2DC44
  3871. + mov eax, 1
  3872. + dec ecx
  3873. + mov ebx, eax
  3874. + shl ebx, cl
  3875. + jmp short loc_2DC4B
  3876. +
  3877. +loc_2DC44:
  3878. + mov eax, 1
  3879. + mov ebx, eax
  3880. +
  3881. +loc_2DC4B:
  3882. + mov ecx, [r8+8]
  3883. + mov [rsp+78h], rbp
  3884. + cmp ecx, 20h
  3885. + jb short loc_2DC5D
  3886. + mov ebp, esi
  3887. + jmp short loc_2DC61
  3888. +
  3889. +loc_2DC5D:
  3890. + mov ebp, eax
  3891. + shl ebp, cl
  3892. +
  3893. +loc_2DC61:
  3894. + mov ecx, [r8+4]
  3895. + dec ebp
  3896. + shl ebp, cl
  3897. + lea ecx, [rbx*8]
  3898. + cmp ecx, 20h
  3899. + jb short loc_2DC79
  3900. + mov eax, esi
  3901. + jmp short loc_2DC7B
  3902. +
  3903. +loc_2DC79:
  3904. + shl eax, cl
  3905. +
  3906. +loc_2DC7B:
  3907. + test r9b, 60h
  3908. + mov [rsp+50h], r14
  3909. + mov [rsp+48h], r15
  3910. + lea r14d, [rax-1]
  3911. + jnz short loc_2DC9D
  3912. + mov eax, ebp
  3913. + not eax
  3914. + test r14d, eax
  3915. + jz short loc_2DC9D
  3916. + mov r15b, 1
  3917. + jmp short loc_2DCA0
  3918. +
  3919. +loc_2DC9D:
  3920. + xor r15b, r15b
  3921. +
  3922. +loc_2DCA0:
  3923. + and [r12], ebp
  3924. + mov [rsp+58h], r13
  3925. + movzx r13d, byte ptr [rsp+0B0h]
  3926. + test r13b, r13b
  3927. + jnz short loc_2DCCD
  3928. + mov eax, [r8+0Ch]
  3929. + and al, 60h
  3930. + cmp al, 20h
  3931. + jnz short loc_2DCCD
  3932. + mov eax, ebp
  3933. + not eax
  3934. + or eax, [r12]
  3935. + mov [r12], eax
  3936. +
  3937. +loc_2DCCD:
  3938. + movzx ecx, byte ptr [r10+0Ch]
  3939. + test ecx, ecx
  3940. + mov edx, ecx
  3941. + jz loc_2DF06
  3942. + dec edx
  3943. + jz loc_2DE0D
  3944. + call FindRSAccess
  3945. + test rax, rax
  3946. + mov r14, rax
  3947. + jz loc_2DE03
  3948. + mov r10, [rax+10h]
  3949. + test r10, r10
  3950. + jz loc_2DE03
  3951. + test r13b, r13b
  3952. + jz short loc_2DD6C
  3953. + mov rax, [rsp+90h]
  3954. + mov rdx, [rsp+98h]
  3955. + mov r9d, ebx
  3956. + add rax, 148h
  3957. + mov r8, rdi
  3958. + xor ecx, ecx
  3959. + mov [rsp+38h], rax
  3960. + lea rax, RestartCtxtCallback
  3961. + mov [rsp+30h], rax
  3962. + mov rax, [r14+18h]
  3963. + mov [rsp+28h], rax
  3964. + mov [rsp+20h], r12
  3965. + call r10
  3966. + cmp eax, 103h
  3967. + mov esi, eax
  3968. + jnz short loc_2DD5A
  3969. + mov esi, 8004h
  3970. + jmp loc_2DF99
  3971. +
  3972. +loc_2DD5A:
  3973. + test eax, eax
  3974. + jz loc_2DF99
  3975. + mov esi, 0C0140018h
  3976. + jmp loc_2DF99
  3977. +
  3978. +loc_2DD6C:
  3979. + mov rcx, [rsp+90h]
  3980. + lea rax, [rsp+0A8h]
  3981. + lea r9, WriteCookAccess
  3982. + mov edx, 41435257h
  3983. + mov r8d, 40h
  3984. + mov [rsp+20h], rax
  3985. + call PushFrame
  3986. + test eax, eax
  3987. + mov esi, eax
  3988. + jnz loc_2DF99
  3989. + mov rax, [rsp+0A8h]
  3990. + mov rcx, [rsp+98h]
  3991. + mov [rax+18h], rcx
  3992. + mov rax, [rsp+0A8h]
  3993. + mov [rax+20h], r14
  3994. + mov rax, [rsp+0A8h]
  3995. + mov [rax+28h], edi
  3996. + mov rax, [rsp+0A8h]
  3997. + mov [rax+2Ch], ebx
  3998. + mov rax, [rsp+0A8h]
  3999. + mov ecx, [r12]
  4000. + mov [rax+30h], ecx
  4001. + mov rax, [rsp+0A8h]
  4002. + mov [rax+34h], ebp
  4003. + mov rax, [rsp+0A8h]
  4004. + mov [rax+3Ch], r15b
  4005. + jmp loc_2DF99
  4006. +
  4007. +loc_2DE03:
  4008. + mov esi, 0C0140010h
  4009. + jmp loc_2DF99
  4010. +
  4011. +loc_2DE0D:
  4012. + test r13b, r13b
  4013. + jz short loc_2DE84
  4014. + lea r9, [rsp+98h]
  4015. + mov r8d, ebx
  4016. + mov edx, edi
  4017. + mov cl, 1
  4018. + mov [rsp+98h], esi
  4019. + call CheckSystemIOAddressValidity
  4020. + test al, al
  4021. + jz short loc_2DE72
  4022. + dec ebx
  4023. + jz short loc_2DE60
  4024. + dec ebx
  4025. + jz short loc_2DE4D
  4026. + cmp ebx, 2
  4027. + jnz short loc_2DE72
  4028. + movzx edx, di
  4029. + in eax, dx
  4030. + and eax, ebp
  4031. + mov [r12], eax
  4032. + jmp loc_2DF99
  4033. +
  4034. +loc_2DE4D:
  4035. + movzx edx, di
  4036. + in ax, dx
  4037. + movzx eax, ax
  4038. + and eax, ebp
  4039. + mov [r12], eax
  4040. + jmp loc_2DF99
  4041. +
  4042. +loc_2DE60:
  4043. + movzx edx, di
  4044. + in al, dx
  4045. + movzx eax, al
  4046. + and eax, ebp
  4047. + mov [r12], eax
  4048. + jmp loc_2DF99
  4049. +
  4050. +loc_2DE72:
  4051. + mov eax, [rsp+98h]
  4052. + and eax, ebp
  4053. + mov [r12], eax
  4054. + jmp loc_2DF99
  4055. +
  4056. +loc_2DE84:
  4057. + test r15b, r15b
  4058. + jz short loc_2DE9B
  4059. + not ebp
  4060. + mov edx, ebx
  4061. + mov ecx, edi
  4062. + mov r8d, ebp
  4063. + call ReadSystemIO
  4064. + or [r12], eax
  4065. +
  4066. +loc_2DE9B:
  4067. + mov eax, [r12]
  4068. + lea r9, [rsp+0B0h]
  4069. + mov r8d, ebx
  4070. + mov edx, edi
  4071. + xor ecx, ecx
  4072. + mov [rsp+0B0h], eax
  4073. + call CheckSystemIOAddressValidity
  4074. + test al, al
  4075. + jz loc_2DF99
  4076. + dec ebx
  4077. + jz short loc_2DEF5
  4078. + dec ebx
  4079. + jz short loc_2DEE3
  4080. + cmp ebx, 2
  4081. + jnz loc_2DF99
  4082. + mov eax, [rsp+0B0h]
  4083. + movzx edx, di
  4084. + out dx, eax
  4085. + jmp loc_2DF99
  4086. +
  4087. +loc_2DEE3:
  4088. + movzx eax, word ptr [rsp+0B0h]
  4089. + movzx edx, di
  4090. + out dx, ax
  4091. + jmp loc_2DF99
  4092. +
  4093. +loc_2DEF5:
  4094. + movzx eax, byte ptr [rsp+0B0h]
  4095. + movzx edx, di
  4096. + out dx, al
  4097. + jmp loc_2DF99
  4098. +
  4099. +loc_2DF06:
  4100. + test r13b, r13b
  4101. + jz short loc_2DF70
  4102. + xor edx, edx
  4103. + mov r8d, ebx
  4104. + mov rax, rdi
  4105. + div r8
  4106. + mov ecx, esi
  4107. + mov [rsp+0A0h], esi
  4108. + test rdx, rdx
  4109. + jz short loc_2DF43
  4110. + lea rcx, [rsp+0A0h]
  4111. + mov rdx, rdi
  4112. + call memcpy
  4113. + mov ecx, [rsp+0A0h]
  4114. + and ecx, ebp
  4115. + mov [r12], ecx
  4116. + jmp short loc_2DF99
  4117. +
  4118. +loc_2DF43:
  4119. + dec ebx
  4120. + jz short loc_2DF65
  4121. + dec ebx
  4122. + jz short loc_2DF5A
  4123. + cmp ebx, 2
  4124. + jnz short loc_2DF68
  4125. + mov ecx, [rdi]
  4126. + and ecx, ebp
  4127. + mov [r12], ecx
  4128. + jmp short loc_2DF99
  4129. +
  4130. +loc_2DF5A:
  4131. + movzx ecx, word ptr [rdi]
  4132. + and ecx, ebp
  4133. + mov [r12], ecx
  4134. + jmp short loc_2DF99
  4135. +
  4136. +loc_2DF65:
  4137. + movzx ecx, byte ptr [rdi]
  4138. +
  4139. +loc_2DF68:
  4140. + and ecx, ebp
  4141. + mov [r12], ecx
  4142. + jmp short loc_2DF99
  4143. +
  4144. +loc_2DF70:
  4145. + test r15b, r15b
  4146. + jz short loc_2DF88
  4147. + not ebp
  4148. + mov edx, ebx
  4149. + mov rcx, rdi
  4150. + mov r8d, ebp
  4151. + call ReadSystemMem
  4152. + or [r12], eax
  4153. +
  4154. +loc_2DF88:
  4155. + mov r8d, [r12]
  4156. + mov r9d, r14d
  4157. + mov edx, ebx
  4158. + mov rcx, rdi
  4159. + call WriteSystemMem
  4160. +
  4161. +loc_2DF99:
  4162. + mov r15, [rsp+48h]
  4163. + mov r14, [rsp+50h]
  4164. + mov r13, [rsp+58h]
  4165. + mov r12, [rsp+60h]
  4166. + mov rdi, [rsp+68h]
  4167. + mov rbp, [rsp+78h]
  4168. + mov rbx, [rsp+80h]
  4169. + mov eax, esi
  4170. + mov rsi, [rsp+70h]
  4171. + add rsp, 88h
  4172. + ret
  4173. +AccessBaseField ENDP
  4174. +
  4175. +
  4176. +AccessFieldData PROC
  4177. + sub rsp, 58h
  4178. + cmp word ptr [rdx+2], 0Eh
  4179. + mov [rsp+50h], rbx
  4180. + mov [rsp+48h], rbp
  4181. + mov [rsp+40h], rsi
  4182. + mov [rsp+38h], rdi
  4183. + mov rax, rdx
  4184. + mov rdi, r8
  4185. + mov rsi, r9
  4186. + mov rbp, rcx
  4187. + jnz loc_2E0A9
  4188. + cmp byte ptr [rsp+80h], 0
  4189. + jz short loc_2E02D
  4190. + mov rcx, [rax+20h]
  4191. + mov r8, r9
  4192. + mov rdx, rdi
  4193. + call ReadBuffField
  4194. + jmp loc_2E1ED
  4195. +
  4196. +loc_2E02D:
  4197. + mov ecx, [r8+0Ch]
  4198. + mov rbp, [rdx+20h]
  4199. + xor ebx, ebx
  4200. + and ecx, 0Fh
  4201. + cmp ecx, 1
  4202. + jb short loc_2E053
  4203. + cmp ecx, 3
  4204. + ja short loc_2E053
  4205. + mov edx, 1
  4206. + dec ecx
  4207. + mov r10d, edx
  4208. + shl r10d, cl
  4209. + jmp short loc_2E05B
  4210. +
  4211. +loc_2E053:
  4212. + mov edx, 1
  4213. + mov r10d, edx
  4214. +
  4215. +loc_2E05B:
  4216. + mov r11d, [r8]
  4217. + lea eax, [r11+r10]
  4218. + cmp eax, [rbp+18h]
  4219. + ja short loc_2E09D
  4220. + mov ecx, [r8+8]
  4221. + cmp ecx, 20h
  4222. + jb short loc_2E074
  4223. + mov edx, ebx
  4224. + jmp short loc_2E076
  4225. +
  4226. +loc_2E074:
  4227. + shl edx, cl
  4228. +
  4229. +loc_2E076:
  4230. + mov ecx, [r8+4]
  4231. + lea r9d, [rdx-1]
  4232. + mov edx, r10d
  4233. + shl r9d, cl
  4234. + mov rcx, r11
  4235. + add rcx, [rbp+10h]
  4236. + mov r8d, r9d
  4237. + and r8d, [rsi]
  4238. + call WriteSystemMem
  4239. + mov eax, ebx
  4240. + jmp loc_2E1ED
  4241. +
  4242. +loc_2E09D:
  4243. + mov ebx, 0C0140004h
  4244. + mov eax, ebx
  4245. + jmp loc_2E1ED
  4246. +
  4247. +loc_2E0A9:
  4248. + mov rcx, [rdx+20h]
  4249. + xor ebx, ebx
  4250. + mov [rsp+68h], rbx
  4251. + mov rax, [rcx+10h]
  4252. + cmp word ptr [rax+3Ah], 84h
  4253. + jnz loc_2E1BB
  4254. + cmp [rsp+80h], bl
  4255. + mov r10, [rax+58h]
  4256. + jz short loc_2E0FE
  4257. + mov r9, [r10+8]
  4258. + lea rdx, ReadFieldObj
  4259. + mov rcx, rbp
  4260. + lea r8, [r9+38h]
  4261. + mov r9, [r9+58h]
  4262. + mov dword ptr [rsp+28h], 4
  4263. + mov [rsp+20h], rsi
  4264. + call PushAccFieldObj
  4265. + jmp loc_2E1ED
  4266. +
  4267. +loc_2E0FE:
  4268. + mov ecx, [r8+8]
  4269. + mov edx, 1
  4270. + cmp ecx, 20h
  4271. + jb short loc_2E110
  4272. + mov eax, ebx
  4273. + jmp short loc_2E114
  4274. +
  4275. +loc_2E110:
  4276. + mov eax, edx
  4277. + shl eax, cl
  4278. +
  4279. +loc_2E114:
  4280. + mov ecx, [r8+4]
  4281. + mov r11d, [r8+0Ch]
  4282. + lea r9d, [rax-1]
  4283. + shl r9d, cl
  4284. + mov r8d, r11d
  4285. + and r8d, 0Fh
  4286. + not r9d
  4287. + cmp r8d, edx
  4288. + jb short loc_2E142
  4289. + cmp r8d, 3
  4290. + ja short loc_2E142
  4291. + lea ecx, [r8-1]
  4292. + mov eax, edx
  4293. + shl eax, cl
  4294. + jmp short loc_2E144
  4295. +
  4296. +loc_2E142:
  4297. + mov eax, edx
  4298. +
  4299. +loc_2E144:
  4300. + shl eax, 3
  4301. + cmp eax, 20h
  4302. + jge short loc_2E16E
  4303. + cmp r8d, edx
  4304. + jb short loc_2E161
  4305. + cmp r8d, 3
  4306. + ja short loc_2E161
  4307. + lea ecx, [r8-1]
  4308. + mov eax, edx
  4309. + shl eax, cl
  4310. + jmp short loc_2E163
  4311. +
  4312. +loc_2E161:
  4313. + mov eax, edx
  4314. +
  4315. +loc_2E163:
  4316. + lea ecx, [rax*8]
  4317. + shl edx, cl
  4318. + mov ebx, edx
  4319. +
  4320. +loc_2E16E:
  4321. + test r11b, 60h
  4322. + jnz short loc_2E191
  4323. + lea eax, [rbx-1]
  4324. + test r9d, eax
  4325. + jz short loc_2E191
  4326. + mov rdx, [r10+8]
  4327. + mov r8d, [rsi]
  4328. + mov rcx, rbp
  4329. + add rdx, 38h
  4330. + call PushPreserveWriteObj
  4331. + jmp short loc_2E1ED
  4332. +
  4333. +loc_2E191:
  4334. + mov r9, [r10+8]
  4335. + lea rdx, WriteFieldObj
  4336. + mov rcx, rbp
  4337. + lea r8, [r9+38h]
  4338. + mov r9, [r9+58h]
  4339. + mov dword ptr [rsp+28h], 4
  4340. + mov [rsp+20h], rsi
  4341. + call PushAccFieldObj
  4342. + jmp short loc_2E1ED
  4343. +
  4344. +loc_2E1BB:
  4345. + lea rdx, [rsp+68h]
  4346. + call GetFieldUnitRegionObj
  4347. + test eax, eax
  4348. + jnz short loc_2E1ED
  4349. + mov rdx, [rsp+68h]
  4350. + test rdx, rdx
  4351. + jz short loc_2E1ED
  4352. + movzx eax, byte ptr [rsp+80h]
  4353. + mov r9, rsi
  4354. + mov r8, rdi
  4355. + mov rcx, rbp
  4356. + mov [rsp+20h], al
  4357. + call AccessBaseField
  4358. +
  4359. +loc_2E1ED:
  4360. + mov rdi, [rsp+38h]
  4361. + mov rsi, [rsp+40h]
  4362. + mov rbp, [rsp+48h]
  4363. + mov rbx, [rsp+50h]
  4364. + add rsp, 58h
  4365. + ret
  4366. +AccessFieldData ENDP
  4367. +
  4368. +ACPIGetConvertToHardwareID PROC
  4369. + mov r11, rsp
  4370. + sub rsp, 78h
  4371. + mov [r11-8], rbx
  4372. + mov [r11-10h], rbp
  4373. + mov [r11-18h], rsi
  4374. + mov [r11-20h], rdi
  4375. + mov [r11-28h], r12
  4376. + mov [r11-30h], r13
  4377. + mov eax, r9d
  4378. + xor r13b, r13b
  4379. + mov [r11-38h], r14
  4380. + and eax, 8000000h
  4381. + mov esi, r9d
  4382. + mov rdi, r8
  4383. + mov rbp, rcx
  4384. + jnz loc_1FAE7
  4385. + mov rcx, 1000000000h
  4386. + test [rbp+0], rcx
  4387. + jz loc_1FAE7
  4388. + lea rax, [r11+10h]
  4389. + mov rcx, rbp
  4390. + mov [r11-50h], rax
  4391. + lea rax, [r11-48h]
  4392. + mov [r11-58h], rax
  4393. + call ACPIGetProcessorID
  4394. + test eax, eax
  4395. + mov edi, eax
  4396. + js short loc_1FABD
  4397. + mov ebp, [rsp+88h]
  4398. + mov rdi, [rsp+30h]
  4399. + mov rbx, [rsp+30h]
  4400. +
  4401. +loc_1FA90:
  4402. + mov rax, [rsp+0A0h]
  4403. + mov [rax], rdi
  4404. + mov rax, [rsp+0A8h]
  4405. + test rax, rax
  4406. + jz short loc_1FAAA
  4407. + mov [rax], ebp
  4408. +
  4409. +loc_1FAAA:
  4410. + xor edi, edi
  4411. +
  4412. +loc_1FAAC:
  4413. + cmp r13b, 1
  4414. + jnz short loc_1FABD
  4415. + xor edx, edx
  4416. + mov rcx, rbx
  4417. + callex ExFreePoolWithTag
  4418. +
  4419. +loc_1FABD:
  4420. + mov eax, edi
  4421. +
  4422. +loc_1FABF:
  4423. + mov r14, [rsp+40h]
  4424. + mov r13, [rsp+48h]
  4425. + mov r12, [rsp+50h]
  4426. + mov rdi, [rsp+58h]
  4427. + mov rsi, [rsp+60h]
  4428. + mov rbp, [rsp+68h]
  4429. + mov rbx, [rsp+70h]
  4430. + add rsp, 78h
  4431. + ret
  4432. +
  4433. +loc_1FAE7:
  4434. + test eax, eax
  4435. + jnz loc_1FB71
  4436. + mov rcx, 800000000000h
  4437. + test [rbp+0], rcx
  4438. + jz short loc_1FB71
  4439. + mov rdi, [rbp+1B0h]
  4440. + mov rcx, 0FFFFFFFFFFFFFFFFh
  4441. + mov r8d, 53706341h
  4442. + repne scasb
  4443. + not rcx
  4444. + lea r12, [rcx-1]
  4445. + mov ecx, r9d
  4446. + shr ecx, 1Ch
  4447. + add r12d, 0FFFFFFFCh
  4448. + not ecx
  4449. + mov edx, r12d
  4450. + mov edi, r12d
  4451. + and ecx, 1
  4452. + callex ExAllocatePoolWithTag
  4453. + test rax, rax
  4454. + mov rbx, rax
  4455. + jz loc_1FC4A
  4456. + mov r8, rdi
  4457. + xor edx, edx
  4458. + mov rcx, rax
  4459. + call memset
  4460. + mov rdx, [rbp+1B0h]
  4461. + lea r8d, [r12-1]
  4462. + add rdx, 5
  4463. + mov rcx, rbx
  4464. + mov r13b, 1
  4465. + callex strncpy
  4466. + jmp loc_1FC6A
  4467. +
  4468. +loc_1FB71:
  4469. + test eax, eax
  4470. + jnz short loc_1FBDE
  4471. + mov rax, 4000000000h
  4472. + test [rbp+0], rax
  4473. + jz short loc_1FBDE
  4474. + mov ecx, r9d
  4475. + mov r12d, 0Dh
  4476. + mov r8d, 53706341h
  4477. + shr ecx, 1Ch
  4478. + mov rdx, r12
  4479. + not ecx
  4480. + and ecx, 1
  4481. + callex ExAllocatePoolWithTag
  4482. + test rax, rax
  4483. + mov rbx, rax
  4484. + jnz short loc_1FBB7
  4485. + mov eax, 0C000009Ah
  4486. + jmp loc_1FABF
  4487. +
  4488. +loc_1FBB7:
  4489. + xor eax, eax
  4490. + lea rdx, asmPciBarName
  4491. + mov rcx, rbx
  4492. + mov [rbx], rax
  4493. + mov [rbx+8], eax
  4494. + lea r8d, [rax+0Ch]
  4495. + mov [rbx+0Ch], al
  4496. + mov r13b, 1
  4497. + callex strncpy
  4498. + jmp loc_1FC6A
  4499. +
  4500. +loc_1FBDE:
  4501. + test edx, edx
  4502. + jns short loc_1FBE9
  4503. + mov eax, edx
  4504. + jmp loc_1FABF
  4505. +
  4506. +loc_1FBE9:
  4507. + movzx ecx, word ptr [r8+2]
  4508. + dec ecx
  4509. + jz short loc_1FC22
  4510. + dec ecx
  4511. + jz short loc_1FC00
  4512. + mov eax, 0C014000Fh
  4513. + jmp loc_1FABF
  4514. +
  4515. +loc_1FC00:
  4516. + mov rbx, [r8+20h]
  4517. + cmp byte ptr [rbx], 2Ah
  4518. + jnz short loc_1FC0C
  4519. + inc rbx
  4520. +
  4521. +loc_1FC0C:
  4522. + xor eax, eax
  4523. + mov rcx, 0FFFFFFFFFFFFFFFFh
  4524. + mov rdi, rbx
  4525. + repne scasb
  4526. + not rcx
  4527. + mov r12d, ecx
  4528. + jmp short loc_1FC6A
  4529. +
  4530. +loc_1FC22:
  4531. + mov ecx, r9d
  4532. + mov r12d, 8
  4533. + mov r8d, 53706341h
  4534. + shr ecx, 1Ch
  4535. + mov rdx, r12
  4536. + not ecx
  4537. + and ecx, 1
  4538. + callex ExAllocatePoolWithTag
  4539. + test rax, rax
  4540. + mov rbx, rax
  4541. + jnz short loc_1FC54
  4542. +
  4543. +loc_1FC4A:
  4544. + mov edi, 0C000009Ah
  4545. + jmp loc_1FABD
  4546. +
  4547. +loc_1FC54:
  4548. + xor eax, eax
  4549. + xor r8d, r8d
  4550. + mov rcx, rbx
  4551. + mov [rbx], rax
  4552. + mov edx, [rdi+10h]
  4553. + mov r13b, 1
  4554. + call ACPIAmliDoubleToName
  4555. +
  4556. +loc_1FC6A:
  4557. + shr esi, 1Ch
  4558. + lea ebp, [r12+r12+7]
  4559. + mov r8d, 53706341h
  4560. + not esi
  4561. + mov edx, ebp
  4562. + mov r14d, ebp
  4563. + and esi, 1
  4564. + mov ecx, esi
  4565. + callex ExAllocatePoolWithTag
  4566. + test rax, rax
  4567. + mov rdi, rax
  4568. + jnz short loc_1FC9C
  4569. + mov edi, 0C000009Ah
  4570. + jmp loc_1FAAC
  4571. +
  4572. +loc_1FC9C:
  4573. + mov r8, r14
  4574. + xor edx, edx
  4575. + mov rcx, rax
  4576. +
  4577. +loc_1FCA4:
  4578. + call memset
  4579. + lea rdx, asmACPI2Name
  4580. + mov r8, rbx
  4581. + mov rcx, rdi
  4582. + callex sprintf
  4583. + lea ecx, [r12+5]
  4584. + lea rdx, asmStar2Name
  4585. + add rcx, rdi
  4586. + mov r8, rbx
  4587. + callex sprintf
  4588. + jmp loc_1FA90
  4589. +ACPIGetConvertToHardwareID ENDP
  4590. +
  4591. +
  4592. +ACPIGetConvertToHardwareIDWide PROC
  4593. + mov r11, rsp
  4594. + sub rsp, 78h
  4595. + mov [r11-8], rbx
  4596. + mov [r11-10h], rbp
  4597. + mov [r11-18h], rsi
  4598. + mov [r11-20h], rdi
  4599. + mov [r11-28h], r12
  4600. + mov [r11-30h], r13
  4601. + mov eax, r9d
  4602. + xor r13b, r13b
  4603. + mov [r11-38h], r14
  4604. + and eax, 8000000h
  4605. + mov esi, r9d
  4606. + mov rdi, r8
  4607. + mov rbp, rcx
  4608. + jnz loc_1FDBB
  4609. + mov rcx, 1000000000h
  4610. + test [rbp+0], rcx
  4611. + jz loc_1FDBB
  4612. + lea rax, [r11+10h]
  4613. + mov rcx, rbp
  4614. + mov [r11-50h], rax
  4615. + lea rax, [r11-48h]
  4616. + mov [r11-58h], rax
  4617. + call ACPIGetProcessorIDWide
  4618. + test eax, eax
  4619. + mov edi, eax
  4620. + js short loc_1FD91
  4621. + mov ebp, [rsp+88h]
  4622. + mov rdi, [rsp+30h]
  4623. + mov rbx, [rsp+30h]
  4624. +
  4625. +loc_1FD60:
  4626. + mov rax, [rsp+0A0h]
  4627. + mov rcx, [rsp+0A8h]
  4628. + test rcx, rcx
  4629. + mov [rax], rdi
  4630. + jz short loc_1FD7E
  4631. + lea eax, [rbp+rbp+0]
  4632. + mov [rcx], eax
  4633. +
  4634. +loc_1FD7E:
  4635. + xor edi, edi
  4636. +
  4637. +loc_1FD80:
  4638. + cmp r13b, 1
  4639. + jnz short loc_1FD91
  4640. + xor edx, edx
  4641. + mov rcx, rbx
  4642. + callex ExFreePoolWithTag
  4643. +
  4644. +loc_1FD91:
  4645. + mov eax, edi
  4646. +
  4647. +loc_1FD93:
  4648. + mov r14, [rsp+40h]
  4649. + mov r13, [rsp+48h]
  4650. + mov r12, [rsp+50h]
  4651. + mov rdi, [rsp+58h]
  4652. + mov rsi, [rsp+60h]
  4653. + mov rbp, [rsp+68h]
  4654. + mov rbx, [rsp+70h]
  4655. + add rsp, 78h
  4656. + ret
  4657. +
  4658. +loc_1FDBB:
  4659. + test eax, eax
  4660. + jnz loc_1FE45
  4661. + mov rcx, 800000000000h
  4662. + test [rbp+0], rcx
  4663. + jz short loc_1FE45
  4664. + mov rdi, [rbp+1B0h]
  4665. + mov rcx, 0FFFFFFFFFFFFFFFFh
  4666. + mov r8d, 53706341h
  4667. + repne scasb
  4668. + not rcx
  4669. + lea r12, [rcx-1]
  4670. + mov ecx, r9d
  4671. + shr ecx, 1Ch
  4672. + add r12d, 0FFFFFFFCh
  4673. + not ecx
  4674. + mov edx, r12d
  4675. + mov edi, r12d
  4676. + and ecx, 1
  4677. + callex ExAllocatePoolWithTag
  4678. + test rax, rax
  4679. + mov rbx, rax
  4680. + jz loc_1FF1E
  4681. + mov r8, rdi
  4682. + xor edx, edx
  4683. + mov rcx, rax
  4684. + call memset
  4685. + mov rdx, [rbp+1B0h]
  4686. + lea r8d, [r12-1]
  4687. + add rdx, 5
  4688. + mov rcx, rbx
  4689. + mov r13b, 1
  4690. + callex strncpy
  4691. + jmp loc_1FF3E
  4692. +
  4693. +loc_1FE45:
  4694. + test eax, eax
  4695. + jnz short loc_1FEB2
  4696. + mov rax, 4000000000h
  4697. + test [rbp+0], rax
  4698. + jz short loc_1FEB2
  4699. + mov ecx, r9d
  4700. + mov r12d, 0Dh
  4701. + mov r8d, 53706341h
  4702. + shr ecx, 1Ch
  4703. + mov rdx, r12
  4704. + not ecx
  4705. + and ecx, 1
  4706. + callex ExAllocatePoolWithTag
  4707. + test rax, rax
  4708. + mov rbx, rax
  4709. + jnz short loc_1FE8B
  4710. + mov eax, 0C000009Ah
  4711. + jmp loc_1FD93
  4712. +
  4713. +loc_1FE8B:
  4714. + xor eax, eax
  4715. + lea rdx, asmPciBarName
  4716. + mov rcx, rbx
  4717. + mov [rbx], rax
  4718. + mov [rbx+8], eax
  4719. + lea r8d, [rax+0Ch]
  4720. + mov [rbx+0Ch], al
  4721. + mov r13b, 1
  4722. + callex strncpy
  4723. + jmp loc_1FF3E
  4724. +
  4725. +loc_1FEB2:
  4726. + test edx, edx
  4727. + jns short loc_1FEBD
  4728. + mov eax, edx
  4729. + jmp loc_1FD93
  4730. +
  4731. +loc_1FEBD:
  4732. + movzx ecx, word ptr [r8+2]
  4733. + dec ecx
  4734. + jz short loc_1FEF6
  4735. + dec ecx
  4736. + jz short loc_1FED4
  4737. + mov eax, 0C014000Fh
  4738. + jmp loc_1FD93
  4739. +
  4740. +loc_1FED4:
  4741. + mov rbx, [r8+20h]
  4742. + cmp byte ptr [rbx], 2Ah
  4743. + jnz short loc_1FEE0
  4744. + inc rbx
  4745. +
  4746. +loc_1FEE0:
  4747. + xor eax, eax
  4748. + mov rcx, 0FFFFFFFFFFFFFFFFh
  4749. + mov rdi, rbx
  4750. + repne scasb
  4751. + not rcx
  4752. + mov r12d, ecx
  4753. + jmp short loc_1FF3E
  4754. +
  4755. +loc_1FEF6:
  4756. + mov ecx, r9d
  4757. + mov r12d, 8
  4758. + mov r8d, 53706341h
  4759. + shr ecx, 1Ch
  4760. + mov rdx, r12
  4761. + not ecx
  4762. + and ecx, 1
  4763. + callex ExAllocatePoolWithTag
  4764. + test rax, rax
  4765. + mov rbx, rax
  4766. + jnz short loc_1FF28
  4767. +
  4768. +loc_1FF1E:
  4769. + mov edi, 0C000009Ah
  4770. + jmp loc_1FD91
  4771. +
  4772. +loc_1FF28:
  4773. + xor eax, eax
  4774. + xor r8d, r8d
  4775. + mov rcx, rbx
  4776. + mov [rbx], rax
  4777. + mov edx, [rdi+10h]
  4778. + mov r13b, 1
  4779. + call ACPIAmliDoubleToName
  4780. +
  4781. +loc_1FF3E:
  4782. + shr esi, 1Ch
  4783. + lea ebp, [r12+r12+7]
  4784. + mov r8d, 53706341h
  4785. + mov r14d, ebp
  4786. + not esi
  4787. + add r14, r14
  4788. + and esi, 1
  4789. + mov rdx, r14
  4790. + mov ecx, esi
  4791. + callex ExAllocatePoolWithTag
  4792. + test rax, rax
  4793. + mov rdi, rax
  4794. + jnz short loc_1FF74
  4795. + mov edi, 0C000009Ah
  4796. + jmp loc_1FD80
  4797. +
  4798. +loc_1FF74:
  4799. + mov r8, r14
  4800. + xor edx, edx
  4801. + mov rcx, rax
  4802. + call memset
  4803. + lea rdx, asmACPI2NameL
  4804. + mov r8, rbx
  4805. + mov rcx, rdi
  4806. + callex swprintf
  4807. + lea edx, [r12+5]
  4808. + mov r8, rbx
  4809. + lea rcx, [rdi+rdx*2]
  4810. + lea rdx, asmStar2NameL
  4811. + callex swprintf
  4812. + jmp loc_1FD60
  4813. +ACPIGetConvertToHardwareIDWide ENDP
  4814. +
  4815. +
  4816. +ACPIDevicePowerProcessPhase3 PROC
  4817. + mov rax, rsp
  4818. + sub rsp, 68h
  4819. + mov [rax+8], rbx
  4820. + mov [rax+10h], rbp
  4821. + mov [rax+18h], rsi
  4822. + mov [rax+20h], rdi
  4823. + mov [rax-8], r12
  4824. + mov [rax-10h], r13
  4825. + mov [rax-18h], r14
  4826. + lea rcx, AcpiPowerLock
  4827. + xor r13b, r13b
  4828. + mov [rax-20h], r15
  4829. + callex KeAcquireSpinLockAtDpcLevel
  4830. + mov r12, [AcpiPowerNodeList]
  4831. + lea rdi, AcpiPowerNodeList
  4832. + mov r9d, 4
  4833. + xor r15d, r15d
  4834. + cmp r12, rdi
  4835. + lea edx, [r9-3]
  4836. + jz loc_194F3
  4837. + lea r14, ACPIDeviceCompletePhase3On
  4838. +
  4839. +loc_19352:
  4840. + mov rsi, r12
  4841. + mov r12, [r12]
  4842. + test byte ptr [rsi+10h], 2
  4843. + jz loc_194E1
  4844. + mov eax, 3
  4845. + lock cmpxchg [rsi+40h], r9d
  4846. + jnz loc_194E1
  4847. + mov r10, [rsi+30h]
  4848. + lea r11, [rsi+30h]
  4849. + mov r8d, r15d
  4850. + cmp r10, r11
  4851. + jz short loc_193CD
  4852. +
  4853. + ALIGN16
  4854. +loc_19390:
  4855. + mov rdx, [r10-8]
  4856. + lea r9, [r10-28h]
  4857. + mov r10, [r10]
  4858. + xor eax, eax
  4859. + lock cmpxchg [rdx+17Ch], r15d
  4860. + mov ecx, [r9+14h]
  4861. + cmp [rdx+178h], ecx
  4862. + jz short loc_193BC
  4863. + test eax, eax
  4864. + jz short loc_193BF
  4865. + cmp [r9+18h], r15b
  4866. + jz short loc_193BF
  4867. +
  4868. +loc_193BC:
  4869. + inc r8d
  4870. +
  4871. +loc_193BF:
  4872. + cmp r10, r11
  4873. + jnz short loc_19390
  4874. + mov edx, 1
  4875. + lea r9d, [rdx+3]
  4876. +
  4877. +loc_193CD:
  4878. + mov eax, r8d
  4879. + xchg eax, [rsi+18h]
  4880. + mov rcx, [rsi+10h]
  4881. + test rcx, 440h
  4882. + jnz loc_194E1
  4883. + test rcx, 220h
  4884. + jnz short loc_193F6
  4885. + test r8d, r8d
  4886. + jz loc_194E1
  4887. +
  4888. +loc_193F6:
  4889. + mov eax, r9d
  4890. + lock cmpxchg [rsi+40h], edx
  4891. + lea rcx, AcpiPowerLock
  4892. + callex KeReleaseSpinLockFromDpcLevel
  4893. + mov rcx, [rsi+48h]
  4894. + xor r9d, r9d
  4895. + xor r8d, r8d
  4896. + xor edx, edx
  4897. + mov [rsp+28h], rsi
  4898. + mov [rsp+20h], r14
  4899. + call AMLIAsyncEvalObject
  4900. + cmp eax, 103h
  4901. + mov ebx, eax
  4902. + jz loc_194D1
  4903. + lea rcx, AcpiPowerLock
  4904. + callex KeAcquireSpinLockRaiseToDpc
  4905. + test ebx, ebx
  4906. + movzx edi, al
  4907. + js short loc_19459
  4908. + xor r8d, r8d
  4909. + lea rcx, [rsi+10h]
  4910. + lea edx, [r8+10h]
  4911. + call ACPIInternalUpdateFlags
  4912. + jmp short loc_1946A
  4913. +
  4914. +loc_19459:
  4915. + lea rcx, [rsi+10h]
  4916. + xor r8d, r8d
  4917. + mov edx, 10000h
  4918. + call ACPIInternalUpdateFlags
  4919. +
  4920. +loc_1946A:
  4921. + lea rcx, AcpiPowerLock
  4922. + movzx edx, dil
  4923. + callex KeReleaseSpinLock
  4924. + mov eax, 1
  4925. + lock cmpxchg [rsi+40h], r15d
  4926. + lea rcx, AcpiPowerQueueLock
  4927. + callex KeAcquireSpinLockRaiseToDpc
  4928. + cmp [AcpiPowerDpcRunning], r15b
  4929. + mov [AcpiPowerWorkDone], 1
  4930. + movzx ebx, al
  4931. + jnz short loc_194B8
  4932. + lea rcx, AcpiPowerDpc
  4933. + xor r8d, r8d
  4934. + xor edx, edx
  4935. + callex KeInsertQueueDpc
  4936. +
  4937. +loc_194B8:
  4938. + lea rcx, AcpiPowerQueueLock
  4939. + movzx edx, bl
  4940. + callex KeReleaseSpinLock
  4941. + lea rdi, AcpiPowerNodeList
  4942. + jmp short loc_194D4
  4943. +
  4944. +loc_194D1:
  4945. + mov r13b, 1
  4946. +
  4947. +loc_194D4:
  4948. + lea rcx, AcpiPowerLock
  4949. + callex KeAcquireSpinLockAtDpcLevel
  4950. +
  4951. +loc_194E1:
  4952. + cmp r12, rdi
  4953. + mov edx, 1
  4954. + lea r9d, [rdx+3]
  4955. + jnz loc_19352
  4956. +
  4957. +loc_194F3:
  4958. + mov rsi, [AcpiPowerNodeList+8] ; Blink
  4959. + cmp rsi, rdi
  4960. + jz loc_19643
  4961. + lea r14, ACPIDeviceCompletePhase3Off
  4962. + lea rax, AcpiPowerNodeList
  4963. +
  4964. +loc_19511:
  4965. + mov rbx, rsi
  4966. + mov rsi, [rsi+8]
  4967. + test byte ptr [rbx+10h], 2
  4968. + jz loc_19631
  4969. + mov eax, r9d
  4970. + lock cmpxchg [rbx+40h], edx
  4971. + jz short loc_19543
  4972. + test eax, eax
  4973. + jz loc_1962A
  4974. + mov r13b, 1
  4975. + lea rax, AcpiPowerNodeList
  4976. + jmp loc_19631
  4977. +
  4978. +loc_19543:
  4979. + lea rcx, AcpiPowerLock
  4980. + callex KeReleaseSpinLockFromDpcLevel
  4981. + mov rcx, [rbx+50h]
  4982. + xor r9d, r9d
  4983. + xor r8d, r8d
  4984. + xor edx, edx
  4985. + mov [rsp+28h], rbx
  4986. + mov [rsp+20h], r14
  4987. + call AMLIAsyncEvalObject
  4988. + cmp eax, 103h
  4989. + mov ebp, eax
  4990. + jz loc_19611
  4991. + lea rcx, AcpiPowerLock
  4992. + callex KeAcquireSpinLockRaiseToDpc
  4993. + test ebp, ebp
  4994. + movzx r12d, al
  4995. + js short loc_195A0
  4996. + lea rcx, [rbx+10h]
  4997. + mov r8b, 1
  4998. + mov edx, 10h
  4999. + call ACPIInternalUpdateFlags
  5000. + jmp short loc_195B1
  5001. +
  5002. +loc_195A0:
  5003. + lea rcx, [rbx+10h]
  5004. + xor r8d, r8d
  5005. + mov edx, 10000h
  5006. + call ACPIInternalUpdateFlags
  5007. +
  5008. +loc_195B1:
  5009. + lea rcx, AcpiPowerLock
  5010. + movzx edx, r12b
  5011. + callex KeReleaseSpinLock
  5012. + mov eax, 1
  5013. + lock cmpxchg [rbx+40h], r15d
  5014. + lea rcx, AcpiPowerQueueLock
  5015. + callex KeAcquireSpinLockRaiseToDpc
  5016. + cmp [AcpiPowerDpcRunning], r15b
  5017. + mov [AcpiPowerWorkDone], 1
  5018. + movzx ebx, al
  5019. + jnz short loc_195FF
  5020. + lea rcx, AcpiPowerDpc
  5021. + xor r8d, r8d
  5022. + xor edx, edx
  5023. + callex KeInsertQueueDpc
  5024. +
  5025. +loc_195FF:
  5026. + lea rcx, AcpiPowerQueueLock
  5027. + movzx edx, bl
  5028. + callex KeReleaseSpinLock
  5029. + jmp short loc_19614
  5030. +
  5031. +loc_19611:
  5032. + mov r13b, 1
  5033. +
  5034. +loc_19614:
  5035. + lea rcx, AcpiPowerLock
  5036. + callex KeAcquireSpinLockAtDpcLevel
  5037. + lea rax, AcpiPowerNodeList
  5038. + jmp short loc_19631
  5039. +
  5040. +loc_1962A:
  5041. + lea rax, AcpiPowerNodeList
  5042. +
  5043. +loc_19631:
  5044. + cmp rsi, rax
  5045. + mov edx, 1
  5046. + lea r9d, [rdx+3]
  5047. + jnz loc_19511
  5048. +
  5049. +loc_19643:
  5050. + lea rcx, AcpiPowerLock
  5051. + callex KeReleaseSpinLockFromDpcLevel
  5052. + mov r15, [rsp+48h]
  5053. + mov r14, [rsp+50h]
  5054. + mov r12, [rsp+60h]
  5055. + mov rdi, [rsp+88h]
  5056. + mov rsi, [rsp+80h]
  5057. + mov rbp, [rsp+78h]
  5058. + mov rbx, [rsp+70h]
  5059. + neg r13b
  5060. + mov r13, [rsp+58h]
  5061. + sbb eax, eax
  5062. + and eax, 103h
  5063. + add rsp, 68h
  5064. + ret
  5065. +ACPIDevicePowerProcessPhase3 ENDP
  5066. +
  5067. +
  5068. +OSNotifyDeviceCheck PROC
  5069. + sub rsp, 28h
  5070. + mov [rsp+40h], rbx
  5071. + mov [rsp+48h], rdi
  5072. + mov rbx, rcx
  5073. + call ACPIDockIsDockDevice
  5074. + test al, al
  5075. + jz short loc_24C89
  5076. + mov rdi, [rbx+60h]
  5077. + mov rcx, rbx
  5078. + call ACPIDockIsDockDevice
  5079. + test al, al
  5080. + jz short loc_24C59
  5081. + mov rcx, rdi
  5082. + call ACPIDockFindCorrespondingDock
  5083. + test rax, rax
  5084. + mov rdi, rax
  5085. + jnz short loc_24C62
  5086. + mov rdi, [rsp+48h]
  5087. + mov rbx, [rsp+40h]
  5088. + add rsp, 28h
  5089. + ret
  5090. +
  5091. +loc_24C59:
  5092. + test rdi, rdi
  5093. + jz loc_24D03
  5094. +
  5095. +loc_24C62:
  5096. + test byte ptr [rdi], 8
  5097. + jnz loc_24D03
  5098. + mov rcx, [rdi+200h]
  5099. + callex IoRequestDeviceEject
  5100. + xor eax, eax
  5101. + mov rdi, [rsp+48h]
  5102. + mov rbx, [rsp+40h]
  5103. + add rsp, 28h
  5104. + ret
  5105. +
  5106. +loc_24C89:
  5107. + lea rcx, AcpiDeviceTreeLock
  5108. + callex KeAcquireSpinLockRaiseToDpc
  5109. + movzx edi, al
  5110. +
  5111. + ALIGN16
  5112. +loc_24CA0:
  5113. + mov rcx, [rbx+60h]
  5114. + mov rbx, [rbx+10h]
  5115. + test rcx, rcx
  5116. + jz short loc_24CB8
  5117. + cmp dword ptr [rcx+8], 5F534750h
  5118. + jz short loc_24CC2
  5119. + xor ecx, ecx
  5120. +
  5121. +loc_24CB8:
  5122. + test rbx, rbx
  5123. + jnz short loc_24CA0
  5124. + test rcx, rcx
  5125. + jz short loc_24CF2
  5126. +
  5127. +loc_24CC2:
  5128. + mov rcx, [rcx+208h]
  5129. + test rcx, rcx
  5130. + jz short loc_24CF2
  5131. + xchg ax, ax
  5132. +
  5133. +loc_24CD0:
  5134. + test byte ptr [rcx], 8
  5135. + jz short loc_24CE3
  5136. + mov rcx, [rcx+208h]
  5137. + test rcx, rcx
  5138. + jnz short loc_24CD0
  5139. + jmp short loc_24CF2
  5140. +
  5141. +loc_24CE3:
  5142. + mov rcx, [rcx+200h]
  5143. + xor edx, edx
  5144. + callex IoInvalidateDeviceRelations
  5145. +
  5146. +loc_24CF2:
  5147. + lea rcx, AcpiDeviceTreeLock
  5148. + movzx edx, dil
  5149. + callex KeReleaseSpinLock
  5150. +
  5151. +loc_24D03:
  5152. + mov rdi, [rsp+48h]
  5153. + mov rbx, [rsp+40h]
  5154. + xor eax, eax
  5155. + add rsp, 28h
  5156. + ret
  5157. +OSNotifyDeviceCheck ENDP
  5158. +
  5159. +
  5160. +AcpiArblibReferenceArbiter PROC
  5161. + lock inc dword ptr [rcx+50h]
  5162. + ret
  5163. +AcpiArblibReferenceArbiter ENDP
  5164. +
  5165. +
  5166. +AcpiArblibDereferenceArbiter PROC
  5167. + lock dec dword ptr [rcx+50h]
  5168. + ret
  5169. +AcpiArblibDereferenceArbiter ENDP
  5170. +
  5171. +
  5172. +AcpiArblibEjectInterface PROC
  5173. + push rbx
  5174. + sub rsp, 20h
  5175. + mov rbx, rdx
  5176. + call ACPIInternalGetDeviceExtension
  5177. + mov r8, [rbx+0B8h]
  5178. + cmp word ptr [r8+12h], 0
  5179. + mov ecx, [r8+20h]
  5180. + mov rdx, [r8+18h]
  5181. + jnz loc_4E068
  5182. + cmp word ptr [r8+10h], 30h
  5183. + jnb short loc_4DFEC
  5184. + mov eax, 0C000000Dh
  5185. + add rsp, 20h
  5186. + pop rbx
  5187. + ret
  5188. +
  5189. +loc_4DFEC:
  5190. + cmp ecx, 1
  5191. + jnz short loc_4DFFA
  5192. + mov rcx, [rax+0C0h]
  5193. + jmp short loc_4E014
  5194. +
  5195. +loc_4DFFA:
  5196. + cmp ecx, 3
  5197. + jnz short loc_4E008
  5198. + mov rcx, [rax+0B8h]
  5199. + jmp short loc_4E014
  5200. +
  5201. +loc_4E008:
  5202. + cmp ecx, 6
  5203. + jnz short loc_4E068
  5204. + mov rcx, [rax+0C8h]
  5205. +
  5206. +loc_4E014:
  5207. + cmp byte ptr [rcx+82h], 1
  5208. + jnz short loc_4E068
  5209. + lea rax, AcpiArblibReferenceArbiter
  5210. + add rcx, 88h
  5211. + mov word ptr [rdx], 30h
  5212. + mov [rdx+10h], rax
  5213. + lea rax, AcpiArblibDereferenceArbiter
  5214. + mov word ptr [rdx+2], 0
  5215. + mov [rdx+18h], rax
  5216. + lea rax, ArbArbiterHandler
  5217. + mov [rdx+8], rcx
  5218. + mov [rdx+20h], rax
  5219. + mov dword ptr [rdx+28h], 0
  5220. + call AcpiArblibReferenceArbiter
  5221. + xor eax, eax
  5222. + add rsp, 20h
  5223. + pop rbx
  5224. + ret
  5225. +
  5226. +loc_4E068:
  5227. + mov eax, 0C00000BBh
  5228. + add rsp, 20h
  5229. + pop rbx
  5230. + ret
  5231. +AcpiArblibEjectInterface ENDP
  5232. +
  5233. +
  5234. +ACPIBusIrpQueryInterface PROC
  5235. + mov rax, rsp
  5236. + sub rsp, 38h
  5237. + mov [rax+8], rbx
  5238. + mov [rax+10h], rbp
  5239. + mov [rax+18h], rsi
  5240. + mov [rax+20h], rdi
  5241. + mov [rax-8], r12
  5242. + mov [rax-10h], r13
  5243. + mov [rax-18h], r14
  5244. + mov r14, [rdx+0B8h]
  5245. + mov rbx, rdx
  5246. + mov rsi, rcx
  5247. + call ACPIInternalGetDeviceExtension
  5248. + mov rbp, [r14+8]
  5249. + mov r12d, [r14+20h]
  5250. + lea rdx, GUID_ACPI_INTERFACE_STANDARD
  5251. + xor edi, edi
  5252. + cmp rbp, rdx
  5253. + mov r13, rax
  5254. + jz short loc_4F4F8
  5255. + lea r8d, [rdi+10h]
  5256. + mov rcx, rbp
  5257. + callex RtlCompareMemory
  5258. + mov ecx, edi
  5259. + cmp rax, 10h
  5260. + setz cl
  5261. + test ecx, ecx
  5262. + jz short loc_4F536
  5263. +
  5264. +loc_4F4F8:
  5265. + movzx eax, word ptr [r14+10h]
  5266. + cmp ax, 58h
  5267. + jbe short loc_4F50A
  5268. + mov ebp, 58h
  5269. + jmp short loc_4F50D
  5270. +
  5271. +loc_4F50A:
  5272. + movzx ebp, ax
  5273. +
  5274. +loc_4F50D:
  5275. + mov r12, [r14+18h]
  5276. + lea rdx, ACPIInterfaceTable
  5277. + mov r8d, ebp
  5278. + mov rcx, r12
  5279. + call memcpy
  5280. + cmp ebp, 10h
  5281. + jbe loc_4F70A
  5282. + mov [r12+8], rsi
  5283. + mov [rbx+30h], edi
  5284. + jmp short loc_4F596
  5285. +
  5286. +loc_4F536:
  5287. + lea rdx, GUID_TRANSLATOR_INTERFACE_STANDARD
  5288. + cmp rbp, rdx
  5289. + jz short loc_4F562
  5290. + mov r8d, 10h
  5291. + mov rcx, rbp
  5292. + callex RtlCompareMemory
  5293. + mov ecx, edi
  5294. + cmp rax, 10h
  5295. + setz cl
  5296. + test ecx, ecx
  5297. + jz loc_4F5F5
  5298. +
  5299. +loc_4F562:
  5300. + cmp r12d, 2
  5301. + jnz short loc_4F5CB
  5302. + mov rcx, rsi
  5303. + call IsPciBus
  5304. + test al, al
  5305. + jz short loc_4F593
  5306. + mov rax, [rbx+0B8h]
  5307. + xor edx, edx
  5308. + mov rcx, [rax+8]
  5309. + mov [rcx], edx
  5310. + mov [rcx+4], edx
  5311. + mov [rcx+8], edx
  5312. + mov [rcx+0Ch], edx
  5313. + mov dword ptr [rbx+30h], 0C00000BBh
  5314. +
  5315. +loc_4F593:
  5316. + mov edi, [rbx+30h]
  5317. +
  5318. +loc_4F596:
  5319. + xor edx, edx
  5320. + mov rcx, rbx
  5321. + callex IofCompleteRequest
  5322. + mov r14, [rsp+20h]
  5323. + mov r13, [rsp+28h]
  5324. + mov r12, [rsp+30h]
  5325. + mov rsi, [rsp+50h]
  5326. + mov rbp, [rsp+48h]
  5327. + mov rbx, [rsp+40h]
  5328. + mov eax, edi
  5329. + mov rdi, [rsp+58h]
  5330. + add rsp, 38h
  5331. + ret
  5332. +
  5333. +loc_4F5CB:
  5334. + cmp r12d, 1
  5335. + jz short loc_4F5D7
  5336. + cmp r12d, 3
  5337. + jnz short loc_4F593
  5338. +
  5339. +loc_4F5D7:
  5340. + mov rcx, rsi
  5341. + call IsPciBus
  5342. + test al, al
  5343. + jz short loc_4F593
  5344. + mov rdx, rbx
  5345. + mov rcx, rsi
  5346. + call TranslateEjectInterface
  5347. + mov edi, eax
  5348. + jmp loc_4F6FE
  5349. +
  5350. +loc_4F5F5:
  5351. + lea rdx, GUID_PCI_BUS_INTERFACE_STANDARD
  5352. + cmp rbp, rdx
  5353. + jz short loc_4F61D
  5354. + mov r8d, 10h
  5355. + mov rcx, rbp
  5356. + callex RtlCompareMemory
  5357. + mov ecx, edi
  5358. + cmp rax, 10h
  5359. + setz cl
  5360. + test ecx, ecx
  5361. + jz short loc_4F63F
  5362. +
  5363. +loc_4F61D:
  5364. + mov rcx, rsi
  5365. + call IsPciBus
  5366. + test al, al
  5367. + jz loc_4F593
  5368. + mov rdx, rbx
  5369. + mov rcx, rsi
  5370. + call PciBusEjectInterface
  5371. + mov edi, eax
  5372. + jmp loc_4F6FE
  5373. +
  5374. +loc_4F63F:
  5375. + lea rdx, GUID_BUS_INTERFACE_STANDARD
  5376. + cmp rbp, rdx
  5377. + jz short loc_4F667
  5378. + mov r8d, 10h
  5379. + mov rcx, rbp
  5380. + callex RtlCompareMemory
  5381. + mov ecx, edi
  5382. + cmp rax, 10h
  5383. + setz cl
  5384. + test ecx, ecx
  5385. + jz short loc_4F6A1
  5386. +
  5387. +loc_4F667:
  5388. + mov dword ptr [rbx+30h], 0C00002B9h
  5389. + mov rax, [r13+208h]
  5390. + test rax, rax
  5391. + jz loc_4F593
  5392. + mov rcx, [rax+1F0h]
  5393. + test rcx, rcx
  5394. + jz loc_4F593
  5395. + xor r8d, r8d
  5396. + mov rdx, r14
  5397. + call ACPIInternalSendSynchronousIrp
  5398. + mov [rbx+30h], eax
  5399. + jmp loc_4F593
  5400. +
  5401. +loc_4F6A1:
  5402. + lea rdx, GUID_ARBITER_INTERFACE_STANDARD
  5403. + cmp rbp, rdx
  5404. + jz short loc_4F6CC
  5405. + mov r8d, 10h
  5406. + mov rcx, rbp
  5407. + callex RtlCompareMemory
  5408. + cmp rax, 10h
  5409. + setz dil
  5410. + test edi, edi
  5411. + jz loc_4F593
  5412. +
  5413. +loc_4F6CC:
  5414. + mov rax, 2000000000h
  5415. + test [r13+0], rax
  5416. + jz loc_4F593
  5417. + cmp byte ptr [r13+0B0h], 0
  5418. + jz loc_4F593
  5419. + mov rdx, rbx
  5420. + mov rcx, rsi
  5421. + call AcpiArblibEjectInterface
  5422. + mov edi, eax
  5423. + mov [rbx+30h], eax
  5424. +
  5425. +loc_4F6FE:
  5426. + cmp edi, 0C00000BBh
  5427. + jz loc_4F593
  5428. +
  5429. +loc_4F70A:
  5430. + mov [rbx+30h], edi
  5431. + jmp loc_4F596
  5432. +ACPIBusIrpQueryInterface ENDP
  5433. +
  5434. +
  5435. +AcpiPortarbAddAllocation PROC
  5436. + mov r11, rsp
  5437. + sub rsp, 68h
  5438. + mov rax, [rdx+28h]
  5439. + movzx r9d, byte ptr [rdx+42h]
  5440. + mov r8, [rdx+8]
  5441. + mov [r11+8], rbx
  5442. + mov [r11+10h], rbp
  5443. + mov [r11+18h], rsi
  5444. + mov [r11+20h], rdi
  5445. + mov rbp, rcx
  5446. + mov edi, 1
  5447. + test [rax+1Ch], dil
  5448. + mov eax, 3
  5449. + mov [r11-8], r12
  5450. + cmovnz edi, eax
  5451. + mov rax, [rdx+20h]
  5452. + mov rbx, rdx
  5453. + mov rcx, [rax+20h]
  5454. + mov rdx, [rdx]
  5455. + mov [r11-10h], r13
  5456. + mov [r11-38h], rcx
  5457. + mov rcx, [rbp+28h]
  5458. + xor r13d, r13d
  5459. + mov [r11-40h], r13
  5460. + mov [rsp+20h], edi
  5461. + callex RtlAddRange
  5462. + mov rdx, [rbx]
  5463. + mov rax, [rbx+28h]
  5464. + movzx esi, byte ptr [rbx+42h]
  5465. + mov [rsp+40h], rdx
  5466. + mov rcx, [rax+20h]
  5467. + lea r8, [rsp+40h]
  5468. + movzx r12d, word ptr [rcx+4]
  5469. + or sil, 10h
  5470. + mov ecx, r12d
  5471. + call AcpiArblibGetNextAlias
  5472. + test al, al
  5473. + jz short loc_5438B
  5474. +
  5475. + ALIGN16
  5476. +loc_54340:
  5477. + mov rax, [rbx+28h]
  5478. + mov r9, [rbx+20h]
  5479. + mov rdx, [rsp+40h]
  5480. + mov ecx, [rax+10h]
  5481. + mov rax, [r9+20h]
  5482. + movzx r9d, sil
  5483. + mov [rsp+30h], rax
  5484. + lea r8, [rcx+rdx-1]
  5485. + mov rcx, [rbp+28h]
  5486. + mov [rsp+28h], r13
  5487. + mov [rsp+20h], edi
  5488. + callex RtlAddRange
  5489. + mov rdx, [rsp+40h]
  5490. + lea r8, [rsp+40h]
  5491. + mov ecx, r12d
  5492. + call AcpiArblibGetNextAlias
  5493. + test al, al
  5494. + jnz short loc_54340
  5495. +
  5496. +loc_5438B:
  5497. + mov r13, [rsp+58h]
  5498. + mov r12, [rsp+60h]
  5499. + mov rdi, [rsp+88h]
  5500. + mov rsi, [rsp+80h]
  5501. + mov rbp, [rsp+78h]
  5502. + mov rbx, [rsp+70h]
  5503. + add rsp, 68h
  5504. + ret
  5505. +AcpiPortarbAddAllocation ENDP
  5506. +
  5507. +
  5508. +AcpiArblibIsAliasedRangeAvailable PROC
  5509. + mov rax, rsp
  5510. + sub rsp, 0B8h
  5511. + mov [rax+10h], rbp
  5512. + mov [rax+18h], rsi
  5513. + mov [rax-10h], r13
  5514. + mov rsi, rcx
  5515. + mov rcx, [rdx+20h]
  5516. + xor r13b, r13b
  5517. + mov eax, [rcx+28h]
  5518. + mov rbp, rdx
  5519. + test eax, eax
  5520. + jz short loc_4D8D5
  5521. + cmp eax, 2
  5522. + jz short loc_4D8D5
  5523. + test byte ptr [rcx+2Ch], 1
  5524. + jz short loc_4D8D8
  5525. +
  5526. +loc_4D8D5:
  5527. + mov r13b, 1
  5528. +
  5529. +loc_4D8D8:
  5530. + mov [rsp+0C0h], rbx
  5531. + mov rbx, [rdx+28h]
  5532. + mov [rsp+0D8h], rdi
  5533. + mov rax, [rbx+20h]
  5534. + mov rdi, [rdx]
  5535. + mov [rsp+0B0h], r12
  5536. + movzx r12d, word ptr [rax+4]
  5537. + lea rcx, [rsp+50h]
  5538. + mov r8d, 50h
  5539. + mov [rsp+0A0h], r14
  5540. + call memcpy
  5541. + test byte ptr [rbx+1Ch], 1
  5542. + mov r14d, 2
  5543. + mov eax, 3
  5544. + mov ebx, r12d
  5545. + cmovnz r14d, eax
  5546. + and ebx, 4
  5547. +
  5548. +loc_4D931:
  5549. + test ebx, ebx
  5550. + jz short loc_4D93E
  5551. + add rdi, 400h
  5552. + jmp short loc_4D94F
  5553. +
  5554. +loc_4D93E:
  5555. + test r12b, 8
  5556. + jz loc_4D9D0
  5557. + add rdi, 1000h
  5558. +
  5559. +loc_4D94F:
  5560. + cmp rdi, 0FFFFh
  5561. + ja short loc_4D9D0
  5562. + mov rax, [rbp+28h]
  5563. + mov r9d, r14d
  5564. + mov rdx, rdi
  5565. + mov ecx, [rax+10h]
  5566. + lea rax, [rsp+40h]
  5567. + mov [rsp+38h], rax
  5568. + mov rax, [rsi+130h]
  5569. + lea r8, [rcx+rdi-1]
  5570. + mov rcx, [rsi+28h]
  5571. + mov [rsp+30h], rax
  5572. + mov rax, [rsi+128h]
  5573. + mov [rsp+28h], rax
  5574. + mov [rsp+20h], r13b
  5575. + callex RtlIsRangeAvailable
  5576. + cmp byte ptr [rsp+40h], 1
  5577. + jz short loc_4D931
  5578. + mov rax, [rbp+28h]
  5579. + mov [rsp+60h], rdi
  5580. + lea rdx, [rsp+50h]
  5581. + mov ecx, [rax+10h]
  5582. + lea rax, [rcx+rdi-1]
  5583. + mov rcx, rsi
  5584. + mov [rsp+68h], rax
  5585. + call qword ptr [rsi+108h]
  5586. + test al, al
  5587. + jnz loc_4D931
  5588. + jmp short loc_4D9D2
  5589. +
  5590. +loc_4D9D0:
  5591. + mov al, 1
  5592. +
  5593. +loc_4D9D2:
  5594. + mov r14, [rsp+0A0h]
  5595. + mov r13, [rsp+0A8h]
  5596. + mov r12, [rsp+0B0h]
  5597. + mov rdi, [rsp+0D8h]
  5598. + mov rsi, [rsp+0D0h]
  5599. + mov rbp, [rsp+0C8h]
  5600. + mov rbx, [rsp+0C0h]
  5601. + add rsp, 0B8h
  5602. + ret
  5603. +AcpiArblibIsAliasedRangeAvailable ENDP
  5604. +
  5605. +
  5606. +AcpiPortarbFindSuitableRange PROC
  5607. + sub rsp, 58h
  5608. + mov [rsp+60h], rbx
  5609. + mov rbx, rdx
  5610. + mov rdx, [rdx+28h]
  5611. + cmp dword ptr [rdx+10h], 0
  5612. + mov [rsp+78h], rdi
  5613. + mov rdi, rcx
  5614. + jnz short loc_541A6
  5615. + mov rax, [rbx]
  5616. + mov [rbx+8], rax
  5617. + mov al, 1
  5618. + mov rdi, [rsp+78h]
  5619. + mov rbx, [rsp+60h]
  5620. + add rsp, 58h
  5621. + ret
  5622. +
  5623. +loc_541A6:
  5624. + mov rcx, [rbx+20h]
  5625. +
  5626. +loc_541AA:
  5627. + mov [rsp+68h], rbp
  5628. + xor bpl, bpl
  5629. + mov eax, [rcx+28h]
  5630. + test eax, eax
  5631. + jz short loc_541C4
  5632. + cmp eax, 2
  5633. + jz short loc_541C4
  5634. + test byte ptr [rcx+2Ch], 1
  5635. + jz short loc_541C7
  5636. +
  5637. +loc_541C4:
  5638. + mov bpl, 1
  5639. +
  5640. +loc_541C7:
  5641. + mov rax, [rbx+18h]
  5642. + mov [rsp+70h], rsi
  5643. + movzx esi, byte ptr [rdx+1Ch]
  5644. + and esi, 1
  5645. + cmp [rbx+10h], rax
  5646. + ja loc_54272
  5647. +
  5648. +loc_541E1:
  5649. + mov rax, [rdi+130h]
  5650. + mov r9d, [rdx+10h]
  5651. + mov r8, [rbx+18h]
  5652. + mov rcx, [rdi+28h]
  5653. + mov [rsp+48h], rbx
  5654. + mov [rsp+40h], rax
  5655. + mov rax, [rdi+128h]
  5656. + mov [rsp+38h], rax
  5657. + mov eax, [rdx+14h]
  5658. + mov rdx, [rbx+10h]
  5659. + mov [rsp+30h], bpl
  5660. + mov [rsp+28h], esi
  5661. + mov [rsp+20h], eax
  5662. + callex RtlFindRange
  5663. + test eax, eax
  5664. + jns short loc_54238
  5665. + mov rdx, rbx
  5666. + mov rcx, rdi
  5667. + call qword ptr [rdi+108h]
  5668. + test al, al
  5669. + jz short loc_54272
  5670. +
  5671. +loc_54238:
  5672. + mov rax, [rbx+28h]
  5673. + mov rdx, rbx
  5674. + mov ecx, [rax+10h]
  5675. + mov rax, [rbx]
  5676. + lea rcx, [rcx+rax-1]
  5677. + mov [rbx+8], rcx
  5678. + mov rcx, rdi
  5679. + call AcpiArblibIsAliasedRangeAvailable
  5680. + test al, al
  5681. + jnz short loc_5428D
  5682. + mov rdx, [rbx+28h]
  5683. + mov eax, [rdx+10h]
  5684. + add [rbx], rax
  5685. + mov rax, [rbx+18h]
  5686. + cmp [rbx+10h], rax
  5687. + jbe loc_541E1
  5688. +
  5689. +loc_54272:
  5690. + xor al, al
  5691. +
  5692. +loc_54274:
  5693. + mov rsi, [rsp+70h]
  5694. + mov rbp, [rsp+68h]
  5695. + mov rdi, [rsp+78h]
  5696. + mov rbx, [rsp+60h]
  5697. + add rsp, 58h
  5698. + ret
  5699. +
  5700. +loc_5428D:
  5701. + mov al, 1
  5702. + jmp short loc_54274
  5703. +AcpiPortarbFindSuitableRange ENDP
  5704. +
  5705. +
  5706. +AcpiArblibGetNextAlias PROC
  5707. + test cl, 4
  5708. + jz short loc_4D86E
  5709. + lea rax, [rdx+400h]
  5710. + jmp short loc_4D87A
  5711. +
  5712. +loc_4D86E:
  5713. + test cl, 8
  5714. + jz short loc_4D888
  5715. + lea rax, [rdx+1000h]
  5716. +
  5717. +loc_4D87A:
  5718. + cmp rax, 0FFFFh
  5719. + ja short loc_4D888
  5720. + mov [r8], rax
  5721. + mov al, 1
  5722. + ret
  5723. +
  5724. +loc_4D888:
  5725. + xor al, al
  5726. + ret
  5727. +AcpiArblibGetNextAlias ENDP
  5728. +
  5729. +
  5730. +AcpiPortarbBacktrackAllocation PROC
  5731. + sub rsp, 38h
  5732. + mov [rsp+48h], rbx
  5733. + mov rbx, rdx
  5734. + mov rdx, [rdx]
  5735. + mov rax, [rbx+28h]
  5736. + mov [rsp+50h], rsi
  5737. + mov [rsp+20h], rdx
  5738. + mov esi, [rax+1Ch]
  5739. + mov [rsp+58h], rdi
  5740. + mov rdi, rcx
  5741. + lea r8, [rsp+20h]
  5742. + mov ecx, esi
  5743. + call AcpiArblibGetNextAlias
  5744. + test al, al
  5745. + jz short loc_54148
  5746. +
  5747. + ALIGN16
  5748. +loc_54110:
  5749. + mov rax, [rbx+28h]
  5750. + mov rdx, [rsp+20h]
  5751. + mov r9, [rbx+20h]
  5752. + mov ecx, [rax+10h]
  5753. + mov r9, [r9+20h]
  5754. + lea r8, [rcx+rdx-1]
  5755. + mov rcx, [rdi+28h]
  5756. + callex RtlDeleteRange
  5757. + mov rdx, [rsp+20h]
  5758. + lea r8, [rsp+20h]
  5759. + mov ecx, esi
  5760. + call AcpiArblibGetNextAlias
  5761. + test al, al
  5762. + jnz short loc_54110
  5763. +
  5764. +loc_54148:
  5765. + mov rdx, rbx
  5766. + mov rcx, rdi
  5767. + call ArbBacktrackAllocation
  5768. + mov rdi, [rsp+58h]
  5769. + mov rsi, [rsp+50h]
  5770. + mov rbx, [rsp+48h]
  5771. + add rsp, 38h
  5772. + ret
  5773. +AcpiPortarbBacktrackAllocation ENDP
  5774. +
  5775. +
  5776. +AcpiMemarbFindSuitableRange PROC
  5777. + mov rax, [rdx+20h]
  5778. + test byte ptr [rax+2Ch], 1
  5779. + jz short loc_5382E
  5780. + or byte ptr [rdx+43h], 1
  5781. +
  5782. +loc_5382E:
  5783. + jmp ArbFindSuitableRange
  5784. +AcpiMemarbFindSuitableRange ENDP
  5785. +
  5786. +
  5787. +AcpiInitializePortArbiter PROC
  5788. + sub rsp, 38h
  5789. + lea r8, AcpiArblibUnpackRequirement
  5790. + mov r9, rcx
  5791. + mov qword ptr [rsp+28h], 0
  5792. + mov [rcx+0F8h], r8
  5793. + lea r8, AcpiArblibPackResource
  5794. + add rcx, 88h
  5795. + mov [rcx+78h], r8
  5796. + lea r8, AcpiArblibUnpackResource
  5797. + mov [rcx+80h], r8
  5798. + lea r8, AcpiArblibScoreRequirement
  5799. + mov [rcx+88h], r8
  5800. + lea r8, AcpiPortarbFindSuitableRange
  5801. + mov [rcx+0F0h], r8
  5802. + lea r8, AcpiPortarbAddAllocation
  5803. + mov [rcx+0F8h], r8
  5804. + lea r8, AcpiPortarbBacktrackAllocation
  5805. + mov [rcx+100h], r8
  5806. + mov rdx, [rdx+1F0h]
  5807. + lea r8, asmRootName
  5808. + mov [rsp+20h], r8
  5809. + mov r8d, 1
  5810. + call ArbInitializeArbiterInstance
  5811. + add rsp, 38h
  5812. + ret
  5813. +AcpiInitializePortArbiter ENDP
  5814. +
  5815. +
  5816. +AcpiInitializeMemoryArbiter PROC
  5817. + sub rsp, 38h
  5818. + lea r8, AcpiArblibUnpackRequirement
  5819. + mov r9, rcx
  5820. + mov qword ptr [rsp+28h], 0
  5821. + mov [rcx+0F8h], r8
  5822. + lea r8, AcpiArblibPackResource
  5823. + add rcx, 88h
  5824. + mov [rcx+78h], r8
  5825. + lea r8, AcpiArblibUnpackResource
  5826. + mov [rcx+80h], r8
  5827. + lea r8, AcpiArblibScoreRequirement
  5828. + mov [rcx+88h], r8
  5829. + lea r8, AcpiMemarbFindSuitableRange
  5830. + mov [rcx+0F0h], r8
  5831. + mov rdx, [rdx+1F0h]
  5832. + lea r8, asmRootName
  5833. + mov [rsp+20h], r8
  5834. + mov r8d, 3
  5835. + call ArbInitializeArbiterInstance
  5836. + add rsp, 38h
  5837. + ret
  5838. +AcpiInitializeMemoryArbiter ENDP
  5839. +
  5840. +
  5841. +AcpiArblibUnpackRequirement PROC
  5842. + movzx eax, byte ptr [rcx+1]
  5843. + cmp al, 3
  5844. + jz short loc_4D6A5
  5845. + cmp al, 1
  5846. + jz short loc_4D6A5
  5847. + cmp al, 6
  5848. + jnz short loc_4D69F
  5849. + mov eax, [rcx+0Ch]
  5850. + mov [rdx], rax
  5851. + mov eax, [rcx+10h]
  5852. + mov [r8], rax
  5853. + mov eax, [rcx+8]
  5854. + mov [r9], eax
  5855. + mov rax, [rsp+28h]
  5856. + mov dword ptr [rax], 1
  5857. + jmp short loc_4D6CD
  5858. +
  5859. +loc_4D69F:
  5860. + mov eax, 0C0000024h
  5861. + ret
  5862. +
  5863. +loc_4D6A5:
  5864. + mov rax, [rcx+10h]
  5865. + mov [rdx], rax
  5866. + mov rax, [rcx+18h]
  5867. + mov rdx, [rsp+28h]
  5868. + mov [r8], rax
  5869. + mov eax, [rcx+8]
  5870. + mov [r9], eax
  5871. + mov eax, [rcx+0Ch]
  5872. + test eax, eax
  5873. + mov [rdx], eax
  5874. + jnz short loc_4D6CD
  5875. + mov dword ptr [rdx], 1
  5876. +
  5877. +loc_4D6CD:
  5878. + cmp byte ptr [rcx+1], 3
  5879. + jnz short loc_4D6EA
  5880. + test byte ptr [rcx+4], 10h
  5881. + jz short loc_4D6EA
  5882. + cmp qword ptr [rcx+18h], 0FFFFFFh
  5883. + jle short loc_4D6EA
  5884. + mov qword ptr [r8], 0FFFFFFh
  5885. +
  5886. +loc_4D6EA:
  5887. + xor eax, eax
  5888. + ret
  5889. +AcpiArblibUnpackRequirement ENDP
  5890. +
  5891. +
  5892. +AcpiArblibPackResource PROC
  5893. + movzx eax, byte ptr [rcx+1]
  5894. + mov [r8], al
  5895. + movzx eax, word ptr [rcx+4]
  5896. + mov [r8+2], ax
  5897. + movzx eax, byte ptr [rcx+2]
  5898. + mov [r8+1], al
  5899. + cmp byte ptr [rcx+1], 3
  5900. + jz short loc_4D808
  5901. + movzx eax, byte ptr [rcx+1]
  5902. + cmp al, 1
  5903. + jz short loc_4D808
  5904. + cmp al, 6
  5905. + jnz short loc_4D813
  5906. + mov [r8+4], edx
  5907. + mov eax, [rcx+8]
  5908. + mov [r8+8], eax
  5909. + xor eax, eax
  5910. + ret
  5911. +
  5912. +loc_4D808:
  5913. + mov [r8+4], rdx
  5914. + mov eax, [rcx+8]
  5915. + mov [r8+0Ch], eax
  5916. +
  5917. +loc_4D813:
  5918. + xor eax, eax
  5919. + ret
  5920. +AcpiArblibPackResource ENDP
  5921. +
  5922. +
  5923. +AcpiArblibUnpackResource PROC
  5924. + movzx eax, byte ptr [rcx]
  5925. + cmp al, 3
  5926. + jz short loc_4D83E
  5927. + cmp al, 1
  5928. + jz short loc_4D83E
  5929. + cmp al, 6
  5930. + jnz short loc_4D84B
  5931. + mov eax, [rcx+4]
  5932. + mov [rdx], rax
  5933. + mov eax, [rcx+8]
  5934. + mov [r8], eax
  5935. + xor eax, eax
  5936. + ret
  5937. +
  5938. +loc_4D83E:
  5939. + mov rax, [rcx+4]
  5940. + mov [rdx], rax
  5941. + mov eax, [rcx+0Ch]
  5942. + mov [r8], eax
  5943. +
  5944. +loc_4D84B:
  5945. + xor eax, eax
  5946. + ret
  5947. +AcpiArblibUnpackResource ENDP
  5948. +
  5949. +
  5950. +AcpiArblibScoreRequirement PROC
  5951. + push rbx
  5952. + sub rsp, 20h
  5953. + movzx eax, byte ptr [rcx+1]
  5954. + mov ebx, 1
  5955. + cmp al, 3
  5956. + jz short loc_4D727
  5957. + cmp al, bl
  5958. + jz short loc_4D727
  5959. + cmp al, 6
  5960. + jnz short loc_4D78F
  5961. + mov r10d, [rcx+0Ch]
  5962. + mov r9d, [rcx+10h]
  5963. + mov edx, ebx
  5964. + jmp short loc_4D737
  5965. +
  5966. +loc_4D727:
  5967. + mov edx, [rcx+0Ch]
  5968. + mov r10, [rcx+10h]
  5969. + mov r9, [rcx+18h]
  5970. + test edx, edx
  5971. + cmovz edx, ebx
  5972. +
  5973. +loc_4D737:
  5974. + cmp al, 3
  5975. + mov r11d, [rcx+8]
  5976. + jnz short loc_4D755
  5977. + test byte ptr [rcx+4], 10h
  5978. + jz short loc_4D755
  5979. + cmp qword ptr [rcx+18h], 0FFFFFFh
  5980. + jle short loc_4D755
  5981. + mov r9d, 0FFFFFFh
  5982. +
  5983. +loc_4D755:
  5984. + test edx, edx
  5985. + jnz short loc_4D75B
  5986. +
  5987. +loc_4D759:
  5988. + mov edx, ebx
  5989. +
  5990. +loc_4D75B:
  5991. + mov r8d, edx
  5992. + lea rcx, [r8-1]
  5993. + lea rdx, [r8+r10-1]
  5994. + not rcx
  5995. + and rdx, rcx
  5996. + mov ecx, r11d
  5997. + sub r9, rdx
  5998. + sub r9, rcx
  5999. + lea rax, [r9+1]
  6000. + cqo
  6001. + idiv r8
  6002. + test rax, rax
  6003. + jns short loc_4D7AA
  6004. + mov eax, 0FFFFFFFFh
  6005. + add rsp, 20h
  6006. + pop rbx
  6007. + ret
  6008. +
  6009. +loc_4D78F:
  6010. + mov ecx, 50109h
  6011. + call _ACPIInternalError
  6012. + mov r11d, [rsp+30h]
  6013. + mov r9, [rsp+30h]
  6014. + mov r10, [rsp+30h]
  6015. + jmp short loc_4D759
  6016. +
  6017. +loc_4D7AA:
  6018. + mov ecx, 7FFFFFFFh
  6019. + cmp rax, rcx
  6020. + cmovg eax, ecx
  6021. + add rsp, 20h
  6022. + pop rbx
  6023. + ret
  6024. +AcpiArblibScoreRequirement ENDP
  6025. +
  6026. +
  6027. +AcpiInitializeBusNumberArbiter PROC
  6028. + sub rsp, 38h
  6029. + lea r8, AcpiArblibUnpackRequirement
  6030. + mov r9, rcx
  6031. + mov qword ptr [rsp+28h], 0
  6032. + mov [rcx+0F8h], r8
  6033. + lea r8, AcpiArblibPackResource
  6034. + add rcx, 88h
  6035. + mov [rcx+78h], r8
  6036. + lea r8, AcpiArblibUnpackResource
  6037. + mov [rcx+80h], r8
  6038. + lea r8, AcpiArblibScoreRequirement
  6039. + mov [rcx+88h], r8
  6040. + mov rdx, [rdx+1F0h]
  6041. + lea r8, asmRootName
  6042. + mov [rsp+20h], r8
  6043. + mov r8d, 6
  6044. + call ArbInitializeArbiterInstance
  6045. + add rsp, 38h
  6046. + ret
  6047. +AcpiInitializeBusNumberArbiter ENDP
  6048. +
  6049. +
  6050. +AcpiArblibAllocateArbiterInstance PROC
  6051. + sub rsp, 58h
  6052. + cmp edx, 1
  6053. + mov [rsp+60h], rbx
  6054. + mov [rsp+70h], rsi
  6055. + mov rsi, rcx
  6056. + mov ebx, edx
  6057. + jz short loc_4DA53
  6058. + cmp edx, 3
  6059. + jz short loc_4DA53
  6060. + cmp edx, 6
  6061. + jz short loc_4DA53
  6062. + xor eax, eax
  6063. + mov rsi, [rsp+70h]
  6064. + mov rbx, [rsp+60h]
  6065. + add rsp, 58h
  6066. + ret
  6067. +
  6068. +loc_4DA53:
  6069. + mov edx, 1C0h
  6070. + mov ecx, 101h
  6071. + mov r8d, 69706341h
  6072. +
  6073. +loc_4DA63:
  6074. + mov [rsp+50h], r12
  6075. + callex ExAllocatePoolWithTag
  6076. + test rax, rax
  6077. + mov r12, rax
  6078. + jnz short loc_4DA8A
  6079. + mov r12, [rsp+50h]
  6080. + mov rsi, [rsp+70h]
  6081. + mov rbx, [rsp+60h]
  6082. + add rsp, 58h
  6083. + ret
  6084. +
  6085. +loc_4DA8A:
  6086. + xor edx, edx
  6087. + mov r8d, 1C0h
  6088. + mov rcx, rax
  6089. + call memset
  6090. + lock inc [AcpiArbiterInstanceCount]
  6091. + cmp ebx, 1
  6092. + jnz short loc_4DAAF
  6093. + lea r9, asmPortName
  6094. + jmp short loc_4DAC4
  6095. +
  6096. +loc_4DAAF:
  6097. + lea r9, asmMemoryName
  6098. + lea rax, asmBusNumberName
  6099. + cmp ebx, 3
  6100. + cmovnz r9, rax
  6101. +
  6102. +loc_4DAC4:
  6103. + mov [rsp+78h], rdi
  6104. + mov edi, 40h
  6105. + lea r8, asmACPIName
  6106. + mov rdx, rdi
  6107. + mov rcx, r12
  6108. + callex _snwprintf
  6109. + test eax, eax
  6110. + movsxd r11, eax
  6111. + jns short loc_4DAFA
  6112. + xor edx, edx
  6113. + mov rcx, r12
  6114. + callex ExFreePoolWithTag
  6115. + xor eax, eax
  6116. + jmp loc_4DCA5
  6117. +
  6118. +loc_4DAFA:
  6119. + mov rbx, [rsi+1E8h]
  6120. +
  6121. +loc_4DB01:
  6122. + mov [rsp+68h], rbp
  6123. + sub edi, r11d
  6124. + test rbx, rbx
  6125. + mov [rsp+48h], r13
  6126. + mov rax, r11
  6127. + lea rbp, [r12+r11*2]
  6128. + jz loc_4DC73
  6129. + cmp qword ptr [rbx+10h], 0
  6130. + jz loc_4DC73
  6131. + cmp edi, 5
  6132. + jb loc_4DC73
  6133. + movzx eax, byte ptr [rbx+23h]
  6134. + test al, al
  6135. + jnz short loc_4DB42
  6136. + mov r8d, 2Ah
  6137. + jmp short loc_4DB46
  6138. +
  6139. +loc_4DB42:
  6140. + movsx r8d, al
  6141. +
  6142. +loc_4DB46:
  6143. + movzx eax, byte ptr [rbx+22h]
  6144. + test al, al
  6145. + jnz short loc_4DB55
  6146. + mov edx, 2Ah
  6147. + jmp short loc_4DB58
  6148. +
  6149. +loc_4DB55:
  6150. + movsx edx, al
  6151. +
  6152. +loc_4DB58:
  6153. + movzx eax, byte ptr [rbx+21h]
  6154. + test al, al
  6155. + jnz short loc_4DB67
  6156. + mov ecx, 2Ah
  6157. + jmp short loc_4DB6A
  6158. +
  6159. +loc_4DB67:
  6160. + movsx ecx, al
  6161. +
  6162. +loc_4DB6A:
  6163. + movzx eax, byte ptr [rbx+20h]
  6164. + test al, al
  6165. + jnz short loc_4DB7A
  6166. + mov r9d, 2Ah
  6167. + jmp short loc_4DB7E
  6168. +
  6169. +loc_4DB7A:
  6170. + movsx r9d, al
  6171. +
  6172. +loc_4DB7E:
  6173. + mov [rsp+30h], r8d
  6174. + mov [rsp+28h], edx
  6175. + mov [rsp+20h], ecx
  6176. + lea r8, asmFormat2Name
  6177. + mov rcx, rbp
  6178. + mov edx, 4
  6179. + callex _snwprintf
  6180. + mov rbx, [rbx+10h]
  6181. + add edi, 0FFFFFFFCh
  6182. + cmp qword ptr [rbx+10h], 0
  6183. + lea r13, [rbx+10h]
  6184. + mov esi, 4
  6185. + jz loc_4DC68
  6186. +
  6187. + ALIGN16
  6188. +loc_4DBC0:
  6189. + cmp edi, 6
  6190. + jb loc_4DC73
  6191. + mov r8d, esi
  6192. + lea rcx, [rbp+0Ah]
  6193. + mov rdx, rbp
  6194. + add r8, r8
  6195. + call memcpy
  6196. + mov word ptr [rbp+8], 2Eh
  6197. + movzx eax, byte ptr [rbx+23h]
  6198. + add esi, 5
  6199. + add edi, 0FFFFFFFBh
  6200. + test al, al
  6201. + jnz short loc_4DBF7
  6202. + mov r8d, 2Ah
  6203. + jmp short loc_4DBFB
  6204. +
  6205. +loc_4DBF7:
  6206. + movsx r8d, al
  6207. +
  6208. +loc_4DBFB:
  6209. + movzx eax, byte ptr [rbx+22h]
  6210. + test al, al
  6211. + jnz short loc_4DC0A
  6212. + mov edx, 2Ah
  6213. + jmp short loc_4DC0D
  6214. +
  6215. +loc_4DC0A:
  6216. + movsx edx, al
  6217. +
  6218. +loc_4DC0D:
  6219. + movzx eax, byte ptr [rbx+21h]
  6220. + test al, al
  6221. + jnz short loc_4DC1C
  6222. + mov ecx, 2Ah
  6223. + jmp short loc_4DC1F
  6224. +
  6225. +loc_4DC1C:
  6226. + movsx ecx, al
  6227. +
  6228. +loc_4DC1F:
  6229. + movzx eax, byte ptr [rbx+20h]
  6230. + test al, al
  6231. + jnz short loc_4DC2F
  6232. + mov r9d, 2Ah
  6233. + jmp short loc_4DC33
  6234. +
  6235. +loc_4DC2F:
  6236. + movsx r9d, al
  6237. +
  6238. +loc_4DC33:
  6239. + mov [rsp+30h], r8d
  6240. + mov [rsp+28h], edx
  6241. + mov [rsp+20h], ecx
  6242. + lea r8, asmFormat2Name
  6243. + mov rcx, rbp
  6244. + mov edx, 4
  6245. + callex _snwprintf
  6246. + mov rbx, [r13+0]
  6247. + cmp qword ptr [rbx+10h], 0
  6248. + lea r13, [rbx+10h]
  6249. + jnz loc_4DBC0
  6250. +
  6251. +loc_4DC68:
  6252. + mov eax, esi
  6253. + mov word ptr [rbp+rax*2+0], 0
  6254. + jmp short loc_4DC98
  6255. +
  6256. +loc_4DC73:
  6257. + mov r9d, [AcpiArbiterInstanceCount]
  6258. + lea r8, asmFormat3Name
  6259. + mov edx, edi
  6260. + mov rcx, rbp
  6261. + callex _snwprintf
  6262. + lea r11d, [rdi-1]
  6263. + mov word ptr [rbp+r11*2+0], 0
  6264. +
  6265. +loc_4DC98:
  6266. + mov rbp, [rsp+68h]
  6267. + mov r13, [rsp+48h]
  6268. + mov rax, r12
  6269. +
  6270. +loc_4DCA5:
  6271. + mov rdi, [rsp+78h]
  6272. + mov r12, [rsp+50h]
  6273. + mov rsi, [rsp+70h]
  6274. + mov rbx, [rsp+60h]
  6275. + add rsp, 58h
  6276. + ret
  6277. +AcpiArblibAllocateArbiterInstance ENDP
  6278. +
  6279. +
  6280. +AcpiArblibInitializeArbiter PROC
  6281. + sub rsp, 28h
  6282. + cmp edx, 1
  6283. + mov [rsp+38h], rbp
  6284. + mov [rsp+40h], rsi
  6285. + mov [rsp+48h], rdi
  6286. + mov rbp, r8
  6287. + mov rsi, rcx
  6288. + mov edi, edx
  6289. + jz short loc_4DD53
  6290. + cmp edx, 3
  6291. + jz short loc_4DD53
  6292. + cmp edx, 6
  6293. + jz short loc_4DD53
  6294. + mov eax, 0C000000Dh
  6295. + mov rdi, [rsp+48h]
  6296. + mov rsi, [rsp+40h]
  6297. + mov rbp, [rsp+38h]
  6298. + add rsp, 28h
  6299. + ret
  6300. +
  6301. +loc_4DD53:
  6302. + mov [rsp+30h], rbx
  6303. + call AcpiArblibAllocateArbiterInstance
  6304. + test rax, rax
  6305. + mov rbx, rax
  6306. + jnz short loc_4DD6C
  6307. + mov eax, 0C000009Ah
  6308. + jmp short loc_4DDD6
  6309. +
  6310. +loc_4DD6C:
  6311. + cmp edi, 1
  6312. + jnz short loc_4DD80
  6313. + mov rdx, rsi
  6314. + mov rcx, rax
  6315. + call AcpiInitializePortArbiter
  6316. + mov edi, eax
  6317. + jmp short loc_4DDA1
  6318. +
  6319. +loc_4DD80:
  6320. + cmp edi, 3
  6321. + jnz short loc_4DD94
  6322. + mov rdx, rsi
  6323. + mov rcx, rax
  6324. + call AcpiInitializeMemoryArbiter
  6325. + mov edi, eax
  6326. + jmp short loc_4DDA1
  6327. +
  6328. +loc_4DD94:
  6329. + mov rdx, rsi
  6330. + mov rcx, rax
  6331. + call AcpiInitializeBusNumberArbiter
  6332. + mov edi, eax
  6333. +
  6334. +loc_4DDA1:
  6335. + test edi, edi
  6336. + jns short loc_4DDC9
  6337. + cmp byte ptr [rbx+80h], 0
  6338. + jz short loc_4DDBA
  6339. + lea rcx, [rbx+88h]
  6340. + call ArbDeleteArbiterInstance
  6341. +
  6342. +loc_4DDBA:
  6343. + xor edx, edx
  6344. + mov rcx, rbx
  6345. + callex ExFreePoolWithTag
  6346. + mov eax, edi
  6347. + jmp short loc_4DDD6
  6348. +
  6349. +loc_4DDC9:
  6350. + mov byte ptr [rbx+80h], 1
  6351. + xor eax, eax
  6352. + mov [rbp+0], rbx
  6353. +
  6354. +loc_4DDD6:
  6355. + mov rbx, [rsp+30h]
  6356. + mov rdi, [rsp+48h]
  6357. + mov rsi, [rsp+40h]
  6358. + mov rbp, [rsp+38h]
  6359. + add rsp, 28h
  6360. + ret
  6361. +AcpiArblibInitializeArbiter ENDP
  6362. +
  6363. +
  6364. +ACPIBuildPdo PROC
  6365. + mov r11, rsp
  6366. + sub rsp, 78h
  6367. + mov [r11+8], rbx
  6368. + mov [r11+10h], rbp
  6369. + mov [r11+20h], rdi
  6370. + xor ebp, ebp
  6371. + mov [r11-10h], r13
  6372. + lea rax, [r11-38h]
  6373. + mov [r11-48h], rax
  6374. + mov [r11-18h], r14
  6375. + movzx r14d, r9b
  6376. + mov rbx, r8
  6377. + mov rdi, rdx
  6378. + lea r9d, [rbp+32h]
  6379. + xor r8d, r8d
  6380. + xor edx, edx
  6381. + mov [rsp+28h], bpl
  6382. + mov r13, rbp
  6383. + mov [r11-38h], rbp
  6384. + mov dword ptr [rsp+20h], 80h
  6385. + callex IoCreateDevice
  6386. + test eax, eax
  6387. + js loc_11C58
  6388. + test r14b, r14b
  6389. + jz short loc_119E1
  6390. + mov eax, [rdi]
  6391. + bt rax, 14h
  6392. + jb short loc_119DE
  6393. + mov rcx, rbx
  6394. + callex IoGetAttachedDeviceReference
  6395. + test rax, rax
  6396. + mov r13, rax
  6397. + jnz short loc_119E1
  6398. + mov rcx, [rsp+40h]
  6399. + callex IoDeleteDevice
  6400. + mov eax, 0C000000Eh
  6401. + jmp loc_11C58
  6402. +
  6403. +loc_119DE:
  6404. + xor r14b, r14b
  6405. +
  6406. +loc_119E1:
  6407. + mov [rsp+90h], rsi
  6408. + mov rax, 2000000000h
  6409. + mov [rsp+70h], r12
  6410. + test [rdi], rax
  6411. + mov [rsp+58h], r15
  6412. + jz short loc_11A23
  6413. + mov rcx, [rdi+1E8h]
  6414. + mov edx, 5352435Fh
  6415. + call ACPIAmliGetNamedChild
  6416. + test rax, rax
  6417. + jnz loc_11B13
  6418. + mov [rdi+0B0h], bpl
  6419. +
  6420. +loc_11A23:
  6421. + lea rcx, AcpiDeviceTreeLock
  6422. + callex KeAcquireSpinLockRaiseToDpc
  6423. + mov rcx, [rsp+40h]
  6424. + mov [rcx+40h], rdi
  6425. + mov rcx, [rsp+40h]
  6426. + movzx esi, al
  6427. + mov [rdi+1F0h], rcx
  6428. + mov [rdi+200h], rcx
  6429. + lock inc dword ptr [rdi+1D4h]
  6430. + mov r8b, 1
  6431. + mov edx, 1FFh
  6432. + mov rcx, rdi
  6433. + call ACPIInternalUpdateFlags
  6434. + xor r8d, r8d
  6435. + mov rcx, rdi
  6436. + lea edx, [r8+20h]
  6437. + call ACPIInternalUpdateFlags
  6438. + test r14b, r14b
  6439. + mov eax, [rdi+0E0h]
  6440. + mov [rdi+0E4h], eax
  6441. + lea rax, AcpiPdoIrpDispatch
  6442. + mov [rdi+0E0h], ebp
  6443. + mov [rdi+10h], rax
  6444. + jz short loc_11AED
  6445. + xor r8d, r8d
  6446. + mov rcx, rdi
  6447. + mov [rdi+1F8h], r13
  6448. + lea edx, [r8+40h]
  6449. + call ACPIInternalUpdateFlags
  6450. + mov rax, [rsp+40h]
  6451. + lea r11, AcpiBusFilterIrpDispatch
  6452. + mov [rdi+10h], r11
  6453. + movzx ecx, byte ptr [r13+4Ch]
  6454. + inc cl
  6455. + mov [rax+4Ch], cl
  6456. + mov rax, [rsp+40h]
  6457. + mov ecx, [r13+98h]
  6458. + mov [rax+98h], ecx
  6459. + bt dword ptr [r13+30h], 0Dh
  6460. + jnb short loc_11AED
  6461. + mov rax, [rsp+40h]
  6462. + or dword ptr [rax+30h], 2000h
  6463. +
  6464. +loc_11AED:
  6465. + mov rax, [rdi]
  6466. + mov rcx, 1000000000h
  6467. + test rcx, rax
  6468. + jz loc_11B85
  6469. + lea rax, AcpiProcessorIrpDispatch
  6470. + mov [rdi+10h], rax
  6471. + jmp loc_11BE3
  6472. +
  6473. +loc_11B13:
  6474. + mov byte ptr [rdi+0B0h], 1
  6475. + mov ebx, ebp
  6476. + mov rsi, rbp
  6477. + lea r15, AcpiArbiterResourceTypes
  6478. +
  6479. +loc_11B26:
  6480. + mov edx, [r15+rsi*4]
  6481. + mov eax, ebx
  6482. + mov rcx, rdi
  6483. + lea r8, [rdi+rax*8+0B8h]
  6484. + call AcpiArblibInitializeArbiter
  6485. + test eax, eax
  6486. + mov r12d, eax
  6487. + js short loc_11B52
  6488. + inc ebx
  6489. + inc rsi
  6490. + cmp ebx, 3
  6491. + jb short loc_11B26
  6492. + jmp loc_11A23
  6493. +
  6494. +loc_11B52:
  6495. + test ebx, ebx
  6496. + jz short loc_11B72
  6497. + lea rdi, [rdi+rsi*8+0B8h]
  6498. + xchg ax, ax
  6499. +
  6500. +loc_11B60:
  6501. + mov rcx, [rdi-8]
  6502. + sub rdi, 8
  6503. + call AcpiArblibFreeArbiterInstance
  6504. + add ebx, 0FFFFFFFFh
  6505. + jnz short loc_11B60
  6506. +
  6507. +loc_11B72:
  6508. + mov rcx, [rsp+40h]
  6509. + callex IoDeleteDevice
  6510. + mov eax, r12d
  6511. + jmp loc_11C46
  6512. +
  6513. +loc_11B85:
  6514. + mov rcx, 200000000000h
  6515. + test rcx, rax
  6516. + jz short loc_11BE3
  6517. + cmp [AcpiInternalDeviceTable], rbp
  6518. + jz short loc_11BE3
  6519. + lea r12, AcpiInternalDeviceTable
  6520. + mov rdx, r12
  6521. + mov rbx, r12
  6522. +
  6523. + ALIGN16
  6524. +loc_11BB0:
  6525. + mov rdx, [rdx]
  6526. + mov rcx, [rdi+1B0h]
  6527. + callex strstr
  6528. + test rax, rax
  6529. + jnz short loc_11BD5
  6530. + add rbx, 10h
  6531. + inc ebp
  6532. + cmp [rbx], rax
  6533. + mov rdx, rbx
  6534. + jnz short loc_11BB0
  6535. + jmp short loc_11BE3
  6536. +
  6537. +loc_11BD5:
  6538. + mov eax, ebp
  6539. + add rax, rax
  6540. + mov rax, [r12+rax*8+8]
  6541. + mov [rdi+10h], rax
  6542. +
  6543. +loc_11BE3:
  6544. + mov rax, [rdi]
  6545. + bt rax, 12h
  6546. + jnb short loc_11C0E
  6547. + mov rdx, 8000000000000h
  6548. + test rdx, rax
  6549. + mov rax, [FixedButtonDeviceObject]
  6550. + cmovnz rax, [rsp+40h]
  6551. + mov [FixedButtonDeviceObject], rax
  6552. +
  6553. +loc_11C0E:
  6554. + lea rcx, AcpiDeviceTreeLock
  6555. + movzx edx, sil
  6556. + callex KeReleaseSpinLock
  6557. + mov r11, [rsp+40h]
  6558. + mov rax, 10000000000000h
  6559. + and dword ptr [r11+30h], 0FFFFFF7Fh
  6560. + test [rdi], rax
  6561. + jz short loc_11C44
  6562. + mov rax, [rsp+40h]
  6563. + or dword ptr [rax+30h], 8
  6564. +
  6565. +loc_11C44:
  6566. + xor eax, eax
  6567. +
  6568. +loc_11C46:
  6569. + mov r12, [rsp+70h]
  6570. + mov rsi, [rsp+90h]
  6571. + mov r15, [rsp+58h]
  6572. +
  6573. +loc_11C58:
  6574. + mov r14, [rsp+60h]
  6575. + mov r13, [rsp+68h]
  6576. + mov rdi, [rsp+98h]
  6577. + mov rbp, [rsp+88h]
  6578. + mov rbx, [rsp+80h]
  6579. + add rsp, 78h
  6580. + ret
  6581. +ACPIBuildPdo ENDP
  6582. +
  6583. +
  6584. +PnpDeviceBiosResourcesToNtResources PROC
  6585. + sub rsp, 28h
  6586. + mov eax, r8d
  6587. + mov r10, rdx
  6588. + mov [rsp+30h], rbx
  6589. + mov rbx, rcx
  6590. + mov [rsp+38h], rbp
  6591. + mov r8, r9
  6592. + mov edx, eax
  6593. + mov rcx, r10
  6594. + mov [rsp+40h], rsi
  6595. + mov rsi, r9
  6596. + call PnpBiosResourcesToNtResources
  6597. + test eax, eax
  6598. + mov ebp, eax
  6599. + js loc_27080
  6600. + cmp qword ptr [rsi], 0
  6601. + jz loc_27080
  6602. + lea rcx, AcpiDeviceTreeLock
  6603. +
  6604. +loc_26FD7:
  6605. + mov [rsp+48h], rdi
  6606. + xor dil, dil
  6607. + callex KeAcquireSpinLockRaiseToDpc
  6608. + test rbx, rbx
  6609. + jz short loc_2700A
  6610. + mov rcx, 2000000000h
  6611. +
  6612. +loc_26FF4:
  6613. + test [rbx], rcx
  6614. + jnz short loc_27007
  6615. + mov rbx, [rbx+208h]
  6616. + test rbx, rbx
  6617. + jnz short loc_26FF4
  6618. + jmp short loc_2700A
  6619. +
  6620. +loc_27007:
  6621. + mov dil, 1
  6622. +
  6623. +loc_2700A:
  6624. + lea rcx, AcpiDeviceTreeLock
  6625. + movzx edx, al
  6626. + callex KeReleaseSpinLock
  6627. + test dil, dil
  6628. + mov rdi, [rsp+48h]
  6629. + jz short loc_2707E
  6630. +
  6631. +loc_27024:
  6632. + mov rax, [rsi]
  6633. + mov ecx, [rax+1Ch]
  6634. + lea r8, [rax+20h]
  6635. + test ecx, ecx
  6636. + jz short loc_2707E
  6637. + mov r9, rcx
  6638. +
  6639. + ALIGN16
  6640. +loc_27040:
  6641. + lea rdx, [r8+8]
  6642. + mov r8d, [r8+4]
  6643. + shl r8, 5
  6644. + add r8, rdx
  6645. + cmp rdx, r8
  6646. + jnb short loc_27079
  6647. +
  6648. +loc_27054:
  6649. + movzx ecx, byte ptr [rdx+1]
  6650. + dec ecx
  6651. + jz short loc_27066
  6652. + sub ecx, 2
  6653. + jz short loc_27066
  6654. + cmp ecx, 3
  6655. + jnz short loc_27070
  6656. +
  6657. +loc_27066:
  6658. + cmp byte ptr [rdx+2], 3
  6659. + jnz short loc_27070
  6660. + mov byte ptr [rdx+2], 1
  6661. +
  6662. +loc_27070:
  6663. + add rdx, 20h
  6664. + cmp rdx, r8
  6665. + jb short loc_27054
  6666. +
  6667. +loc_27079:
  6668. + dec r9
  6669. + jnz short loc_27040
  6670. +
  6671. +loc_2707E:
  6672. + mov eax, ebp
  6673. +
  6674. +loc_27080:
  6675. + mov rsi, [rsp+40h]
  6676. + mov rbp, [rsp+38h]
  6677. + mov rbx, [rsp+30h]
  6678. + add rsp, 28h
  6679. + ret
  6680. +PnpDeviceBiosResourcesToNtResources ENDP
  6681. +
  6682. +
  6683. +ACPIGetProcessorID PROC
  6684. + mov r11, rsp
  6685. + sub rsp, 88h
  6686. + mov rax, [__security_cookie]
  6687. + mov [rsp+38h], rax
  6688. + mov rax, [rsp+0B0h]
  6689. + mov [r11-8], rbx
  6690. + mov [r11-10h], rbp
  6691. + mov [r11-20h], rdi
  6692. + mov rdi, [AcpiProcessorString+8]
  6693. + mov [rsp+28h], rax
  6694. + mov eax, dword ptr [asmACPISlashName]
  6695. + lea rcx, [r11-58h]
  6696. + mov [r11-28h], r12
  6697. + mov r12, [rsp+0B8h]
  6698. + mov [rcx], eax
  6699. + movzx eax, word ptr [asmACPISlashName+4]
  6700. + mov [rcx+4], ax
  6701. + xor eax, eax
  6702. + mov [r11-30h], r13
  6703. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6704. + mov word ptr [rsp+20h], 2Ah
  6705. + mov [r11-38h], r14
  6706. + repne scasb
  6707. + mov [r11-40h], r15
  6708. + lea rdi, [r11-58h]
  6709. + not rcx
  6710. + mov r15d, r9d
  6711. + xor ebx, ebx
  6712. + lea rbp, [rcx-1]
  6713. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6714. + xor r13d, r13d
  6715. + repne scasb
  6716. + mov r14d, r9d
  6717. + not rcx
  6718. + add ebp, ecx
  6719. + and r15d, 40h
  6720. + jz loc_1E198
  6721. + mov r8d, 53706341h
  6722. + mov edx, ebp
  6723. + xor ecx, ecx
  6724. + mov edi, ebp
  6725. + callex ExAllocatePoolWithTag
  6726. + test rax, rax
  6727. + mov rbx, rax
  6728. + jnz short loc_1E0D9
  6729. + mov eax, 0C000009Ah
  6730. + jmp loc_1E320
  6731. +
  6732. +loc_1E0D9:
  6733. + mov r8, rdi
  6734. + xor edx, edx
  6735. + mov rcx, rax
  6736. + call memset
  6737. + mov rdx, [AcpiProcessorString+8]
  6738. + mov rcx, rbx
  6739. +
  6740. +loc_1E0F0:
  6741. + movzx eax, byte ptr [rdx]
  6742. + inc rcx
  6743. + inc rdx
  6744. + test al, al
  6745. + mov [rcx-1], al
  6746. + jnz short loc_1E0F0
  6747. + lea rdx, asmModelName
  6748. + mov rcx, rbx
  6749. + callex strstr
  6750. + lea rdx, asmFamilyName
  6751. + mov rcx, rbx
  6752. + mov r13, rax
  6753. + callex strstr
  6754. + test r13, r13
  6755. + mov r11, rax
  6756. + jz loc_1E1ED
  6757. + test rax, rax
  6758. + jz loc_1E1ED
  6759. + xor eax, eax
  6760. + lea rdi, [rsp+20h]
  6761. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6762. + repne scasb
  6763. + lea rdi, [rsp+30h]
  6764. + not rcx
  6765. + lea rdx, [rcx-1]
  6766. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6767. + repne scasb
  6768. + mov rdi, r11
  6769. + not rcx
  6770. + dec rcx
  6771. + add edx, ecx
  6772. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6773. + lea eax, [rdx+rbp*2]
  6774. + lea ebp, [rax+rax*2]
  6775. + xor eax, eax
  6776. + repne scasb
  6777. + mov rdi, r13
  6778. + not rcx
  6779. + lea rdx, [rcx-1]
  6780. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6781. + repne scasb
  6782. + not rcx
  6783. + dec rcx
  6784. + add edx, ecx
  6785. + add edx, edx
  6786. + sub ebp, edx
  6787. +
  6788. +loc_1E198:
  6789. + mov ecx, r14d
  6790. + mov r8d, 53706341h
  6791. + mov edx, ebp
  6792. + shr ecx, 1Ch
  6793. +
  6794. +loc_1E1A6:
  6795. + mov [rsp+70h], rsi
  6796. + mov edi, ebp
  6797. + not ecx
  6798. + and ecx, 1
  6799. + callex ExAllocatePoolWithTag
  6800. + test rax, rax
  6801. + mov rsi, rax
  6802. + jnz short loc_1E202
  6803. + mov rax, [rsp+28h]
  6804. + xor ecx, ecx
  6805. + test r12, r12
  6806. + mov [rax], rcx
  6807. + jz short loc_1E1D3
  6808. + mov [r12], ecx
  6809. +
  6810. +loc_1E1D3:
  6811. + test rbx, rbx
  6812. + jz short loc_1E1E3
  6813. + xor edx, edx
  6814. + mov rcx, rbx
  6815. + callex ExFreePoolWithTag
  6816. +
  6817. +loc_1E1E3:
  6818. + mov eax, 0C000009Ah
  6819. + jmp loc_1E31B
  6820. +
  6821. +loc_1E1ED:
  6822. + xor edx, edx
  6823. + mov rcx, rbx
  6824. + callex ExFreePoolWithTag
  6825. + mov eax, 0C0000001h
  6826. + jmp loc_1E320
  6827. +
  6828. +loc_1E202:
  6829. + mov r8, rdi
  6830. + xor edx, edx
  6831. + mov rcx, rax
  6832. + call memset
  6833. + test r14b, 20h
  6834. + jz short loc_1E236
  6835. + mov r9, [AcpiProcessorString+8]
  6836. + lea r8, [rsp+30h]
  6837. + lea rdx, asmStrStrName
  6838. + mov rcx, rsi
  6839. + callex sprintf
  6840. + jmp loc_1E2F4
  6841. +
  6842. +loc_1E236:
  6843. + test r15d, r15d
  6844. + jz loc_1E2F4
  6845. + lea r8, [rsp+30h]
  6846. + lea rdx, asmStrStrName
  6847. + mov r9, rbx
  6848. + mov rcx, rsi
  6849. + callex sprintf
  6850. + lea r8, [rsp+20h]
  6851. + lea rdx, asmStrStrName
  6852. + lea edi, [rax+1]
  6853. + mov r9, rbx
  6854. + mov ecx, edi
  6855. + add rcx, rsi
  6856. + callex sprintf
  6857. + lea r8, [rsp+30h]
  6858. + lea rdx, asmStrStrName
  6859. + add edi, eax
  6860. + mov r9, rbx
  6861. + mov byte ptr [r13-1], 0
  6862. + inc edi
  6863. + mov ecx, edi
  6864. + add rcx, rsi
  6865. + callex sprintf
  6866. + lea r8, [rsp+20h]
  6867. + lea rdx, asmStrStrName
  6868. + lea edi, [rdi+rax+1]
  6869. + mov r9, rbx
  6870. + mov ecx, edi
  6871. + add rcx, rsi
  6872. + callex sprintf
  6873. + lea r8, [rsp+30h]
  6874. + lea rdx, asmStrStrName
  6875. + add edi, eax
  6876. + mov r9, rbx
  6877. + mov byte ptr [r13-1], 0
  6878. + inc edi
  6879. + mov ecx, edi
  6880. + add rcx, rsi
  6881. + callex sprintf
  6882. + lea r8, [rsp+20h]
  6883. + lea rdx, asmStrStrName
  6884. + lea ecx, [rdi+rax+1]
  6885. + mov r9, rbx
  6886. + add rcx, rsi
  6887. + callex sprintf
  6888. +
  6889. +loc_1E2F4:
  6890. + test rbx, rbx
  6891. + jz short loc_1E304
  6892. + xor edx, edx
  6893. + mov rcx, rbx
  6894. + callex ExFreePoolWithTag
  6895. +
  6896. +loc_1E304:
  6897. + test r12, r12
  6898. + mov rax, [rsp+28h]
  6899. + mov [rax], rsi
  6900. + jz short loc_1E319
  6901. + lea eax, [rbp+rbp+0]
  6902. + mov [r12], eax
  6903. +
  6904. +loc_1E319:
  6905. + xor eax, eax
  6906. +
  6907. +loc_1E31B:
  6908. + mov rsi, [rsp+70h]
  6909. +
  6910. +loc_1E320:
  6911. + mov r15, [rsp+48h]
  6912. + mov r14, [rsp+50h]
  6913. + mov r13, [rsp+58h]
  6914. + mov r12, [rsp+60h]
  6915. + mov rdi, [rsp+68h]
  6916. + mov rbp, [rsp+78h]
  6917. + mov rbx, [rsp+80h]
  6918. + mov rcx, [rsp+38h]
  6919. + call __security_check_cookie
  6920. + add rsp, 88h
  6921. + ret
  6922. +ACPIGetProcessorID ENDP
  6923. +
  6924. +
  6925. +ACPIGetProcessorIDWide PROC
  6926. + mov r11, rsp
  6927. + sub rsp, 88h
  6928. + mov rax, [__security_cookie]
  6929. + mov [rsp+38h], rax
  6930. + mov rax, [rsp+0B0h]
  6931. + mov [r11-8], rbx
  6932. + mov [r11-10h], rbp
  6933. + mov [r11-20h], rdi
  6934. + mov rdi, [AcpiProcessorString+8]
  6935. + mov [rsp+28h], rax
  6936. + mov eax, dword ptr [asmACPISlashName]
  6937. + lea rcx, [r11-58h]
  6938. + mov [r11-28h], r12
  6939. + mov r12, [rsp+0B8h]
  6940. + mov [rcx], eax
  6941. + movzx eax, word ptr [asmACPISlashName+4]
  6942. + mov [rcx+4], ax
  6943. + xor eax, eax
  6944. + mov [r11-30h], r13
  6945. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6946. + mov word ptr [rsp+20h], 2Ah
  6947. + mov [r11-38h], r14
  6948. + repne scasb
  6949. + lea rdi, [r11-58h]
  6950. + xor ebx, ebx
  6951. + not rcx
  6952. + xor r14d, r14d
  6953. + xor r13d, r13d
  6954. + lea rbp, [rcx-1]
  6955. + mov rcx, 0FFFFFFFFFFFFFFFFh
  6956. + mov [r11-40h], r15
  6957. + repne scasb
  6958. + mov eax, r9d
  6959. + mov r15d, r9d
  6960. + not rcx
  6961. + add ebp, ecx
  6962. + and eax, 40h
  6963. + mov [rsp+24h], eax
  6964. + jz loc_1E4F8
  6965. + mov r8d, 53706341h
  6966. + mov edx, ebp
  6967. + xor ecx, ecx
  6968. + mov edi, ebp
  6969. + callex ExAllocatePoolWithTag
  6970. + test rax, rax
  6971. + mov rbx, rax
  6972. + jnz short loc_1E42F
  6973. + mov eax, 0C000009Ah
  6974. + jmp loc_1E683
  6975. +
  6976. +loc_1E42F:
  6977. + mov r8, rdi
  6978. + xor edx, edx
  6979. + mov rcx, rax
  6980. + call memset
  6981. + mov rdx, [AcpiProcessorString+8]
  6982. + mov rcx, rbx
  6983. +
  6984. + ALIGN16
  6985. +loc_1E450:
  6986. + movzx eax, byte ptr [rdx]
  6987. + inc rcx
  6988. + inc rdx
  6989. + test al, al
  6990. + mov [rcx-1], al
  6991. + jnz short loc_1E450
  6992. + lea rdx, asmModelName
  6993. + mov rcx, rbx
  6994. + callex strstr
  6995. + lea rdx, asmFamilyName
  6996. + mov rcx, rbx
  6997. + mov r14, rax
  6998. + callex strstr
  6999. + test r14, r14
  7000. + mov r13, rax
  7001. + jz loc_1E551
  7002. + test rax, rax
  7003. + jz loc_1E551
  7004. + xor eax, eax
  7005. + lea rdi, [rsp+20h]
  7006. + mov rcx, 0FFFFFFFFFFFFFFFFh
  7007. + repne scasb
  7008. + lea rdi, [rsp+30h]
  7009. + not rcx
  7010. + lea rdx, [rcx-1]
  7011. + mov rcx, 0FFFFFFFFFFFFFFFFh
  7012. + repne scasb
  7013. + mov rdi, r13
  7014. + not rcx
  7015. + dec rcx
  7016. + add edx, ecx
  7017. + mov rcx, 0FFFFFFFFFFFFFFFFh
  7018. + lea eax, [rdx+rbp*2]
  7019. + lea ebp, [rax+rax*2]
  7020. + xor eax, eax
  7021. + repne scasb
  7022. + mov rdi, r14
  7023. + not rcx
  7024. + lea rdx, [rcx-1]
  7025. + mov rcx, 0FFFFFFFFFFFFFFFFh
  7026. + repne scasb
  7027. + not rcx
  7028. + dec rcx
  7029. + add edx, ecx
  7030. + add edx, edx
  7031. + sub ebp, edx
  7032. +
  7033. +loc_1E4F8:
  7034. + mov ecx, r15d
  7035. + mov edi, ebp
  7036. + mov r8d, 53706341h
  7037. + shr ecx, 1Ch
  7038. + add rdi, rdi
  7039. +
  7040. +loc_1E509:
  7041. + mov [rsp+70h], rsi
  7042. + not ecx
  7043. + mov rdx, rdi
  7044. + and ecx, 1
  7045. + callex ExAllocatePoolWithTag
  7046. + test rax, rax
  7047. + mov rsi, rax
  7048. + jnz short loc_1E566
  7049. + mov rax, [rsp+28h]
  7050. + xor ecx, ecx
  7051. + test r12, r12
  7052. + mov [rax], rcx
  7053. + jz short loc_1E537
  7054. + mov [r12], ecx
  7055. +
  7056. +loc_1E537:
  7057. + test rbx, rbx
  7058. + jz short loc_1E547
  7059. + xor edx, edx
  7060. + mov rcx, rbx
  7061. + callex ExFreePoolWithTag
  7062. +
  7063. +loc_1E547:
  7064. + mov eax, 0C000009Ah
  7065. + jmp loc_1E67E
  7066. +
  7067. +loc_1E551:
  7068. + xor edx, edx
  7069. + mov rcx, rbx
  7070. + callex ExFreePoolWithTag
  7071. + mov eax, 0C0000001h
  7072. + jmp loc_1E683
  7073. +
  7074. +loc_1E566:
  7075. + mov r8, rdi
  7076. + xor edx, edx
  7077. + mov rcx, rax
  7078. + call memset
  7079. + test r15b, 20h
  7080. + jz short loc_1E59A
  7081. + mov r9, [AcpiProcessorString+8]
  7082. + lea r8, [rsp+30h]
  7083. + lea rdx, asmSTRSTRBIGName
  7084. + mov rcx, rsi
  7085. + callex swprintf
  7086. + jmp loc_1E657
  7087. +
  7088. +loc_1E59A:
  7089. + cmp dword ptr [rsp+24h], 0
  7090. + jz loc_1E657
  7091. + lea r8, [rsp+30h]
  7092. + lea rdx, asmSTRSTRBIGName
  7093. + mov r9, rbx
  7094. + mov rcx, rsi
  7095. + callex swprintf
  7096. + lea r8, [rsp+20h]
  7097. + lea rdx, asmSTRSTRBIGName
  7098. + lea edi, [rax+1]
  7099. + mov r9, rbx
  7100. + lea rcx, [rsi+rdi*2]
  7101. + callex swprintf
  7102. + lea r8, [rsp+30h]
  7103. + lea rdx, asmSTRSTRBIGName
  7104. + add edi, eax
  7105. + mov r9, rbx
  7106. + mov byte ptr [r14-1], 0
  7107. + inc edi
  7108. + lea rcx, [rsi+rdi*2]
  7109. + callex swprintf
  7110. + lea r8, [rsp+20h]
  7111. + lea rdx, asmSTRSTRBIGName
  7112. + lea edi, [rdi+rax+1]
  7113. + mov r9, rbx
  7114. + lea rcx, [rsi+rdi*2]
  7115. + callex swprintf
  7116. + lea r8, [rsp+30h]
  7117. + lea rdx, asmSTRSTRBIGName
  7118. + add edi, eax
  7119. + mov r9, rbx
  7120. + mov byte ptr [r13-1], 0
  7121. + inc edi
  7122. + lea rcx, [rsi+rdi*2]
  7123. + callex swprintf
  7124. + lea r8, [rsp+20h]
  7125. + lea rdx, asmSTRSTRBIGName
  7126. + lea ecx, [rdi+rax+1]
  7127. + mov r9, rbx
  7128. + lea rcx, [rsi+rcx*2]
  7129. + callex swprintf
  7130. +
  7131. +loc_1E657:
  7132. + test rbx, rbx
  7133. + jz short loc_1E667
  7134. + xor edx, edx
  7135. + mov rcx, rbx
  7136. + callex ExFreePoolWithTag
  7137. +
  7138. +loc_1E667:
  7139. + test r12, r12
  7140. + mov rax, [rsp+28h]
  7141. + mov [rax], rsi
  7142. + jz short loc_1E67C
  7143. + lea eax, [rbp+rbp+0]
  7144. + mov [r12], eax
  7145. +
  7146. +loc_1E67C:
  7147. + xor eax, eax
  7148. +
  7149. +loc_1E67E:
  7150. + mov rsi, [rsp+70h]
  7151. +
  7152. +loc_1E683:
  7153. + mov r15, [rsp+48h]
  7154. + mov r14, [rsp+50h]
  7155. + mov r13, [rsp+58h]
  7156. + mov r12, [rsp+60h]
  7157. + mov rdi, [rsp+68h]
  7158. + mov rbp, [rsp+78h]
  7159. + mov rbx, [rsp+80h]
  7160. + mov rcx, [rsp+38h]
  7161. + call __security_check_cookie
  7162. + add rsp, 88h
  7163. + ret
  7164. +ACPIGetProcessorIDWide ENDP
  7165. +
  7166. +
  7167. +ACPIRegReadEntireSimulatorAcpiTable PROC
  7168. + sub rsp, 78h
  7169. + mov rax, [__security_cookie]
  7170. + mov [rsp+38h], rax
  7171. + mov [rsp+70h], rsi
  7172. + mov rsi, [rdx]
  7173. + mov [rsp+60h], r12
  7174. + mov r12, rdx
  7175. + mov [rsp+58h], r13
  7176. + mov [rsp+48h], r15
  7177. + mov r15, rcx
  7178. + mov edx, 2000h
  7179. + mov r8d, 53637041h
  7180. + mov ecx, 1
  7181. + callex ExAllocatePoolWithTag
  7182. + test rax, rax
  7183. + mov r13, rax
  7184. + jnz short loc_3B2F5
  7185. + mov eax, 0C000009Ah
  7186. + jmp loc_3B473
  7187. +
  7188. +loc_3B2F5:
  7189. + mov [rsp+90h], rbx
  7190. + mov [rsp+98h], rbp
  7191. + lea rdx, asmFormat1Name
  7192. + lea rcx, [rsp+28h]
  7193. + mov [rsp+68h], rdi
  7194. + xor r8d, r8d
  7195. + mov [rsp+50h], r14
  7196. + xor r14d, r14d
  7197. + callex sprintf
  7198. + lea r9, [rsp+20h]
  7199. + lea rcx, [rsp+28h]
  7200. + mov r8, r13
  7201. + mov rdx, r15
  7202. + mov dword ptr [rsp+20h], 2000h
  7203. + call OSReadRegValue
  7204. + test eax, eax
  7205. + js loc_3B433
  7206. +
  7207. + ALIGN16
  7208. +loc_3B350:
  7209. + mov eax, [rsp+20h]
  7210. + cmp eax, 8
  7211. + jb loc_3B442
  7212. + xor edi, edi
  7213. + test eax, eax
  7214. + jz loc_3B3F7
  7215. +
  7216. + ALIGN16
  7217. +loc_3B370:
  7218. + mov ebx, edi
  7219. + add rbx, r13
  7220. + mov eax, [rbx+4]
  7221. + test eax, eax
  7222. + jnz short loc_3B3D4
  7223. + mov eax, [rbx]
  7224. + lea rbp, [rsi+4]
  7225. + cmp eax, [rbp+0]
  7226. + jz short loc_3B3E6
  7227. + mov rdx, rax
  7228. + xor ecx, ecx
  7229. + mov r8d, 74706341h
  7230. + callex ExAllocatePoolWithTag
  7231. + test rax, rax
  7232. + mov rsi, rax
  7233. + jz loc_3B449
  7234. + mov ecx, [rbx]
  7235. + mov edx, [rbp+0]
  7236. + cmp ecx, edx
  7237. + cmovb edx, ecx
  7238. + mov rcx, rax
  7239. + mov r8d, edx
  7240. + mov rdx, [r12]
  7241. + call memcpy
  7242. + mov rcx, [r12]
  7243. + test rcx, rcx
  7244. + jz short loc_3B3CE
  7245. + xor edx, edx
  7246. + callex ExFreePoolWithTag
  7247. +
  7248. +loc_3B3CE:
  7249. + mov [r12], rsi
  7250. + jmp short loc_3B3E6
  7251. +
  7252. +loc_3B3D4:
  7253. + mov ecx, [rbx]
  7254. + lea rdx, [rbx+8]
  7255. + mov r8, rax
  7256. + add rcx, [r12]
  7257. + call memcpy
  7258. +
  7259. +loc_3B3E6:
  7260. + mov eax, [rbx+4]
  7261. + lea edi, [rdi+rax+8]
  7262. + cmp edi, [rsp+20h]
  7263. + jb loc_3B370
  7264. +
  7265. +loc_3B3F7:
  7266. + inc r14d
  7267. + lea rdx, asmFormat1Name
  7268. + lea rcx, [rsp+28h]
  7269. + mov r8d, r14d
  7270. + callex sprintf
  7271. + lea r9, [rsp+20h]
  7272. + lea rcx, [rsp+28h]
  7273. + mov r8, r13
  7274. + mov rdx, r15
  7275. + mov dword ptr [rsp+20h], 2000h
  7276. + call OSReadRegValue
  7277. + test eax, eax
  7278. + jns loc_3B350
  7279. +
  7280. +loc_3B433:
  7281. + xor edx, edx
  7282. + mov rcx, r13
  7283. + callex ExFreePoolWithTag
  7284. + xor eax, eax
  7285. + jmp short loc_3B459
  7286. +
  7287. +loc_3B442:
  7288. + mov eax, 0C0000001h
  7289. + jmp short loc_3B459
  7290. +
  7291. +loc_3B449:
  7292. + xor edx, edx
  7293. + mov rcx, r13
  7294. + callex ExFreePoolWithTag
  7295. + mov eax, 0C000009Ah
  7296. +
  7297. +loc_3B459:
  7298. + mov rdi, [rsp+68h]
  7299. + mov rbp, [rsp+98h]
  7300. + mov rbx, [rsp+90h]
  7301. + mov r14, [rsp+50h]
  7302. +
  7303. +loc_3B473:
  7304. + mov r15, [rsp+48h]
  7305. + mov r13, [rsp+58h]
  7306. + mov r12, [rsp+60h]
  7307. + mov rsi, [rsp+70h]
  7308. + mov rcx, [rsp+38h]
  7309. + call __security_check_cookie
  7310. + add rsp, 78h
  7311. + ret
  7312. +ACPIRegReadEntireSimulatorAcpiTable ENDP
  7313. +
  7314. +
  7315. +ACPIRegGetTableFromSimulatorRegistryEntry PROC
  7316. + mov rax, rsp
  7317. + sub rsp, 48h
  7318. + mov [rax+8], rbx
  7319. + mov [rax+10h], rbp
  7320. + mov rbp, [rcx]
  7321. + mov [rax+18h], rsi
  7322. + mov [rax+20h], rdi
  7323. + xor ebx, ebx
  7324. + mov [rax-8], r12
  7325. + mov [rax-18h], r14
  7326. + mov r12, rcx
  7327. + mov r14d, 1
  7328. + lea edx, [rbx+6Ah]
  7329. + mov r8d, 53637041h
  7330. + mov ecx, r14d
  7331. + xor dil, dil
  7332. + mov [rax-20h], rbx
  7333. + mov [rax-28h], rbx
  7334. + callex ExAllocatePoolWithTag
  7335. + test rax, rax
  7336. + mov rsi, rax
  7337. + jz loc_3B8E5
  7338. + xor edx, edx
  7339. + mov rcx, rax
  7340. +
  7341. +loc_3B78B:
  7342. + mov [rsp+38h], r13
  7343. + lea r8d, [rdx+6Ah]
  7344. + call memset
  7345. + lea rdx, SimulatorRegEntry
  7346. + mov r8d, 54h
  7347. + mov rcx, rsi
  7348. + call memcpy
  7349. + lea r11, [rsi+54h]
  7350. + mov r8d, ebx
  7351. + inc r11
  7352. + mov byte ptr [r11-1], 5Ch
  7353. + mov rdx, rbp
  7354. + mov r9, r11
  7355. + mov r13d, 5Fh
  7356. + sub r9, rbp
  7357. +
  7358. + ALIGN16
  7359. +loc_3B7D0:
  7360. + movzx ecx, byte ptr [rdx]
  7361. + test cl, cl
  7362. + jz short loc_3B7F2
  7363. + cmp cl, 20h
  7364. + movzx eax, cl
  7365. + cmovz eax, r13d
  7366. + inc r8d
  7367. + inc rdx
  7368. + cmp r8d, 4
  7369. + mov [r9+rdx-1], al
  7370. + jb short loc_3B7D0
  7371. +
  7372. +loc_3B7F2:
  7373. + mov r10d, r8d
  7374. + lea rdx, [rbp+0Ah]
  7375. + mov r8d, ebx
  7376. + add r10, r11
  7377. + inc r10
  7378. + mov byte ptr [r10-1], 5Ch
  7379. + mov r9, r10
  7380. + sub r9, rdx
  7381. +
  7382. + ALIGN16
  7383. +loc_3B810:
  7384. + movzx ecx, byte ptr [rdx]
  7385. + test cl, cl
  7386. + jz short loc_3B832
  7387. + cmp cl, 20h
  7388. + movzx eax, cl
  7389. + cmovz eax, r13d
  7390. + inc r8d
  7391. + inc rdx
  7392. + cmp r8d, 6
  7393. + mov [r9+rdx-1], al
  7394. + jb short loc_3B810
  7395. +
  7396. +loc_3B832:
  7397. + mov r9d, r8d
  7398. + lea rdx, [rbp+10h]
  7399. + add r9, r10
  7400. + lea r8, [r9+1]
  7401. + mov byte ptr [r9], 5Ch
  7402. + sub r8, rdx
  7403. +
  7404. +loc_3B847:
  7405. + movzx ecx, byte ptr [rdx]
  7406. + test cl, cl
  7407. + jz short loc_3B867
  7408. + cmp cl, 20h
  7409. + movzx eax, cl
  7410. + cmovz eax, r13d
  7411. + inc ebx
  7412. + inc rdx
  7413. + cmp ebx, 8
  7414. + mov [r8+rdx-1], al
  7415. + jb short loc_3B847
  7416. +
  7417. +loc_3B867:
  7418. + mov byte ptr [rbx+r9+1], 0
  7419. + lea r8, [rsp+20h]
  7420. + xor edx, edx
  7421. + mov rcx, rsi
  7422. + mov byte ptr [rbx+r9+1], 0
  7423. + call OSOpenHandle
  7424. + mov r13, [rsp+38h]
  7425. + test eax, eax
  7426. + js short loc_3B8B9
  7427. +
  7428. +loc_3B88B:
  7429. + mov r8d, [rbp+18h]
  7430. + mov rcx, [rsp+20h]
  7431. + lea rdx, [rsp+28h]
  7432. + call OSOpenLargestSubkey
  7433. + test eax, eax
  7434. + js short loc_3B8B9
  7435. + mov rcx, [rsp+28h]
  7436. + mov rdx, r12
  7437. + call ACPIRegReadEntireSimulatorAcpiTable
  7438. + movzx edi, dil
  7439. + test eax, eax
  7440. + cmovns edi, r14d
  7441. +
  7442. +loc_3B8B9:
  7443. + xor edx, edx
  7444. + mov rcx, rsi
  7445. + callex ExFreePoolWithTag
  7446. + mov rcx, [rsp+20h]
  7447. + test rcx, rcx
  7448. + jz short loc_3B8D3
  7449. + call OSCloseHandle
  7450. +
  7451. +loc_3B8D3:
  7452. + mov rcx, [rsp+28h]
  7453. + test rcx, rcx
  7454. + jz short loc_3B8E2
  7455. + call OSCloseHandle
  7456. +
  7457. +loc_3B8E2:
  7458. + mov al, dil
  7459. +
  7460. +loc_3B8E5:
  7461. + mov r14, [rsp+30h]
  7462. + mov r12, [rsp+40h]
  7463. + mov rdi, [rsp+68h]
  7464. + mov rsi, [rsp+60h]
  7465. + mov rbp, [rsp+58h]
  7466. + mov rbx, [rsp+50h]
  7467. + add rsp, 48h
  7468. + ret
  7469. +ACPIRegGetTableFromSimulatorRegistryEntry ENDP
  7470. +
  7471. +
  7472. +ACPIEnumerateTables PROC
  7473. + sub rsp, 58h
  7474. + mov rax, AcpiInformation
  7475. + mov [rsp+60h], rbx
  7476. + mov [rsp+70h], rsi
  7477. + mov r8, [rax]
  7478. + mov [rsp+78h], rdi
  7479. + xor ebx, ebx
  7480. + mov [rsp+48h], r13
  7481. + xor r13b, r13b
  7482. + cmp dword ptr [r8], 54445358h
  7483. + mov [rsp+38h], r15
  7484. + mov rsi, rcx
  7485. + mov [rsp+20h], ebx
  7486. + mov r15, rdx
  7487. + jnz short loc_3AC0E
  7488. + mov eax, [r8+4]
  7489. + cmp eax, 24h
  7490. + jnb short loc_3ABFA
  7491. + mov rdi, rax
  7492. + mov rcx, rax
  7493. + mov r13b, 1
  7494. + sub rdi, rax
  7495. + shr rdi, 3
  7496. + jmp short loc_3AC2B
  7497. +
  7498. +loc_3ABFA:
  7499. + mov ecx, 24h
  7500. + mov rdi, rax
  7501. + mov r13b, 1
  7502. + sub rdi, rcx
  7503. + shr rdi, 3
  7504. + jmp short loc_3AC2B
  7505. +
  7506. +loc_3AC0E:
  7507. + mov eax, [r8+4]
  7508. + cmp eax, 24h
  7509. + jnb short loc_3AC1C
  7510. + mov rcx, rax
  7511. + jmp short loc_3AC21
  7512. +
  7513. +
  7514. +loc_3AC1C:
  7515. + mov ecx, 24h
  7516. +
  7517. +loc_3AC21:
  7518. + mov rdi, rax
  7519. + sub rdi, rcx
  7520. + shr rdi, 2
  7521. +
  7522. +loc_3AC2B:
  7523. + test edi, edi
  7524. + mov [rsp+68h], rbp
  7525. + mov [rsp+50h], r12
  7526. + mov [rsp+40h], r14
  7527. + jz loc_3ACE3
  7528. + test rdx, rdx
  7529. + lea ecx, [rdi*4]
  7530. + mov [rsp+20h], ecx
  7531. + jz loc_3ACEA
  7532. + mov eax, [rdx]
  7533. + cmp eax, ecx
  7534. + jnb short loc_3AC66
  7535. + mov ebx, 0C0000023h
  7536. + jmp loc_3ACEF
  7537. +
  7538. +loc_3AC66:
  7539. + mov r8, rax
  7540. + xor edx, edx
  7541. + mov rcx, rsi
  7542. + call memset
  7543. + test edi, edi
  7544. + mov r12d, ebx
  7545. + jz short loc_3ACEF
  7546. + mov r14d, 24h
  7547. + mov rbp, rbx
  7548. + sub r14, rsi
  7549. +
  7550. +loc_3AC86:
  7551. + test r13b, r13b
  7552. + jz short loc_3AC9C
  7553. + mov rax, AcpiInformation
  7554. + mov rcx, [rax]
  7555. + mov rcx, [rcx+rbp+24h]
  7556. + jmp short loc_3ACAD
  7557. +
  7558. +loc_3AC9C:
  7559. + mov rax, AcpiInformation
  7560. + lea rdx, [r14+rsi]
  7561. + mov rcx, [rax]
  7562. + mov ecx, [rdx+rcx]
  7563. +
  7564. +loc_3ACAD:
  7565. + xor r8d, r8d
  7566. + lea edx, [r8+24h]
  7567. + callex MmMapIoSpace
  7568. + test rax, rax
  7569. + mov rcx, rax
  7570. + jz short loc_3ACE3
  7571. + mov eax, [rax]
  7572. + mov edx, 24h
  7573. + mov [rsi], eax
  7574. + callex MmUnmapIoSpace
  7575. + inc r12d
  7576. + add rbp, 8
  7577. + add rsi, 4
  7578. + cmp r12d, edi
  7579. + jb short loc_3AC86
  7580. + jmp short loc_3ACEF
  7581. +
  7582. +loc_3ACE3:
  7583. + mov ebx, 0C0140019h
  7584. + jmp short loc_3ACEF
  7585. +
  7586. +loc_3ACEA:
  7587. + mov ebx, 0C000000Dh
  7588. +
  7589. +loc_3ACEF:
  7590. + mov edi, [rsp+20h]
  7591. + mov r14, [rsp+40h]
  7592. + mov r13, [rsp+48h]
  7593. + mov r12, [rsp+50h]
  7594. + mov rsi, [rsp+70h]
  7595. + mov rbp, [rsp+68h]
  7596. + mov [r15], edi
  7597. + mov r15, [rsp+38h]
  7598. + mov rdi, [rsp+78h]
  7599. + mov eax, ebx
  7600. + mov rbx, [rsp+60h]
  7601. + add rsp, 58h
  7602. + ret
  7603. +ACPIEnumerateTables ENDP
  7604. +
  7605. +
  7606. +AcpiArblibFreeArbiterInstance PROC
  7607. + push rbx
  7608. + sub rsp, 20h
  7609. + cmp byte ptr [rcx+80h], 0
  7610. + mov rbx, rcx
  7611. + jz short loc_4DCEE
  7612. + add rcx, 88h
  7613. + call ArbDeleteArbiterInstance
  7614. +
  7615. +loc_4DCEE:
  7616. + xor edx, edx
  7617. + mov rcx, rbx
  7618. + add rsp, 20h
  7619. + pop rbx
  7620. + jmp qword ptr [__imp_ExFreePoolWithTag]
  7621. +AcpiArblibFreeArbiterInstance ENDP
  7622. +
  7623. +
  7624. +ACPIMapNamedTable PROC
  7625. + mov [rsp+20h], r9
  7626. + mov [rsp+18h], r8
  7627. + mov [rsp+10h], rdx
  7628. + mov [rsp+8], ecx
  7629. + mov rax, rsp
  7630. + sub rsp, 88h
  7631. + mov r10, AcpiInformation
  7632. + mov [rax-8], rbx
  7633. + mov [rax-10h], rbp
  7634. + mov [rax-18h], rsi
  7635. + mov [rax-28h], r12
  7636. + xor ebp, ebp
  7637. + mov [rax-30h], r13
  7638. + mov [rax-38h], r14
  7639. + mov [rax-40h], r15
  7640. + xor r15b, r15b
  7641. + mov [rax-58h], rbp
  7642. + mov rax, [r10]
  7643. + xor r12b, r12b
  7644. + cmp dword ptr [rax], 54445358h
  7645. + mov rbx, r8
  7646. + mov r14, rdx
  7647. + mov [rsp+21h], r15b
  7648. + mov [rsp+20h], r15b
  7649. + mov rsi, rbp
  7650. + mov [rsp+24h], ebp
  7651. + jnz short loc_3A850
  7652. + mov eax, [rax+4]
  7653. + cmp eax, 24h
  7654. + jnb short loc_3A83A
  7655. + mov r13, rax
  7656. + mov rcx, rax
  7657. + mov byte ptr [rsp+20h], 1
  7658. + sub r13, rax
  7659. + shr r13, 3
  7660. + jmp short loc_3A86C
  7661. +
  7662. +loc_3A83A:
  7663. + mov ecx, 24h
  7664. + mov r13, rax
  7665. + mov byte ptr [rsp+20h], 1
  7666. + sub r13, rcx
  7667. + shr r13, 3
  7668. + jmp short loc_3A86C
  7669. +
  7670. +loc_3A850:
  7671. + mov ecx, [rax+4]
  7672. + cmp ecx, 24h
  7673. + jnb short loc_3A85D
  7674. + mov rdx, rcx
  7675. + jmp short loc_3A862
  7676. +
  7677. +loc_3A85D:
  7678. + mov edx, 24h
  7679. +
  7680. +loc_3A862:
  7681. + mov r13, rcx
  7682. + sub r13, rdx
  7683. + shr r13, 2
  7684. +
  7685. +loc_3A86C:
  7686. + test r13d, r13d
  7687. + jnz short loc_3A87B
  7688. + mov eax, 0C0140019h
  7689. + jmp loc_3AB61
  7690. +
  7691. +loc_3A87B:
  7692. + test r13d, r13d
  7693. +
  7694. +loc_3A87E:
  7695. + mov [rsp+68h], rdi
  7696. + mov [rsp+28h], ebp
  7697. + jz loc_3AA28
  7698. + mov rdi, [rsp+30h]
  7699. + mov r14, rbp
  7700. + mov r15d, 24h
  7701. + jmp short loc_3A8A7
  7702. +
  7703. + ALIGN16
  7704. +loc_3A8A0:
  7705. + mov r10, AcpiInformation
  7706. +
  7707. +loc_3A8A7:
  7708. + cmp [rsp+20h], bpl
  7709. + jz short loc_3A8B8
  7710. + mov rbx, [r10]
  7711. + mov rbx, [r14+rbx+24h]
  7712. + jmp short loc_3A8BF
  7713. +
  7714. +loc_3A8B8:
  7715. + mov rax, [r10]
  7716. + mov ebx, [r15+rax]
  7717. +
  7718. +loc_3A8BF:
  7719. + xor r8d, r8d
  7720. + mov rcx, rbx
  7721. + lea edx, [r8+24h]
  7722. + callex MmMapIoSpace
  7723. + test rax, rax
  7724. + mov rsi, rax
  7725. + mov [rsp+30h], rax
  7726. + jz loc_3A9A0
  7727. + mov eax, [rsp+90h]
  7728. + cmp [rsi], eax
  7729. + jnz short loc_3A94F
  7730. + mov rax, [rsp+98h]
  7731. + mov r12b, 1
  7732. + test rax, rax
  7733. + jz short loc_3A91F
  7734. + lea r8, [rsi+0Ah]
  7735. + sub r8, rax
  7736. +
  7737. +loc_3A902:
  7738. + movzx edx, byte ptr [rax]
  7739. + movzx ecx, byte ptr [rax+r8]
  7740. + sub edx, ecx
  7741. + jnz short loc_3A915
  7742. + inc rax
  7743. + test ecx, ecx
  7744. + jnz short loc_3A902
  7745. +
  7746. +loc_3A915:
  7747. + movzx r12d, r12b
  7748. + test edx, edx
  7749. + cmovnz r12d, ebp
  7750. +
  7751. +loc_3A91F:
  7752. + mov rax, [rsp+0A0h]
  7753. + test rax, rax
  7754. + jz short loc_3A94F
  7755. + lea r8, [rsi+10h]
  7756. + sub r8, rax
  7757. +
  7758. +loc_3A933:
  7759. + movzx edx, byte ptr [rax]
  7760. + movzx ecx, byte ptr [rax+r8]
  7761. + sub edx, ecx
  7762. + jnz short loc_3A946
  7763. + inc rax
  7764. + test ecx, ecx
  7765. + jnz short loc_3A933
  7766. +
  7767. +loc_3A946:
  7768. + test edx, edx
  7769. + jz short loc_3A94F
  7770. + xor r12b, r12b
  7771. + jmp short loc_3A954
  7772. +
  7773. +loc_3A94F:
  7774. + test r12b, r12b
  7775. + jnz short loc_3A9B5
  7776. +
  7777. +loc_3A954:
  7778. + mov edx, 24h
  7779. + mov rcx, rsi
  7780. + callex MmUnmapIoSpace
  7781. + mov eax, [rsp+28h]
  7782. + add r15, 4
  7783. + inc eax
  7784. + add r14, 8
  7785. + mov rdi, rbp
  7786. + cmp eax, r13d
  7787. + mov rsi, rbp
  7788. + mov [rsp+30h], rbp
  7789. + mov [rsp+28h], eax
  7790. + jb loc_3A8A0
  7791. + mov rbx, [rsp+0A0h]
  7792. + mov r14, [rsp+98h]
  7793. + xor r12b, r12b
  7794. + jmp loc_3AA39
  7795. +
  7796. +loc_3A9A0:
  7797. + mov r14d, [rsp+24h]
  7798. + xor r15b, r15b
  7799. + mov ebp, 0C0140019h
  7800. + xor r12b, r12b
  7801. + jmp loc_3AB22
  7802. +
  7803. +loc_3A9B5:
  7804. + mov r14d, [rsi+4]
  7805. + mov edx, 24h
  7806. + mov rcx, rsi
  7807. + mov [rsp+24h], r14d
  7808. + callex MmUnmapIoSpace
  7809. + mov rdx, r14
  7810. + xor r8d, r8d
  7811. + mov rcx, rbx
  7812. + mov rdi, rbp
  7813. + callex MmMapIoSpace
  7814. + test rax, rax
  7815. + mov rsi, rax
  7816. + mov [rsp+30h], rax
  7817. + jnz short loc_3A9FB
  7818. + xor r15b, r15b
  7819. + mov ebp, 0C0140019h
  7820. + xor r12b, r12b
  7821. + jmp loc_3AB22
  7822. +
  7823. +loc_3A9FB:
  7824. + lea rcx, [rsp+30h]
  7825. + mov dl, 1
  7826. + call ACPIRegReadAMLRegistryEntry
  7827. + mov rsi, [rsp+30h]
  7828. + mov rbx, [rsp+0A0h]
  7829. + mov r14, [rsp+98h]
  7830. + mov rdi, rsi
  7831. + movzx r12d, al
  7832. + xor r15b, r15b
  7833. + jmp short loc_3AA30
  7834. +
  7835. +loc_3AA28:
  7836. + mov rdi, [rsp+30h]
  7837. + xor r12b, r12b
  7838. +
  7839. +loc_3AA30:
  7840. + test rdi, rdi
  7841. + jnz loc_3AAF1
  7842. +
  7843. +loc_3AA39:
  7844. + cmp [g_AmliHookEnabled], ebp
  7845. + jz loc_3AADB
  7846. + mov edx, 24h
  7847. + xor ecx, ecx
  7848. + mov r8d, 74706341h
  7849. + mov [rsp+28h], rbp
  7850. + callex ExAllocatePoolWithTag
  7851. + test rax, rax
  7852. + mov [rsp+28h], rax
  7853. + jz short loc_3AAD6
  7854. + xor ecx, ecx
  7855. + test r14, r14
  7856. + mov [rax], rcx
  7857. + mov [rax+8], rcx
  7858. + mov [rax+10h], rcx
  7859. + mov [rax+18h], rcx
  7860. + mov [rax+20h], ecx
  7861. + mov rax, [rsp+28h]
  7862. + mov ecx, [rsp+90h]
  7863. + mov [rax], ecx
  7864. + mov rax, [rsp+28h]
  7865. + mov dword ptr [rax+4], 24h
  7866. + jz short loc_3AAA5
  7867. + mov rax, [rsp+28h]
  7868. + mov ecx, [r14]
  7869. + mov [rax+0Ah], ecx
  7870. +
  7871. +loc_3AAA5:
  7872. + test rbx, rbx
  7873. + jz short loc_3AAB6
  7874. + mov rax, [rsp+28h]
  7875. + mov rcx, [rbx]
  7876. + mov [rax+10h], rcx
  7877. +
  7878. +loc_3AAB6:
  7879. + lea rcx, [rsp+28h]
  7880. + call ACPIRegGetTableFromSimulatorRegistryEntry
  7881. + test al, al
  7882. + movzx r15d, al
  7883. + mov [rsp+21h], al
  7884. + jz short loc_3AAD6
  7885. + mov rdi, [rsp+28h]
  7886. + test rdi, rdi
  7887. + jnz short loc_3AAEC
  7888. +
  7889. +loc_3AAD6:
  7890. + mov rsi, [rsp+30h]
  7891. +
  7892. +loc_3AADB:
  7893. + mov r14d, [rsp+24h]
  7894. + mov r15b, [rsp+21h]
  7895. + mov ebp, 0C0000225h
  7896. + jmp short loc_3AB22
  7897. +
  7898. +loc_3AAEC:
  7899. + mov rsi, [rsp+30h]
  7900. +
  7901. +loc_3AAF1:
  7902. + mov rbx, [rsp+0B0h]
  7903. + mov r14d, [rdi+4]
  7904. + cmp [rbx], r14d
  7905. + jnb short loc_3AB0C
  7906. + mov [rbx], r14d
  7907. + mov ebp, 0C0000023h
  7908. + jmp short loc_3AB22
  7909. +
  7910. +loc_3AB0C:
  7911. + mov rcx, [rsp+0A8h]
  7912. + mov r8, r14
  7913. + mov rdx, rdi
  7914. + call memcpy
  7915. + mov [rbx], r14d
  7916. +
  7917. +loc_3AB22:
  7918. + test rsi, rsi
  7919. + jz short loc_3AB45
  7920. + test r12b, r12b
  7921. + jz short loc_3AB39
  7922. + xor edx, edx
  7923. + mov rcx, rsi
  7924. + callex ExFreePoolWithTag
  7925. + jmp short loc_3AB45
  7926. +
  7927. +loc_3AB39:
  7928. + mov edx, r14d
  7929. + mov rcx, rsi
  7930. + callex MmUnmapIoSpace
  7931. +
  7932. +loc_3AB45:
  7933. + test r15b, r15b
  7934. + jz short loc_3AB5A
  7935. + test rdi, rdi
  7936. + jz short loc_3AB5A
  7937. + xor edx, edx
  7938. + mov rcx, rdi
  7939. + callex ExFreePoolWithTag
  7940. +
  7941. +loc_3AB5A:
  7942. + mov rdi, [rsp+68h]
  7943. + mov eax, ebp
  7944. +
  7945. +loc_3AB61:
  7946. + mov r15, [rsp+48h]
  7947. + mov r14, [rsp+50h]
  7948. + mov r13, [rsp+58h]
  7949. + mov r12, [rsp+60h]
  7950. + mov rsi, [rsp+70h]
  7951. + mov rbp, [rsp+78h]
  7952. + mov rbx, [rsp+80h]
  7953. + add rsp, 88h
  7954. + ret
  7955. +ACPIMapNamedTable ENDP
  7956. +
  7957. +
  7958. +ACPIEnumMapTableHandler PROC
  7959. + sub rsp, 38h
  7960. + mov edx, [rcx+4]
  7961. + test edx, edx
  7962. + jz short loc_3AD68
  7963. + dec edx
  7964. + jz short loc_3AD49
  7965. + mov eax, 0C0000002h
  7966. + add rsp, 38h
  7967. + ret
  7968. +
  7969. +loc_3AD49:
  7970. + lea rax, [rcx+0Ch]
  7971. + lea r9, [rcx+10h]
  7972. + mov ecx, [rcx+8]
  7973. + xor r8d, r8d
  7974. + xor edx, edx
  7975. + mov [rsp+20h], rax
  7976. + call ACPIMapNamedTable
  7977. + add rsp, 38h
  7978. + ret
  7979. +
  7980. +loc_3AD68:
  7981. + lea rdx, [rcx+0Ch]
  7982. + add rcx, 10h
  7983. + add rsp, 38h
  7984. + jmp ACPIEnumerateTables
  7985. +ACPIEnumMapTableHandler ENDP
  7986. +
  7987. +
  7988. +ACPIInitializeKernelTableHandler PROC
  7989. + sub rsp, 48h
  7990. + mov r8d, 18h
  7991. + mov [rsp+24h], cl
  7992. + lea rax, ACPIEnumMapTableHandler
  7993. + mov [rsp+30h], rdx
  7994. + lea ecx, [r8+33h]
  7995. + lea rdx, [rsp+20h]
  7996. + mov dword ptr [rsp+20h], 41435049h
  7997. + mov [rsp+28h], rax
  7998. + callex ZwSetSystemInformation
  7999. + add rsp, 48h
  8000. + ret
  8001. +ACPIInitializeKernelTableHandler ENDP
  8002. +
  8003. +
  8004. +AcpiArblibCommitResources PROC
  8005. + mov rax, rsp
  8006. + sub rsp, 88h
  8007. + cmp byte ptr [rcx+81h], 0
  8008. + mov [rax+8], rbx
  8009. + mov [rax+10h], rbp
  8010. + mov [rax-10h], r13
  8011. + mov r13d, [rcx+0A0h]
  8012. + mov rbx, rdx
  8013. + mov rbp, rcx
  8014. + jz short loc_4DE47
  8015. + mov rcx, [rcx+0A8h]
  8016. + callex RtlFreeRangeList
  8017. + mov byte ptr [rbp+83h], 0
  8018. + mov byte ptr [rbp+81h], 0
  8019. +
  8020. +loc_4DE47:
  8021. + mov [rsp+0A0h], rsi
  8022. + mov [rsp+0A8h], rdi
  8023. + mov [rsp+80h], r12
  8024. + mov [rsp+70h], r14
  8025. + xor r14d, r14d
  8026. + test rbx, rbx
  8027. + mov r12d, r14d
  8028. + jnz short loc_4DE7F
  8029. + lea rcx, [rsp+50h]
  8030. + callex RtlInitializeRangeList
  8031. + jmp loc_4DF2B
  8032. +
  8033. +loc_4DE7F:
  8034. + lea rcx, [rsp+50h]
  8035. + callex RtlInitializeRangeList
  8036. + mov eax, [rbx+10h]
  8037. + lea rdi, [rbx+14h]
  8038. + lea rcx, [rax+rax*4]
  8039. + lea rbx, [rdi+rcx*4]
  8040. + cmp rdi, rbx
  8041. + jnb loc_4DF2B
  8042. +
  8043. +loc_4DEA2:
  8044. + movzx eax, byte ptr [rdi]
  8045. + cmp eax, r13d
  8046. + jnz short loc_4DF1E
  8047. + lea rax, [rdi+14h]
  8048. + cmp rax, rbx
  8049. + jnb short loc_4DF1E
  8050. +
  8051. +loc_4DEB3:
  8052. + cmp byte ptr [rax], 81h
  8053. + jnz short loc_4DF1E
  8054. + cmp word ptr [rax+2], 1
  8055. + jz short loc_4DECA
  8056. + add rax, 14h
  8057. + cmp rax, rbx
  8058. + jb short loc_4DEB3
  8059. + jmp short loc_4DF1E
  8060. +
  8061. +loc_4DECA:
  8062. + lea r8, [rsp+40h]
  8063. + lea rdx, [rsp+48h]
  8064. + mov rcx, rdi
  8065. + call qword ptr [rbp+108h]
  8066. + test eax, eax
  8067. + mov esi, eax
  8068. + js short loc_4DF56
  8069. + mov eax, [rsp+40h]
  8070. + test eax, eax
  8071. + jz short loc_4DF1E
  8072. + mov rdx, [rsp+48h]
  8073. + mov [rsp+30h], r14
  8074. + lea rcx, [rsp+50h]
  8075. + lea r8, [rax+rdx-1]
  8076. + xor r9d, r9d
  8077. + mov [rsp+28h], r14
  8078. + mov dword ptr [rsp+20h], 3
  8079. + callex RtlAddRange
  8080. + test eax, eax
  8081. + mov esi, eax
  8082. + js short loc_4DF56
  8083. + inc r12d
  8084. +
  8085. +loc_4DF1E:
  8086. + add rdi, 14h
  8087. + cmp rdi, rbx
  8088. + jb loc_4DEA2
  8089. +
  8090. +loc_4DF2B:
  8091. + mov rcx, [rbp+0A8h]
  8092. + lea rdx, [rsp+50h]
  8093. + callex RtlInvertRangeList
  8094. + test eax, eax
  8095. + mov esi, eax
  8096. + js short loc_4DF56
  8097. + test r12d, r12d
  8098. + mov byte ptr [rbp+81h], 1
  8099. + jnz short loc_4DF56
  8100. + mov byte ptr [rbp+83h], 1
  8101. +
  8102. +loc_4DF56:
  8103. + lea rcx, [rsp+50h]
  8104. + callex RtlFreeRangeList
  8105. + mov r14, [rsp+70h]
  8106. + mov r13, [rsp+78h]
  8107. + mov r12, [rsp+80h]
  8108. + mov rdi, [rsp+0A8h]
  8109. + mov rbp, [rsp+98h]
  8110. + mov rbx, [rsp+90h]
  8111. + mov eax, esi
  8112. + mov rsi, [rsp+0A0h]
  8113. + add rsp, 88h
  8114. + ret
  8115. +AcpiArblibCommitResources ENDP
  8116. +
  8117. +_TEXT ends
  8118. + END
  8119. \ No newline at end of file
  8120. diff --strip-trailing-cr -ur ./driver/nt/arblib.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/arblib.c"
  8121. --- ./driver/nt/arblib.c 2022-04-28 02:06:33.878906200 +0500
  8122. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/arblib.c" 2022-04-06 22:47:01.715820300 +0500
  8123. @@ -0,0 +1,1423 @@
  8124. +#include "pch.h"
  8125. +
  8126. +WCHAR asmRootName[] = L"Root";
  8127. +WCHAR asmPortName[] = L"Port";
  8128. +WCHAR asmMemoryName[] = L"Memory";
  8129. +WCHAR asmBusNumberName[] = L"Bus Number";
  8130. +WCHAR asmACPIName[] = L"ACPI %s ";
  8131. +WCHAR asmFormat2Name[] = L"%C%C%C%C";
  8132. +WCHAR asmFormat3Name[] = L"%x";
  8133. +CHAR asmPciBarName[] = "PciBarTarget";
  8134. +CHAR asmACPI2Name[] = "ACPI\\%s";
  8135. +CHAR asmStar2Name[] = "*%s";
  8136. +WCHAR asmACPI2NameL[] = L"ACPI\\%S";
  8137. +WCHAR asmStar2NameL[] = L"*%S";
  8138. +
  8139. +
  8140. +ULONG AcpiArbiterInstanceCount;
  8141. +
  8142. +#ifdef _X86_
  8143. +
  8144. +extern VOID __cdecl _alldiv(VOID); // ntoskrnl.lib
  8145. +
  8146. +
  8147. +void __declspec(naked)
  8148. +ACPIConvertStringDelimitation(char *psIn, char Char) {
  8149. +_asm {
  8150. + mov edi, edi
  8151. + push ebp
  8152. + mov ebp, esp
  8153. + mov ecx, [ebp+8]
  8154. + test ecx, ecx
  8155. + jz short loc_28165
  8156. + mov eax, ecx
  8157. + push esi
  8158. + lea esi, [eax+1]
  8159. +
  8160. +loc_2813E:
  8161. + mov dl, [eax]
  8162. + inc eax
  8163. + test dl, dl
  8164. + jnz short loc_2813E
  8165. + sub eax, esi
  8166. + jmp short loc_2815C
  8167. +
  8168. +loc_28149:
  8169. + mov cl, [ebp+0Ch]
  8170. + mov [eax], cl
  8171. + mov ecx, eax
  8172. + lea esi, [ecx+1]
  8173. +
  8174. +loc_28153:
  8175. + mov dl, [ecx]
  8176. + inc ecx
  8177. + test dl, dl
  8178. + jnz short loc_28153
  8179. + sub ecx, esi
  8180. +
  8181. +loc_2815C:
  8182. + add eax, ecx
  8183. + cmp byte ptr [eax+1], 0
  8184. + jnz short loc_28149
  8185. + pop esi
  8186. +
  8187. +loc_28165:
  8188. + pop ebp
  8189. + retn 8
  8190. +}
  8191. +}
  8192. +
  8193. +
  8194. +VOID __declspec(naked)
  8195. +AcpiArblibReferenceArbiter() {
  8196. +_asm {
  8197. + push ebp
  8198. + mov ebp, esp
  8199. + mov ecx, [ebp+8]
  8200. + add ecx, 28h
  8201. + call dword ptr [InterlockedIncrement]
  8202. + pop ebp
  8203. + retn 4
  8204. +}
  8205. +}
  8206. +
  8207. +
  8208. +VOID __declspec(naked)
  8209. +AcpiArblibDereferenceArbiter() {
  8210. +_asm {
  8211. + push ebp
  8212. + mov ebp, esp
  8213. + mov ecx, [ebp+8]
  8214. + add ecx, 28h
  8215. + call dword ptr [InterlockedDecrement]
  8216. + pop ebp
  8217. + retn 4
  8218. +}
  8219. +}
  8220. +
  8221. +
  8222. +VOID __declspec(naked)
  8223. +AcpiArblibEjectInterface(VOID) {
  8224. +_asm {
  8225. + push ebp
  8226. + mov ebp, esp
  8227. + push esi
  8228. + push dword ptr [ebp+8]
  8229. + call ACPIInternalGetDeviceExtension
  8230. + mov ecx, [ebp+0Ch]
  8231. + mov edx, [ecx+60h]
  8232. + cmp word ptr [edx+0Ah], 0
  8233. + mov esi, [edx+10h]
  8234. + mov ecx, [edx+0Ch]
  8235. + jnz short loc_31C63
  8236. + cmp word ptr [edx+8], 18h
  8237. + jnb short loc_31C09
  8238. + mov eax, 0C000000Dh
  8239. + jmp short loc_31C68
  8240. +
  8241. +loc_31C09:
  8242. + cmp esi, 1
  8243. + jnz short loc_31C13
  8244. + mov eax, [eax+6Ch]
  8245. + jmp short loc_31C25
  8246. +
  8247. +loc_31C13:
  8248. + cmp esi, 3
  8249. + jnz short loc_31C1D
  8250. + mov eax, [eax+68h]
  8251. + jmp short loc_31C25
  8252. +
  8253. +loc_31C1D:
  8254. + cmp esi, 6
  8255. + jnz short loc_31C63
  8256. + mov eax, [eax+70h]
  8257. +
  8258. +loc_31C25:
  8259. + cmp byte ptr [eax+82h], 1
  8260. + jnz short loc_31C63
  8261. + and word ptr [ecx+2], 0
  8262. + and dword ptr [ecx+14h], 0
  8263. + add eax, 84h
  8264. + push eax
  8265. + mov word ptr [ecx], 18h
  8266. + mov [ecx+4], eax
  8267. + mov dword ptr [ecx+8], offset AcpiArblibReferenceArbiter
  8268. + mov dword ptr [ecx+0Ch], offset AcpiArblibDereferenceArbiter
  8269. + mov dword ptr [ecx+10h], offset ArbArbiterHandler
  8270. + call AcpiArblibReferenceArbiter
  8271. + xor eax, eax
  8272. + jmp short loc_31C68
  8273. +
  8274. +loc_31C63:
  8275. + mov eax, 0C00000BBh
  8276. +
  8277. +loc_31C68:
  8278. + pop esi
  8279. + pop ebp
  8280. + retn 8
  8281. +}
  8282. +}
  8283. +
  8284. +
  8285. +VOID __declspec(naked)
  8286. +AcpiArblibFreeArbiterInstance (ACPI_ARBITER_INSTANCE *CommonInstance) {
  8287. +__asm {
  8288. + push ebp
  8289. + mov ebp, esp
  8290. + push esi
  8291. + mov esi, [ebp+8]
  8292. + cmp byte ptr [esi+80h], 0
  8293. + jz short loc_31A24
  8294. + lea eax, [esi+84h]
  8295. + push eax
  8296. + call ArbDeleteArbiterInstance
  8297. +
  8298. +loc_31A24:
  8299. + push 0
  8300. + push esi
  8301. + call dword ptr[ExFreePoolWithTag]
  8302. + pop esi
  8303. + pop ebp
  8304. + retn 4
  8305. +}
  8306. +}
  8307. +
  8308. +
  8309. +NTSTATUS __declspec(naked)
  8310. +AcpiArblibCommitResources (ACPI_ARBITER_INSTANCE *CommonInstance, PVOID IrpStuff) {
  8311. +__asm {
  8312. + push ebp
  8313. + mov ebp, esp
  8314. + sub esp, 24h
  8315. + push ebx
  8316. + push esi
  8317. + mov esi, [ebp+8]
  8318. + cmp byte ptr [esi+81h], 0
  8319. + mov eax, [esi+90h]
  8320. + push edi
  8321. + mov [ebp-4], eax
  8322. + jz short loc_31AF4
  8323. + push dword ptr [esi+94h]
  8324. + call dword ptr[RtlFreeRangeList]
  8325. + mov byte ptr [esi+83h], 0
  8326. + mov byte ptr [esi+81h], 0
  8327. +
  8328. +loc_31AF4:
  8329. + and dword ptr [ebp+8], 0
  8330. + mov edi, [ebp+0Ch]
  8331. + lea eax, [ebp-24h]
  8332. + push eax
  8333. + call dword ptr[RtlInitializeRangeList]
  8334. + test edi, edi
  8335. + jz loc_31B97
  8336. + lea eax, [edi+14h]
  8337. + mov edi, [edi+10h]
  8338. + shl edi, 4
  8339. + add edi, eax
  8340. + mov ecx, eax
  8341. + cmp eax, edi
  8342. + jmp short loc_31B92
  8343. +
  8344. +loc_31B1E:
  8345. + movzx eax, byte ptr [ecx]
  8346. + cmp eax, [ebp-4]
  8347. + jnz short loc_31B8A
  8348. + lea eax, [ecx+10h]
  8349. + jmp short loc_31B3A
  8350. +
  8351. +loc_31B2B:
  8352. + cmp byte ptr [eax], 81h
  8353. + jnz short loc_31B8A
  8354. + cmp word ptr [eax+2], 1
  8355. + jz short loc_31B40
  8356. + add eax, 10h
  8357. +
  8358. +loc_31B3A:
  8359. + cmp eax, edi
  8360. + jb short loc_31B2B
  8361. + jmp short loc_31B8A
  8362. +
  8363. +loc_31B40:
  8364. + lea eax, [ebp-8]
  8365. + push eax
  8366. + lea eax, [ebp-10h]
  8367. + push eax
  8368. + push ecx
  8369. + call dword ptr [esi+0C4h]
  8370. + mov ebx, eax
  8371. + test ebx, ebx
  8372. + jl short loc_31BC1
  8373. + mov eax, [ebp-8]
  8374. + test eax, eax
  8375. + jbe short loc_31B8A
  8376. + xor ecx, ecx
  8377. + add eax, [ebp-10h]
  8378. + push ecx
  8379. + push ecx
  8380. + push 3
  8381. + push ecx
  8382. + adc ecx, [ebp-0Ch]
  8383. + add eax, 0FFFFFFFFh
  8384. + adc ecx, 0FFFFFFFFh
  8385. + push ecx
  8386. + push eax
  8387. + push dword ptr [ebp-0Ch]
  8388. + lea eax, [ebp-24h]
  8389. + push dword ptr [ebp-10h]
  8390. + push eax
  8391. + call dword ptr[RtlAddRange]
  8392. + mov ebx, eax
  8393. + test ebx, ebx
  8394. + jl short loc_31BC1
  8395. + inc dword ptr [ebp+8]
  8396. +
  8397. +loc_31B8A:
  8398. + mov ecx, [ebp+0Ch]
  8399. + add ecx, 10h
  8400. + cmp ecx, edi
  8401. +
  8402. +loc_31B92:
  8403. + mov [ebp+0Ch], ecx
  8404. + jb short loc_31B1E
  8405. +
  8406. +loc_31B97:
  8407. + lea eax, [ebp-24h]
  8408. + push eax
  8409. + push dword ptr [esi+94h]
  8410. + call dword ptr[RtlInvertRangeList]
  8411. + mov ebx, eax
  8412. + test ebx, ebx
  8413. + jl short loc_31BC1
  8414. + cmp dword ptr [ebp+8], 0
  8415. + mov byte ptr [esi+81h], 1
  8416. + jnz short loc_31BC1
  8417. + mov byte ptr [esi+83h], 1
  8418. +
  8419. +loc_31BC1:
  8420. + lea eax, [ebp-24h]
  8421. + push eax
  8422. + call dword ptr[RtlFreeRangeList]
  8423. + pop edi
  8424. + pop esi
  8425. + mov eax, ebx
  8426. + pop ebx
  8427. + _emit 0xc9 ; "leave" opcode
  8428. + retn 8
  8429. +}
  8430. +}
  8431. +
  8432. +
  8433. +VOID __declspec(naked)
  8434. +AcpiArblibUnpackRequirement() {
  8435. +_asm {
  8436. + push ebp
  8437. + mov ebp, esp
  8438. + mov eax, [ebp+8]
  8439. + mov cl, [eax+1]
  8440. + push ebx
  8441. + xor ebx, ebx
  8442. + inc ebx
  8443. + cmp cl, 3
  8444. + push esi
  8445. + jz short loc_3147C
  8446. + cmp cl, bl
  8447. + jz short loc_3147C
  8448. + cmp cl, 6
  8449. + jnz short loc_31475
  8450. + mov edx, [eax+0Ch]
  8451. + mov ecx, [ebp+0Ch]
  8452. + and dword ptr [ecx+4], 0
  8453. + mov esi, [ebp+14h]
  8454. + mov [ecx], edx
  8455. + mov edx, [eax+10h]
  8456. + mov ecx, [ebp+10h]
  8457. + and dword ptr [ecx+4], 0
  8458. + mov [ecx], edx
  8459. + mov edx, [eax+8]
  8460. + mov [esi], edx
  8461. + mov edx, [ebp+18h]
  8462. + mov [edx], ebx
  8463. + jmp short loc_314AE
  8464. +
  8465. +loc_31475:
  8466. + mov eax, 0C0000024h
  8467. + jmp short loc_314D4
  8468. +
  8469. +loc_3147C:
  8470. + mov edx, [eax+10h]
  8471. + mov ecx, [ebp+0Ch]
  8472. + mov esi, [ebp+14h]
  8473. + mov [ecx], edx
  8474. + mov edx, [eax+14h]
  8475. + mov [ecx+4], edx
  8476. + mov edx, [eax+18h]
  8477. + mov ecx, [ebp+10h]
  8478. + mov [ecx], edx
  8479. + mov edx, [eax+1Ch]
  8480. + mov [ecx+4], edx
  8481. + mov edx, [eax+8]
  8482. + mov [esi], edx
  8483. + mov edx, [eax+0Ch]
  8484. + test edx, edx
  8485. + mov esi, [ebp+18h]
  8486. + mov [esi], edx
  8487. + jnz short loc_314AE
  8488. + mov [esi], ebx
  8489. +
  8490. +loc_314AE:
  8491. + cmp byte ptr [eax+1], 3
  8492. + jnz short loc_314D2
  8493. + test byte ptr [eax+4], 10h
  8494. + jz short loc_314D2
  8495. + cmp dword ptr [eax+1Ch], 0
  8496. + jl short loc_314D2
  8497. + mov edx, 0FFFFFFh
  8498. + jg short loc_314CC
  8499. + cmp [eax+18h], edx
  8500. + jbe short loc_314D2
  8501. +
  8502. +loc_314CC:
  8503. + and dword ptr [ecx+4], 0
  8504. + mov [ecx], edx
  8505. +
  8506. +loc_314D2:
  8507. + xor eax, eax
  8508. +
  8509. +loc_314D4:
  8510. + pop esi
  8511. + pop ebx
  8512. + pop ebp
  8513. + retn 14h
  8514. +}
  8515. +}
  8516. +
  8517. +
  8518. +VOID __declspec(naked)
  8519. +AcpiArblibScoreRequirement() {
  8520. +_asm {
  8521. + push ebp
  8522. + mov ebp, esp
  8523. + sub esp, 14h
  8524. + and dword ptr [ebp-4], 0
  8525. + lea eax, [ebp-4]
  8526. + push eax
  8527. + lea eax, [ebp+8]
  8528. + push eax
  8529. + lea eax, [ebp-14h]
  8530. + push eax
  8531. + lea eax, [ebp-0Ch]
  8532. + push eax
  8533. + push dword ptr [ebp+8]
  8534. + call AcpiArblibUnpackRequirement
  8535. + test eax, eax
  8536. + jge short loc_31512
  8537. + push 50109h
  8538. + call _ACPIInternalError
  8539. +
  8540. +loc_31512:
  8541. + mov ecx, [ebp-4]
  8542. + test ecx, ecx
  8543. + jnz short loc_3151A
  8544. + inc ecx
  8545. +
  8546. +loc_3151A:
  8547. + push ebx
  8548. + xor eax, eax
  8549. + push esi
  8550. + push edi
  8551. + mov edx, ecx
  8552. + add edx, [ebp-0Ch]
  8553. + mov esi, eax
  8554. + adc esi, [ebp-8]
  8555. + sub edx, 1
  8556. + sbb esi, eax
  8557. + mov edi, ecx
  8558. + sub edi, 1
  8559. + not edi
  8560. + mov ebx, eax
  8561. + sbb ebx, eax
  8562. + and edx, edi
  8563. + mov edi, [ebp-14h]
  8564. + not ebx
  8565. + and esi, ebx
  8566. + sub edi, edx
  8567. + mov edx, [ebp-10h]
  8568. + sbb edx, esi
  8569. + mov esi, [ebp+8]
  8570. + xor ebx, ebx
  8571. + sub edi, esi
  8572. + sbb edx, ebx
  8573. + push eax
  8574. + add edi, 1
  8575. + push ecx
  8576. + adc edx, ebx
  8577. + push edx
  8578. + push edi
  8579. + call dword ptr [_alldiv]
  8580. + test edx, edx
  8581. + pop edi
  8582. + pop esi
  8583. + pop ebx
  8584. + jg short loc_31576
  8585. + jl short loc_3156D
  8586. + test eax, eax
  8587. + jnb short loc_31572
  8588. +
  8589. +loc_3156D:
  8590. + or eax, 0FFFFFFFFh
  8591. + jmp short locret_31583
  8592. +
  8593. +
  8594. +loc_31572:
  8595. + test edx, edx
  8596. + jl short locret_31583
  8597. +
  8598. +loc_31576:
  8599. + mov ecx, 7FFFFFFFh
  8600. + jg short loc_31581
  8601. + cmp eax, ecx
  8602. + jbe short locret_31583
  8603. +
  8604. +loc_31581:
  8605. + mov eax, ecx
  8606. +
  8607. +locret_31583:
  8608. + _emit 0xc9 ; "leave" opcode
  8609. + retn 4
  8610. +}
  8611. +}
  8612. +
  8613. +
  8614. +VOID __declspec(naked)
  8615. +AcpiArblibUnpackResource() {
  8616. +_asm {
  8617. + push ebp
  8618. + mov ebp, esp
  8619. + mov eax, [ebp+8]
  8620. + mov cl, [eax]
  8621. + cmp cl, 3
  8622. + jz short loc_31612
  8623. + cmp cl, 1
  8624. + jz short loc_31612
  8625. + cmp cl, 6
  8626. + jnz short loc_31628
  8627. + mov edx, [eax+4]
  8628. + mov ecx, [ebp+0Ch]
  8629. + and dword ptr [ecx+4], 0
  8630. + mov [ecx], edx
  8631. + mov eax, [eax+8]
  8632. + jmp short loc_31623
  8633. +
  8634. +loc_31612:
  8635. + mov edx, [eax+4]
  8636. + mov ecx, [ebp+0Ch]
  8637. + mov [ecx], edx
  8638. + mov edx, [eax+8]
  8639. + mov [ecx+4], edx
  8640. + mov eax, [eax+0Ch]
  8641. +
  8642. +loc_31623:
  8643. + mov ecx, [ebp+10h]
  8644. + mov [ecx], eax
  8645. +
  8646. +loc_31628:
  8647. + xor eax, eax
  8648. + pop ebp
  8649. + retn 0Ch
  8650. +}
  8651. +}
  8652. +
  8653. +
  8654. +VOID __declspec(naked)
  8655. +AcpiArblibPackResource() {
  8656. +_asm {
  8657. + push ebp
  8658. + mov ebp, esp
  8659. + mov ecx, [ebp+8]
  8660. + mov dl, [ecx+1]
  8661. + mov eax, [ebp+14h]
  8662. + mov [eax], dl
  8663. + mov dx, [ecx+4]
  8664. + mov [eax+2], dx
  8665. + mov dl, [ecx+2]
  8666. + mov [eax+1], dl
  8667. + cmp byte ptr [ecx+1], 3
  8668. + jz short loc_315CB
  8669. + mov dl, [ecx+1]
  8670. + cmp dl, 1
  8671. + jz short loc_315CB
  8672. + cmp dl, 6
  8673. + jnz short loc_315DD
  8674. + mov edx, [ebp+0Ch]
  8675. + mov [eax+4], edx
  8676. + mov ecx, [ecx+8]
  8677. + mov [eax+8], ecx
  8678. + jmp short loc_315DD
  8679. +
  8680. +loc_315CB:
  8681. + mov edx, [ebp+0Ch]
  8682. + mov [eax+4], edx
  8683. + mov edx, [ebp+10h]
  8684. + mov [eax+8], edx
  8685. + mov ecx, [ecx+8]
  8686. + mov [eax+0Ch], ecx
  8687. +
  8688. +loc_315DD:
  8689. + xor eax, eax
  8690. + pop ebp
  8691. + retn 10h
  8692. +}
  8693. +}
  8694. +
  8695. +
  8696. +VOID __declspec(naked)
  8697. +AcpiMemarbFindSuitableRange() {
  8698. +_asm {
  8699. + push ebp
  8700. + mov ebp, esp
  8701. + mov eax, [ebp+0Ch]
  8702. + mov ecx, [eax+20h]
  8703. + test byte ptr [ecx+18h], 1
  8704. + jz short loc_35469
  8705. + or byte ptr [eax+33h], 1
  8706. +
  8707. +loc_35469:
  8708. + push eax
  8709. + push dword ptr [ebp+8]
  8710. + call ArbFindSuitableRange
  8711. + pop ebp
  8712. + retn 8
  8713. +}
  8714. +}
  8715. +
  8716. +
  8717. +VOID __declspec(naked)
  8718. +AcpiArblibGetNextAlias() {
  8719. +_asm {
  8720. + push ebp
  8721. + mov ebp, esp
  8722. + test byte ptr [ebp+8], 4
  8723. + jz short loc_3164A
  8724. + mov ecx, [ebp+0Ch]
  8725. + add ecx, 400h
  8726. + jmp short loc_31659
  8727. +
  8728. +loc_3164A:
  8729. + test byte ptr [ebp+8], 8
  8730. + jz short loc_31677
  8731. + mov ecx, [ebp+0Ch]
  8732. + add ecx, 1000h
  8733. +
  8734. +loc_31659:
  8735. + mov eax, [ebp+10h]
  8736. + adc eax, 0
  8737. + test eax, eax
  8738. + ja short loc_31677
  8739. + cmp ecx, 0FFFFh
  8740. + ja short loc_31677
  8741. + mov edx, [ebp+14h]
  8742. + mov [edx+4], eax
  8743. + mov [edx], ecx
  8744. + mov al, 1
  8745. + jmp short loc_31679
  8746. +
  8747. +loc_31677:
  8748. + xor al, al
  8749. +
  8750. +loc_31679:
  8751. + pop ebp
  8752. + retn 10h
  8753. +}
  8754. +}
  8755. +
  8756. +
  8757. +VOID __declspec(naked)
  8758. +AcpiPortarbBacktrackAllocation() {
  8759. +_asm {
  8760. + push ebp
  8761. + mov ebp, esp
  8762. + push ecx
  8763. + push ecx
  8764. + push ebx
  8765. + push esi
  8766. + mov esi, [ebp+0Ch]
  8767. + mov eax, [esi]
  8768. + mov ecx, [esi+4]
  8769. + mov edx, [esi+24h]
  8770. + push edi
  8771. + mov [ebp-8], eax
  8772. + mov [ebp-4], ecx
  8773. + mov edi, [edx+1Ch]
  8774. + lea edx, [ebp-8]
  8775. + push edx
  8776. + push ecx
  8777. + push eax
  8778. + push edi
  8779. + call AcpiArblibGetNextAlias
  8780. + mov ebx, [ebp+8]
  8781. + jmp short loc_3597A
  8782. +
  8783. +loc_3593F:
  8784. + mov eax, [esi+20h]
  8785. + push dword ptr [eax+10h]
  8786. + mov eax, [esi+24h]
  8787. + mov eax, [eax+10h]
  8788. + xor ecx, ecx
  8789. + add eax, [ebp-8]
  8790. + adc ecx, [ebp-4]
  8791. + add eax, 0FFFFFFFFh
  8792. + adc ecx, 0FFFFFFFFh
  8793. + push ecx
  8794. + push eax
  8795. + push dword ptr [ebp-4]
  8796. + push dword ptr [ebp-8]
  8797. + push dword ptr [ebx+14h]
  8798. + call dword ptr [RtlDeleteRange]
  8799. + lea eax, [ebp-8]
  8800. + push eax
  8801. + push dword ptr [ebp-4]
  8802. + push dword ptr [ebp-8]
  8803. + push edi
  8804. + call AcpiArblibGetNextAlias
  8805. +
  8806. +loc_3597A:
  8807. + test al, al
  8808. + jnz short loc_3593F
  8809. + push esi
  8810. + push ebx
  8811. + call ArbBacktrackAllocation
  8812. + pop edi
  8813. + pop esi
  8814. + pop ebx
  8815. + _emit 0xc9 ; "leave" opcode
  8816. + retn 8
  8817. +
  8818. +}
  8819. +}
  8820. +
  8821. +
  8822. +VOID __declspec(naked)
  8823. +AcpiPortarbAddAllocation() {
  8824. +_asm {
  8825. + push ebp
  8826. + mov ebp, esp
  8827. + sub esp, 0Ch
  8828. + push ebx
  8829. + push esi
  8830. + mov esi, [ebp+0Ch]
  8831. + mov ecx, [esi+24h]
  8832. + xor eax, eax
  8833. + inc eax
  8834. + test [ecx+1Ch], al
  8835. + push edi
  8836. + mov [ebp-4], eax
  8837. + jz short loc_35AAD
  8838. + mov dword ptr [ebp-4], 3
  8839. +
  8840. +loc_35AAD:
  8841. + mov eax, [esi+20h]
  8842. + push dword ptr [eax+10h]
  8843. + mov ebx, [ebp+8]
  8844. + mov edi, dword ptr [RtlAddRange]
  8845. + push 0
  8846. + push dword ptr [ebp-4]
  8847. + xor eax, eax
  8848. + mov al, [esi+32h]
  8849. + push eax
  8850. + push dword ptr [esi+0Ch]
  8851. + push dword ptr [esi+8]
  8852. + push dword ptr [esi+4]
  8853. + push dword ptr [esi]
  8854. + push dword ptr [ebx+14h]
  8855. + call edi ;
  8856. + mov eax, [esi]
  8857. + mov ecx, [esi+4]
  8858. + mov edx, [esi+24h]
  8859. + mov [ebp-0Ch], eax
  8860. + mov [ebp-8], ecx
  8861. + mov edx, [edx+20h]
  8862. + movzx edx, word ptr [edx+4]
  8863. + mov [ebp+0Ch], edx
  8864. + mov dl, [esi+32h]
  8865. + or dl, 10h
  8866. + mov [ebp+8], dl
  8867. + lea edx, [ebp-0Ch]
  8868. + push edx
  8869. + push ecx
  8870. + push eax
  8871. + jmp short loc_35B39
  8872. +
  8873. +loc_35B00:
  8874. + mov eax, [esi+20h]
  8875. + push dword ptr [eax+10h]
  8876. + mov eax, [esi+24h]
  8877. + mov eax, [eax+10h]
  8878. + push 0
  8879. + push dword ptr [ebp-4]
  8880. + xor ecx, ecx
  8881. + add eax, [ebp-0Ch]
  8882. + push dword ptr [ebp+8]
  8883. + adc ecx, [ebp-8]
  8884. + add eax, 0FFFFFFFFh
  8885. + adc ecx, 0FFFFFFFFh
  8886. + push ecx
  8887. + push eax
  8888. + push dword ptr [ebp-8]
  8889. + push dword ptr [ebp-0Ch]
  8890. + push dword ptr [ebx+14h]
  8891. + call edi
  8892. + lea eax, [ebp-0Ch]
  8893. + push eax
  8894. + push dword ptr [ebp-8]
  8895. + push dword ptr [ebp-0Ch]
  8896. +
  8897. +loc_35B39:
  8898. + push dword ptr [ebp+0Ch]
  8899. + call AcpiArblibGetNextAlias
  8900. + test al, al
  8901. + jnz short loc_35B00
  8902. + pop edi
  8903. + pop esi
  8904. + pop ebx
  8905. + _emit 0xc9 ; "leave" opcode
  8906. + retn 8
  8907. +}
  8908. +}
  8909. +
  8910. +
  8911. +VOID __declspec(naked)
  8912. +AcpiArblibIsAliasedRangeAvailable() {
  8913. +_asm {
  8914. + push ebp
  8915. + mov ebp, esp
  8916. + sub esp, 4Ch
  8917. + push ebx
  8918. + mov ebx, [ebp+0Ch]
  8919. + mov eax, [ebx+20h]
  8920. + mov ecx, [eax+14h]
  8921. + test ecx, ecx
  8922. + push esi
  8923. + push edi
  8924. + mov byte ptr [ebp-4], 0
  8925. + jz short loc_316A9
  8926. + cmp ecx, 2
  8927. + jz short loc_316A9
  8928. + test byte ptr [eax+18h], 1
  8929. + jz short loc_316AD
  8930. +
  8931. +loc_316A9:
  8932. + mov byte ptr [ebp-4], 1
  8933. +
  8934. +loc_316AD:
  8935. + mov eax, [ebx+4]
  8936. + mov edx, [ebx]
  8937. + mov [ebp-10h], eax
  8938. + mov eax, [ebx+24h]
  8939. + mov ecx, [eax+20h]
  8940. + movzx ecx, word ptr [ecx+4]
  8941. + mov [ebp-0Ch], ecx
  8942. + push 0Eh
  8943. + pop ecx
  8944. + mov esi, ebx
  8945. + lea edi, [ebp-4Ch]
  8946. + rep movsd
  8947. + test byte ptr [eax+1Ch], 1
  8948. + mov [ebp-14h], edx
  8949. + mov dword ptr [ebp-8], 2
  8950. + jz short loc_316E3
  8951. + mov dword ptr [ebp-8], 3
  8952. +
  8953. +loc_316E3:
  8954. + lea eax, [ebp-14h]
  8955. + push eax
  8956. + push dword ptr [ebp-10h]
  8957. + push edx
  8958. + push dword ptr [ebp-0Ch]
  8959. + call AcpiArblibGetNextAlias
  8960. + test al, al
  8961. + jz loc_31787
  8962. + mov esi, [ebp+8]
  8963. +
  8964. +loc_316FE:
  8965. + mov edi, [ebp-14h]
  8966. + lea eax, [ebp+0Fh]
  8967. + push eax
  8968. + push dword ptr [esi+98h]
  8969. + mov eax, [ebx+24h]
  8970. + push dword ptr [esi+94h]
  8971. + mov eax, [eax+10h]
  8972. + push dword ptr [ebp-4]
  8973. + xor ecx, ecx
  8974. + push dword ptr [ebp-8]
  8975. + add eax, edi
  8976. + adc ecx, [ebp-10h]
  8977. + add eax, 0FFFFFFFFh
  8978. + adc ecx, 0FFFFFFFFh
  8979. + push ecx
  8980. + push eax
  8981. + push dword ptr [ebp-10h]
  8982. + push edi
  8983. + push dword ptr [esi+14h]
  8984. + call dword ptr [RtlIsRangeAvailable]
  8985. + cmp byte ptr [ebp+0Fh], 1
  8986. + jz short loc_3176F
  8987. + mov eax, [ebp-10h]
  8988. + mov ecx, [ebx+24h]
  8989. + mov [ebp-38h], eax
  8990. + xor edx, edx
  8991. + mov [ebp-3Ch], edi
  8992. + mov ecx, [ecx+10h]
  8993. + add ecx, edi
  8994. + adc edx, eax
  8995. + add ecx, 0FFFFFFFFh
  8996. + lea eax, [ebp-4Ch]
  8997. + push eax
  8998. + adc edx, 0FFFFFFFFh
  8999. + push esi
  9000. + mov [ebp-34h], ecx
  9001. + mov [ebp-30h], edx
  9002. + call dword ptr [esi+84h]
  9003. + test al, al
  9004. + jz short loc_31790
  9005. +
  9006. +loc_3176F:
  9007. + lea eax, [ebp-14h]
  9008. + push eax
  9009. + push dword ptr [ebp-10h]
  9010. + push edi
  9011. + push dword ptr [ebp-0Ch]
  9012. + call AcpiArblibGetNextAlias
  9013. + test al, al
  9014. + jnz loc_316FE
  9015. +
  9016. +loc_31787:
  9017. + mov al, 1
  9018. +
  9019. +loc_31789:
  9020. + pop edi
  9021. + pop esi
  9022. + pop ebx
  9023. + _emit 0xc9 ; "leave" opcode
  9024. + retn 8
  9025. +; ---------------------------------------------------------------------------
  9026. +
  9027. +loc_31790:
  9028. + xor al, al
  9029. + jmp short loc_31789
  9030. +}
  9031. +}
  9032. +
  9033. +
  9034. +VOID __declspec(naked)
  9035. +AcpiPortarbFindSuitableRange() {
  9036. +_asm {
  9037. + push ebp
  9038. + mov ebp, esp
  9039. + push esi
  9040. + mov esi, [ebp+0Ch]
  9041. + mov eax, [esi+24h]
  9042. + cmp dword ptr [eax+10h], 0
  9043. + jnz short loc_359B6
  9044. + mov eax, [esi]
  9045. + mov [esi+8], eax
  9046. + mov eax, [esi+4]
  9047. + mov [esi+0Ch], eax
  9048. + mov al, 1
  9049. + jmp loc_35A7B
  9050. +
  9051. +loc_359B6:
  9052. + mov ecx, [esi+20h]
  9053. + mov edx, [ecx+14h]
  9054. + test edx, edx
  9055. + mov byte ptr [ebp+0Ch], 0
  9056. + jz short loc_359CF
  9057. + cmp edx, 2
  9058. + jz short loc_359CF
  9059. + test byte ptr [ecx+18h], 1
  9060. + jz short loc_359D3
  9061. +
  9062. +loc_359CF:
  9063. + mov byte ptr [ebp+0Ch], 1
  9064. +
  9065. +loc_359D3:
  9066. + mov ecx, [esi+14h]
  9067. + push ebx
  9068. + movzx ebx, byte ptr [eax+1Ch]
  9069. + and ebx, 1
  9070. + cmp ecx, [esi+1Ch]
  9071. + push edi
  9072. + ja loc_35A77
  9073. + jb short loc_359F6
  9074. + mov ecx, [esi+10h]
  9075. + cmp ecx, [esi+18h]
  9076. + ja loc_35A77
  9077. +
  9078. +loc_359F6:
  9079. + mov edi, [ebp+8]
  9080. +
  9081. +loc_359F9:
  9082. + push esi
  9083. + push dword ptr [edi+98h]
  9084. + push dword ptr [edi+94h]
  9085. + push dword ptr [ebp+0Ch]
  9086. + push ebx
  9087. + push dword ptr [eax+14h]
  9088. + push dword ptr [eax+10h]
  9089. + push dword ptr [esi+1Ch]
  9090. + push dword ptr [esi+18h]
  9091. + push dword ptr [esi+14h]
  9092. + push dword ptr [esi+10h]
  9093. + push dword ptr [edi+14h]
  9094. + call dword ptr [RtlFindRange]
  9095. + test eax, eax
  9096. + jge short loc_35A35
  9097. + push esi
  9098. + push edi
  9099. + call dword ptr [edi+84h]
  9100. + test al, al
  9101. + jz short loc_35A77
  9102. +
  9103. +loc_35A35:
  9104. + mov eax, [esi+24h]
  9105. + mov eax, [eax+10h]
  9106. + xor ecx, ecx
  9107. + add eax, [esi]
  9108. + push esi
  9109. + adc ecx, [esi+4]
  9110. + add eax, 0FFFFFFFFh
  9111. + adc ecx, 0FFFFFFFFh
  9112. + push edi
  9113. + mov [esi+8], eax
  9114. + mov [esi+0Ch], ecx
  9115. + call AcpiArblibIsAliasedRangeAvailable
  9116. + test al, al
  9117. + jnz short loc_35A80
  9118. + mov eax, [esi+24h]
  9119. + mov ecx, [eax+10h]
  9120. + add [esi], ecx
  9121. + adc dword ptr [esi+4], 0
  9122. + mov ecx, [esi+14h]
  9123. + cmp ecx, [esi+1Ch]
  9124. + jb short loc_359F9
  9125. + ja short loc_35A77
  9126. + mov ecx, [esi+10h]
  9127. + cmp ecx, [esi+18h]
  9128. + jbe short loc_359F9
  9129. +
  9130. +loc_35A77:
  9131. + xor al, al
  9132. +
  9133. +loc_35A79:
  9134. + pop edi
  9135. + pop ebx
  9136. +
  9137. +loc_35A7B:
  9138. + pop esi
  9139. + pop ebp
  9140. + retn 8
  9141. +; ---------------------------------------------------------------------------
  9142. +
  9143. +loc_35A80:
  9144. + mov al, 1
  9145. + jmp short loc_35A79
  9146. +}
  9147. +}
  9148. +
  9149. +
  9150. +VOID __declspec(naked)
  9151. +AcpiInitializeBusNumberArbiter() {
  9152. +_asm {
  9153. + push ebp
  9154. + mov ebp, esp
  9155. + mov ecx, [ebp+8]
  9156. + push 0
  9157. + push offset asmRootName
  9158. + lea eax, [ecx+84h]
  9159. + push ecx
  9160. + mov ecx, [ebp+0Ch]
  9161. + push 6
  9162. + mov dword ptr [eax+38h], offset AcpiArblibUnpackRequirement
  9163. + mov dword ptr [eax+3Ch], offset AcpiArblibPackResource
  9164. + mov dword ptr [eax+40h], offset AcpiArblibUnpackResource
  9165. + mov dword ptr [eax+44h], offset AcpiArblibScoreRequirement
  9166. + push dword ptr [ecx+130h]
  9167. + push eax
  9168. + call ArbInitializeArbiterInstance
  9169. + pop ebp
  9170. + retn 8
  9171. +}
  9172. +}
  9173. +
  9174. +
  9175. +VOID __declspec(naked)
  9176. +AcpiInitializeMemoryArbiter() {
  9177. +_asm {
  9178. + push ebp
  9179. + mov ebp, esp
  9180. + mov ecx, [ebp+8]
  9181. + push 0
  9182. + lea eax, [ecx+84h]
  9183. + push offset asmRootName
  9184. + push ecx
  9185. + mov ecx, [ebp+0Ch]
  9186. + push 3
  9187. + mov dword ptr [eax+38h], offset AcpiArblibUnpackRequirement
  9188. + mov dword ptr [eax+3Ch], offset AcpiArblibPackResource
  9189. + mov dword ptr [eax+40h], offset AcpiArblibUnpackResource
  9190. + mov dword ptr [eax+44h], offset AcpiArblibScoreRequirement
  9191. + mov dword ptr [eax+78h], offset AcpiMemarbFindSuitableRange
  9192. + push dword ptr [ecx+130h]
  9193. + push eax
  9194. + call ArbInitializeArbiterInstance
  9195. + pop ebp
  9196. + retn 8
  9197. +}
  9198. +}
  9199. +
  9200. +
  9201. +VOID __declspec(naked)
  9202. +AcpiInitializePortArbiter() {
  9203. +_asm {
  9204. + push ebp
  9205. + mov ebp, esp
  9206. + mov ecx, [ebp+8]
  9207. + push 0
  9208. + lea eax, [ecx+84h]
  9209. + push offset asmRootName
  9210. + push ecx
  9211. + mov ecx, [ebp+0Ch]
  9212. + push 1
  9213. + mov dword ptr [eax+38h], offset AcpiArblibUnpackRequirement
  9214. + mov dword ptr [eax+3Ch], offset AcpiArblibPackResource
  9215. + mov dword ptr [eax+40h], offset AcpiArblibUnpackResource
  9216. + mov dword ptr [eax+44h], offset AcpiArblibScoreRequirement
  9217. + mov dword ptr [eax+78h], offset AcpiPortarbFindSuitableRange
  9218. + mov dword ptr [eax+7Ch], offset AcpiPortarbAddAllocation
  9219. + mov dword ptr [eax+80h], offset AcpiPortarbBacktrackAllocation
  9220. + push dword ptr [ecx+130h]
  9221. + push eax
  9222. + call ArbInitializeArbiterInstance
  9223. + pop ebp
  9224. + retn 8
  9225. +}
  9226. +}
  9227. +
  9228. +
  9229. +VOID __declspec(naked)
  9230. +AcpiArblibAllocateArbiterInstance() {
  9231. +_asm {
  9232. + push ebp
  9233. + mov ebp, esp
  9234. + push ecx
  9235. + push ecx
  9236. + push ebx
  9237. + mov ebx, [ebp+0Ch]
  9238. + cmp ebx, 1
  9239. + jz short loc_31831
  9240. + cmp ebx, 3
  9241. + jz short loc_31831
  9242. + cmp ebx, 6
  9243. + jz short loc_31831
  9244. + xor eax, eax
  9245. + jmp loc_319FB
  9246. +
  9247. +loc_31831:
  9248. + push esi
  9249. + push 69706341h
  9250. + push 120h
  9251. + push 101h
  9252. + call dword ptr [ExAllocatePoolWithTag]
  9253. + mov esi, eax
  9254. + xor eax, eax
  9255. + test esi, esi
  9256. + mov [ebp-8], esi
  9257. + jz loc_319FA
  9258. + push edi
  9259. + push 48h
  9260. + pop ecx
  9261. + mov edi, esi
  9262. + rep stosd
  9263. + mov ecx, offset AcpiArbiterInstanceCount
  9264. + call dword ptr [InterlockedIncrement]
  9265. + cmp ebx, 1
  9266. + jnz short loc_31875
  9267. + mov eax, offset asmPortName
  9268. + jmp short loc_31884
  9269. +
  9270. +loc_31875:
  9271. + cmp ebx, 3
  9272. + mov eax, offset asmMemoryName
  9273. + jz short loc_31884
  9274. + mov eax, offset asmBusNumberName
  9275. +
  9276. +loc_31884:
  9277. + mov ebx, dword ptr [_snwprintf]
  9278. + push eax
  9279. + push offset asmACPIName
  9280. + push 40h
  9281. + push esi
  9282. + call ebx
  9283. + add esp, 10h
  9284. + test eax, eax
  9285. + jge short loc_318AC
  9286. + push 0
  9287. + push esi
  9288. + call dword ptr [ExFreePoolWithTag]
  9289. + xor eax, eax
  9290. + jmp loc_319F9
  9291. +
  9292. +loc_318AC:
  9293. + push 40h
  9294. + pop ecx
  9295. + sub ecx, eax
  9296. + lea edi, [esi+eax*2]
  9297. + mov eax, [ebp+8]
  9298. + mov esi, [eax+12Ch]
  9299. + test esi, esi
  9300. + mov [ebp+0Ch], ecx
  9301. + jz loc_319DB
  9302. + cmp dword ptr [esi+8], 0
  9303. + jz loc_319DB
  9304. + cmp ecx, 5
  9305. + jb loc_319DB
  9306. + mov al, [esi+13h]
  9307. + test al, al
  9308. + jnz short loc_318E7
  9309. + push 2Ah
  9310. + pop edx
  9311. + jmp short loc_318EA
  9312. +
  9313. +loc_318E7:
  9314. + movsx edx, al
  9315. +
  9316. +loc_318EA:
  9317. + mov al, [esi+12h]
  9318. + test al, al
  9319. + jnz short loc_318FA
  9320. + mov dword ptr [ebp+8], 2Ah
  9321. + jmp short loc_31900
  9322. +
  9323. +loc_318FA:
  9324. + movsx eax, al
  9325. + mov [ebp+8], eax
  9326. +
  9327. +loc_31900:
  9328. + mov al, [esi+11h]
  9329. + test al, al
  9330. + jnz short loc_3190C
  9331. + push 2Ah
  9332. + pop ecx
  9333. + jmp short loc_3190F
  9334. +
  9335. +loc_3190C:
  9336. + movsx ecx, al
  9337. +
  9338. +loc_3190F:
  9339. + mov al, [esi+10h]
  9340. + test al, al
  9341. + jnz short loc_3191B
  9342. + push 2Ah
  9343. + pop eax
  9344. + jmp short loc_3191E
  9345. +
  9346. +loc_3191B:
  9347. + movsx eax, al
  9348. +
  9349. +loc_3191E:
  9350. + push edx
  9351. + push dword ptr [ebp+8]
  9352. + push ecx
  9353. + push eax
  9354. + push offset asmFormat2Name
  9355. + push 4
  9356. + push edi
  9357. + call ebx
  9358. + add esp, 1Ch
  9359. + push 4
  9360. + pop eax
  9361. + sub [ebp+0Ch], eax
  9362. + mov [ebp+8], eax
  9363. + jmp loc_319C1
  9364. +
  9365. +loc_3193F:
  9366. + cmp dword ptr [ebp+0Ch], 6
  9367. + jb loc_319D8
  9368. + mov eax, [ebp+8]
  9369. + add eax, eax
  9370. + push eax
  9371. + lea eax, [edi+0Ah]
  9372. + push edi
  9373. + push eax
  9374. + call dword ptr [memmove]
  9375. + add dword ptr [ebp+8], 5
  9376. + sub dword ptr [ebp+0Ch], 5
  9377. + mov word ptr [edi+8], 2Eh
  9378. + mov al, [esi+13h]
  9379. + add esp, 0Ch
  9380. + test al, al
  9381. + jnz short loc_31977
  9382. + push 2Ah
  9383. + pop edx
  9384. + jmp short loc_3197A
  9385. +
  9386. +loc_31977:
  9387. + movsx edx, al
  9388. +
  9389. +loc_3197A:
  9390. + mov al, [esi+12h]
  9391. + test al, al
  9392. + jnz short loc_3198A
  9393. + mov dword ptr [ebp-4], 2Ah
  9394. + jmp short loc_31990
  9395. +
  9396. +loc_3198A:
  9397. + movsx eax, al
  9398. + mov [ebp-4], eax
  9399. +
  9400. +loc_31990:
  9401. + mov al, [esi+11h]
  9402. + test al, al
  9403. + jnz short loc_3199C
  9404. + push 2Ah
  9405. + pop ecx
  9406. + jmp short loc_3199F
  9407. +
  9408. +loc_3199C:
  9409. + movsx ecx, al
  9410. +
  9411. +loc_3199F:
  9412. + mov al, [esi+10h]
  9413. + test al, al
  9414. + jnz short loc_319AB
  9415. + push 2Ah
  9416. + pop eax
  9417. + jmp short loc_319AE
  9418. +
  9419. +loc_319AB:
  9420. + movsx eax, al
  9421. +
  9422. +loc_319AE:
  9423. + push edx
  9424. + push dword ptr [ebp-4]
  9425. + push ecx
  9426. + push eax
  9427. + push offset asmFormat2Name
  9428. + push 4
  9429. + push edi
  9430. + call ebx
  9431. + add esp, 1Ch
  9432. +
  9433. +loc_319C1:
  9434. + mov esi, [esi+8]
  9435. + cmp dword ptr [esi+8], 0
  9436. + jnz loc_3193F
  9437. + mov eax, [ebp+8]
  9438. + and word ptr [edi+eax*2], 0
  9439. + jmp short loc_319F6
  9440. +
  9441. +loc_319D8:
  9442. + mov ecx, [ebp+0Ch]
  9443. +
  9444. +loc_319DB:
  9445. + push AcpiArbiterInstanceCount
  9446. + push offset asmFormat3Name
  9447. + push ecx
  9448. + push edi
  9449. + call ebx
  9450. + mov eax, [ebp+0Ch]
  9451. + add esp, 10h
  9452. + and word ptr [edi+eax*2-2], 0
  9453. +
  9454. +loc_319F6:
  9455. + mov eax, [ebp-8]
  9456. +
  9457. +loc_319F9:
  9458. + pop edi
  9459. +
  9460. +loc_319FA:
  9461. + pop esi
  9462. +
  9463. +loc_319FB:
  9464. + pop ebx
  9465. + _emit 0xc9 ; "leave" opcode
  9466. + retn 8
  9467. +}
  9468. +}
  9469. +
  9470. +
  9471. +VOID __declspec(naked)
  9472. +AcpiArblibInitializeArbiter() {
  9473. +_asm {
  9474. + push ebp
  9475. + mov ebp, esp
  9476. + push edi
  9477. + mov edi, [ebp+0Ch]
  9478. + cmp edi, 1
  9479. + jz short loc_31A57
  9480. + cmp edi, 3
  9481. + jz short loc_31A57
  9482. + cmp edi, 6
  9483. + jz short loc_31A57
  9484. + mov eax, 0C000000Dh
  9485. + jmp short loc_31AAF
  9486. +
  9487. +loc_31A57:
  9488. + push ebx
  9489. + mov ebx, [ebp+8]
  9490. + push esi
  9491. + push edi
  9492. + push ebx
  9493. + call AcpiArblibAllocateArbiterInstance
  9494. + mov esi, eax
  9495. + test esi, esi
  9496. + jnz short loc_31A70
  9497. + mov eax, 0C000009Ah
  9498. + jmp short loc_31AAD
  9499. +
  9500. +loc_31A70:
  9501. + cmp edi, 1
  9502. + push ebx
  9503. + push esi
  9504. + jnz short loc_31A7E
  9505. + call AcpiInitializePortArbiter
  9506. + jmp short loc_31A8F
  9507. +
  9508. +
  9509. +loc_31A7E:
  9510. + cmp edi, 3
  9511. + jnz short loc_31A8A
  9512. + call AcpiInitializeMemoryArbiter
  9513. + jmp short loc_31A8F
  9514. +
  9515. +loc_31A8A:
  9516. + call AcpiInitializeBusNumberArbiter
  9517. +
  9518. +loc_31A8F:
  9519. + mov edi, eax
  9520. + test edi, edi
  9521. + jge short loc_31A9F
  9522. + push esi
  9523. + call AcpiArblibFreeArbiterInstance
  9524. + mov eax, edi
  9525. + jmp short loc_31AAD
  9526. +
  9527. +loc_31A9F:
  9528. + mov eax, [ebp+10h]
  9529. + mov byte ptr [esi+80h], 1
  9530. + mov [eax], esi
  9531. + xor eax, eax
  9532. +
  9533. +loc_31AAD:
  9534. + pop esi
  9535. + pop ebx
  9536. +
  9537. +loc_31AAF:
  9538. + pop edi
  9539. + pop ebp
  9540. + retn 0Ch
  9541. +}
  9542. +}
  9543. +
  9544. +
  9545. +
  9546. +#endif // _X86_
  9547. diff --strip-trailing-cr -ur ./driver/nt/arblib.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/arblib.h"
  9548. --- ./driver/nt/arblib.h 2022-04-28 02:06:27.661132800 +0500
  9549. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/arblib.h" 2022-04-06 22:57:00.252929600 +0500
  9550. @@ -0,0 +1,27 @@
  9551. +#ifndef _ARBLIB_H_
  9552. +#define _ARBLIB_H_
  9553. +
  9554. +extern UINT_PTR __security_cookie;
  9555. +extern void __fastcall __security_check_cookie(UINT_PTR cookie);
  9556. +
  9557. +typedef struct { // Size=0x0
  9558. + CHAR UnknowData[0x82];
  9559. + BOOLEAN SomeField; // x32&x64 have same 0x82 offset
  9560. +} ACPI_ARBITER_INSTANCE;
  9561. +
  9562. +VOID
  9563. +AcpiArblibFreeArbiterInstance (ACPI_ARBITER_INSTANCE *CommonInstance);
  9564. +
  9565. +VOID
  9566. +AcpiArblibEjectInterface(VOID);
  9567. +
  9568. +VOID
  9569. +AcpiArblibInitializeArbiter(VOID);
  9570. +
  9571. +NTSTATUS
  9572. +AcpiArblibCommitResources (ACPI_ARBITER_INSTANCE *CommonInstance, PVOID IrpStuff);
  9573. +
  9574. +void
  9575. +ACPIConvertStringDelimitation(char *psIn, char Char);
  9576. +
  9577. +#endif
  9578. diff --strip-trailing-cr -ur ./driver/nt/buildsrc.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/buildsrc.c"
  9579. --- ./driver/nt/buildsrc.c 2003-02-26 17:15:50.000000000 +0500
  9580. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/buildsrc.c" 2022-04-06 23:47:17.153320300 +0500
  9581. @@ -733,7 +733,7 @@
  9582. //
  9583. KeAcquireSpinLockAtDpcLevel( &AcpiBuildQueueLock );
  9584.  
  9585. - } while ( AcpiBuildWorkDone );
  9586. + } while ( AcpiBuildWorkDone || !IsListEmpty( &AcpiBuildQueueList ));
  9587.  
  9588. //
  9589. // The DPC is no longer running
  9590. @@ -1419,6 +1419,12 @@
  9591.  
  9592. }
  9593.  
  9594. + if (targetDeviceObject->Flags & DO_BUFFERED_IO) {
  9595. +
  9596. + newDeviceObject->Flags |= DO_BUFFERED_IO;
  9597. +
  9598. + }
  9599. +
  9600. //
  9601. // Done with the device lock
  9602. //
  9603. @@ -2025,7 +2031,7 @@
  9604. }
  9605. NTSTATUS
  9606. -ACPIBuildPdo(
  9607. +ACPIBuildPdo_rtm(
  9608. IN PDRIVER_OBJECT DriverObject,
  9609. IN PDEVICE_EXTENSION DeviceExtension,
  9610. IN PDEVICE_OBJECT ParentPdoObject,
  9611. @@ -2240,6 +2246,248 @@
  9612. return STATUS_SUCCESS;
  9613. }
  9614. +ULONG AcpiArbiterResourceTypes[3] = {3,1,6};
  9615. +
  9616. +#ifdef _X86_
  9617. +
  9618. +NTSTATUS __declspec(naked)
  9619. +ACPIBuildPdo(
  9620. + IN PDRIVER_OBJECT DriverObject,
  9621. + IN PDEVICE_EXTENSION DeviceExtension,
  9622. + IN PDEVICE_OBJECT ParentPdoObject,
  9623. + IN BOOLEAN CreateAsFilter
  9624. + ) {
  9625. +_asm {
  9626. + push ebp
  9627. + mov ebp, esp
  9628. + sub esp, 0Ch
  9629. + push ebx
  9630. + xor ebx, ebx
  9631. + lea eax, [ebp-4]
  9632. + push eax
  9633. + push ebx
  9634. + push 80h
  9635. + push 32h
  9636. + push ebx
  9637. + push ebx
  9638. + push dword ptr [ebp+8]
  9639. + mov [ebp-8], ebx
  9640. + mov [ebp-4], ebx
  9641. + call dword ptr [IoCreateDevice]
  9642. + cmp eax, ebx
  9643. + jl loc_11973
  9644. + cmp [ebp+14h], bl
  9645. + push esi
  9646. + mov esi, [ebp+0Ch]
  9647. + push edi
  9648. + jz short loc_11794
  9649. + mov eax, [esi]
  9650. + and eax, 100000h
  9651. + or eax, ebx
  9652. + jnz short loc_11791
  9653. + push dword ptr [ebp+10h]
  9654. + call dword ptr [IoGetAttachedDeviceReference]
  9655. + cmp eax, ebx
  9656. + mov [ebp-8], eax
  9657. + jnz short loc_11794
  9658. + mov esi, 0C000000Eh
  9659. + jmp loc_118C9
  9660. +
  9661. +loc_11791:
  9662. + mov [ebp+14h], bl
  9663. +
  9664. +loc_11794:
  9665. + mov ecx, [esi+4]
  9666. + and ecx, 20h
  9667. + xor eax, eax
  9668. + or eax, ecx
  9669. + jz short loc_117BC
  9670. + mov eax, [esi+12Ch]
  9671. + push 5352435Fh
  9672. + push eax
  9673. + call ACPIAmliGetNamedChild
  9674. + test eax, eax
  9675. + jnz loc_1187F
  9676. + mov [esi+64h], bl
  9677. +
  9678. +loc_117BC:
  9679. + mov ecx, offset AcpiDeviceTreeLock
  9680. + call dword ptr [KfAcquireSpinLock]
  9681. + mov [ebp+0Bh], al
  9682. + mov eax, [ebp-4]
  9683. + mov [eax+28h], esi
  9684. + mov eax, [ebp-4]
  9685. + lea ecx, [esi+120h]
  9686. + mov [esi+130h], eax
  9687. + mov [esi+138h], eax
  9688. + call dword ptr [InterlockedIncrement]
  9689. + push 1
  9690. + push ebx
  9691. + push 1FFh
  9692. + push esi
  9693. + call ACPIInternalUpdateFlags
  9694. + push ebx
  9695. + push ebx
  9696. + push 20h
  9697. + push esi
  9698. + call ACPIInternalUpdateFlags
  9699. + cmp [ebp+14h], bl
  9700. + lea eax, [esi+88h]
  9701. + mov ecx, [eax]
  9702. + mov [esi+8Ch], ecx
  9703. + mov [eax], ebx
  9704. + mov dword ptr [esi+10h], offset AcpiPdoIrpDispatch
  9705. + mov edi, 2000h
  9706. + jz short loc_11860
  9707. + mov eax, [ebp-8]
  9708. + push ebx
  9709. + push ebx
  9710. + push 40h
  9711. + push esi
  9712. + mov [esi+134h], eax
  9713. + call ACPIInternalUpdateFlags
  9714. + mov eax, [ebp-8]
  9715. + mov edx, [ebp-4]
  9716. + mov dword ptr [esi+10h], offset AcpiBusFilterIrpDispatch
  9717. + mov cl, [eax+30h]
  9718. + inc cl
  9719. + mov [edx+30h], cl
  9720. + mov ecx, [eax+5Ch]
  9721. + mov edx, [ebp-4]
  9722. + mov [edx+5Ch], ecx
  9723. + test [eax+1Ch], edi
  9724. + jz short loc_11860
  9725. + mov eax, [ebp-4]
  9726. + or [eax+1Ch], edi
  9727. +
  9728. +loc_11860:
  9729. + mov eax, [esi]
  9730. + mov ecx, [esi+4]
  9731. + mov [ebp-0Ch], eax
  9732. + mov edx, ecx
  9733. + and edx, 10h
  9734. + xor eax, eax
  9735. + or eax, edx
  9736. + jz short loc_118D9
  9737. + mov dword ptr [esi+10h], offset AcpiProcessorIrpDispatch
  9738. + jmp loc_11922
  9739. +
  9740. +loc_1187F:
  9741. + lea eax, [esi+68h]
  9742. + mov byte ptr [esi+64h], 1
  9743. + xor edi, edi
  9744. + mov [ebp+8], eax
  9745. +
  9746. +loc_1188B:
  9747. + push dword ptr [ebp+8]
  9748. + push AcpiArbiterResourceTypes[edi*4]
  9749. + push esi
  9750. + call AcpiArblibInitializeArbiter
  9751. + cmp eax, ebx
  9752. + mov [ebp+0Ch], eax
  9753. + jl short loc_118B1
  9754. + add dword ptr [ebp+8], 4
  9755. + inc edi
  9756. + cmp edi, 3
  9757. + jb short loc_1188B
  9758. + jmp loc_117BC
  9759. +
  9760. +loc_118B1:
  9761. + cmp edi, ebx
  9762. + jz short loc_118C6
  9763. + lea esi, [esi+edi*4+68h]
  9764. +
  9765. +loc_118B9:
  9766. + sub esi, 4
  9767. + push dword ptr [esi]
  9768. + call AcpiArblibFreeArbiterInstance
  9769. + dec edi
  9770. + jnz short loc_118B9
  9771. +
  9772. +loc_118C6:
  9773. + mov esi, [ebp+0Ch]
  9774. +
  9775. +loc_118C9:
  9776. + push dword ptr [ebp-4]
  9777. + call dword ptr [IoDeleteDevice]
  9778. + mov eax, esi
  9779. + jmp loc_11971
  9780. +
  9781. +loc_118D9:
  9782. + and ecx, edi
  9783. + xor eax, eax
  9784. + or eax, ecx
  9785. + jz short loc_11922
  9786. + cmp dword ptr [AcpiInternalDeviceTable], ebx
  9787. + mov [ebp+14h], ebx
  9788. + jz short loc_11922
  9789. + mov edi, offset AcpiInternalDeviceTable
  9790. + mov eax, edi
  9791. +
  9792. +loc_118F3:
  9793. + push dword ptr [eax]
  9794. + push dword ptr [esi+10Ch]
  9795. + call dword ptr [strstr]
  9796. + test eax, eax
  9797. + pop ecx
  9798. + pop ecx
  9799. + jnz short loc_11915
  9800. + inc dword ptr [ebp+14h]
  9801. + add edi, 8
  9802. + cmp [edi], ebx
  9803. + mov eax, edi
  9804. + jnz short loc_118F3
  9805. + jmp short loc_11922
  9806. +
  9807. +loc_11915:
  9808. + mov eax, [ebp+14h]
  9809. + mov eax, dword ptr (AcpiInternalDeviceTable+4)[eax*8]
  9810. + mov [esi+10h], eax
  9811. +
  9812. +loc_11922:
  9813. + mov eax, [esi]
  9814. + mov ecx, [esi+4]
  9815. + and eax, 40000h
  9816. + or eax, ebx
  9817. + jz short loc_11944
  9818. + and ecx, 80000h
  9819. + xor eax, eax
  9820. + or eax, ecx
  9821. + jz short loc_11944
  9822. + mov eax, [ebp-4]
  9823. + mov FixedButtonDeviceObject, eax
  9824. +
  9825. +loc_11944:
  9826. + mov dl, [ebp+0Bh]
  9827. + mov ecx, offset AcpiDeviceTreeLock
  9828. + call dword ptr [KfReleaseSpinLock]
  9829. + mov eax, [ebp-4]
  9830. + and byte ptr [eax+1Ch], 7Fh
  9831. + mov esi, [esi+4]
  9832. + and esi, 100000h
  9833. + xor eax, eax
  9834. + or eax, esi
  9835. + jz short loc_1196F
  9836. + mov eax, [ebp-4]
  9837. + or dword ptr [eax+1Ch], 8
  9838. +
  9839. +loc_1196F:
  9840. + xor eax, eax
  9841. +
  9842. +loc_11971:
  9843. + pop edi
  9844. + pop esi
  9845. +
  9846. +loc_11973:
  9847. + pop ebx
  9848. + _emit 0xc9 ; "leave" opcode
  9849. + retn 10h
  9850. +}
  9851. +}
  9852. +
  9853. +#endif // _X86_
  9854. +
  9855. +
  9856. NTSTATUS
  9857. ACPIBuildPowerResourceExtension(
  9858. IN PNSOBJ PowerResource,
  9859. @@ -3022,54 +3270,55 @@
  9860. PUCHAR tempPtr = BuildRequest->String;
  9861. ULONG i;
  9862.  
  9863. + ACPIConvertStringDelimitation(tempPtr, ' ');
  9864. +
  9865. //
  9866. // Walk the CID, trying to find the double NULL
  9867. //
  9868. - for ( ;tempPtr != NULL && *tempPtr != '\0'; ) {
  9869. + //for ( ;tempPtr != NULL && *tempPtr != '\0'; ) {
  9870.  
  9871. - tempPtr += strlen(tempPtr);
  9872. - if (*(tempPtr+1) == '\0') {
  9873. + // tempPtr += strlen(tempPtr);
  9874. + // if (*(tempPtr+1) == '\0') {
  9875.  
  9876. - //
  9877. - // Found the double null, so we can break
  9878. - //
  9879. - break;
  9880. + // //
  9881. + // // Found the double null, so we can break
  9882. + // //
  9883. + // break;
  9884.  
  9885. - }
  9886. + // }
  9887.  
  9888. + // //
  9889. + // // Set the character to be a 'space'
  9890. + // //
  9891. + // *tempPtr = ' ';
  9892. +
  9893. + //}
  9894. + //tempPtr = BuildRequest->String;
  9895. +
  9896. + if (tempPtr != NULL) {
  9897. //
  9898. - // Set the character to be a 'space'
  9899. + // Set any special flags associated with this device id
  9900. //
  9901. - *tempPtr = ' ';
  9902. + for (i = 0; AcpiInternalDeviceFlagTable[i].PnPId != NULL; i++) {
  9903.  
  9904. - }
  9905. - tempPtr = BuildRequest->String;
  9906. -
  9907. - //
  9908. - // Set any special flags associated with this device id
  9909. - //
  9910. - for (i = 0; AcpiInternalDeviceFlagTable[i].PnPId != NULL; i++) {
  9911. + if (strstr( tempPtr, AcpiInternalDeviceFlagTable[i].PnPId ) ) {
  9912.  
  9913. - if (strstr( tempPtr, AcpiInternalDeviceFlagTable[i].PnPId ) ) {
  9914. + ACPIInternalUpdateFlags(
  9915. + &(deviceExtension->Flags),
  9916. + AcpiInternalDeviceFlagTable[i].Flags,
  9917. + FALSE
  9918. + );
  9919. + break;
  9920.  
  9921. - ACPIInternalUpdateFlags(
  9922. - &(deviceExtension->Flags),
  9923. - AcpiInternalDeviceFlagTable[i].Flags,
  9924. - FALSE
  9925. - );
  9926. - break;
  9927. + }
  9928.  
  9929. }
  9930.  
  9931. - }
  9932. -
  9933. - //
  9934. - // Done with the string
  9935. - //
  9936. - if (tempPtr != NULL) {
  9937. + //
  9938. + // Done with the string
  9939. + //
  9940.  
  9941. ExFreePool( tempPtr );
  9942. -
  9943. }
  9944.  
  9945. //
  9946. @@ -4056,13 +4305,13 @@
  9947. //
  9948. // First, store the pin that we use as the wakeup signal
  9949. //
  9950. - deviceExtension->PowerInfo.WakeBit = (ULONG)pinObject->uipDataValue;
  9951. + deviceExtension->PowerInfo.WakeBit = (ULONG)pinObject->dwDataValue;
  9952.  
  9953. //
  9954. // Next, store the system state that we can wake up from
  9955. //
  9956. deviceExtension->PowerInfo.SystemWakeLevel = ACPIDeviceMapSystemState(
  9957. - stateObject->uipDataValue
  9958. + stateObject->dwDataValue
  9959. );
  9960.  
  9961. //
  9962. @@ -4080,8 +4329,8 @@
  9963. //
  9964. // Calculate the correct register and mask
  9965. //
  9966. - gpeRegister = ( (UCHAR) (pinObject->uipDataValue) / 8);
  9967. - gpeMask = 1 << ( (UCHAR) (pinObject->uipDataValue) % 8);
  9968. + gpeRegister = ( (UCHAR) (pinObject->dwDataValue) / 8);
  9969. + gpeMask = 1 << ( (UCHAR) (pinObject->dwDataValue) % 8);
  9970.  
  9971. //
  9972. // We need access to the table lock for this
  9973. @@ -4159,7 +4408,7 @@
  9974. //
  9975. RtlZeroMemory( &argData, sizeof(OBJDATA) );
  9976. argData.dwDataType = OBJTYPE_INTDATA;
  9977. - argData.uipDataValue = 0;
  9978. + argData.dwDataValue = 0;
  9979.  
  9980. //
  9981. // Run the method. Note that we don't specify a callback because we
  9982. @@ -4409,7 +4658,7 @@
  9983. //
  9984. // Turn the power state into something that we can understand
  9985. //
  9986. - i = ACPIDeviceMapPowerState( result->uipDataValue );
  9987. + i = ACPIDeviceMapPowerState( result->dwDataValue );
  9988.  
  9989. //
  9990. // No longer need the buffer
  9991. @@ -5461,7 +5710,7 @@
  9992. ACPIInternalUpdateFlags(
  9993. &(powerNode->Flags),
  9994. DEVICE_NODE_PRESENT,
  9995. - (BOOLEAN) ((result->uipDataValue & STA_STATUS_PRESENT) ? FALSE : TRUE)
  9996. + (BOOLEAN) ((result->dwDataValue & STA_STATUS_PRESENT) ? FALSE : TRUE)
  9997. );
  9998.  
  9999. //
  10000. @@ -5956,7 +6205,7 @@
  10001. // Setup the arguments that we will pass to the method
  10002. //
  10003. RtlZeroMemory( objData, sizeof(OBJDATA) );
  10004. - objData[0].uipDataValue = DATAVALUE_ONE;
  10005. + objData[0].dwDataValue = DATAVALUE_ONE;
  10006. objData[0].dwDataType = OBJTYPE_INTDATA;
  10007.  
  10008. //
  10009. @@ -5980,16 +6229,16 @@
  10010. // pass in a REGSPACE_PCIFCFG registration
  10011. //
  10012. RtlZeroMemory( objData, sizeof(objData) );
  10013. - objData[0].uipDataValue = REGSPACE_PCICFG;
  10014. + objData[0].dwDataValue = REGSPACE_PCICFG;
  10015. objData[0].dwDataType = OBJTYPE_INTDATA;
  10016. objData[1].dwDataType = OBJTYPE_INTDATA;
  10017. if (BuildRequest->RunRequest.Flags & RUN_REQUEST_REG_METHOD_ON) {
  10018.  
  10019. - objData[1].uipDataValue = 1;
  10020. + objData[1].dwDataValue = 1;
  10021.  
  10022. } else {
  10023.  
  10024. - objData[1].uipDataValue = 0;
  10025. + objData[1].dwDataValue = 0;
  10026.  
  10027. }
  10028.  
  10029. diff --strip-trailing-cr -ur ./driver/nt/bus.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/bus.c"
  10030. --- ./driver/nt/bus.c 2003-02-26 17:15:50.000000000 +0500
  10031. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/bus.c" 2022-04-04 21:17:08.000000000 +0500
  10032. @@ -1675,7 +1675,7 @@
  10033. }
  10034. NTSTATUS
  10035. -ACPIBusIrpQueryInterface(
  10036. +ACPIBusIrpQueryInterface_rtm(
  10037. IN PDEVICE_OBJECT DeviceObject,
  10038. IN PIRP Irp
  10039. )
  10040. @@ -1904,7 +1904,238 @@
  10041.  
  10042. return status;
  10043. }
  10044. +
  10045. +#ifdef _X86_
  10046. +
  10047. +NTSTATUS __declspec(naked)
  10048. +ACPIBusIrpQueryInterface(
  10049. + IN PDEVICE_OBJECT DeviceObject,
  10050. + IN PIRP Irp
  10051. + ) {
  10052. +_asm {
  10053. + push ebp
  10054. + mov ebp, esp
  10055. + sub esp, 0Ch
  10056. + mov eax, [ebp+0Ch]
  10057. + push ebx
  10058. + mov ebx, [eax+60h]
  10059. + push esi
  10060. + push edi
  10061. + push dword ptr [ebp+8]
  10062. + call ACPIInternalGetDeviceExtension
  10063. + mov edi, [ebx+4]
  10064. + mov [ebp-8], eax
  10065. + mov eax, [ebx+10h]
  10066. + mov [ebp-4], eax
  10067. + mov eax, offset GUID_ACPI_INTERFACE_STANDARD
  10068. + cmp edi, eax
  10069. + jz short loc_32A77
  10070. + mov esi, dword ptr[RtlCompareMemory]
  10071. + push 10h
  10072. + push eax
  10073. + push edi
  10074. + call esi
  10075. + sub eax, 10h
  10076. + neg eax
  10077. + sbb eax, eax
  10078. + inc eax
  10079. + mov [ebp-0Ch], eax
  10080. + jz short loc_32AB5
  10081. +
  10082. +loc_32A77:
  10083. + mov ax, [ebx+8]
  10084. + cmp ax, 2Ch
  10085. + jbe short loc_32A86
  10086. + push 2Ch
  10087. + pop eax
  10088. + jmp short loc_32A89
  10089. +
  10090. +loc_32A86:
  10091. + movzx eax, ax
  10092. +
  10093. +loc_32A89:
  10094. + mov ebx, [ebx+0Ch]
  10095. + mov ecx, eax
  10096. + mov edx, ecx
  10097. + shr ecx, 2
  10098. + mov esi, offset ACPIInterfaceTable
  10099. + mov edi, ebx
  10100. + rep movsd
  10101. + mov ecx, edx
  10102. + and ecx, 3
  10103. + cmp eax, 8
  10104. + rep movsb
  10105. + jbe short loc_32AAE
  10106. + mov eax, [ebp+8]
  10107. + mov [ebx+4], eax
  10108. +
  10109. +loc_32AAE:
  10110. + xor esi, esi
  10111. + jmp loc_32C17
  10112. +
  10113. +loc_32AB5:
  10114. + mov eax, offset GUID_TRANSLATOR_INTERFACE_STANDARD
  10115. + cmp edi, eax
  10116. + jz short loc_32AD1
  10117. + push 10h
  10118. + push eax
  10119. + push edi
  10120. + call esi
  10121. + sub eax, 10h
  10122. + neg eax
  10123. + sbb eax, eax
  10124. + inc eax
  10125. + mov [ebp-0Ch], eax
  10126. + jz short loc_32B2F
  10127. +
  10128. +loc_32AD1:
  10129. + cmp dword ptr [ebp-4], 2
  10130. + jnz short loc_32B05
  10131. + push dword ptr [ebp+8]
  10132. + call IsPciBus
  10133. + test al, al
  10134. + jz short loc_32AEB
  10135. + push dword ptr [ebp+0Ch]
  10136. + call SmashInterfaceQuery
  10137. +
  10138. +loc_32AEB:
  10139. + mov eax, [ebp+0Ch]
  10140. + mov esi, [eax+18h]
  10141. +
  10142. +loc_32AF1:
  10143. + mov ecx, [ebp+0Ch]
  10144. + xor dl, dl
  10145. + call dword ptr[IofCompleteRequest]
  10146. + pop edi
  10147. + mov eax, esi
  10148. + pop esi
  10149. + pop ebx
  10150. + _emit 0xc9 ; "leave" opcode
  10151. + retn 8
  10152. +; ---------------------------------------------------------------------------
  10153. +
  10154. +loc_32B05:
  10155. + cmp dword ptr [ebp-4], 1
  10156. + jz short loc_32B11
  10157. + cmp dword ptr [ebp-4], 3
  10158. + jnz short loc_32AEB
  10159. +
  10160. +loc_32B11:
  10161. + push dword ptr [ebp+8]
  10162. + call IsPciBus
  10163. + test al, al
  10164. + jz short loc_32AEB
  10165. + push dword ptr [ebp+0Ch]
  10166. + push dword ptr [ebp+8]
  10167. + call TranslateEjectInterface
  10168. +
  10169. +loc_32B28:
  10170. + mov esi, eax
  10171. + jmp loc_32C0B
  10172. +
  10173. +loc_32B2F:
  10174. + mov eax, offset GUID_PCI_BUS_INTERFACE_STANDARD
  10175. + cmp edi, eax
  10176. + jz short loc_32B4B
  10177. + push 10h
  10178. + push eax
  10179. + push edi
  10180. + call esi
  10181. + sub eax, 10h
  10182. + neg eax
  10183. + sbb eax, eax
  10184. + inc eax
  10185. + mov [ebp-0Ch], eax
  10186. + jz short loc_32B64
  10187. +
  10188. +loc_32B4B:
  10189. + push dword ptr [ebp+8]
  10190. + call IsPciBus
  10191. + test al, al
  10192. + jz short loc_32AEB
  10193. + push dword ptr [ebp+0Ch]
  10194. + push dword ptr [ebp+8]
  10195. + call PciBusEjectInterface
  10196. + jmp short loc_32B28
  10197. +
  10198. +loc_32B64:
  10199. + mov eax, offset GUID_BUS_INTERFACE_STANDARD
  10200. + cmp edi, eax
  10201. + jz short loc_32B80
  10202. + push 10h
  10203. + push eax
  10204. + push edi
  10205. + call esi
  10206. + sub eax, 10h
  10207. + neg eax
  10208. + sbb eax, eax
  10209. + inc eax
  10210. + mov [ebp-0Ch], eax
  10211. + jz short loc_32BBD
  10212. +
  10213. +loc_32B80:
  10214. + mov eax, [ebp+0Ch]
  10215. + mov dword ptr [eax+18h], 0C00002B9h
  10216. + mov eax, [ebp-8]
  10217. + mov eax, [eax+13Ch]
  10218. + test eax, eax
  10219. + jz loc_32AEB
  10220. + mov eax, [eax+130h]
  10221. + test eax, eax
  10222. + jz loc_32AEB
  10223. + push 0
  10224. + push ebx
  10225. + push eax
  10226. + call ACPIInternalSendSynchronousIrp
  10227. + mov ecx, [ebp+0Ch]
  10228. + mov [ecx+18h], eax
  10229. + jmp loc_32AEB
  10230. +
  10231. +loc_32BBD:
  10232. + mov eax, offset GUID_ARBITER_INTERFACE_STANDARD
  10233. + cmp edi, eax
  10234. + jz short loc_32BDD
  10235. + push 10h
  10236. + push eax
  10237. + push edi
  10238. + call esi
  10239. + sub eax, 10h
  10240. + neg eax
  10241. + sbb eax, eax
  10242. + inc eax
  10243. + mov [ebp-0Ch], eax
  10244. + jz loc_32AEB
  10245. +
  10246. +loc_32BDD:
  10247. + mov edx, [ebp-8]
  10248. + mov ecx, [edx+4]
  10249. + and ecx, 20h
  10250. + xor eax, eax
  10251. + or eax, ecx
  10252. + jz loc_32AEB
  10253. + cmp byte ptr [edx+64h], 0
  10254. + jz loc_32AEB
  10255. + mov edi, [ebp+0Ch]
  10256. + push edi
  10257. + push dword ptr [ebp+8]
  10258. + call AcpiArblibEjectInterface
  10259. + mov esi, eax
  10260. + mov [edi+18h], esi
  10261. +
  10262. +loc_32C0B:
  10263. + cmp esi, 0C00000BBh
  10264. + jz loc_32AEB
  10265. +
  10266. +loc_32C17:
  10267. + mov eax, [ebp+0Ch]
  10268. + mov [eax+18h], esi
  10269. + jmp loc_32AF1
  10270. +}
  10271. +}
  10272. +
  10273. +#endif
  10274. +
  10275. NTSTATUS
  10276. ACPIBusIrpQueryPnpDeviceState(
  10277. IN PDEVICE_OBJECT DeviceObject,
  10278. @@ -2206,28 +2437,27 @@
  10279. // Container objects do not claim resources. So, don't even bother
  10280. // trying to obtain a _CRS
  10281. //
  10282. - if (!(deviceExtension->Flags & DEV_CAP_CONTAINER)) {
  10283. -
  10284. - //
  10285. - // Here we try to find the current resource set
  10286. - //
  10287. - status = ACPIGetBufferSync(
  10288. - deviceExtension,
  10289. - PACKED_CRS,
  10290. - &crsBuf,
  10291. - &crsBufSize
  10292. - );
  10293. + //if (!(deviceExtension->Flags & DEV_CAP_CONTAINER)) {
  10294.  
  10295. - } else {
  10296. + //
  10297. + // Here we try to find the current resource set
  10298. + //
  10299. + status = ACPIGetBufferSync(
  10300. + deviceExtension,
  10301. + PACKED_CRS,
  10302. + &crsBuf,
  10303. + &crsBufSize
  10304. + );
  10305.  
  10306. - //
  10307. - // This is the status code returned if there is no _CRS. It actually
  10308. - // doesn't matter what code we use since in the failure case, we
  10309. - // should return whatever code was already present in the IRP
  10310. - //
  10311. - status = STATUS_OBJECT_NAME_NOT_FOUND;
  10312. + //} else {
  10313. + // //
  10314. + // // This is the status code returned if there is no _CRS. It actually
  10315. + // // doesn't matter what code we use since in the failure case, we
  10316. + // // should return whatever code was already present in the IRP
  10317. + // //
  10318. + // status = STATUS_OBJECT_NAME_NOT_FOUND;
  10319. + //}
  10320.  
  10321. - }
  10322. if (!NT_SUCCESS(status)) {
  10323.  
  10324. //
  10325. @@ -2249,7 +2479,8 @@
  10326. //
  10327. // Build a IO_RESOURCE_REQUIREMENT_LISTS
  10328. //
  10329. - status = PnpBiosResourcesToNtResources(
  10330. + status = PnpDeviceBiosResourcesToNtResources(
  10331. + deviceExtension,
  10332. crsBuf,
  10333. (deviceExtension->Flags & DEV_CAP_PCI ?
  10334. PNP_BIOS_TO_IO_NO_CONSUMED_RESOURCES : 0),
  10335. @@ -2460,33 +2691,33 @@
  10336. // claim resources. Rather, they are used to specify a resource
  10337. // translation
  10338. //
  10339. - if (!(deviceExtension->Flags & DEV_CAP_CONTAINER)) {
  10340. + //if (!(deviceExtension->Flags & DEV_CAP_CONTAINER)) {
  10341.  
  10342. - //
  10343. - // Fetch the buffers, as appropriate
  10344. - //
  10345. - crsStat = ACPIGetBufferSync(
  10346. - deviceExtension,
  10347. - PACKED_CRS,
  10348. - &crsBuf,
  10349. - &crsBufSize
  10350. - );
  10351. - prsStat = ACPIGetBufferSync(
  10352. - deviceExtension,
  10353. - PACKED_PRS,
  10354. - &prsBuf,
  10355. - &prsBufSize
  10356. - );
  10357. + //
  10358. + // Fetch the buffers, as appropriate
  10359. + //
  10360. + crsStat = ACPIGetBufferSync(
  10361. + deviceExtension,
  10362. + PACKED_CRS,
  10363. + &crsBuf,
  10364. + &crsBufSize
  10365. + );
  10366. + prsStat = ACPIGetBufferSync(
  10367. + deviceExtension,
  10368. + PACKED_PRS,
  10369. + &prsBuf,
  10370. + &prsBufSize
  10371. + );
  10372.  
  10373. - } else {
  10374. + //} else {
  10375.  
  10376. - //
  10377. - // Pretend that there is no _CRS/_PRS present
  10378. - //
  10379. - crsStat = STATUS_OBJECT_NAME_NOT_FOUND;
  10380. - prsStat = STATUS_OBJECT_NAME_NOT_FOUND;
  10381. + // //
  10382. + // // Pretend that there is no _CRS/_PRS present
  10383. + // //
  10384. + // crsStat = STATUS_OBJECT_NAME_NOT_FOUND;
  10385. + // prsStat = STATUS_OBJECT_NAME_NOT_FOUND;
  10386.  
  10387. - }
  10388. + //}
  10389.  
  10390. //
  10391. // If there is a _CRS, then remember to clear the irp-generated status
  10392. @@ -2524,7 +2755,8 @@
  10393. // Our first step is to try to use these resources to build the
  10394. // information...
  10395. //
  10396. - status = PnpBiosResourcesToNtResources(
  10397. + status = PnpDeviceBiosResourcesToNtResources(
  10398. + deviceExtension,
  10399. prsBuf,
  10400. 0,
  10401. &resList
  10402. @@ -2560,7 +2792,8 @@
  10403. //
  10404. if (!NT_SUCCESS(status) && NT_SUCCESS(crsStat) ) {
  10405.  
  10406. - status = PnpBiosResourcesToNtResources(
  10407. + status = PnpDeviceBiosResourcesToNtResources(
  10408. + deviceExtension,
  10409. crsBuf,
  10410. (deviceExtension->Flags & DEV_CAP_PCI ?
  10411. PNP_BIOS_TO_IO_NO_CONSUMED_RESOURCES : 0),
  10412. @@ -3374,6 +3607,9 @@
  10413. PDEVICE_EXTENSION deviceExtension;
  10414. PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation( Irp );
  10415. UCHAR minorFunction = irpStack->MinorFunction;
  10416. + ACPI_ARBITER_INSTANCE **arbiter;
  10417. + ULONG i;
  10418. + PDEVICE_CAPABILITIES capabilities;
  10419.  
  10420. PAGED_CODE();
  10421.  
  10422. @@ -3411,6 +3647,20 @@
  10423.  
  10424. }
  10425.  
  10426. + if (deviceExtension->Flags & DEV_CAP_CONTAINER &&
  10427. + deviceExtension->Module.ArbitersNeeded) {
  10428. + capabilities = irpStack->Parameters.DeviceCapabilities.Capabilities; // unknow union, set to random
  10429. + arbiter = deviceExtension->Module.Arbiters;
  10430. + for (i = 0; i < 3; i++) {
  10431. + status = AcpiArblibCommitResources(*arbiter, (PVOID) capabilities);
  10432. + if (!NT_SUCCESS(status))
  10433. + return status;
  10434. +
  10435. + (*arbiter)->SomeField = TRUE;
  10436. + arbiter++;
  10437. + }
  10438. + }
  10439. +
  10440. //
  10441. // Pass the real work off to this function
  10442. //
  10443. @@ -3421,6 +3671,7 @@
  10444. Irp,
  10445. Irp
  10446. );
  10447. +
  10448. if (NT_SUCCESS(status)) {
  10449.  
  10450. return STATUS_PENDING;
  10451. diff --strip-trailing-cr -ur ./driver/nt/dat.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/dat.c"
  10452. --- ./driver/nt/dat.c 2003-02-26 17:15:50.000000000 +0500
  10453. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/dat.c" 2022-04-16 11:16:57.427734300 +0500
  10454. @@ -657,7 +657,7 @@
  10455. // Any device in this table is considered to be 'special'
  10456. //
  10457. INTERNAL_DEVICE_TABLE AcpiInternalDeviceTable[] = {
  10458. - "ACPI0006", &AcpiGenericBusIrpDispatch,
  10459. + "ACPI0004", &AcpiGenericBusIrpDispatch,
  10460. "FixedButton", &AcpiFixedButtonIrpDispatch,
  10461. "PNP0000", &AcpiRawDeviceIrpDispatch,
  10462. "PNP0001", &AcpiRawDeviceIrpDispatch,
  10463. @@ -703,7 +703,7 @@
  10464. INTERNAL_DEVICE_FLAG_TABLE AcpiInternalDeviceFlagTable[] = {
  10465. "CPQB01D", DEV_CAP_START_IN_D3,
  10466. "IBM3760", DEV_CAP_START_IN_D3,
  10467. - "ACPI0006", DEV_MASK_INTERNAL_BUS | DEV_CAP_CONTAINER,
  10468. + "ACPI0004", DEV_MASK_INTERNAL_BUS | DEV_CAP_CONTAINER,
  10469. "PNP0000", DEV_CAP_PIC_DEVICE | DEV_MASK_INTERNAL_DEVICE,
  10470. "PNP0001", DEV_CAP_PIC_DEVICE | DEV_MASK_INTERNAL_DEVICE,
  10471. "PNP0002", DEV_MASK_INTERNAL_DEVICE,
  10472. diff --strip-trailing-cr -ur ./driver/nt/debug.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/debug.c"
  10473. --- ./driver/nt/debug.c 2003-02-26 17:15:50.000000000 +0500
  10474. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/debug.c" 2022-04-03 20:19:40.000000000 +0500
  10475. @@ -81,6 +81,16 @@
  10476. KeBugCheckEx (ACPI_DRIVER_INTERNAL, 0x1, Bugcode, 0, 0);
  10477. }
  10478. +VOID
  10479. +_ACPIInternalErrorEx(
  10480. + IN ULONG Bugcode0,
  10481. + IN ULONG_PTR Bugcode1,
  10482. + IN ULONG_PTR Bugcode2
  10483. + )
  10484. +{
  10485. + KeBugCheckEx (ACPI_DRIVER_INTERNAL, 0x2, Bugcode0, Bugcode1, Bugcode2);
  10486. +}
  10487. +
  10488. #if DBG
  10489. VOID
  10490. ACPIDebugPrint(
  10491. diff --strip-trailing-cr -ur ./driver/nt/debug.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/debug.h"
  10492. --- ./driver/nt/debug.h 2003-02-26 17:15:50.000000000 +0500
  10493. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/debug.h" 2022-04-03 20:18:58.000000000 +0500
  10494. @@ -53,6 +53,13 @@
  10495. IN ULONG Bugcode
  10496. );
  10497.  
  10498. + VOID
  10499. + _ACPIInternalErrorEx(
  10500. + IN ULONG Bugcode0,
  10501. + IN ULONG_PTR Bugcode1,
  10502. + IN ULONG_PTR Bugcode2
  10503. + );
  10504. +
  10505. #if DBG
  10506. VOID
  10507. ACPIDebugResourceDescriptor(
  10508. diff --strip-trailing-cr -ur ./driver/nt/detect.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/detect.c"
  10509. --- ./driver/nt/detect.c 2003-02-26 17:15:50.000000000 +0500
  10510. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/detect.c" 2022-05-09 18:24:10.759765600 +0500
  10511. @@ -955,13 +955,14 @@
  10512. "ACPIDetectDuplicateHID - matches with %08lx\n",
  10513. childExtension
  10514. ) );
  10515. - KeBugCheckEx(
  10516. - ACPI_BIOS_ERROR,
  10517. - ACPI_REQUIRED_METHOD_NOT_PRESENT,
  10518. - (ULONG_PTR) DeviceExtension,
  10519. - PACKED_UID,
  10520. - 0
  10521. - );
  10522. +
  10523. + //KeBugCheckEx(
  10524. + // ACPI_BIOS_ERROR,
  10525. + // ACPI_REQUIRED_METHOD_NOT_PRESENT,
  10526. + // (ULONG_PTR) DeviceExtension,
  10527. + // PACKED_UID,
  10528. + // 0
  10529. + // );
  10530.  
  10531. //
  10532. // Make sure to only muck with the DeviceExtension UID if it doesn't
  10533. @@ -974,7 +975,7 @@
  10534. //
  10535. DeviceExtension->InstanceID = ExAllocatePoolWithTag(
  10536. NonPagedPool,
  10537. - 9 * sizeof(UCHAR),
  10538. + 5 * sizeof(UCHAR),
  10539. ACPI_STRING_POOLTAG
  10540. );
  10541. if (DeviceExtension->InstanceID == NULL) {
  10542. @@ -987,8 +988,8 @@
  10543. ACPIInternalError( ACPI_DETECT );
  10544.  
  10545. }
  10546. - RtlZeroMemory( DeviceExtension->InstanceID, 9 * sizeof(UCHAR) );
  10547. - sprintf( DeviceExtension->InstanceID, "%lx", DeviceExtension->AcpiObject->dwNameSeg );
  10548. + RtlZeroMemory( DeviceExtension->InstanceID, 5 * sizeof(UCHAR) );
  10549. + sprintf( DeviceExtension->InstanceID, "%.4s", DeviceExtension->AcpiObject->dwNameSeg );
  10550.  
  10551. //
  10552. // Remember that we have a fixed uid
  10553. @@ -1012,7 +1013,7 @@
  10554. //
  10555. childExtension->InstanceID = ExAllocatePoolWithTag(
  10556. NonPagedPool,
  10557. - 9 * sizeof(UCHAR),
  10558. + 5 * sizeof(UCHAR),
  10559. ACPI_STRING_POOLTAG
  10560. );
  10561. if (childExtension->InstanceID == NULL) {
  10562. @@ -1025,8 +1026,8 @@
  10563. ACPIInternalError( ACPI_DETECT );
  10564.  
  10565. }
  10566. - RtlZeroMemory( childExtension->InstanceID, 9 * sizeof(UCHAR) );
  10567. - sprintf( childExtension->InstanceID, "%lx", childExtension->AcpiObject->dwNameSeg );
  10568. + RtlZeroMemory( childExtension->InstanceID, 5 * sizeof(UCHAR) );
  10569. + sprintf( childExtension->InstanceID, "%.4s", childExtension->AcpiObject->dwNameSeg );
  10570.  
  10571. //
  10572. // Update the flags for both devices to indicate the fixed UID
  10573. diff --strip-trailing-cr -ur ./driver/nt/devpower.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/devpower.c"
  10574. --- ./driver/nt/devpower.c 2003-02-26 17:15:50.000000000 +0500
  10575. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/devpower.c" 2022-04-04 20:23:40.000000000 +0500
  10576. @@ -1170,7 +1170,7 @@
  10577. );
  10578.  
  10579. }
  10580. - return STATUS_INSUFFICIENT_RESOURCES;
  10581. + return STATUS_MORE_PROCESSING_REQUIRED;
  10582.  
  10583. }
  10584.  
  10585. @@ -3547,7 +3547,7 @@
  10586. deviceExtension,
  10587. ACPIDeviceCompleteGenericPhase,
  10588. PowerRequest,
  10589. - &(resultData->uipDataValue),
  10590. + &(resultData->dwDataValue),
  10591. &(resultData->dwDataLen)
  10592. );
  10593. ACPIDevPrint( (
  10594. @@ -3613,7 +3613,7 @@
  10595. // If the bit isn't set as being present, then we must abort this
  10596. // request
  10597. //
  10598. - if (!(resultData->uipDataValue & STA_STATUS_PRESENT) ) {
  10599. + if (!(resultData->dwDataValue & STA_STATUS_PRESENT) ) {
  10600.  
  10601. //
  10602. // The next work done phase is WORK_DONE_FAILURE. This allows the
  10603. @@ -3753,7 +3753,7 @@
  10604. //
  10605. RtlZeroMemory( &(PowerRequest->ResultData), sizeof(OBJDATA) );
  10606. PowerRequest->ResultData.dwDataType = OBJTYPE_INTDATA;
  10607. - PowerRequest->ResultData.uipDataValue = 0;
  10608. + PowerRequest->ResultData.dwDataValue = 0;
  10609.  
  10610.  
  10611. //
  10612. @@ -4006,7 +4006,7 @@
  10613. // case we want to approximate the behaviour of the real _STA...
  10614. //
  10615. resultData->dwDataType = OBJTYPE_INTDATA;
  10616. - resultData->uipDataValue = STA_STATUS_PRESENT;
  10617. + resultData->dwDataValue = STA_STATUS_PRESENT;
  10618. status = STATUS_SUCCESS;
  10619.  
  10620. }
  10621. @@ -4285,7 +4285,7 @@
  10622. POWER_ACTION systemAction;
  10623. SYSTEM_POWER_STATE systemState;
  10624. SYSTEM_POWER_STATE wakeFromState;
  10625. - ULONG hibernateCount = 0;
  10626. + ULONG hibernateCount; // = 0;
  10627.  
  10628. //
  10629. // The next stage after this one is STEP_1
  10630. @@ -4503,7 +4503,7 @@
  10631. //
  10632. RtlZeroMemory( &objData, sizeof(OBJDATA) );
  10633. objData.dwDataType = OBJTYPE_INTDATA;
  10634. - objData.uipDataValue = ACPIDeviceMapACPIPowerState(
  10635. + objData.dwDataValue = ACPIDeviceMapACPIPowerState(
  10636. wakeFromState
  10637. );
  10638.  
  10639. @@ -4712,7 +4712,7 @@
  10640. } // ACPIDevicePowerProcessPhase2SystemSubPhase3
  10641. NTSTATUS
  10642. -ACPIDevicePowerProcessPhase3(
  10643. +ACPIDevicePowerProcessPhase3_rtm(
  10644. VOID
  10645. )
  10646. /*++
  10647. @@ -5059,6 +5059,214 @@
  10648.  
  10649. } // ACPIPowerProcessPhase3
  10650. +
  10651. +#ifdef _X86_
  10652. +
  10653. +NTSTATUS __declspec(naked)
  10654. +ACPIDevicePowerProcessPhase3(
  10655. + VOID
  10656. + ) {
  10657. +_asm {
  10658. + push ebp
  10659. + mov ebp, esp
  10660. + sub esp, 18h
  10661. + push ebx
  10662. + push esi
  10663. + mov ebx, offset AcpiPowerLock
  10664. + push edi
  10665. + mov ecx, ebx
  10666. + mov byte ptr [ebp-1], 0
  10667. + call dword ptr [KefAcquireSpinLockAtDpcLevel]
  10668. + mov esi, dword ptr [AcpiPowerNodeList]
  10669. + mov eax, offset AcpiPowerNodeList
  10670. + cmp esi, eax
  10671. + jz loc_160F6
  10672. + jmp short loc_15FEC
  10673. +
  10674. +loc_15FE9:
  10675. + mov esi, [ebp-0Ch]
  10676. +
  10677. +loc_15FEC:
  10678. + mov eax, [esi]
  10679. + mov [ebp-0Ch], eax
  10680. + mov eax, [esi+8]
  10681. + and eax, 2
  10682. + xor ecx, ecx
  10683. + or eax, ecx
  10684. + jz loc_160E8
  10685. + push 3
  10686. + push 4
  10687. + lea ecx, [esi+28h]
  10688. + pop edx
  10689. + call dword ptr [InterlockedCompareExchange]
  10690. + cmp eax, 3
  10691. + jnz loc_160E8
  10692. + and dword ptr [ebp-8], 0
  10693. + lea eax, [esi+20h]
  10694. + mov edi, [eax]
  10695. + jmp short loc_16062
  10696. +
  10697. +loc_16023:
  10698. + lea eax, [edi-18h]
  10699. + mov edi, [edi]
  10700. + mov [ebp-14h], eax
  10701. + mov eax, [eax+14h]
  10702. + push 0
  10703. + lea ecx, [eax+0F0h]
  10704. + xor edx, edx
  10705. + mov [ebp-10h], eax
  10706. + call dword ptr [InterlockedCompareExchange]
  10707. + mov ecx, [ebp-10h]
  10708. + mov edx, [ecx+0ECh]
  10709. + mov ecx, [ebp-14h]
  10710. + cmp edx, [ecx+0Ch]
  10711. + jz short loc_1605C
  10712. + test eax, eax
  10713. + jz short loc_1605F
  10714. + cmp byte ptr [ecx+10h], 0
  10715. + jz short loc_1605F
  10716. +
  10717. +loc_1605C:
  10718. + inc dword ptr [ebp-8]
  10719. +
  10720. +loc_1605F:
  10721. + lea eax, [esi+20h]
  10722. +
  10723. +loc_16062:
  10724. + cmp edi, eax
  10725. + jnz short loc_16023
  10726. + mov edx, [ebp-8]
  10727. + lea ecx, [esi+10h]
  10728. + call dword ptr [InterlockedExchange]
  10729. + mov eax, [esi+0Ch]
  10730. + mov ecx, [esi+8]
  10731. + mov [ebp-14h], eax
  10732. + mov eax, ecx
  10733. + and eax, 440h
  10734. + xor edx, edx
  10735. + or eax, edx
  10736. + jnz short loc_160E8
  10737. + and ecx, 220h
  10738. + xor eax, eax
  10739. + xor edi, edi
  10740. + or ecx, eax
  10741. + jnz short loc_1609B
  10742. + cmp [ebp-8], edi
  10743. + jz short loc_160E8
  10744. +
  10745. +loc_1609B:
  10746. + xor edx, edx
  10747. + push 4
  10748. + inc edx
  10749. + lea ecx, [esi+28h]
  10750. + call dword ptr [InterlockedCompareExchange]
  10751. + mov ecx, ebx
  10752. + call dword ptr [KefReleaseSpinLockFromDpcLevel]
  10753. + push esi
  10754. + push offset ACPIDeviceCompletePhase3On
  10755. + push edi
  10756. + push edi
  10757. + push edi
  10758. + push dword ptr [esi+2Ch]
  10759. + call AMLIAsyncEvalObject
  10760. + add esp, 18h
  10761. + cmp eax, 103h
  10762. + jz short loc_160DC
  10763. + push esi
  10764. + push edi
  10765. + push eax
  10766. + push dword ptr [esi+2Ch]
  10767. + call ACPIDeviceCompletePhase3On
  10768. + add esp, 10h
  10769. + jmp short loc_160E0
  10770. +
  10771. +loc_160DC:
  10772. + mov byte ptr [ebp-1], 1
  10773. +
  10774. +loc_160E0:
  10775. + mov ecx, ebx
  10776. + call dword ptr [KefAcquireSpinLockAtDpcLevel]
  10777. +
  10778. +loc_160E8:
  10779. + mov eax, offset AcpiPowerNodeList
  10780. + cmp [ebp-0Ch], eax
  10781. + jnz loc_15FE9
  10782. +
  10783. +loc_160F6:
  10784. + mov edi, dword ptr [AcpiPowerNodeList+4] ; Blink
  10785. + cmp edi, eax
  10786. + jz short loc_16178
  10787. +
  10788. +loc_16100:
  10789. + mov esi, edi
  10790. + mov eax, [esi+8]
  10791. + mov edi, [edi+4]
  10792. + and eax, 2
  10793. + xor ecx, ecx
  10794. + or eax, ecx
  10795. + jz short loc_16170
  10796. + xor edx, edx
  10797. + push 4
  10798. + lea ecx, [esi+28h]
  10799. + inc edx
  10800. + call dword ptr [InterlockedCompareExchange]
  10801. + cmp eax, 4
  10802. + jz short loc_1612E
  10803. + test eax, eax
  10804. + jz short loc_16170
  10805. + mov byte ptr [ebp-1], 1
  10806. + jmp short loc_16170
  10807. +
  10808. +loc_1612E:
  10809. + mov ecx, ebx
  10810. + call dword ptr [KefReleaseSpinLockFromDpcLevel]
  10811. + push esi
  10812. + push offset ACPIDeviceCompletePhase3Off
  10813. + xor eax, eax
  10814. + push eax
  10815. + push eax
  10816. + push eax
  10817. + push dword ptr [esi+30h]
  10818. + call AMLIAsyncEvalObject
  10819. + add esp, 18h
  10820. + cmp eax, 103h
  10821. + jz short loc_16164
  10822. + push esi
  10823. + push 0
  10824. + push eax
  10825. + push dword ptr [esi+30h]
  10826. + call ACPIDeviceCompletePhase3Off
  10827. + add esp, 10h
  10828. + jmp short loc_16168
  10829. +
  10830. +loc_16164:
  10831. + mov byte ptr [ebp-1], 1
  10832. +
  10833. +loc_16168:
  10834. + mov ecx, ebx
  10835. + call dword ptr [KefAcquireSpinLockAtDpcLevel]
  10836. +
  10837. +loc_16170:
  10838. + cmp edi, offset AcpiPowerNodeList
  10839. + jnz short loc_16100
  10840. +
  10841. +loc_16178:
  10842. + mov ecx, ebx
  10843. + call dword ptr [KefReleaseSpinLockFromDpcLevel]
  10844. + mov al, [ebp-1]
  10845. + neg al
  10846. + pop edi
  10847. + pop esi
  10848. + pop ebx
  10849. + sbb eax, eax
  10850. + and eax, 103h
  10851. + _emit 0xc9 ; "leave" opcode
  10852. + retn
  10853. +}
  10854. +}
  10855. +
  10856. +#endif
  10857. +
  10858. NTSTATUS
  10859. ACPIDevicePowerProcessPhase4(
  10860. VOID
  10861. @@ -5578,11 +5786,11 @@
  10862. //
  10863. if (flags & DEVICE_REQUEST_LOCK_DEVICE) {
  10864.  
  10865. - objData.uipDataValue = 1; // Lock the device
  10866. + objData.dwDataValue = 1; // Lock the device
  10867.  
  10868. } else if (flags & DEVICE_REQUEST_UNLOCK_DEVICE) {
  10869.  
  10870. - objData.uipDataValue = 0; // Unlock the device
  10871. + objData.dwDataValue = 0; // Unlock the device
  10872.  
  10873. } else {
  10874.  
  10875. @@ -5682,7 +5890,7 @@
  10876. deviceExtension,
  10877. ACPIDeviceCompleteGenericPhase,
  10878. PowerRequest,
  10879. - &(resultData->uipDataValue),
  10880. + &(resultData->dwDataValue),
  10881. &(resultData->dwDataLen)
  10882. );
  10883. ACPIDevPrint( (
  10884. @@ -5754,9 +5962,9 @@
  10885. // First things first --- we just ran _STA (or faked it), so we
  10886. // must check the return data
  10887. //
  10888. - if (!(resultData->uipDataValue & STA_STATUS_PRESENT) ||
  10889. - !(resultData->uipDataValue & STA_STATUS_WORKING_OK) ||
  10890. - ( !(resultData->uipDataValue & STA_STATUS_ENABLED) &&
  10891. + if (!(resultData->dwDataValue & STA_STATUS_PRESENT) ||
  10892. + !(resultData->dwDataValue & STA_STATUS_WORKING_OK) ||
  10893. + ( !(resultData->dwDataValue & STA_STATUS_ENABLED) &&
  10894. !(deviceExtension->Flags & DEV_TYPE_FILTER) ) ) {
  10895.  
  10896. //
  10897. @@ -5958,7 +6166,7 @@
  10898. // Remember that AMLI doesn't use our definitions, so we will
  10899. // have to normalize the S value
  10900. //
  10901. - objData.uipDataValue = ACPIDeviceMapACPIPowerState( systemState );
  10902. + objData.dwDataValue = ACPIDeviceMapACPIPowerState( systemState );
  10903.  
  10904. //
  10905. // Safely run the control method
  10906. @@ -6070,21 +6278,21 @@
  10907.  
  10908. switch (systemState) {
  10909. case PowerSystemWorking:
  10910. - objData.uipDataValue = 1;
  10911. + objData.dwDataValue = 1;
  10912. break;
  10913.  
  10914. case PowerSystemHibernate:
  10915. - objData.uipDataValue = 4;
  10916. + objData.dwDataValue = 4;
  10917. break;
  10918.  
  10919. case PowerSystemSleeping1:
  10920. case PowerSystemSleeping2:
  10921. case PowerSystemSleeping3:
  10922. - objData.uipDataValue = 3;
  10923. + objData.dwDataValue = 3;
  10924. break;
  10925.  
  10926. default:
  10927. - objData.uipDataValue = 0;
  10928. + objData.dwDataValue = 0;
  10929.  
  10930. }
  10931.  
  10932. diff --strip-trailing-cr -ur ./driver/nt/get.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/get.c"
  10933. --- ./driver/nt/get.c 2003-02-26 17:15:50.000000000 +0500
  10934. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/get.c" 2022-04-06 12:42:32.000000000 +0500
  10935. @@ -160,7 +160,7 @@
  10936. if ( (Flags & GET_EVAL_SIMPLE_INTEGER) ) {
  10937.  
  10938. argument.dwDataType = OBJTYPE_INTDATA;
  10939. - argument.uipDataValue = ( (ULONG_PTR) SimpleArgument );
  10940. + argument.dwDataValue = ( (ULONG)(ULONG_PTR) SimpleArgument );
  10941.  
  10942. } else if ( (Flags & GET_EVAL_SIMPLE_STRING) ) {
  10943.  
  10944. @@ -410,7 +410,7 @@
  10945. //
  10946. // Set the value for the address
  10947. //
  10948. - *( (PULONG) Buffer) = (ULONG)Result->uipDataValue;
  10949. + *( (PULONG) Buffer) = (ULONG)Result->dwDataValue;
  10950.  
  10951. }
  10952.  
  10953. @@ -1371,7 +1371,7 @@
  10954. //
  10955. // Convert the packed string
  10956. //
  10957. - ACPIAmliDoubleToName( buffer+5, (ULONG)Result->uipDataValue, FALSE );
  10958. + ACPIAmliDoubleToName( buffer+5, (ULONG)Result->dwDataValue, FALSE );
  10959.  
  10960. //
  10961. // Done
  10962. @@ -1635,7 +1635,7 @@
  10963. //
  10964. // Convert the packed string
  10965. //
  10966. - ACPIAmliDoubleToNameWide( buffer+5, (ULONG)Result->uipDataValue, FALSE );
  10967. + ACPIAmliDoubleToNameWide( buffer+5, (ULONG)Result->dwDataValue, FALSE );
  10968.  
  10969. //
  10970. // Done
  10971. @@ -1858,7 +1858,7 @@
  10972. //
  10973. // Get the real result
  10974. //
  10975. - deviceStatus = (ULONG)Result->uipDataValue;
  10976. + deviceStatus = (ULONG)Result->dwDataValue;
  10977.  
  10978. } else {
  10979.  
  10980. @@ -1888,7 +1888,7 @@
  10981. //
  10982. // Get the real result
  10983. //
  10984. - deviceStatus = (ULONG)Result->uipDataValue;
  10985. + deviceStatus = (ULONG)Result->dwDataValue;
  10986. goto ACPIGetConvertToDevicePresenceExit2;
  10987.  
  10988. }
  10989. @@ -1937,7 +1937,8 @@
  10990. return STATUS_SUCCESS;
  10991.  
  10992. }
  10993. -
  10994. +
  10995. +#ifdef _X86_
  10996. NTSTATUS
  10997. ACPIGetConvertToHardwareID(
  10998. IN PDEVICE_EXTENSION DeviceExtension,
  10999. @@ -1995,6 +1996,11 @@
  11000. &buffer,
  11001. &memSize
  11002. );
  11003. +
  11004. + if (!NT_SUCCESS(status)) {
  11005. + return status;
  11006. + }
  11007. +
  11008. goto ACPIGetConvertToHardwareIDSuccessExit;
  11009.  
  11010. } else if (!(Flags & GET_PROP_NSOBJ_INTERFACE) &&
  11011. @@ -2112,7 +2118,7 @@
  11012. //
  11013. // Convert the packed string for the PNP ID
  11014. //
  11015. - ACPIAmliDoubleToName( tempString, (ULONG)Result->uipDataValue, FALSE );
  11016. + ACPIAmliDoubleToName( tempString, (ULONG)Result->dwDataValue, FALSE );
  11017.  
  11018. //
  11019. // Done
  11020. @@ -2279,6 +2285,11 @@
  11021. &buffer,
  11022. &memSize
  11023. );
  11024. +
  11025. + if (!NT_SUCCESS(status)) {
  11026. + return status;
  11027. + }
  11028. +
  11029. goto ACPIGetConvertToHardwareIDWideSuccessExit;
  11030.  
  11031. } else if (!(Flags & GET_PROP_NSOBJ_INTERFACE) &&
  11032. @@ -2396,7 +2407,7 @@
  11033. //
  11034. // Convert the packed string for the PNP ID
  11035. //
  11036. - ACPIAmliDoubleToName( tempString, (ULONG)Result->uipDataValue, FALSE );
  11037. + ACPIAmliDoubleToName( tempString, (ULONG)Result->dwDataValue, FALSE );
  11038.  
  11039. //
  11040. // Done
  11041. @@ -2507,6 +2518,8 @@
  11042. return status;
  11043. }
  11044. +#endif // _X86_
  11045. +
  11046. NTSTATUS
  11047. ACPIGetConvertToInstanceID(
  11048. IN PDEVICE_EXTENSION DeviceExtension,
  11049. @@ -2664,7 +2677,7 @@
  11050. //
  11051. // Print the string
  11052. //
  11053. - sprintf( buffer, "%lx", Result->uipDataValue );
  11054. + sprintf( buffer, "%lx", Result->dwDataValue );
  11055.  
  11056. //
  11057. // Done
  11058. @@ -2836,7 +2849,7 @@
  11059. //
  11060. // Print the string
  11061. //
  11062. - swprintf( buffer, L"%lx", Result->uipDataValue );
  11063. + swprintf( buffer, L"%lx", Result->dwDataValue );
  11064.  
  11065. //
  11066. // Done
  11067. @@ -2885,7 +2898,7 @@
  11068. //
  11069. // Print the string
  11070. //
  11071. - swprintf( buffer, L"%lx", Result->uipDataValue );
  11072. + swprintf( buffer, L"%lx", Result->dwDataValue );
  11073.  
  11074. //
  11075. // Done
  11076. @@ -3108,7 +3121,7 @@
  11077. //
  11078. // Convert the packed string
  11079. //
  11080. - ACPIAmliDoubleToName( buffer, (ULONG)Result->uipDataValue, TRUE );
  11081. + ACPIAmliDoubleToName( buffer, (ULONG)Result->dwDataValue, TRUE );
  11082.  
  11083. //
  11084. // Done
  11085. @@ -3347,7 +3360,7 @@
  11086. //
  11087. // Convert the packed string
  11088. //
  11089. - ACPIAmliDoubleToNameWide( buffer, (ULONG)Result->uipDataValue, TRUE );
  11090. + ACPIAmliDoubleToNameWide( buffer, (ULONG)Result->dwDataValue, TRUE );
  11091.  
  11092. //
  11093. // Done
  11094. @@ -3487,7 +3500,7 @@
  11095. //
  11096. // Convert to string
  11097. //
  11098. - swprintf( buffer, L"%X", (ULONG)Result->uipDataValue );
  11099. + swprintf( buffer, L"%X", (ULONG)Result->dwDataValue );
  11100.  
  11101. *(Buffer) = buffer;
  11102. if (BufferSize != NULL) {
  11103. @@ -3712,7 +3725,7 @@
  11104. }
  11105. NTSTATUS
  11106. -ACPIGetProcessorID(
  11107. +ACPIGetProcessorID_rtm(
  11108. IN PDEVICE_EXTENSION DeviceExtension,
  11109. IN NTSTATUS Status,
  11110. IN POBJDATA Result,
  11111. @@ -3933,9 +3946,10 @@
  11112. return STATUS_SUCCESS;
  11113.  
  11114. }
  11115. -
  11116. +
  11117. +
  11118. NTSTATUS
  11119. -ACPIGetProcessorIDWide(
  11120. +ACPIGetProcessorIDWide_rtm(
  11121. IN PDEVICE_EXTENSION DeviceExtension,
  11122. IN NTSTATUS Status,
  11123. IN POBJDATA Result,
  11124. @@ -4154,6 +4168,607 @@
  11125. //
  11126. return STATUS_SUCCESS;
  11127. }
  11128. +
  11129. +char asmStrStrName[] = "%s%s";
  11130. +WCHAR asmSTRSTRBIGName[] = L"%S%S";
  11131. +char asmModelName[] = "Model";
  11132. +char asmFamilyName[] = "Family";
  11133. +char asmACPISlashName[] = "ACPI\\\0\0\0";
  11134. +char asmStarName[] = "*\0\0\0";
  11135. +
  11136. +#ifdef _X86_
  11137. +
  11138. +NTSTATUS __declspec(naked)
  11139. +ACPIGetProcessorID(
  11140. + IN PDEVICE_EXTENSION DeviceExtension,
  11141. + IN NTSTATUS Status,
  11142. + IN POBJDATA Result,
  11143. + IN ULONG Flags,
  11144. + OUT PVOID *Buffer,
  11145. + OUT ULONG *BufferSize
  11146. + ){
  11147. +_asm {
  11148. + push ebp
  11149. + mov ebp, esp
  11150. + sub esp, 28h
  11151. + mov eax, __security_cookie
  11152. + push ebx
  11153. + push esi
  11154. + mov [ebp-4], eax
  11155. + mov eax, [ebp+18h]
  11156. + push edi
  11157. + mov [ebp-24h], eax
  11158. + mov eax, [ebp+1Ch]
  11159. + mov esi, offset asmACPISlashName
  11160. + lea edi, [ebp-0Ch]
  11161. + movsd
  11162. + mov [ebp-20h], eax
  11163. + mov ax, word ptr [asmStarName]
  11164. + movsw
  11165. + mov [ebp-14h], ax
  11166. + mov eax, dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11167. + xor edi, edi
  11168. + mov [ebp-10h], edi
  11169. + mov [ebp-1Ch], edi
  11170. + lea ecx, [eax+1]
  11171. +
  11172. +loc_18D6C:
  11173. + mov dl, [eax]
  11174. + inc eax
  11175. + test dl, dl
  11176. + jnz short loc_18D6C
  11177. + sub eax, ecx
  11178. + mov ecx, eax
  11179. + lea eax, [ebp-0Ch]
  11180. + lea esi, [eax+1]
  11181. +
  11182. +loc_18D7D:
  11183. + mov dl, [eax]
  11184. + inc eax
  11185. + test dl, dl
  11186. + jnz short loc_18D7D
  11187. + sub eax, esi
  11188. + lea esi, [eax+ecx+1]
  11189. + mov eax, [ebp+14h]
  11190. + and eax, 40h
  11191. + mov [ebp-18h], esi
  11192. + mov [ebp-28h], eax
  11193. + jz loc_18E5D
  11194. + push 53706341h
  11195. + push esi
  11196. + push edi
  11197. + call dword ptr [ExAllocatePoolWithTag]
  11198. + mov ebx, eax
  11199. + cmp ebx, edi
  11200. + mov [ebp-10h], ebx
  11201. + jz loc_18E98
  11202. + mov ecx, esi
  11203. + mov edx, ecx
  11204. + shr ecx, 2
  11205. + xor eax, eax
  11206. + mov edi, ebx
  11207. + rep stosd
  11208. + mov ecx, edx
  11209. + and ecx, 3
  11210. + rep stosb
  11211. + mov eax, dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11212. + mov edx, ebx
  11213. +
  11214. +loc_18DD1:
  11215. + mov cl, [eax]
  11216. + inc eax
  11217. + mov [edx], cl
  11218. + inc edx
  11219. + test cl, cl
  11220. + jnz short loc_18DD1
  11221. + mov edi, dword ptr [strstr]
  11222. + push offset asmModelName
  11223. + push ebx
  11224. + call edi
  11225. + push offset asmFamilyName
  11226. + push ebx
  11227. + mov [ebp-1Ch], eax
  11228. + call edi
  11229. + add esp, 10h
  11230. + cmp dword ptr [ebp-1Ch], 0
  11231. + jz loc_18EA2
  11232. + test eax, eax
  11233. + jz loc_18EA2
  11234. + lea ecx, [ebp-0Ch]
  11235. + lea edi, [ecx+1]
  11236. +
  11237. +loc_18E0F:
  11238. + mov dl, [ecx]
  11239. + inc ecx
  11240. + test dl, dl
  11241. + jnz short loc_18E0F
  11242. + sub ecx, edi
  11243. + mov [ebp-18h], ecx
  11244. + lea ecx, [ebp-14h]
  11245. + lea edx, [ecx+1]
  11246. +
  11247. +loc_18E21:
  11248. + mov bl, [ecx]
  11249. + inc ecx
  11250. + test bl, bl
  11251. + jnz short loc_18E21
  11252. + sub ecx, edx
  11253. + mov edx, [ebp-1Ch]
  11254. + lea edi, [edx+1]
  11255. +
  11256. +loc_18E30:
  11257. + mov bl, [edx]
  11258. + inc edx
  11259. + test bl, bl
  11260. + jnz short loc_18E30
  11261. + sub edx, edi
  11262. + lea edi, [eax+1]
  11263. +
  11264. +loc_18E3C:
  11265. + mov bl, [eax]
  11266. + inc eax
  11267. + test bl, bl
  11268. + jnz short loc_18E3C
  11269. + sub eax, edi
  11270. + mov edi, eax
  11271. + lea eax, [ecx+esi*2]
  11272. + add eax, [ebp-18h]
  11273. + add edi, edx
  11274. + shl edi, 1
  11275. + lea eax, [eax+eax*2]
  11276. + sub eax, edi
  11277. + mov [ebp-18h], eax
  11278. + mov esi, eax
  11279. + xor edi, edi
  11280. +
  11281. +loc_18E5D:
  11282. + mov eax, [ebp+14h]
  11283. + shr eax, 1Ch
  11284. + push 53706341h
  11285. + not eax
  11286. + push esi
  11287. + and eax, 1
  11288. + push eax
  11289. + call dword ptr [ExAllocatePoolWithTag]
  11290. + mov ebx, eax
  11291. + cmp ebx, edi
  11292. + jnz short loc_18EB5
  11293. + mov eax, [ebp-24h]
  11294. + mov [eax], edi
  11295. + mov eax, [ebp-20h]
  11296. + cmp eax, edi
  11297. + jz short loc_18E89
  11298. + mov [eax], edi
  11299. +
  11300. +loc_18E89:
  11301. + cmp [ebp-10h], edi
  11302. + jz short loc_18E98
  11303. + push edi
  11304. + push dword ptr [ebp-10h]
  11305. + call dword ptr [ExFreePoolWithTag]
  11306. +
  11307. +loc_18E98:
  11308. + mov eax, 0C000009Ah
  11309. + jmp loc_18FB1
  11310. +
  11311. +loc_18EA2:
  11312. + push 0
  11313. + push ebx
  11314. + call dword ptr [ExFreePoolWithTag]
  11315. + mov eax, 0C0000001h
  11316. + jmp loc_18FB1
  11317. +
  11318. +loc_18EB5: ; ACPIGetProcessorID(x,x,x,x,x,x)+151j
  11319. + mov ecx, esi
  11320. + mov edx, ecx
  11321. + shr ecx, 2
  11322. + xor eax, eax
  11323. + mov edi, ebx
  11324. + rep stosd
  11325. + mov ecx, edx
  11326. + and ecx, 3
  11327. + test byte ptr [ebp+14h], 20h
  11328. + rep stosb
  11329. + jz short loc_18EED
  11330. + push dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11331. + lea eax, [ebp-0Ch]
  11332. + push eax
  11333. + push offset asmStrStrName
  11334. + push ebx
  11335. + call dword ptr [sprintf]
  11336. + add esp, 10h
  11337. + jmp loc_18F8D
  11338. +
  11339. +loc_18EED:
  11340. + cmp dword ptr [ebp-28h], 0
  11341. + jz loc_18F8D
  11342. + push dword ptr [ebp-10h]
  11343. + mov esi, dword ptr [sprintf]
  11344. + lea eax, [ebp-0Ch]
  11345. + push eax
  11346. + push offset asmStrStrName
  11347. + push ebx
  11348. + call esi
  11349. + push dword ptr [ebp-10h]
  11350. + mov edi, eax
  11351. + lea eax, [ebp-14h]
  11352. + push eax
  11353. + inc edi
  11354. + lea eax, [ebx+edi]
  11355. + push offset asmStrStrName
  11356. + push eax
  11357. + call esi
  11358. + push dword ptr [ebp-10h]
  11359. + add edi, eax
  11360. + mov eax, [ebp-1Ch]
  11361. + mov byte ptr [eax-1], 0
  11362. + lea eax, [ebp-0Ch]
  11363. + push eax
  11364. + inc edi
  11365. + lea eax, [ebx+edi]
  11366. + push offset asmStrStrName
  11367. + push eax
  11368. + call esi
  11369. + push dword ptr [ebp-10h]
  11370. + lea edi, [edi+eax+1]
  11371. + lea eax, [ebp-14h]
  11372. + push eax
  11373. + lea eax, [ebx+edi]
  11374. + push offset asmStrStrName
  11375. + push eax
  11376. + call esi
  11377. + add edi, eax
  11378. + mov eax, [ebp-1Ch]
  11379. + add esp, 40h
  11380. + push dword ptr [ebp-10h]
  11381. + mov byte ptr [eax-1], 0
  11382. + lea eax, [ebp-0Ch]
  11383. + push eax
  11384. + inc edi
  11385. + lea eax, [ebx+edi]
  11386. + push offset asmStrStrName
  11387. + push eax
  11388. + call esi
  11389. + push dword ptr [ebp-10h]
  11390. + lea ecx, [ebp-14h]
  11391. + push ecx
  11392. + lea eax, [edi+eax+1]
  11393. + add eax, ebx
  11394. + push offset asmStrStrName
  11395. + push eax
  11396. + call esi
  11397. + mov esi, [ebp-18h]
  11398. + add esp, 20h
  11399. +
  11400. +loc_18F8D:
  11401. + cmp dword ptr [ebp-10h], 0
  11402. + jz short loc_18F9E
  11403. + push 0
  11404. + push dword ptr [ebp-10h]
  11405. + call dword ptr [ExFreePoolWithTag]
  11406. +
  11407. +loc_18F9E:
  11408. + mov eax, [ebp-24h]
  11409. + mov [eax], ebx
  11410. + mov eax, [ebp-20h]
  11411. + test eax, eax
  11412. + jz short loc_18FAF
  11413. + lea ecx, [esi+esi]
  11414. + mov [eax], ecx
  11415. +
  11416. +loc_18FAF:
  11417. + xor eax, eax
  11418. +
  11419. +loc_18FB1:
  11420. + mov ecx, [ebp-4]
  11421. + pop edi
  11422. + pop esi
  11423. + pop ebx
  11424. + call __security_check_cookie
  11425. + _emit 0xc9 ; "leave" opcode
  11426. + retn 18h
  11427. +}
  11428. +}
  11429. +
  11430. +
  11431. +NTSTATUS __declspec(naked)
  11432. +ACPIGetProcessorIDWide(
  11433. + IN PDEVICE_EXTENSION DeviceExtension,
  11434. + IN NTSTATUS Status,
  11435. + IN POBJDATA Result,
  11436. + IN ULONG Flags,
  11437. + OUT PVOID *Buffer,
  11438. + OUT ULONG *BufferSize
  11439. + ){
  11440. +_asm {
  11441. + push ebp
  11442. + mov ebp, esp
  11443. + sub esp, 2Ch
  11444. + mov eax, __security_cookie
  11445. + push ebx
  11446. + push esi
  11447. + mov [ebp-4], eax
  11448. + mov eax, [ebp+18h]
  11449. + push edi
  11450. + mov [ebp-24h], eax
  11451. + mov eax, [ebp+1Ch]
  11452. + mov esi, offset asmACPISlashName
  11453. + lea edi, [ebp-0Ch]
  11454. + movsd
  11455. + mov [ebp-28h], eax
  11456. + mov ax, word ptr [asmStarName]
  11457. + movsw
  11458. + xor edi, edi
  11459. + mov [ebp-14h], ax
  11460. + mov eax, dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11461. + mov [ebp-10h], edi
  11462. + mov [ebp-18h], edi
  11463. + mov [ebp-1Ch], edi
  11464. + lea ecx, [eax+1]
  11465. +
  11466. +loc_1907B:
  11467. + mov dl, [eax]
  11468. + inc eax
  11469. + test dl, dl
  11470. + jnz short loc_1907B
  11471. + sub eax, ecx
  11472. + mov ecx, eax
  11473. + lea eax, [ebp-0Ch]
  11474. + lea esi, [eax+1]
  11475. +
  11476. +loc_1908C:
  11477. + mov dl, [eax]
  11478. + inc eax
  11479. + test dl, dl
  11480. + jnz short loc_1908C
  11481. + sub eax, esi
  11482. + lea ebx, [eax+ecx+1]
  11483. + mov eax, [ebp+14h]
  11484. + and eax, 40h
  11485. + mov [ebp-2Ch], eax
  11486. + jz loc_19172
  11487. + push 53706341h
  11488. + push ebx
  11489. + push edi
  11490. + call dword ptr [ExAllocatePoolWithTag]
  11491. + mov esi, eax
  11492. + cmp esi, edi
  11493. + mov [ebp-10h], esi
  11494. + jz loc_191B3
  11495. + mov ecx, ebx
  11496. + mov edx, ecx
  11497. + shr ecx, 2
  11498. + xor eax, eax
  11499. + mov edi, esi
  11500. + rep stosd
  11501. + mov ecx, edx
  11502. + and ecx, 3
  11503. + rep stosb
  11504. + mov eax, dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11505. + mov edx, esi
  11506. +
  11507. +loc_190DD:
  11508. + mov cl, [eax]
  11509. + inc eax
  11510. + mov [edx], cl
  11511. + inc edx
  11512. + test cl, cl
  11513. + jnz short loc_190DD
  11514. + mov edi, dword ptr [strstr]
  11515. + push offset asmModelName
  11516. + push esi
  11517. + call edi
  11518. + push offset asmFamilyName
  11519. + push esi
  11520. + mov [ebp-18h], eax
  11521. + call edi
  11522. + mov [ebp-1Ch], eax
  11523. + xor eax, eax
  11524. + add esp, 10h
  11525. + cmp [ebp-18h], eax
  11526. + jz loc_191BD
  11527. + cmp [ebp-1Ch], eax
  11528. + jz loc_191BD
  11529. + lea eax, [ebp-0Ch]
  11530. + lea edx, [eax+1]
  11531. +
  11532. +loc_19120:
  11533. + mov cl, [eax]
  11534. + inc eax
  11535. + test cl, cl
  11536. + jnz short loc_19120
  11537. + sub eax, edx
  11538. + mov [ebp-20h], eax
  11539. + lea eax, [ebp-14h]
  11540. + lea esi, [eax+1]
  11541. +
  11542. +loc_19132:
  11543. + mov cl, [eax]
  11544. + inc eax
  11545. + test cl, cl
  11546. + jnz short loc_19132
  11547. + sub eax, esi
  11548. + mov edx, eax
  11549. + mov eax, [ebp-18h]
  11550. + lea esi, [eax+1]
  11551. +
  11552. +loc_19143:
  11553. + mov cl, [eax]
  11554. + inc eax
  11555. + test cl, cl
  11556. + jnz short loc_19143
  11557. + sub eax, esi
  11558. + mov esi, eax
  11559. + mov eax, [ebp-1Ch]
  11560. + lea edi, [eax+1]
  11561. +
  11562. +loc_19154:
  11563. + mov cl, [eax]
  11564. + inc eax
  11565. + test cl, cl
  11566. + jnz short loc_19154
  11567. + sub eax, edi
  11568. + mov ecx, eax
  11569. + lea eax, [edx+ebx*2]
  11570. + add eax, [ebp-20h]
  11571. + add ecx, esi
  11572. + lea eax, [eax+eax*2]
  11573. + shl ecx, 1
  11574. + mov ebx, eax
  11575. + sub ebx, ecx
  11576. + xor edi, edi
  11577. +
  11578. +loc_19172:
  11579. + mov eax, [ebp+14h]
  11580. + shr eax, 1Ch
  11581. + push 53706341h
  11582. + lea esi, [ebx+ebx]
  11583. + not eax
  11584. + push esi
  11585. + and eax, 1
  11586. + push eax
  11587. + mov [ebp-20h], esi
  11588. + call dword ptr [ExAllocatePoolWithTag]
  11589. + mov ebx, eax
  11590. + cmp ebx, edi
  11591. + jnz short loc_191CF
  11592. + mov eax, [ebp-24h]
  11593. + mov [eax], edi
  11594. + mov eax, [ebp-28h]
  11595. + cmp eax, edi
  11596. + jz short loc_191A4
  11597. + mov [eax], edi
  11598. +
  11599. +loc_191A4:
  11600. + cmp [ebp-10h], edi
  11601. + jz short loc_191B3
  11602. + push edi
  11603. + push dword ptr [ebp-10h]
  11604. + call dword ptr [ExFreePoolWithTag]
  11605. +
  11606. +loc_191B3:
  11607. + mov eax, 0C000009Ah
  11608. + jmp loc_192C9
  11609. +
  11610. +loc_191BD:
  11611. + push eax
  11612. + push esi
  11613. + call dword ptr [ExFreePoolWithTag]
  11614. + mov eax, 0C0000001h
  11615. + jmp loc_192C9
  11616. +
  11617. +loc_191CF:
  11618. + mov ecx, esi
  11619. + mov edx, ecx
  11620. + shr ecx, 2
  11621. + xor eax, eax
  11622. + mov edi, ebx
  11623. + rep stosd
  11624. + mov ecx, edx
  11625. + and ecx, 3
  11626. + test byte ptr [ebp+14h], 20h
  11627. + rep stosb
  11628. + jz short loc_19207
  11629. + push dword ptr[AcpiProcessorString+4] ; AcpiProcessorString.Buffer
  11630. + lea eax, [ebp-0Ch]
  11631. + push eax
  11632. + push offset asmSTRSTRBIGName
  11633. + push ebx
  11634. + call dword ptr [swprintf]
  11635. + add esp, 10h
  11636. + jmp loc_192A8
  11637. +
  11638. +loc_19207:
  11639. + cmp dword ptr [ebp-2Ch], 0
  11640. + jz loc_192A8
  11641. + push dword ptr [ebp-10h]
  11642. + mov esi, dword ptr [swprintf]
  11643. + lea eax, [ebp-0Ch]
  11644. + push eax
  11645. + push offset asmSTRSTRBIGName
  11646. + push ebx
  11647. + call esi
  11648. + push dword ptr [ebp-10h]
  11649. + mov edi, eax
  11650. + lea eax, [ebp-14h]
  11651. + push eax
  11652. + inc edi
  11653. + lea eax, [ebx+edi*2]
  11654. + push offset asmSTRSTRBIGName
  11655. + push eax
  11656. + call esi
  11657. + push dword ptr [ebp-10h]
  11658. + add edi, eax
  11659. + mov eax, [ebp-18h]
  11660. + mov byte ptr [eax-1], 0
  11661. + lea eax, [ebp-0Ch]
  11662. + push eax
  11663. + inc edi
  11664. + lea eax, [ebx+edi*2]
  11665. + push offset asmSTRSTRBIGName
  11666. + push eax
  11667. + call esi
  11668. + push dword ptr [ebp-10h]
  11669. + lea edi, [edi+eax+1]
  11670. + lea eax, [ebp-14h]
  11671. + push eax
  11672. + lea eax, [ebx+edi*2]
  11673. + push offset asmSTRSTRBIGName
  11674. + push eax
  11675. + call esi
  11676. + add edi, eax
  11677. + mov eax, [ebp-1Ch]
  11678. + add esp, 40h
  11679. + push dword ptr [ebp-10h]
  11680. + mov byte ptr [eax-1], 0
  11681. + lea eax, [ebp-0Ch]
  11682. + push eax
  11683. + inc edi
  11684. + lea eax, [ebx+edi*2]
  11685. + push offset asmSTRSTRBIGName
  11686. + push eax
  11687. + call esi ;
  11688. + push dword ptr [ebp-10h]
  11689. + lea ecx, [ebp-14h]
  11690. + push ecx
  11691. + lea eax, [edi+eax+1]
  11692. + lea eax, [ebx+eax*2]
  11693. + push offset asmSTRSTRBIGName
  11694. + push eax
  11695. + call esi ;
  11696. + mov esi, [ebp-20h]
  11697. + add esp, 20h
  11698. +
  11699. +loc_192A8:
  11700. + cmp dword ptr [ebp-10h], 0
  11701. + jz short loc_192B9
  11702. + push 0
  11703. + push dword ptr [ebp-10h]
  11704. + call dword ptr [ExFreePoolWithTag]
  11705. +
  11706. +loc_192B9:
  11707. + mov eax, [ebp-24h]
  11708. + mov [eax], ebx
  11709. + mov eax, [ebp-28h]
  11710. + test eax, eax
  11711. + jz short loc_192C7
  11712. + mov [eax], esi
  11713. +
  11714. +loc_192C7:
  11715. + xor eax, eax
  11716. +
  11717. +loc_192C9:
  11718. + mov ecx, [ebp-4]
  11719. + pop edi
  11720. + pop esi
  11721. + pop ebx
  11722. + call __security_check_cookie
  11723. + _emit 0xc9 ; "leave" opcode
  11724. + retn 18h
  11725. +}
  11726. +}
  11727. +
  11728. +#endif // _X86_
  11729. NTSTATUS
  11730. ACPIGetProcessorStatus(
  11731. @@ -4768,7 +5383,7 @@
  11732. //
  11733. // Set the value to what we should return
  11734. //
  11735. - *( (PULONG) (request->Buffer) ) = (ULONG)Result->uipDataValue;
  11736. + *( (PULONG) (request->Buffer) ) = (ULONG)Result->dwDataValue;
  11737. if (request->BufferSize != NULL) {
  11738.  
  11739. *(request->BufferSize) = sizeof(ULONG);
  11740. diff --strip-trailing-cr -ur ./driver/nt/init.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/init.c"
  11741. --- ./driver/nt/init.c 2003-02-26 17:15:50.000000000 +0500
  11742. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/init.c" 2022-04-03 00:32:28.000000000 +0500
  11743. @@ -1013,6 +1013,8 @@
  11744. PCM_RESOURCE_LIST cmResourceList;
  11745. PDEVICE_OBJECT deviceObject = NULL;
  11746. PDEVICE_OBJECT targetObject = NULL;
  11747. + ACPI_ARBITER_INSTANCE **arbiter;
  11748. + ULONG i;
  11749.  
  11750. //
  11751. // We require the spinlock for parts of this
  11752. @@ -1069,6 +1071,16 @@
  11753. deviceObject->DeviceExtension = NULL;
  11754. DeviceExtension->DeviceObject = NULL;
  11755.  
  11756. + if (DeviceExtension->Flags & DEV_CAP_CONTAINER &&
  11757. + DeviceExtension->Module.ArbitersNeeded) {
  11758. + arbiter = DeviceExtension->Module.Arbiters;
  11759. + for (i = 0; i < 3; i++) {
  11760. + AcpiArblibFreeArbiterInstance(*arbiter);
  11761. + *arbiter = NULL;
  11762. + arbiter++;
  11763. + }
  11764. + }
  11765. +
  11766. //
  11767. // The reference count should have value > 0
  11768. //
  11769. @@ -1628,7 +1640,8 @@
  11770. PNSOBJ workObject;
  11771. POWER_STATE state;
  11772. ULONG deviceStatus;
  11773. -
  11774. + ACPI_ARBITER_INSTANCE **arbiter;
  11775. + int i;
  11776. PAGED_CODE();
  11777.  
  11778. //
  11779. @@ -1663,6 +1676,16 @@
  11780.  
  11781. }
  11782.  
  11783. + if (DeviceExtension->Flags & DEV_CAP_CONTAINER &&
  11784. + DeviceExtension->Module.ArbitersNeeded) {
  11785. + arbiter = DeviceExtension->Module.Arbiters;
  11786. + for (i = 0; i < 3; i++) {
  11787. + (*arbiter)->SomeField = FALSE;
  11788. + arbiter++;
  11789. + }
  11790. + }
  11791. +
  11792. +
  11793. //
  11794. // Nothing to stop...
  11795. //
  11796. diff --strip-trailing-cr -ur ./driver/nt/internal.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/internal.c"
  11797. --- ./driver/nt/internal.c 2003-02-26 17:15:52.000000000 +0500
  11798. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/internal.c" 2022-04-03 20:18:42.000000000 +0500
  11799. @@ -304,6 +304,14 @@
  11800. //
  11801. deviceExtension = DeviceObject->DeviceExtension;
  11802.  
  11803. + if ( deviceExtension &&
  11804. + deviceExtension->Signature != '_SGP' ) {
  11805. + _ACPIInternalErrorEx(0x00090147,
  11806. + (ULONG_PTR)DeviceObject,
  11807. + (ULONG_PTR)deviceExtension);
  11808. + }
  11809. +
  11810. +
  11811. #if 0
  11812. //
  11813. // Is this a surprise removed device extension?
  11814. diff --strip-trailing-cr -ur ./driver/nt/interupt.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/interupt.c"
  11815. --- ./driver/nt/interupt.c 2003-02-26 17:15:52.000000000 +0500
  11816. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/interupt.c" 2022-04-04 04:51:50.000000000 +0500
  11817. @@ -711,7 +711,7 @@
  11818. // behind our back. The way that we can correct this problem is by
  11819. // forcing a check of the GPEs...
  11820. //
  11821. - if (!IntStatus) {
  11822. + if ( !(AcpiOverrideAttributes & ACPI_OVERRIDE_GPE_PENDING) && !IntStatus ) {
  11823.  
  11824. IntStatus |= PM1_GPE_PENDING;
  11825.  
  11826. diff --strip-trailing-cr -ur ./driver/nt/irqarb.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/irqarb.c"
  11827. --- ./driver/nt/irqarb.c 2003-02-26 17:15:52.000000000 +0500
  11828. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/irqarb.c" 2022-04-16 10:26:14.839843700 +0500
  11829. @@ -3531,8 +3531,24 @@
  11830. }
  11831. }
  11832.  
  11833. - ASSERT(PciInterfacesInstantiated);
  11834. + // BSOD 0x7E(c0000005, ...) AcpiArbCrackPRT() two workarounds:
  11835. + // 1) pci.sys presence check
  11836. + // 2) not PCI device type check
  11837. + if (0) {
  11838. + if (!PciInterfacesInstantiated) {
  11839. + return STATUS_NOT_FOUND;
  11840. + }
  11841. + } else {
  11842. + if (Pdo->DriverObject == AcpiDriverObject) {
  11843. + status = ACPIInternalIsPci(Pdo);
  11844. + if (NT_SUCCESS(status))
  11845. + if ( (((PDEVICE_EXTENSION)Pdo->DeviceExtension)->Flags & DEV_CAP_PCI_DEVICE) == 0 )
  11846. + return STATUS_NOT_FOUND;
  11847. + }
  11848. + }
  11849.  
  11850. + ASSERT(PciInterfacesInstantiated);
  11851. +
  11852. *LinkNode = NULL;
  11853.  
  11854. pciInterface = ((PARBITER_EXTENSION)AcpiArbiter.ArbiterState.Extension)->InterruptRouting;
  11855. @@ -3750,9 +3766,9 @@
  11856. 0,
  11857. &adrData))) {
  11858.  
  11859. - if (pciSlot.u.bits.DeviceNumber == (adrData.uipDataValue >> 16)) {
  11860. + if (pciSlot.u.bits.DeviceNumber == (adrData.dwDataValue >> 16)) {
  11861.  
  11862. - if ((adrData.uipDataValue & 0xffff) != 0xffff) {
  11863. + if ((adrData.dwDataValue & 0xffff) != 0xffff) {
  11864. ////
  11865. //// An _ADR in a _PRT must be of the form xxxxFFFF,
  11866. //// which means that the PCI Device Number is specified,
  11867. @@ -3766,14 +3782,14 @@
  11868. // ACPI_PRT_HAS_INVALID_FUNCTION_NUMBERS,
  11869. // (ULONG_PTR)prtObj,
  11870. // prtElement,
  11871. - // adrData.uipDataValue);
  11872. + // adrData.dwDataValue);
  11873.  
  11874.  
  11875. - DEBUG_PRINT(0, ("PRT entry has ambiguous address %x\n", adrData.uipDataValue));
  11876. + DEBUG_PRINT(0, ("PRT entry has ambiguous address %x\n", adrData.dwDataValue));
  11877.  
  11878. status = STATUS_INVALID_PARAMETER;
  11879. - pciSlot.u.bits.DeviceNumber = (ULONG)(adrData.uipDataValue >> 16) & 0xffff;
  11880. - pciSlot.u.bits.FunctionNumber = (ULONG)(adrData.uipDataValue & 0xffff);
  11881. + pciSlot.u.bits.DeviceNumber = (ULONG)(adrData.dwDataValue >> 16) & 0xffff;
  11882. + pciSlot.u.bits.FunctionNumber = (ULONG)(adrData.dwDataValue & 0xffff);
  11883. AMLIFreeDataBuffs(&adrData, 1);
  11884. AMLIFreeDataBuffs(&prtData, 1);
  11885. goto AcpiArbCrackPRTError;
  11886. @@ -3795,7 +3811,7 @@
  11887. 1,
  11888. &pinData))) {
  11889.  
  11890. - if (pinData.uipDataValue == interruptPin) {
  11891. + if (pinData.dwDataValue == interruptPin) {
  11892. //
  11893. // This is the package that describes the link node we
  11894. // are interested in. Get the name of the link node.
  11895. @@ -3868,7 +3884,7 @@
  11896. // We have an integer which describes the "Global System Interrupt Vector"
  11897. // that this PCI device will trigger.
  11898. //
  11899. - *Vector = (ULONG)indexData.uipDataValue;
  11900. + *Vector = (ULONG)indexData.dwDataValue;
  11901.  
  11902. status = STATUS_SUCCESS;
  11903.  
  11904. @@ -4993,7 +5009,7 @@
  11905. }
  11906.  
  11907. } else {
  11908. -
  11909. + if (0) { // BSOD 0xA5 (0x10006, ...) workaround, missing _DIS method for "PNP0C0F" (PCI Interrupt Link Devices)
  11910. //
  11911. // Link nodes must be disablable.
  11912. //
  11913. @@ -5003,6 +5019,7 @@
  11914. (ULONG_PTR)context->RootDevice,
  11915. 0,
  11916. 0);
  11917. + }
  11918. }
  11919. }
  11920. }
  11921. diff --strip-trailing-cr -ur ./driver/nt/match.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/match.c"
  11922. --- ./driver/nt/match.c 2003-02-26 17:15:52.000000000 +0500
  11923. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/match.c" 2022-04-04 21:11:12.000000000 +0500
  11924. @@ -501,7 +501,7 @@
  11925. //
  11926. // Does the minimum address match?
  11927. //
  11928. - if (((KdComPortInUse != NULL) && (baseAddress == kdBaseAddr)) ||
  11929. + if (((kdBaseAddr != NULL) && (baseAddress == kdBaseAddr)) ||
  11930. ((headlessBaseAddress != NULL) && (baseAddress == headlessBaseAddress))) {
  11931.  
  11932. //
  11933. Only in c:\ACPI\ACPI_W2003\Base\busdrv\acpi/driver/nt: obj
  11934. diff --strip-trailing-cr -ur ./driver/nt/osnotify.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/osnotify.c"
  11935. --- ./driver/nt/osnotify.c 2003-02-26 17:15:52.000000000 +0500
  11936. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/osnotify.c" 2022-04-04 02:40:34.000000000 +0500
  11937. @@ -723,7 +723,7 @@
  11938. NTSTATUS
  11939. EXPORT
  11940. -OSNotifyDeviceCheck(
  11941. +OSNotifyDeviceCheck_rtm(
  11942. IN PNSOBJ AcpiObject
  11943. )
  11944. /*++
  11945. @@ -828,6 +828,88 @@
  11946. return STATUS_SUCCESS;
  11947. }
  11948. +
  11949. +#ifdef _X86_
  11950. +
  11951. +NTSTATUS __declspec(naked)
  11952. +EXPORT
  11953. +OSNotifyDeviceCheck(
  11954. + IN PNSOBJ AcpiObject
  11955. + ) {
  11956. +_asm {
  11957. + push ebp
  11958. + mov ebp, esp
  11959. + push dword ptr [ebp+8]
  11960. + call ACPIDockIsDockDevice
  11961. + test al, al
  11962. + jz short loc_1DACB
  11963. + pop ebp
  11964. + jmp OSNotifyDeviceEject
  11965. +
  11966. +loc_1DACB:
  11967. + push ebx
  11968. + push esi
  11969. + mov esi, offset AcpiDeviceTreeLock
  11970. + mov ecx, esi
  11971. + call dword ptr [KfAcquireSpinLock]
  11972. + mov ecx, [ebp+8]
  11973. + mov bl, al
  11974. + xor edx, edx
  11975. +
  11976. +loc_1DAE1:
  11977. + mov eax, [ecx+30h]
  11978. + cmp eax, edx
  11979. + mov ecx, [ecx+8]
  11980. + jz short loc_1DAFA
  11981. + cmp dword ptr [eax+8], 5F534750h
  11982. + jz short loc_1DAF6
  11983. + xor eax, eax
  11984. +
  11985. +loc_1DAF6:
  11986. + cmp eax, edx
  11987. + jnz short loc_1DB02
  11988. +
  11989. +loc_1DAFA:
  11990. + cmp ecx, edx
  11991. + jnz short loc_1DAE1
  11992. + cmp eax, edx
  11993. + jz short loc_1DB2C
  11994. +
  11995. +loc_1DB02:
  11996. + mov ecx, [eax+13Ch]
  11997. + jmp short loc_1DB19
  11998. +
  11999. +loc_1DB0A:
  12000. + mov eax, [ecx]
  12001. + and eax, 8
  12002. + or eax, edx
  12003. + jz short loc_1DB1F
  12004. + mov ecx, [ecx+13Ch]
  12005. +
  12006. +loc_1DB19:
  12007. + cmp ecx, edx
  12008. + jnz short loc_1DB0A
  12009. + jmp short loc_1DB2C
  12010. +
  12011. +loc_1DB1F:
  12012. + push edx
  12013. + push dword ptr [ecx+138h]
  12014. + call dword ptr [IoInvalidateDeviceRelations]
  12015. +
  12016. +loc_1DB2C:
  12017. + mov ecx, esi
  12018. + mov dl, bl
  12019. + call dword ptr [KfReleaseSpinLock]
  12020. + pop esi
  12021. + xor eax, eax
  12022. + pop ebx
  12023. + pop ebp
  12024. + retn
  12025. +}
  12026. +}
  12027. +
  12028. +#endif
  12029. +
  12030. NTSTATUS
  12031. EXPORT
  12032. OSNotifyDeviceEnum(
  12033. diff --strip-trailing-cr -ur ./driver/nt/pch.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/pch.h"
  12034. --- ./driver/nt/pch.h 2003-02-26 17:15:52.000000000 +0500
  12035. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/pch.h" 2022-04-16 10:41:03.298828100 +0500
  12036. @@ -59,6 +59,7 @@
  12037. //
  12038. // These are the global include files for this project
  12039. //
  12040. +#include "arblib.h"
  12041. #include "acpitabl.h"
  12042. #include "amli.h"
  12043. #include "aml.h"
  12044. @@ -127,12 +128,11 @@
  12045. #include "wmilog.h"
  12046. #include "worker.h"
  12047.  
  12048. -
  12049. //
  12050. // Make sure to have the correct tag
  12051. //
  12052. #ifdef ExAllocatePool
  12053. #undef ExAllocatePool
  12054. -#endif
  12055. + #endif
  12056. #define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'ipcA')
  12057.  
  12058. diff --strip-trailing-cr -ur ./driver/nt/pciopregion.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/pciopregion.c"
  12059. --- ./driver/nt/pciopregion.c 2003-02-26 17:15:52.000000000 +0500
  12060. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/pciopregion.c" 2022-04-07 00:15:50.944335900 +0500
  12061. @@ -1119,8 +1119,8 @@
  12062.  
  12063. pciConfig = (PPCI_COMMON_CONFIG)buffer;
  12064.  
  12065. - if (pciConfig->HeaderType != PCI_BRIDGE_TYPE) {
  12066. -
  12067. + if ((PCI_CONFIGURATION_TYPE(pciConfig) != PCI_BRIDGE_TYPE) &&
  12068. + (PCI_CONFIGURATION_TYPE(pciConfig) != PCI_CARDBUS_BRIDGE_TYPE)) {
  12069. //
  12070. // Make a guess that the bus number was 0.
  12071. //
  12072. @@ -1133,6 +1133,7 @@
  12073. // the secondary PCI bus and exit.
  12074. //
  12075. *state->Bus = pciConfig->u.type1.SecondaryBus;
  12076. + HalSetMaxLegacyPciBusNumber(*state->Bus);
  12077.  
  12078. status = STATUS_SUCCESS;
  12079. goto GetPciAddressWorkerExit;
  12080. @@ -1253,6 +1254,17 @@
  12081. {
  12082. PIS_PCI_DEVICE_STATE state;
  12083. NTSTATUS status;
  12084. + PDEVICE_EXTENSION DeviceExtension;
  12085. +
  12086. + DeviceExtension = (PDEVICE_EXTENSION) AcpiObject->Context;
  12087. +
  12088. + if ( DeviceExtension &&
  12089. + ((DeviceExtension->Flags & DEV_CAP_PCI_DEVICE) ||
  12090. + (DeviceExtension->Flags & DEV_CAP_PCI)) ) {
  12091. + *Result = TRUE;
  12092. + return STATUS_SUCCESS;
  12093. + }
  12094. +
  12095.  
  12096. state = ExAllocatePoolWithTag(NonPagedPool, sizeof(IS_PCI_DEVICE_STATE), ACPI_INTERFACE_POOLTAG);
  12097.  
  12098. @@ -1431,6 +1443,7 @@
  12099. }
  12100.  
  12101. if (state->Cid) {
  12102. + ACPIConvertStringDelimitation(state->Cid, ' ');
  12103.  
  12104. if (strstr(state->Cid, PCI_PNP_ID)) {
  12105. //
  12106. @@ -1540,6 +1553,7 @@
  12107.  
  12108. } IS_PCI_BUS_STATE, *PIS_PCI_BUS_STATE;
  12109.  
  12110. +#pragma auto_inline (off) // disable IsPciBusAsyncc inlinig to match x64 5.2.3790.3959 (srv03_sp2_rtm.070216-1710)
  12111. NTSTATUS
  12112. IsPciBusAsync(
  12113. IN PNSOBJ AcpiObject,
  12114. @@ -1570,6 +1584,15 @@
  12115. --*/
  12116. {
  12117. PIS_PCI_BUS_STATE state;
  12118. + PDEVICE_EXTENSION DeviceExtension;
  12119. +
  12120. + DeviceExtension = (PDEVICE_EXTENSION) AcpiObject->Context;
  12121. +
  12122. + if (DeviceExtension &&
  12123. + (DeviceExtension->Flags & DEV_CAP_PCI)) {
  12124. + *Result = TRUE;
  12125. + return STATUS_SUCCESS;
  12126. + }
  12127.  
  12128. state = ExAllocatePoolWithTag(NonPagedPool, sizeof(IS_PCI_BUS_STATE), ACPI_INTERFACE_POOLTAG);
  12129.  
  12130. @@ -1579,11 +1602,11 @@
  12131.  
  12132. RtlZeroMemory(state, sizeof(IS_PCI_BUS_STATE));
  12133.  
  12134. - state->AcpiObject = AcpiObject;
  12135. + state->RunCompletion = INITIAL_RUN_COMPLETION;
  12136. state->CompletionHandler = CompletionHandler;
  12137. state->CompletionContext = CompletionContext;
  12138. + state->AcpiObject = AcpiObject;
  12139. state->Result = Result;
  12140. - state->RunCompletion = INITIAL_RUN_COMPLETION;
  12141.  
  12142. *Result = FALSE;
  12143.  
  12144. @@ -1592,6 +1615,7 @@
  12145. NULL,
  12146. (PVOID)state);
  12147. }
  12148. +#pragma auto_inline (on)
  12149.  
  12150. NTSTATUS
  12151. EXPORT
  12152. @@ -1710,6 +1734,7 @@
  12153. }
  12154.  
  12155. if (state->Cid) {
  12156. + ACPIConvertStringDelimitation(state->Cid, ' ');
  12157.  
  12158. if (strstr(state->Cid, PCI_PNP_ID)) {
  12159. //
  12160. @@ -1843,38 +1868,48 @@
  12161. Notes:
  12162.  
  12163. --*/
  12164. +
  12165. {
  12166. +#ifdef _X86_ // match x32 5.2.3790.3959 (srv03_sp2_rtm.070216-1710)
  12167. + return IsPciBusExtension(ACPIInternalGetDeviceExtension(DeviceObject));
  12168. +
  12169. +#else // match x64 5.2.3790.3959 (srv03_sp2_rtm.070216-1710)
  12170. AMLISUPP_CONTEXT_PASSIVE getDataContext;
  12171. - PDEVICE_EXTENSION devExt = ACPIInternalGetDeviceExtension(DeviceObject);
  12172. - NTSTATUS status;
  12173. - BOOLEAN result = FALSE;
  12174. + PNSOBJ AcpiObject = ACPIInternalGetDeviceExtension(DeviceObject)->AcpiObject;
  12175. + NTSTATUS status;
  12176. + BOOLEAN result = FALSE;
  12177. + PDEVICE_EXTENSION devExt2;
  12178.  
  12179. PAGED_CODE();
  12180. +
  12181. + devExt2 = (PDEVICE_EXTENSION)AcpiObject->Context;
  12182.  
  12183. - ASSERT(devExt->Signature == ACPI_SIGNATURE);
  12184. + if (devExt2 &&
  12185. + (devExt2->Flags & DEV_CAP_PCI)) {
  12186. + return TRUE;
  12187. + }
  12188.  
  12189. KeInitializeEvent(&getDataContext.Event, SynchronizationEvent, FALSE);
  12190. getDataContext.Status = STATUS_NOT_FOUND;
  12191.  
  12192. - if (!(devExt->Flags & DEV_PROP_NO_OBJECT) ) {
  12193. -
  12194. - status = IsPciBusAsync( devExt->AcpiObject,
  12195. - AmlisuppCompletePassive,
  12196. - (PVOID)&getDataContext,
  12197. - &result );
  12198. -
  12199. - if (status == STATUS_PENDING) {
  12200. + status = IsPciBusAsync( AcpiObject,
  12201. + AmlisuppCompletePassive,
  12202. + (PVOID)&getDataContext,
  12203. + &result );
  12204.  
  12205. - KeWaitForSingleObject(&getDataContext.Event,
  12206. - Executive,
  12207. - KernelMode,
  12208. - FALSE,
  12209. - NULL);
  12210. - }
  12211. + if (status == STATUS_PENDING) {
  12212.  
  12213. + KeWaitForSingleObject(&getDataContext.Event,
  12214. + Executive,
  12215. + KernelMode,
  12216. + FALSE,
  12217. + NULL);
  12218. }
  12219. +
  12220. return result;
  12221. +#endif
  12222. }
  12223. +
  12224. BOOLEAN
  12225. IsPciBusExtension(
  12226. @@ -1899,6 +1934,10 @@
  12227.  
  12228. --*/
  12229. {
  12230. + return IsNsobjPciBus(DeviceExtension->AcpiObject);
  12231. +}
  12232. +
  12233. +/*
  12234. AMLISUPP_CONTEXT_PASSIVE getDataContext;
  12235. NTSTATUS status;
  12236. BOOLEAN result = FALSE;
  12237. @@ -1935,6 +1974,7 @@
  12238. }
  12239. return result;
  12240. }
  12241. +*/
  12242. BOOLEAN
  12243. IsNsobjPciBus(
  12244. @@ -1962,9 +2002,17 @@
  12245. AMLISUPP_CONTEXT_PASSIVE getDataContext;
  12246. NTSTATUS status;
  12247. BOOLEAN result = FALSE;
  12248. + PDEVICE_EXTENSION DeviceExtension;
  12249.  
  12250. PAGED_CODE();
  12251.  
  12252. + DeviceExtension = (PDEVICE_EXTENSION) Device->Context;
  12253. +
  12254. + if (DeviceExtension &&
  12255. + (DeviceExtension->Flags & DEV_CAP_PCI)) {
  12256. + return TRUE;
  12257. + }
  12258. +
  12259. KeInitializeEvent(&getDataContext.Event, SynchronizationEvent, FALSE);
  12260. getDataContext.Status = STATUS_NOT_FOUND;
  12261.  
  12262. @@ -1981,7 +2029,7 @@
  12263. FALSE,
  12264. NULL);
  12265.  
  12266. - status = getDataContext.Status;
  12267. + //status = getDataContext.Status;
  12268. }
  12269.  
  12270. return result;
  12271. @@ -2193,9 +2241,9 @@
  12272. RtlZeroMemory(objdata, sizeof(objdata));
  12273.  
  12274. objdata[0].dwDataType = OBJTYPE_INTDATA;
  12275. - objdata[0].uipDataValue = REGSPACE_PCICFG;
  12276. + objdata[0].dwDataValue = REGSPACE_PCICFG;
  12277. objdata[1].dwDataType = OBJTYPE_INTDATA;
  12278. - objdata[1].uipDataValue = (Enable ? CONNECT_HANDLER : DISCONNECT_HANDLER );
  12279. + objdata[1].dwDataValue = (Enable ? CONNECT_HANDLER : DISCONNECT_HANDLER );
  12280.  
  12281. status = AMLIEvalNameSpaceObject(
  12282. regMethod,
  12283. diff --strip-trailing-cr -ur ./driver/nt/rangesup.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/rangesup.c"
  12284. --- ./driver/nt/rangesup.c 2003-02-26 17:15:52.000000000 +0500
  12285. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/rangesup.c" 2022-04-04 01:40:00.000000000 +0500
  12286. @@ -2325,8 +2325,9 @@
  12287. //
  12288. // Do we errors?
  12289. //
  12290. - if (bugCheck) {
  12291.  
  12292. + if (0) { // BSOD 0xA5 (0x02, ...) workaround, ACPI vs E820 mem ranges conflict
  12293. + //if (bugCheck) {
  12294. ACPIPrint( (
  12295. ACPI_PRINT_CRITICAL,
  12296. "ACPI:\n"
  12297. diff --strip-trailing-cr -ur ./driver/nt/res_bios.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/res_bios.c"
  12298. --- ./driver/nt/res_bios.c 2003-02-26 17:15:52.000000000 +0500
  12299. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/res_bios.c" 2022-04-27 21:40:32.335937500 +0500
  12300. @@ -53,6 +53,7 @@
  12301. #pragma alloc_text(PAGE,PnpiUpdateResourceList)
  12302. #pragma alloc_text(PAGE,PnpBiosResourcesToNtResources)
  12303. #pragma alloc_text(PAGE,PnpIoResourceListToCmResourceList)
  12304. +#pragma alloc_text(PAGE,PnpDeviceBiosResourcesToNtResources)
  12305. #endif
  12306.  
  12307. @@ -85,11 +86,18 @@
  12308. ASSERT(Descriptor->u.BusNumber.Length > 0);
  12309. }
  12310. -VOID
  12311. -PnpiBiosAddressHandleGlobalFlags(
  12312. - IN PVOID Buffer,
  12313. - IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12314. - )
  12315. +//VOID
  12316. +//PnpiBiosAddressHandleGlobalFlags(
  12317. +// IN PVOID Buffer,
  12318. +// IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12319. +// )
  12320. +NTSTATUS
  12321. + PnpiBiosAddressHandleGlobalFlags(
  12322. + IN PVOID Buffer,
  12323. + IN PIO_RESOURCE_LIST Array[],
  12324. + IN ULONG ArrayIndex,
  12325. + IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12326. + )
  12327. /*++
  12328.  
  12329. Routine Descriptoin:
  12330. @@ -112,13 +120,15 @@
  12331. ULONG newValue;
  12332. ULONG oldValue;
  12333. ULONG bound;
  12334. + NTSTATUS status;
  12335. PAGED_CODE();
  12336.  
  12337. //
  12338. // If the resource is marked as being consumed only, then it is
  12339. // exclusive, otherwise, it is shared
  12340. //
  12341. - if (buffer->GFlag & PNP_ADDRESS_FLAG_CONSUMED_ONLY) {
  12342. + if ((AcpiOverrideAttributes & ACPI_OVERRIDE_DEVICE_EXCLUSIVE) ||
  12343. + buffer->GFlag & PNP_ADDRESS_FLAG_CONSUMED_ONLY) {
  12344.  
  12345. Descriptor->ShareDisposition = CmResourceShareDeviceExclusive;
  12346.  
  12347. @@ -192,6 +202,19 @@
  12348.  
  12349. }
  12350.  
  12351. + if (!(buffer->GFlag & PNP_ADDRESS_FLAG_CONSUMED_ONLY)) {
  12352. + status = PnpiUpdateResourceList( & (Array[ArrayIndex]), &Descriptor );
  12353. +
  12354. + if (!NT_SUCCESS(status)) {
  12355. + return status;
  12356. + }
  12357. +
  12358. + RtlZeroMemory(Descriptor, sizeof(IO_RESOURCE_DESCRIPTOR));
  12359. + Descriptor->Type = CmResourceTypeDevicePrivate;
  12360. + Descriptor->Flags = CM_RESOURCE_MEMORY_READ_ONLY;
  12361. + }
  12362. +
  12363. + return STATUS_SUCCESS;
  12364. }
  12365. VOID
  12366. @@ -633,7 +656,11 @@
  12367. //
  12368. // Handle global flags
  12369. //
  12370. - PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12371. + //PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12372. + status = PnpiBiosAddressHandleGlobalFlags(buffer, Array, ArrayIndex, rangeDescriptor);
  12373. + if (!NT_SUCCESS(status)) {
  12374. + return status;
  12375. + }
  12376. return STATUS_SUCCESS;
  12377. }
  12378. @@ -976,7 +1003,11 @@
  12379. //
  12380. // Handle global flags
  12381. //
  12382. - PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12383. + //PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12384. + status = PnpiBiosAddressHandleGlobalFlags(buffer, Array, ArrayIndex, rangeDescriptor);
  12385. + if (!NT_SUCCESS(status)) {
  12386. + return status;
  12387. + }
  12388. return STATUS_SUCCESS;
  12389. }
  12390. @@ -1164,7 +1195,8 @@
  12391. }
  12392.  
  12393.  
  12394. - if (length > MAXULONG) {
  12395. + if (length > MAXULONG &&
  12396. + (buffer->RFlag != PNP_ADDRESS_MEMORY_TYPE)) { // BSOD A5(0x14,...) workaround, Win7 fix
  12397.  
  12398. ACPIPrint( (
  12399. ACPI_PRINT_CRITICAL,
  12400. @@ -1172,7 +1204,7 @@
  12401. length
  12402. ) );
  12403.  
  12404. - if ((!(AcpiOverrideAttributes & ACPI_OVERRIDE_DELL_MAXULONG_BUGCHECK)) || (childMin < MAXULONG)) {
  12405. + if ((!(AcpiOverrideAttributes & ACPI_OVERRIDE_IGNORE_QWORD_LENGTH)) || (childMin < MAXULONG)) {
  12406. //
  12407. // We can go no further
  12408. //
  12409. @@ -1323,7 +1355,11 @@
  12410. //
  12411. // Handle global flags
  12412. //
  12413. - PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12414. + //PnpiBiosAddressHandleGlobalFlags( buffer, rangeDescriptor );
  12415. + status = PnpiBiosAddressHandleGlobalFlags(buffer, Array, ArrayIndex, rangeDescriptor);
  12416. + if (!NT_SUCCESS(status)) {
  12417. + return status;
  12418. + }
  12419. return STATUS_SUCCESS;
  12420. }
  12421. @@ -2911,7 +2947,112 @@
  12422.  
  12423. return STATUS_SUCCESS;
  12424. }
  12425. -
  12426. +
  12427. +#ifdef _X86_
  12428. +NTSTATUS __declspec(naked)
  12429. +PnpDeviceBiosResourcesToNtResources (
  12430. + IN PDEVICE_EXTENSION DeviceExtension,
  12431. + IN PUCHAR BiosData,
  12432. + IN ULONG Flags,
  12433. + OUT PIO_RESOURCE_REQUIREMENTS_LIST *List
  12434. + ) {
  12435. +__asm {
  12436. + push ebp
  12437. + mov ebp, esp
  12438. + push esi
  12439. + mov esi, [ebp+14h]
  12440. + push esi
  12441. + push dword ptr [ebp+10h]
  12442. + push dword ptr [ebp+0Ch]
  12443. + call PnpBiosResourcesToNtResources
  12444. + test eax, eax
  12445. + mov [ebp+0Ch], eax
  12446. + jl loc_1F482
  12447. + cmp dword ptr [esi], 0
  12448. + jz loc_1F482
  12449. + push ebx
  12450. + mov ebx, [ebp+8]
  12451. + push edi
  12452. + mov edi, offset AcpiDeviceTreeLock
  12453. + mov ecx, edi
  12454. + mov byte ptr [ebp+13h], 0
  12455. + call dword ptr [KfAcquireSpinLock]
  12456. + jmp short loc_1F421
  12457. +
  12458. +loc_1F40F:
  12459. + mov esi, [ebx+4]
  12460. + and esi, 20h
  12461. + xor ecx, ecx
  12462. + or ecx, esi
  12463. + jnz short loc_1F427
  12464. + mov ebx, [ebx+13Ch]
  12465. +
  12466. +loc_1F421:
  12467. + test ebx, ebx
  12468. + jnz short loc_1F40F
  12469. + jmp short loc_1F42B
  12470. +
  12471. +loc_1F427:
  12472. + mov byte ptr [ebp+13h], 1
  12473. +
  12474. +loc_1F42B:
  12475. + mov dl, al
  12476. + mov ecx, edi
  12477. + call dword ptr [KfReleaseSpinLock]
  12478. + cmp byte ptr [ebp+13h], 0
  12479. + pop edi
  12480. + pop ebx
  12481. + jz short loc_1F47F
  12482. + mov eax, [ebp+14h]
  12483. + mov eax, [eax]
  12484. + mov ecx, [eax+1Ch]
  12485. + add eax, 20h
  12486. + test ecx, ecx
  12487. + jbe short loc_1F47F
  12488. + mov esi, ecx
  12489. +
  12490. +loc_1F44E:
  12491. + lea ecx, [eax+8]
  12492. + mov eax, [eax+4]
  12493. + shl eax, 5
  12494. + add eax, ecx
  12495. + jmp short loc_1F478
  12496. +
  12497. +loc_1F45B:
  12498. + movzx edx, byte ptr [ecx+1]
  12499. + dec edx
  12500. + jz short loc_1F46B
  12501. + dec edx
  12502. + dec edx
  12503. + jz short loc_1F46B
  12504. + sub edx, 3
  12505. + jnz short loc_1F475
  12506. +
  12507. +loc_1F46B:
  12508. + cmp byte ptr [ecx+2], 3
  12509. + jnz short loc_1F475
  12510. + mov byte ptr [ecx+2], 1
  12511. +
  12512. +loc_1F475:
  12513. + add ecx, 20h
  12514. +
  12515. +loc_1F478:
  12516. + cmp ecx, eax
  12517. + jb short loc_1F45B
  12518. + dec esi
  12519. + jnz short loc_1F44E
  12520. +
  12521. +loc_1F47F:
  12522. + mov eax, [ebp+0Ch]
  12523. +
  12524. +loc_1F482:
  12525. + pop esi
  12526. + pop ebp
  12527. + retn 10h
  12528. +}
  12529. +}
  12530. +#endif
  12531. +
  12532. NTSTATUS
  12533. PnpIoResourceListToCmResourceList(
  12534. IN PIO_RESOURCE_REQUIREMENTS_LIST IoList,
  12535. diff --strip-trailing-cr -ur ./driver/nt/res_bios.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/res_bios.h"
  12536. --- ./driver/nt/res_bios.h 2003-02-26 17:15:52.000000000 +0500
  12537. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/res_bios.h" 2022-04-02 17:50:00.000000000 +0500
  12538. @@ -294,9 +294,16 @@
  12539. IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12540. );
  12541.  
  12542. - VOID
  12543. + /*VOID
  12544. + PnpiBiosAddressHandleGlobalFlags(
  12545. + IN PVOID Buffer,
  12546. + IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12547. + );*/
  12548. + NTSTATUS
  12549. PnpiBiosAddressHandleGlobalFlags(
  12550. IN PVOID Buffer,
  12551. + IN PIO_RESOURCE_LIST Array[],
  12552. + IN ULONG ArrayIndex,
  12553. IN PIO_RESOURCE_DESCRIPTOR Descriptor
  12554. );
  12555.  
  12556. @@ -417,7 +424,15 @@
  12557. PnpBiosResourcesToNtResources (
  12558. IN PUCHAR BiosData,
  12559. IN ULONG Flags,
  12560. - OUT PIO_RESOURCE_REQUIREMENTS_LIST *List
  12561. + OUT PIO_RESOURCE_REQUIREMENTS_LIST *List
  12562. + );
  12563. +
  12564. + NTSTATUS
  12565. + PnpDeviceBiosResourcesToNtResources (
  12566. + IN PDEVICE_EXTENSION DeviceExtension,
  12567. + IN PUCHAR BiosData,
  12568. + IN ULONG Flags,
  12569. + OUT PIO_RESOURCE_REQUIREMENTS_LIST *List
  12570. );
  12571.  
  12572. NTSTATUS
  12573. diff --strip-trailing-cr -ur ./driver/nt/root.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/root.c"
  12574. --- ./driver/nt/root.c 2003-02-26 17:15:52.000000000 +0500
  12575. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/root.c" 2022-04-03 20:12:30.000000000 +0500
  12576. @@ -142,8 +142,9 @@
  12577. --*/
  12578. {
  12579. PKEVENT event = (PKEVENT) Context;
  12580. -#if DBG
  12581. PDEVICE_EXTENSION deviceExtension = ACPIInternalGetDeviceExtension(DeviceObject);
  12582. +
  12583. +#if DBG
  12584. PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation( Irp );
  12585.  
  12586. if (deviceExtension != NULL) {
  12587. @@ -1031,6 +1032,8 @@
  12588. ACPIWmiUnRegisterLog(DeviceObject);
  12589. #endif // WMI_TRACING
  12590.  
  12591. + ACPIInitializeKernelTableHandler(0, DeviceObject->DriverObject);
  12592. +
  12593. //
  12594. // Delete the useless set of resources
  12595. //
  12596. diff --strip-trailing-cr -ur ./driver/nt/sources "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/sources"
  12597. --- ./driver/nt/sources 2003-02-26 17:15:52.000000000 +0500
  12598. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/sources" 2022-04-04 02:58:04.000000000 +0500
  12599. @@ -74,4 +74,7 @@
  12600. wake.c \
  12601. wmilog.c \
  12602. wmilog.mof \
  12603. - worker.c
  12604. + worker.c \
  12605. + arblib.c
  12606. +
  12607. +AMD64_SOURCES= amd64\amd64_helpers.asm
  12608. \ No newline at end of file
  12609. diff --strip-trailing-cr -ur ./driver/nt/thermal.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/thermal.c"
  12610. --- ./driver/nt/thermal.c 2003-02-26 17:15:52.000000000 +0500
  12611. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/thermal.c" 2022-04-04 04:02:02.000000000 +0500
  12612. @@ -1044,7 +1044,18 @@
  12613.  
  12614. // NOTE - Synchronize with thread getting this data
  12615. *InstanceLengthArray = sizeNeeded;
  12616. - RtlCopyMemory(wmiThermalInfo, thermalInfo, sizeNeeded);
  12617. + wmiThermalInfo->ThermalStamp = info->Info.ThermalStamp;
  12618. + wmiThermalInfo->ThermalConstant1 = info->Info.ThermalConstant1;
  12619. + wmiThermalInfo->ThermalConstant2 = info->Info.ThermalConstant2;
  12620. + wmiThermalInfo->Processors = 0;
  12621. + wmiThermalInfo->SamplingPeriod = info->Info.SamplingPeriod;
  12622. + wmiThermalInfo->CurrentTemperature = info->Info.CurrentTemperature;
  12623. + wmiThermalInfo->PassiveTripPoint = info->Info.PassiveTripPoint;
  12624. + wmiThermalInfo->CriticalTripPoint = info->Info.CriticalTripPoint;
  12625. + wmiThermalInfo->ActiveTripPointCount = info->Info.ActiveTripPointCount;
  12626. + RtlCopyMemory(&wmiThermalInfo->ActiveTripPoint,
  12627. + &thermalInfo->ActiveTripPoint,
  12628. + sizeof(wmiThermalInfo->ActiveTripPoint));
  12629. status = STATUS_SUCCESS;
  12630.  
  12631. } else {
  12632. @@ -1312,7 +1323,7 @@
  12633.  
  12634. ASSERT (Result->dwDataType == OBJTYPE_INTDATA);
  12635. Thrm = deviceExtension->Thermal.Info;
  12636. - Thrm->Info.CurrentTemperature = (ULONG)Result->uipDataValue;
  12637. + Thrm->Info.CurrentTemperature = (ULONG)Result->dwDataValue;
  12638. AMLIFreeDataBuffs (Result, 1);
  12639.  
  12640. ACPIThermalPrint( (
  12641. diff --strip-trailing-cr -ur ./driver/nt/wake.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/wake.c"
  12642. --- ./driver/nt/wake.c 2003-02-26 17:15:52.000000000 +0500
  12643. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/nt/wake.c" 2022-04-04 04:02:02.000000000 +0500
  12644. @@ -297,7 +297,7 @@
  12645. //
  12646. RtlZeroMemory( &pswData, sizeof(OBJDATA) );
  12647. pswData.dwDataType = OBJTYPE_INTDATA;
  12648. - pswData.uipDataValue = 0;
  12649. + pswData.dwDataValue = 0;
  12650.  
  12651. //
  12652. // Run the control method
  12653. @@ -648,7 +648,7 @@
  12654. //
  12655. RtlZeroMemory( &pswData, sizeof(OBJDATA) );
  12656. pswData.dwDataType = OBJTYPE_INTDATA;
  12657. - pswData.uipDataValue = (Enable ? 1 : 0);
  12658. + pswData.dwDataValue = (Enable ? 1 : 0);
  12659.  
  12660. //
  12661. // Run the control method
  12662. @@ -811,6 +811,11 @@
  12663. }
  12664.  
  12665. //
  12666. + // We can release the lock now
  12667. + //
  12668. + KeReleaseSpinLock( &AcpiPowerLock, oldIrql );
  12669. +
  12670. + //
  12671. // If we own the PCI PME pin for this device, the make sure to clear the
  12672. // status and either enable it --- we enable the PME pin after we have
  12673. // turned on the _PSW, and we disable the PME pin before we turn off
  12674. @@ -827,6 +832,11 @@
  12675. }
  12676.  
  12677. //
  12678. + // Acquire the spinlock
  12679. + //
  12680. + KeAcquireSpinLock( &AcpiPowerLock, &oldIrql );
  12681. +
  12682. + //
  12683. // Are the any items on the list?
  12684. //
  12685. if (!IsListEmpty( &(deviceExtension->PowerInfo.WakeSupportList) ) ) {
  12686. @@ -873,7 +883,7 @@
  12687.  
  12688. RtlZeroMemory( &pswData, sizeof(OBJDATA) );
  12689. pswData.dwDataType = OBJTYPE_INTDATA;
  12690. - pswData.uipDataValue = (nextContext->Enable ? 1 : 0);
  12691. + pswData.dwDataValue = (nextContext->Enable ? 1 : 0);
  12692.  
  12693. //
  12694. // If we own the PCI PME pin for this device, the make sure to clear the
  12695. diff --strip-trailing-cr -ur ./driver/shared/acpictl.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpictl.c"
  12696. --- ./driver/shared/acpictl.c 2003-02-26 17:15:52.000000000 +0500
  12697. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpictl.c" 2022-04-04 04:05:08.000000000 +0500
  12698. @@ -357,7 +357,7 @@
  12699.  
  12700. Argument->Type = ACPI_METHOD_ARGUMENT_INTEGER;
  12701. Argument->DataLength = sizeof(ULONG);
  12702. - Argument->Argument = (ULONG) ObjectData->uipDataValue;
  12703. + Argument->Argument = (ULONG) ObjectData->dwDataValue;
  12704.  
  12705. } else if (ObjectData->dwDataType == OBJTYPE_STRDATA ||
  12706. ObjectData->dwDataType == OBJTYPE_BUFFDATA) {
  12707. @@ -956,7 +956,7 @@
  12708. integerBuffer = (PACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER) inputBuffer;
  12709.  
  12710. argumentData->dwDataType = OBJTYPE_INTDATA;
  12711. - argumentData->uipDataValue = integerBuffer->IntegerArgument;
  12712. + argumentData->dwDataValue = integerBuffer->IntegerArgument;
  12713.  
  12714. } else {
  12715.  
  12716. @@ -1010,7 +1010,7 @@
  12717. if (methodArgument->Type == ACPI_METHOD_ARGUMENT_INTEGER) {
  12718.  
  12719. (argumentData[i]).dwDataType = OBJTYPE_INTDATA;
  12720. - (argumentData[i]).uipDataValue = methodArgument->Argument;
  12721. + (argumentData[i]).dwDataValue = methodArgument->Argument;
  12722.  
  12723. } else {
  12724.  
  12725. diff --strip-trailing-cr -ur ./driver/shared/acpiinit.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpiinit.c"
  12726. --- ./driver/shared/acpiinit.c 2003-02-26 17:15:52.000000000 +0500
  12727. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpiinit.c" 2022-04-04 00:03:48.000000000 +0500
  12728. @@ -54,7 +54,820 @@
  12729. //
  12730. ULONG AMLIMaxCTObjs;
  12731.  
  12732. -
  12733. +extern ULONG g_AmliHookEnabled;
  12734. +
  12735. +char SimulatorRegEntry[]="\\Registry\\Machine\\System\\CurrentControlSet\\Services\\ACPI\\Parameters\\Simulator\\Tables";
  12736. +char asmFormat1Name[] = "%08lx";
  12737. +
  12738. +
  12739. +#ifdef _X86_
  12740. +
  12741. +VOID __declspec(naked)
  12742. +ACPIRegReadEntireSimulatorAcpiTable() {
  12743. +_asm {
  12744. + push ebp
  12745. + mov ebp, esp
  12746. + sub esp, 2Ch
  12747. + mov eax, __security_cookie
  12748. + push ebx
  12749. + push esi
  12750. + mov esi, [ebp+8]
  12751. + push edi
  12752. + mov edi, [ebp+0Ch]
  12753. + push 53637041h
  12754. + mov ebx, 2000h
  12755. + mov [ebp-4], eax
  12756. + mov eax, [edi]
  12757. + push ebx
  12758. + push 1
  12759. + mov [ebp-2Ch], esi
  12760. + mov [ebp-28h], edi
  12761. + mov [ebp-1Ch], eax
  12762. + call dword ptr[ExAllocatePoolWithTag]
  12763. + test eax, eax
  12764. + mov [ebp-18h], eax
  12765. + jnz short loc_2C89C
  12766. + mov eax, 0C000009Ah
  12767. + jmp loc_2C9CA
  12768. +
  12769. +loc_2C89C:
  12770. + and dword ptr [ebp-24h], 0
  12771. + push 0
  12772. + lea eax, [ebp-10h]
  12773. + push offset asmFormat1Name
  12774. + push eax
  12775. + call sprintf
  12776. + add esp, 0Ch
  12777. + lea eax, [ebp-14h]
  12778. + push eax
  12779. + push dword ptr [ebp-18h]
  12780. + mov [ebp-14h], ebx
  12781. + push esi
  12782. + jmp loc_2C99C
  12783. +
  12784. +loc_2C8C3:
  12785. + cmp dword ptr [ebp-14h], 8
  12786. + jb loc_2C9B1
  12787. + and dword ptr [ebp-20h], 0
  12788. + cmp dword ptr [ebp-14h], 0
  12789. + jbe loc_2C974
  12790. +
  12791. +loc_2C8DB:
  12792. + mov ecx, [ebp-18h]
  12793. + mov eax, [ebp-20h]
  12794. + lea ebx, [eax+ecx]
  12795. + mov ecx, [ebx+4]
  12796. + test ecx, ecx
  12797. + jnz short loc_2C946
  12798. + mov eax, [ebx]
  12799. + mov esi, [ebp-1Ch]
  12800. + cmp eax, [esi+4]
  12801. + jz short loc_2C95E
  12802. + push 74706341h
  12803. + push eax
  12804. + push ecx
  12805. + call dword ptr[ExAllocatePoolWithTag]
  12806. + test eax, eax
  12807. + mov [ebp-1Ch], eax
  12808. + jz loc_2C9B8
  12809. + mov ecx, [ebx]
  12810. + mov edx, [esi+4]
  12811. + cmp ecx, edx
  12812. + jb short loc_2C918
  12813. + mov ecx, edx
  12814. +
  12815. +loc_2C918:
  12816. + mov esi, [edi]
  12817. + mov edx, ecx
  12818. + shr ecx, 2
  12819. + mov edi, eax
  12820. + rep movsd
  12821. + mov ecx, edx
  12822. + and ecx, 3
  12823. + rep movsb
  12824. + mov esi, [ebp-28h]
  12825. + mov ecx, [esi]
  12826. + test ecx, ecx
  12827. + jz short loc_2C93F
  12828. + push 0
  12829. + push ecx
  12830. + call dword ptr[ExFreePoolWithTag]
  12831. + mov eax, [ebp-1Ch]
  12832. +
  12833. +loc_2C93F:
  12834. + mov [esi], eax
  12835. + mov [ebp-1Ch], eax
  12836. + jmp short loc_2C95B
  12837. +
  12838. +loc_2C946:
  12839. + mov edi, [edi]
  12840. + add edi, [ebx]
  12841. + mov eax, ecx
  12842. + shr ecx, 2
  12843. + lea esi, [ebx+8]
  12844. + rep movsd
  12845. + mov ecx, eax
  12846. + and ecx, 3
  12847. + rep movsb
  12848. +
  12849. +loc_2C95B:
  12850. + mov edi, [ebp-28h]
  12851. +
  12852. +loc_2C95E:
  12853. + mov ecx, [ebp-20h]
  12854. + mov eax, [ebx+4]
  12855. + lea eax, [ecx+eax+8]
  12856. + cmp eax, [ebp-14h]
  12857. + mov [ebp-20h], eax
  12858. + jb loc_2C8DB
  12859. +
  12860. +loc_2C974:
  12861. + inc dword ptr [ebp-24h]
  12862. + push dword ptr [ebp-24h]
  12863. + lea eax, [ebp-10h]
  12864. + push offset asmFormat1Name
  12865. + push eax
  12866. + call sprintf
  12867. + add esp, 0Ch
  12868. + lea eax, [ebp-14h]
  12869. + push eax
  12870. + push dword ptr [ebp-18h]
  12871. + mov dword ptr [ebp-14h], 2000h
  12872. + push dword ptr [ebp-2Ch]
  12873. +
  12874. +loc_2C99C:
  12875. + lea eax, [ebp-10h]
  12876. + push eax
  12877. + call OSReadRegValue
  12878. + test eax, eax
  12879. + jge loc_2C8C3
  12880. + xor esi, esi
  12881. + jmp short loc_2C9BD
  12882. +
  12883. +loc_2C9B1:
  12884. + mov eax, 0C0000001h
  12885. + jmp short loc_2C9CA
  12886. +
  12887. +loc_2C9B8:
  12888. + mov esi, 0C000009Ah
  12889. +
  12890. +loc_2C9BD:
  12891. + push 0
  12892. + push dword ptr [ebp-18h]
  12893. + call dword ptr[ExFreePoolWithTag]
  12894. + mov eax, esi
  12895. +
  12896. +loc_2C9CA:
  12897. + mov ecx, [ebp-4]
  12898. + pop edi
  12899. + pop esi
  12900. + pop ebx
  12901. + call __security_check_cookie
  12902. + _emit 0xc9 ; "leave" opcode
  12903. + retn 8
  12904. +}
  12905. +}
  12906. +
  12907. +
  12908. +VOID __declspec(naked)
  12909. +ACPIRegGetTableFromSimulatorRegistryEntry() {
  12910. +_asm {
  12911. + push ebp
  12912. + mov ebp, esp
  12913. + sub esp, 10h
  12914. + mov eax, [ebp+8]
  12915. + mov eax, [eax]
  12916. + and dword ptr [ebp-0Ch], 0
  12917. + and dword ptr [ebp-8], 0
  12918. + push ebx
  12919. + push 53637041h
  12920. + push 6Ah
  12921. + push 1
  12922. + mov byte ptr [ebp-1], 0
  12923. + mov [ebp-10h], eax
  12924. + call dword ptr[ExAllocatePoolWithTag]
  12925. + mov ebx, eax
  12926. + test ebx, ebx
  12927. + jnz short loc_2CBD9
  12928. + xor al, al
  12929. + jmp loc_2CC86
  12930. +
  12931. +loc_2CBD9:
  12932. + push esi
  12933. + push edi
  12934. + push 1Ah
  12935. + pop ecx
  12936. + xor eax, eax
  12937. + mov edi, ebx
  12938. + rep stosd
  12939. + push 15h
  12940. + stosw
  12941. + pop ecx
  12942. + mov esi, offset SimulatorRegEntry
  12943. + mov edi, ebx
  12944. + rep movsd
  12945. + mov esi, [ebp-10h]
  12946. + push 4
  12947. + push esi
  12948. + lea eax, [ebx+55h]
  12949. + push eax
  12950. + mov byte ptr [ebx+54h], 5Ch
  12951. + call ACPIRegLocalCopyString
  12952. + push 6
  12953. + lea ecx, [esi+0Ah]
  12954. + mov byte ptr [eax], 5Ch
  12955. + push ecx
  12956. + inc eax
  12957. + push eax
  12958. + call ACPIRegLocalCopyString
  12959. + push 8
  12960. + lea ecx, [esi+10h]
  12961. + mov byte ptr [eax], 5Ch
  12962. + push ecx
  12963. + inc eax
  12964. + push eax
  12965. + call ACPIRegLocalCopyString
  12966. + mov byte ptr [eax], 0
  12967. + lea eax, [ebp-8]
  12968. + push eax
  12969. + xor edi, edi
  12970. + push edi
  12971. + push ebx
  12972. + call OSOpenHandle
  12973. + test eax, eax
  12974. + jl short loc_2CC5F
  12975. + push dword ptr [esi+18h]
  12976. + lea eax, [ebp-0Ch]
  12977. + push eax
  12978. + push dword ptr [ebp-8]
  12979. + call OSOpenLargestSubkey
  12980. + test eax, eax
  12981. + jl short loc_2CC5F
  12982. + push dword ptr [ebp+8]
  12983. + push dword ptr [ebp-0Ch]
  12984. + call ACPIRegReadEntireSimulatorAcpiTable
  12985. + test eax, eax
  12986. + jl short loc_2CC5F
  12987. + mov byte ptr [ebp-1], 1
  12988. +
  12989. +loc_2CC5F:
  12990. + push edi
  12991. + push ebx
  12992. + call dword ptr[ExFreePoolWithTag]
  12993. + cmp [ebp-8], edi
  12994. + jz short loc_2CC74
  12995. + push dword ptr [ebp-8]
  12996. + call OSCloseHandle
  12997. +
  12998. +loc_2CC74:
  12999. + cmp [ebp-0Ch], edi
  13000. + pop edi
  13001. + pop esi
  13002. + jz short loc_2CC83
  13003. + push dword ptr [ebp-0Ch]
  13004. + call OSCloseHandle
  13005. +
  13006. +loc_2CC83:
  13007. + mov al, [ebp-1]
  13008. +
  13009. +loc_2CC86:
  13010. + pop ebx
  13011. + _emit 0xc9 ; "leave" opcode
  13012. + retn 4
  13013. +}
  13014. +}
  13015. +
  13016. +
  13017. +VOID __declspec(naked)
  13018. +ACPIMapNamedTable() {
  13019. +_asm {
  13020. + push ebp
  13021. + mov ebp, esp
  13022. + sub esp, 28h
  13023. + mov edx, AcpiInformation
  13024. + xor eax, eax
  13025. + push esi
  13026. + mov [ebp-0Ch], eax
  13027. + mov ecx, [edx]
  13028. + cmp dword ptr [ecx], 54445358h
  13029. + mov ecx, [ecx+4]
  13030. + push edi
  13031. + push 24h
  13032. + mov byte ptr [ebp-3], 0
  13033. + mov byte ptr [ebp-4], 0
  13034. + mov byte ptr [ebp-2], 0
  13035. + mov [ebp-14h], eax
  13036. + mov [ebp-20h], eax
  13037. + pop esi
  13038. + jnz short loc_2C0A0
  13039. + cmp ecx, esi
  13040. + jnb short loc_2C095
  13041. + mov esi, ecx
  13042. +
  13043. +loc_2C095:
  13044. + sub ecx, esi
  13045. + shr ecx, 3
  13046. + mov byte ptr [ebp-2], 1
  13047. + jmp short loc_2C0AB
  13048. +
  13049. +loc_2C0A0:
  13050. + cmp ecx, esi
  13051. + jnb short loc_2C0A6
  13052. + mov esi, ecx
  13053. +
  13054. +loc_2C0A6:
  13055. + sub ecx, esi
  13056. + shr ecx, 2
  13057. +
  13058. +loc_2C0AB:
  13059. + cmp ecx, eax
  13060. + mov [ebp-8], ecx
  13061. + jnz short loc_2C0BC
  13062. + mov edi, 0C0140019h
  13063. + jmp loc_2C2F7
  13064. +
  13065. +loc_2C0BC:
  13066. + xor ecx, ecx
  13067. + cmp [ebp-8], eax
  13068. + push ebx
  13069. + mov [ebp-1Ch], ecx
  13070. + jbe loc_2C201
  13071. + mov dword ptr [ebp-18h], 24h
  13072. + jmp short loc_2C0DA
  13073. +
  13074. +loc_2C0D4:
  13075. + mov edx, AcpiInformation
  13076. +
  13077. +loc_2C0DA:
  13078. + cmp byte ptr [ebp-2], 0
  13079. + mov eax, [edx]
  13080. + jz short loc_2C0EF
  13081. + mov ebx, [eax+ecx*8+24h]
  13082. + mov eax, [eax+ecx*8+28h]
  13083. + mov [ebp-24h], eax
  13084. + jmp short loc_2C0F9
  13085. +
  13086. +loc_2C0EF:
  13087. + mov ecx, [ebp-18h]
  13088. + mov ebx, [ecx+eax]
  13089. + and dword ptr [ebp-24h], 0
  13090. +
  13091. +loc_2C0F9:
  13092. + push 0
  13093. + push 24h
  13094. + push dword ptr [ebp-24h]
  13095. + push ebx
  13096. + call dword ptr[MmMapIoSpace]
  13097. + test eax, eax
  13098. + mov [ebp-0Ch], eax
  13099. + jz loc_2C1E3
  13100. + mov ecx, [ebp+8]
  13101. + cmp [eax], ecx
  13102. + jnz short loc_2C195
  13103. + mov edi, [ebp+0Ch]
  13104. + test edi, edi
  13105. + mov byte ptr [ebp-1], 1
  13106. + jz short loc_2C156
  13107. + lea esi, [eax+0Ah]
  13108. +
  13109. +loc_2C127:
  13110. + mov dl, [edi]
  13111. + mov cl, dl
  13112. + cmp dl, [esi]
  13113. + jnz short loc_2C149
  13114. + test cl, cl
  13115. + jz short loc_2C145
  13116. + mov dl, [edi+1]
  13117. + mov cl, dl
  13118. + cmp dl, [esi+1]
  13119. + jnz short loc_2C149
  13120. + inc edi
  13121. + inc edi
  13122. + inc esi
  13123. + inc esi
  13124. + test cl, cl
  13125. + jnz short loc_2C127
  13126. +
  13127. +loc_2C145:
  13128. + xor ecx, ecx
  13129. + jmp short loc_2C14E
  13130. +
  13131. +loc_2C149:
  13132. + sbb ecx, ecx
  13133. + sbb ecx, 0FFFFFFFFh
  13134. +
  13135. +loc_2C14E:
  13136. + test ecx, ecx
  13137. + jz short loc_2C156
  13138. + mov byte ptr [ebp-1], 0
  13139. +
  13140. +loc_2C156:
  13141. + mov edi, [ebp+10h]
  13142. + test edi, edi
  13143. + jz short loc_2C18F
  13144. + lea esi, [eax+10h]
  13145. +
  13146. +loc_2C160:
  13147. + mov dl, [edi]
  13148. + mov cl, dl
  13149. + cmp dl, [esi]
  13150. + jnz short loc_2C182
  13151. + test cl, cl
  13152. + jz short loc_2C17E
  13153. + mov dl, [edi+1]
  13154. + mov cl, dl
  13155. + cmp dl, [esi+1]
  13156. + jnz short loc_2C182
  13157. + inc edi
  13158. + inc edi
  13159. + inc esi
  13160. + inc esi
  13161. + test cl, cl
  13162. + jnz short loc_2C160
  13163. +
  13164. +loc_2C17E:
  13165. + xor ecx, ecx
  13166. + jmp short loc_2C187
  13167. +
  13168. +loc_2C182:
  13169. + sbb ecx, ecx
  13170. + sbb ecx, 0FFFFFFFFh
  13171. +
  13172. +loc_2C187:
  13173. + test ecx, ecx
  13174. + jz short loc_2C18F
  13175. + mov byte ptr [ebp-1], 0
  13176. +
  13177. +loc_2C18F:
  13178. + cmp byte ptr [ebp-1], 0
  13179. + jnz short loc_2C1BC
  13180. +
  13181. +loc_2C195:
  13182. + push 24h
  13183. + push eax
  13184. + call dword ptr[MmUnmapIoSpace]
  13185. + mov ecx, [ebp-1Ch]
  13186. + add dword ptr [ebp-18h], 4
  13187. + xor eax, eax
  13188. + inc ecx
  13189. + cmp ecx, [ebp-8]
  13190. + mov [ebp-10h], eax
  13191. + mov [ebp-0Ch], eax
  13192. + mov [ebp-1Ch], ecx
  13193. + jb loc_2C0D4
  13194. + jmp short loc_2C20B
  13195. +
  13196. +loc_2C1BC:
  13197. + mov esi, [eax+4]
  13198. + push 24h
  13199. + push eax
  13200. + mov [ebp-14h], esi
  13201. + call dword ptr[MmUnmapIoSpace]
  13202. + and dword ptr [ebp-10h], 0
  13203. + push 0
  13204. + push esi
  13205. + push dword ptr [ebp-24h]
  13206. + push ebx
  13207. + call dword ptr[MmMapIoSpace]
  13208. + test eax, eax
  13209. + mov [ebp-0Ch], eax
  13210. + jnz short loc_2C1ED
  13211. +
  13212. +loc_2C1E3:
  13213. + mov edi, 0C0140019h
  13214. + jmp loc_2C2C4
  13215. +
  13216. +loc_2C1ED:
  13217. + push 1
  13218. + lea eax, [ebp-0Ch]
  13219. + push eax
  13220. + call ACPIRegReadAMLRegistryEntry
  13221. + mov [ebp-3], al
  13222. + mov eax, [ebp-0Ch]
  13223. + mov [ebp-10h], eax
  13224. +
  13225. +loc_2C201:
  13226. + cmp dword ptr [ebp-10h], 0
  13227. + jnz loc_2C294
  13228. +
  13229. +loc_2C20B:
  13230. + xor ebx, ebx
  13231. + cmp g_AmliHookEnabled, ebx
  13232. + jz short loc_2C28A
  13233. + push 74706341h
  13234. + push 24h
  13235. + pop esi
  13236. + push esi
  13237. + push ebx
  13238. + mov [ebp-8], ebx
  13239. + call dword ptr[ExAllocatePoolWithTag]
  13240. + mov edi, eax
  13241. + cmp edi, ebx
  13242. + mov [ebp-8], edi
  13243. + jz short loc_2C287
  13244. + xor eax, eax
  13245. + push 9
  13246. + pop ecx
  13247. + rep stosd
  13248. + mov eax, [ebp-8]
  13249. + mov ecx, [ebp+8]
  13250. + mov [eax], ecx
  13251. + mov eax, [ebp-8]
  13252. + mov [eax+4], esi
  13253. + mov eax, [ebp+0Ch]
  13254. + cmp eax, ebx
  13255. + jz short loc_2C255
  13256. + mov eax, [eax]
  13257. + mov ecx, [ebp-8]
  13258. + mov [ecx+0Ah], eax
  13259. +
  13260. +loc_2C255:
  13261. + mov eax, [ebp+10h]
  13262. + cmp eax, ebx
  13263. + jz short loc_2C26D
  13264. + mov ecx, [eax]
  13265. + mov edx, [ebp-8]
  13266. + mov [edx+10h], ecx
  13267. + mov eax, [eax+4]
  13268. + mov ecx, [ebp-8]
  13269. + mov [ecx+14h], eax
  13270. +
  13271. +loc_2C26D:
  13272. + lea eax, [ebp-8]
  13273. + push eax
  13274. + call ACPIRegGetTableFromSimulatorRegistryEntry
  13275. + test al, al
  13276. + mov [ebp-4], al
  13277. + jz short loc_2C287
  13278. + mov eax, [ebp-8]
  13279. + cmp eax, ebx
  13280. + mov [ebp-10h], eax
  13281. + jnz short loc_2C291
  13282. +
  13283. +loc_2C287:
  13284. + mov eax, [ebp-0Ch]
  13285. +
  13286. +loc_2C28A:
  13287. + mov edi, 0C0000225h
  13288. + jmp short loc_2C2C4
  13289. +
  13290. +loc_2C291:
  13291. + mov eax, [ebp-0Ch]
  13292. +
  13293. +loc_2C294:
  13294. + mov esi, [ebp-10h]
  13295. + mov ecx, [esi+4]
  13296. + mov edx, [ebp+18h]
  13297. + cmp [edx], ecx
  13298. + mov [ebp-14h], ecx
  13299. + jnb short loc_2C2AB
  13300. + mov edi, 0C0000023h
  13301. + jmp short loc_2C2C2
  13302. +
  13303. +loc_2C2AB:
  13304. + mov edi, [ebp+14h]
  13305. + mov ebx, ecx
  13306. + shr ecx, 2
  13307. + rep movsd
  13308. + mov ecx, ebx
  13309. + and ecx, 3
  13310. + rep movsb
  13311. + mov ecx, [ebp-14h]
  13312. + mov edi, [ebp-20h]
  13313. +
  13314. +loc_2C2C2:
  13315. + mov [edx], ecx
  13316. +
  13317. +loc_2C2C4:
  13318. + mov esi, dword ptr[ExFreePoolWithTag]
  13319. + xor ebx, ebx
  13320. + cmp eax, ebx
  13321. + jz short loc_2C2E5
  13322. + cmp [ebp-3], bl
  13323. + jz short loc_2C2DB
  13324. + push ebx
  13325. + push eax
  13326. + call esi
  13327. + jmp short loc_2C2E5
  13328. +
  13329. +loc_2C2DB:
  13330. + push dword ptr [ebp-14h]
  13331. + push eax
  13332. + call dword ptr[MmUnmapIoSpace]
  13333. +
  13334. +loc_2C2E5:
  13335. + cmp byte ptr [ebp-4], 0
  13336. + jz short loc_2C2F6
  13337. + cmp [ebp-10h], ebx
  13338. + jz short loc_2C2F6
  13339. + push ebx
  13340. + push dword ptr [ebp-10h]
  13341. + call esi
  13342. +
  13343. +loc_2C2F6:
  13344. + pop ebx
  13345. +
  13346. +loc_2C2F7:
  13347. + mov eax, edi
  13348. + pop edi
  13349. + pop esi
  13350. + _emit 0xc9 ; "leave" opcode
  13351. + retn 14h
  13352. +}
  13353. +}
  13354. +
  13355. +
  13356. +VOID __declspec(naked)
  13357. +ACPIEnumerateTables() {
  13358. +_asm {
  13359. + push ebp
  13360. + mov ebp, esp
  13361. + sub esp, 0Ch
  13362. + mov eax, AcpiInformation
  13363. + mov eax, [eax]
  13364. + and dword ptr [ebp-0Ch], 0
  13365. + and dword ptr [ebp-8], 0
  13366. + cmp dword ptr [eax], 54445358h
  13367. + mov eax, [eax+4]
  13368. + push ebx
  13369. + push esi
  13370. + push edi
  13371. + push 24h
  13372. + mov byte ptr [ebp-1], 0
  13373. + pop ecx
  13374. + jnz short loc_2C341
  13375. + cmp eax, ecx
  13376. + jnb short loc_2C336
  13377. + mov ecx, eax
  13378. +
  13379. +loc_2C336:
  13380. + sub eax, ecx
  13381. + shr eax, 3
  13382. + mov byte ptr [ebp-1], 1
  13383. + jmp short loc_2C34C
  13384. +
  13385. +loc_2C341:
  13386. + cmp eax, ecx
  13387. + jnb short loc_2C347
  13388. + mov ecx, eax
  13389. +
  13390. +loc_2C347:
  13391. + sub eax, ecx
  13392. + shr eax, 2
  13393. +
  13394. +loc_2C34C:
  13395. + mov ebx, eax
  13396. + test ebx, ebx
  13397. + jz loc_2C3EE
  13398. + mov ecx, [ebp+0Ch]
  13399. + shl eax, 2
  13400. + test ecx, ecx
  13401. + mov [ebp-0Ch], eax
  13402. + jz loc_2C3F7
  13403. + mov ecx, [ecx]
  13404. + cmp ecx, eax
  13405. + jnb short loc_2C379
  13406. + mov dword ptr [ebp-8], 0C0000023h
  13407. + jmp loc_2C3FE
  13408. +
  13409. +loc_2C379:
  13410. + mov esi, [ebp+8]
  13411. + mov edx, ecx
  13412. + shr ecx, 2
  13413. + xor eax, eax
  13414. + mov edi, esi
  13415. + rep stosd
  13416. + mov ecx, edx
  13417. + and ecx, 3
  13418. + rep stosb
  13419. + xor edi, edi
  13420. + test ebx, ebx
  13421. + jbe short loc_2C3FE
  13422. + mov dword ptr [ebp+8], 24h
  13423. + sub [ebp+8], esi
  13424. +
  13425. +loc_2C39E:
  13426. + cmp byte ptr [ebp-1], 0
  13427. + jz short loc_2C3B5
  13428. + mov eax, AcpiInformation
  13429. + mov ecx, [eax]
  13430. + mov eax, [ecx+edi*8+24h]
  13431. + mov ecx, [ecx+edi*8+28h]
  13432. + jmp short loc_2C3C7
  13433. +
  13434. +loc_2C3B5:
  13435. + mov eax, [ebp+8]
  13436. + mov ecx, AcpiInformation
  13437. + mov ecx, [ecx]
  13438. + add eax, esi
  13439. + mov eax, [eax+ecx]
  13440. + xor ecx, ecx
  13441. +
  13442. +loc_2C3C7:
  13443. + push 0
  13444. + push 24h
  13445. + push ecx
  13446. + push eax
  13447. + call dword ptr[MmMapIoSpace]
  13448. + test eax, eax
  13449. + jz short loc_2C3EE
  13450. + mov ecx, [eax]
  13451. + push 24h
  13452. + push eax
  13453. + mov [esi], ecx
  13454. + call dword ptr[MmUnmapIoSpace]
  13455. + inc edi
  13456. + add esi, 4
  13457. + cmp edi, ebx
  13458. + jb short loc_2C39E
  13459. + jmp short loc_2C3FE
  13460. +
  13461. +loc_2C3EE:
  13462. + mov dword ptr [ebp-8], 0C0140019h
  13463. + jmp short loc_2C3FE
  13464. +
  13465. +loc_2C3F7:
  13466. + mov dword ptr [ebp-8], 0C000000Dh
  13467. +
  13468. +loc_2C3FE:
  13469. + mov eax, [ebp-0Ch]
  13470. + mov ecx, [ebp+0Ch]
  13471. + pop edi
  13472. + pop esi
  13473. + mov [ecx], eax
  13474. + mov eax, [ebp-8]
  13475. + pop ebx
  13476. + _emit 0xc9 ; "leave" opcode
  13477. + retn 8
  13478. +}
  13479. +}
  13480. +
  13481. +
  13482. +VOID __declspec(naked)
  13483. +ACPIEnumMapTableHandler() {
  13484. +_asm {
  13485. + push ebp
  13486. + mov ebp, esp
  13487. + mov eax, [ebp+8]
  13488. + mov ecx, [eax+4]
  13489. + xor edx, edx
  13490. + sub ecx, edx
  13491. + jz short loc_2C445
  13492. + dec ecx
  13493. + jz short loc_2C431
  13494. + mov eax, 0C0000002h
  13495. + pop ebp
  13496. + retn
  13497. +
  13498. +loc_2C431:
  13499. + lea ecx, [eax+0Ch]
  13500. + push ecx
  13501. + lea ecx, [eax+10h]
  13502. + push ecx
  13503. + push edx
  13504. + push edx
  13505. + push dword ptr [eax+8]
  13506. + call ACPIMapNamedTable
  13507. + pop ebp
  13508. + retn
  13509. +
  13510. +loc_2C445:
  13511. + lea ecx, [eax+0Ch]
  13512. + push ecx
  13513. + add eax, 10h
  13514. + push eax
  13515. + call ACPIEnumerateTables
  13516. + pop ebp
  13517. + retn
  13518. +}
  13519. +}
  13520. +
  13521. +
  13522. +VOID __declspec(naked)
  13523. +ACPIInitializeKernelTableHandler(BOOLEAN mode, PDRIVER_OBJECT DrvObj) {
  13524. +_asm {
  13525. + push ebp
  13526. + mov ebp, esp
  13527. + sub esp, 10h
  13528. + mov al, [ebp+8]
  13529. + mov [ebp-0Ch], al
  13530. + mov eax, [ebp+0Ch]
  13531. + mov [ebp-4], eax
  13532. + push 010h
  13533. + lea eax, [ebp-10h]
  13534. + push eax
  13535. + push 04Bh
  13536. + mov dword ptr [ebp-10h], 'ACPI'
  13537. + mov dword ptr [ebp-8], offset ACPIEnumMapTableHandler
  13538. + call DWORD PTR [ZwSetSystemInformation]
  13539. + _emit 0xc9 ; "leave" opcode
  13540. + retn 8
  13541. +}
  13542. +}
  13543. +
  13544. +#endif // _X86_
  13545. +
  13546. +
  13547. BOOLEAN
  13548. ACPIInitialize(
  13549. PVOID Context
  13550. @@ -299,6 +1112,7 @@
  13551.  
  13552. }
  13553.  
  13554. + ACPIInitializeKernelTableHandler(TRUE, ((PDEVICE_OBJECT)Context)->DriverObject);
  13555. return (TRUE);
  13556. }
  13557. @@ -677,4 +1491,3 @@
  13558.  
  13559. return (pblk);
  13560. }
  13561. -
  13562. diff --strip-trailing-cr -ur ./driver/shared/acpiinit.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpiinit.h"
  13563. --- ./driver/shared/acpiinit.h 2003-02-26 17:15:52.000000000 +0500
  13564. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpiinit.h" 2022-04-02 19:19:42.000000000 +0500
  13565. @@ -55,4 +55,9 @@
  13566. IN UCHAR Processor
  13567. );
  13568.  
  13569. + VOID
  13570. + ACPIInitializeKernelTableHandler(
  13571. + IN BOOLEAN mode,
  13572. + IN PDRIVER_OBJECT DrvObj
  13573. + );
  13574. #endif
  13575. diff --strip-trailing-cr -ur ./driver/shared/acpioprg.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpioprg.c"
  13576. --- ./driver/shared/acpioprg.c 2003-02-26 17:15:52.000000000 +0500
  13577. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpioprg.c" 2022-04-06 23:35:48.739257800 +0500
  13578. @@ -119,6 +119,10 @@
  13579.  
  13580. HostDevice = NSGETPARENT(pnsOpRegion);
  13581.  
  13582. + while (HostDevice && NSGETOBJTYPE(HostDevice) == OBJTYPE_METHOD) {
  13583. + HostDevice = NSGETPARENT(HostDevice);
  13584. + }
  13585. +
  13586. ACPIPrint( (
  13587. ACPI_PRINT_IO,
  13588. "OpRegion Access on region %x device %x\n",
  13589. @@ -298,9 +302,9 @@
  13590. //
  13591. RtlZeroMemory( regArgs, sizeof(OBJDATA) * 2 );
  13592. regArgs[0].dwDataType = OBJTYPE_INTDATA;
  13593. - regArgs[0].uipDataValue = RegionSpace;
  13594. + regArgs[0].dwDataValue = RegionSpace;
  13595. regArgs[1].dwDataType = OBJTYPE_INTDATA;
  13596. - regArgs[1].uipDataValue = 1;
  13597. + regArgs[1].dwDataValue = 1;
  13598.  
  13599. //
  13600. // Eval the request. We can do this asynchronously since we don't actually
  13601. @@ -357,9 +361,9 @@
  13602. //
  13603. RtlZeroMemory( regArgs, sizeof(OBJDATA) * 2 );
  13604. regArgs[0].dwDataType = OBJTYPE_INTDATA;
  13605. - regArgs[0].uipDataValue = HandlerNode->RegionSpace;
  13606. + regArgs[0].dwDataValue = HandlerNode->RegionSpace;
  13607. regArgs[1].dwDataType = OBJTYPE_INTDATA;
  13608. - regArgs[1].uipDataValue = 0;
  13609. + regArgs[1].dwDataValue = 0;
  13610.  
  13611. //
  13612. // Eval the request. We don't care what it returns, but we must do
  13613. diff --strip-trailing-cr -ur ./driver/shared/acpisi.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpisi.c"
  13614. --- ./driver/shared/acpisi.c 2003-02-26 17:15:52.000000000 +0500
  13615. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/acpisi.c" 2022-04-04 04:05:08.000000000 +0500
  13616. @@ -41,7 +41,7 @@
  13617. ) );
  13618.  
  13619. Arg0.dwfData = 0;
  13620. - Arg0.uipDataValue = Value;
  13621. + Arg0.dwDataValue = Value;
  13622. Arg0.dwDataType = OBJTYPE_INTDATA;
  13623. Arg0.dwDataLen = 0;
  13624. Arg0.pbDataBuff = NULL;
  13625. @@ -60,7 +60,7 @@
  13626. ) );
  13627.  
  13628. Arg0.dwfData = 0;
  13629. - Arg0.uipDataValue = Value;
  13630. + Arg0.dwDataValue = Value;
  13631. Arg0.dwDataType = OBJTYPE_INTDATA;
  13632. Arg0.dwDataLen = 0;
  13633. Arg0.pbDataBuff = NULL;
  13634. diff --strip-trailing-cr -ur ./driver/shared/loaddsdt.c "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/loaddsdt.c"
  13635. --- ./driver/shared/loaddsdt.c 2003-02-26 17:15:52.000000000 +0500
  13636. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/loaddsdt.c" 2022-04-02 20:10:24.000000000 +0500
  13637. @@ -131,8 +131,13 @@
  13638. rsdtPointer
  13639. ) );
  13640. ACPIBreakPoint();
  13641. - goto RsdtDone;
  13642.  
  13643. + //
  13644. + // Give back a PTE now that we're done with the rsdtPointer.
  13645. + //
  13646. + MmUnmapIoSpace(rsdtPointer, sizeof(DESCRIPTION_HEADER));
  13647. +
  13648. + goto RsdtDone;
  13649. }
  13650.  
  13651. //
  13652. @@ -152,17 +157,17 @@
  13653. //
  13654. // did we find the right rsdt buffer?
  13655. //
  13656. - if (rsdtBuffer == NULL) {
  13657. + //if (rsdtBuffer == NULL) {
  13658.  
  13659. - ACPIPrint( (
  13660. - ACPI_PRINT_CRITICAL,
  13661. - "ACPILoadFindRsdt: Cannot Map RSDT Pointer 0x%08lx\n",
  13662. - rsdpMulti->RsdtAddress.LowPart
  13663. - ) );
  13664. - ACPIBreakPoint();
  13665. - goto RsdtDone;
  13666. + // ACPIPrint( (
  13667. + // ACPI_PRINT_CRITICAL,
  13668. + // "ACPILoadFindRsdt: Cannot Map RSDT Pointer 0x%08lx\n",
  13669. + // rsdpMulti->RsdtAddress.LowPart
  13670. + // ) );
  13671. + // ACPIBreakPoint();
  13672. + // goto RsdtDone;
  13673.  
  13674. - }
  13675. + //}
  13676.  
  13677. RsdtDone:
  13678. //
  13679. Only in c:\ACPI\ACPI_W2003\Base\busdrv\acpi/driver/shared: obj
  13680. diff --strip-trailing-cr -ur ./driver/shared/pch.h "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/pch.h"
  13681. --- ./driver/shared/pch.h 2003-02-26 17:15:52.000000000 +0500
  13682. +++ "c:\\ACPI\\ACPI_W2003\\Base\\busdrv\\acpi/driver/shared/pch.h" 2022-04-04 00:11:14.000000000 +0500
  13683. @@ -57,6 +57,7 @@
  13684. //
  13685. // These are the global include files for this project
  13686. //
  13687. +#include "arblib.h"
  13688. #include "acpitabl.h"
  13689. #include "amli.h"
  13690. #include "aml.h"
  13691.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement