Changeset 108560 in vbox
- Timestamp:
- Mar 14, 2025 11:57:02 AM (5 weeks ago)
- svn:sync-xref-src-repo-rev:
- 167959
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/src-client/SystemTableBuilder.cpp
r108558 r108560 1216 1216 AssertRCReturn(vrc, vrc); 1217 1217 1218 #if 1 /* Works fine with Linux, doesn't with Windows (talk about "standards"). */1218 #if 0 /* Works fine with Linux (also older ones), doesn't with Windows (talk about "standards"). */ 1219 1219 /* Construct the _AEI containing the GPIO configuration. */ 1220 1220 RTAcpiTblNameAppend(m_hAcpiDsdt, "_AEI"); … … 1273 1273 1274 1274 return RTAcpiTblDeviceFinalize(m_hAcpiDsdt); 1275 #else /* Doesn't work currently, neither Linux nor Windows... */1275 #else /* Works on new Linux guests but not Windows so far... */ 1276 1276 /* Use the approach from https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/acpi-button-device . */ 1277 1278 /* Device specific method. */ 1279 RTAcpiTblMethodStart(m_hAcpiDsdt, "_DSM", 4, RTACPI_METHOD_F_SERIALIZED, 0 /*uSyncLvl*/); 1280 1281 RTAcpiTblIfStart(m_hAcpiDsdt); 1282 1283 /* Predicate (LEqual(Arg0, ToUUID("4f248f40-d5e2-499f-834c-27758ea1cd3f")))*/ 1284 RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual); 1285 RTAcpiTblArgOpAppend(m_hAcpiDsdt, 0); 1286 RTAcpiTblUuidAppendFromStr(m_hAcpiDsdt, "4f248f40-d5e2-499f-834c-27758ea1cd3f"); 1287 1288 /* Standard _DSM query function. */ 1289 RTAcpiTblIfStart(m_hAcpiDsdt); 1290 1291 /* LEqual(Arg2, Zero). */ 1292 RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual); 1293 RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2); 1294 RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); 1295 1296 RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return); 1297 uint8_t bBuf = 0x03; 1298 RTAcpiTblBufferAppend(m_hAcpiDsdt, &bBuf, sizeof(bBuf)); 1299 1300 RTAcpiTblIfFinalize(m_hAcpiDsdt); 1301 1302 /* Mark the pin for the power button as ActiveHigh. */ 1303 RTAcpiTblIfStart(m_hAcpiDsdt); 1304 1305 /* LEqual(Arg2, One). */ 1306 RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual); 1307 RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2); 1308 RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1); 1309 1310 RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return); 1311 RTAcpiTblPackageStart(m_hAcpiDsdt, 2 /*cElements*/); 1312 RTAcpiTblIntegerAppend(m_hAcpiDsdt, u16PinShutdown); 1313 RTAcpiTblIntegerAppend(m_hAcpiDsdt, u16PinSuspend); 1314 RTAcpiTblPackageFinalize(m_hAcpiDsdt); 1315 1316 RTAcpiTblIfFinalize(m_hAcpiDsdt); 1317 1318 /* Return Unknown function. */ 1319 uint8_t bUnkFunc = 0x00; 1320 RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return); 1321 RTAcpiTblBufferAppend(m_hAcpiDsdt, &bUnkFunc, sizeof(bUnkFunc)); 1322 1323 RTAcpiTblIfFinalize(m_hAcpiDsdt); 1324 1325 /* Return Unknown function. */ 1326 bUnkFunc = 0x00; 1327 RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return); 1328 RTAcpiTblBufferAppend(m_hAcpiDsdt, &bUnkFunc, sizeof(bUnkFunc)); 1329 1330 RTAcpiTblMethodFinalize(m_hAcpiDsdt); 1331 1277 1332 RTAcpiTblDeviceFinalize(m_hAcpiDsdt); /* Finish the GPI0 GPIO device. */ 1278 1333 … … 1284 1339 RTAcpiTblNameAppend(m_hAcpiDsdt, "_UID"); 1285 1340 RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); 1341 1342 RTAcpiTblMethodStart(m_hAcpiDsdt, "_STA", 0, RTACPI_METHOD_F_NOT_SERIALIZED, 0 /*uSyncLvl*/); 1343 RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return); 1344 RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0x0f); 1345 RTAcpiTblMethodFinalize(m_hAcpiDsdt); 1286 1346 1287 1347 /* Build the resource template. */ 1288 1348 RTAcpiTblNameAppend(m_hAcpiDsdt, "_CRS"); 1289 1349 RTAcpiResourceReset(m_hAcpiRes); 1290 vrc = RTAcpiResourceAddGpioInt(m_hAcpiRes, kAcpiResGpioMod_ Level, kAcpiResGpioPol_ActiveBoth, kAcpiResGpioShr_Exclusive,1291 kAcpiResGpioPpi_PullDown, 0 /*u16DebounceWait*/, " GPI0",1350 vrc = RTAcpiResourceAddGpioInt(m_hAcpiRes, kAcpiResGpioMod_Edge, kAcpiResGpioPol_ActiveBoth, kAcpiResGpioShr_Exclusive, 1351 kAcpiResGpioPpi_PullDown, 0 /*u16DebounceWait*/, "\\_SB.GPI0", 1292 1352 &u16PinShutdown, 1 /* cPins */); 1293 1353 if (RT_SUCCESS(vrc)) 1294 vrc = RTAcpiResourceAddGpioInt(m_hAcpiRes, kAcpiResGpioMod_ Level, kAcpiResGpioPol_ActiveBoth, kAcpiResGpioShr_Exclusive,1295 kAcpiResGpioPpi_PullDown, 0 /*u16DebounceWait*/, " GPI0",1354 vrc = RTAcpiResourceAddGpioInt(m_hAcpiRes, kAcpiResGpioMod_Edge, kAcpiResGpioPol_ActiveBoth, kAcpiResGpioShr_Exclusive, 1355 kAcpiResGpioPpi_PullDown, 0 /*u16DebounceWait*/, "\\_SB.GPI0", 1296 1356 &u16PinSuspend, 1 /* cPins */); 1297 1357 if (RT_SUCCESS(vrc))
Note:
See TracChangeset
for help on using the changeset viewer.