Mov AX, 0xDEAD Posted July 28, 2022 Author Posted July 28, 2022 @Damnation Look for dsdt table, processor definition has dedicated AML opcode, acpi driver then call internal OSNotifyCreateProcessor() to inform Windows about cpu and his name
Damnation Posted July 28, 2022 Posted July 28, 2022 @Mov AX, 0xDEAD Here are my DSDT and SSDT tables, both original non-working and modded working. CPU Definition is in SSDT2 as part of Device PLTF. I don't see any definition in DSDT. B550SteelLegendCPUSSDT.7z.zip
Mov AX, 0xDEAD Posted July 29, 2022 Author Posted July 29, 2022 @Damnation Unmodded ssdt2.dsl has Processor definitions for 32 CPUs Full acpi log example: Quote f6d4515f: Method(_STA,0x0) f6d45175: } f6d45175: } f6d45175: Scope(_PR_) f6d4517c: { f6d4517c: Processor(PR00,0x1,0x1810,0x6) OSNotifyCreateProcessor: Processor Object #1: 85129efc 851222B8 GenuineIntel - x86 Family 6 Model 167- 0 ACPIBuildProcessorExtension: = 00000000 OSNotifyCreate: 85129EFC (PR00) = 00000103 Short log example:: Quote OSNotifyCreateProcessor: Processor Object #1: 97f1de74 97F6F3E0 GenuineIntel - x86 Family 6 Model 158- 0 ACPIBuildProcessorExtension: = 00000000 OSNotifyCreate: 97F1DE74 (PR00) = 00000103 OSNotifyCreateProcessor: Processor Object #2: 97f1deb8 97F6F260 GenuineIntel - x86 Family 6 Model 158- 1 ACPIBuildProcessorExtension: = 00000000 OSNotifyCreate: 97F1DEB8 (PR01) = 00000103 OSNotifyCreateProcessor: Processor Object #3: 97f1defc 97F6E008 GenuineIntel - x86 Family 6 Model 158- 2 ACPIBuildProcessorExtension: = 00000000 OSNotifyCreate: 97F1DEFC (PR02) = 00000103 CPU Name "GenuineIntel - x86 Family 6 Model 158" generated by acpi.sys itself and reported to Windows to show this way at DevManager
Damnation Posted July 29, 2022 Posted July 29, 2022 @Mov AX, 0xDEAD They do show up in Device Manager with ACPI0007 for their HWIDs. I did try brute forcing them to install in Device Manager by installing the cpu.inf driver, they install, they just get the name "Processor" and they can not be started. I could only get them to start after I did the table mod. I know @daniel_k thinks I faked it but that's why they just had the name "Processor" in the earlier screenshot, it was because of the earlier brute force install attempt before I did the mod.
Mov AX, 0xDEAD Posted July 29, 2022 Author Posted July 29, 2022 OK, classic declaration Quote Scope (_SB) { Processor (PR00, 0x01, 0x00001810, 0x06) {} Processor (PR01, 0x02, 0x00001810, 0x06) {} Processor (PR02, 0x03, 0x00001810, 0x06) {} Processor (PR03, 0x04, 0x00001810, 0x06) {} Processor (PR04, 0x05, 0x00001810, 0x06) {} Processor (PR05, 0x06, 0x00001810, 0x06) {} Processor (PR06, 0x07, 0x00001810, 0x06) {} Processor (PR07, 0x08, 0x00001810, 0x06) {} Processor (PR08, 0x09, 0x00001810, 0x06) {} Processor (PR09, 0x0A, 0x00001810, 0x06) {} Processor (PR10, 0x0B, 0x00001810, 0x06) {} Processor (PR11, 0x0C, 0x00001810, 0x06) {} Processor (PR12, 0x0D, 0x00001810, 0x06) {} Processor (PR13, 0x0E, 0x00001810, 0x06) {} Processor (PR14, 0x0F, 0x00001810, 0x06) {} Processor (PR15, 0x10, 0x00001810, 0x06) {} } Scope (_SB.PR00) { Name (CPC2, Package (0x15) { 0x15, 0x02, ResourceTemplate () { Register (FFixedHW, 0x08, // Bit Width 0x00, // Bit Offset 0x0000000000000771, // Address 0x04, // Access Size ) }, AMD way: Quote Scope (\_SB) { Device (PLTF) { Name (_HID, "ACPI0010" /* Processor Container Device */) // _HID: Hardware ID Name (_CID, EisaId ("PNP0A05") /* Generic Container Device */) // _CID: Compatible ID Name (_UID, One) // _UID: Unique ID Device (C000) { Name (_HID, "ACPI0007" /* Processor Device */) // _HID: Hardware ID Name (_UID, Zero) // _UID: Unique ID } Device (C001) { Name (_HID, "ACPI0007" /* Processor Device */) // _HID: Hardware ID Name (_UID, One) // _UID: Unique ID } Scope (\_SB.PLTF.C000) { Name (_PCT, Package (0x02) // _PCT: Performance Control { ResourceTemplate () { Register (FFixedHW, 0x40, // Bit Width 0x00, // Bit Offset 0x00000000C0010062, // Address ,) }, with XP acpi.sys "Processor" opcode never called, Processor() sets important thing - OBJTYPE_PROCESSOR later, this type trigger to call OSNotifyCreateProcessor() Quote NTSTATUS LOCAL Processor(PCTXT pctxt, PTERM pterm) { TRACENAME("PROCESSOR") NTSTATUS rc = STATUS_SUCCESS; ENTER(2, ("Processor(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm)); if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent, (PSZ)pterm->pdataArgs[0].pbDataBuff, pctxt->pnsScope, pctxt->powner, &pterm->pnsObj, 0)) == STATUS_SUCCESS) { pterm->pnsObj->ObjData.dwDataType = OBJTYPE_PROCESSOR; pterm->pnsObj->ObjData.dwDataLen = sizeof(PROCESSOROBJ); if ((pterm->pnsObj->ObjData.pbDataBuff = NEWPCOBJ(pctxt->pheapCurrent, pterm->pnsObj->ObjData.dwDataLen)) == NULL) { rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM, ("Processor: failed to allocate processor object")); } else { PPROCESSOROBJ pproc; MEMZERO(pterm->pnsObj->ObjData.pbDataBuff, pterm->pnsObj->ObjData.dwDataLen); pproc = (PPROCESSOROBJ)pterm->pnsObj->ObjData.pbDataBuff; pproc->bApicID = (UCHAR)pterm->pdataArgs[1].uipDataValue; pproc->dwPBlk = (ULONG)pterm->pdataArgs[2].uipDataValue; pproc->dwPBlkLen = (ULONG)pterm->pdataArgs[3].uipDataValue; if (ghCreate.pfnHandler != NULL) { ((PFNOO)ghCreate.pfnHandler)(OBJTYPE_PROCESSOR, pterm->pnsObj); } rc = PushScope(pctxt, pctxt->pbOp, pterm->pbOpEnd, NULL, pterm->pnsObj, pctxt->powner, pctxt->pheapCurrent, pterm->pdataResult); } } EXIT(2, ("Processor=%x (pnsObj=%x)\n", rc, pterm->pnsObj)); return rc; } //Processor also "Processor (PR00, 0x01, 0x00001810, 0x06)" definition has additional arguments: 0x01, 0x00001810, 0x06 i dont know what these numebr means, acpi specification can give answer if you care
Damnation Posted July 29, 2022 Posted July 29, 2022 @Mov AX, 0xDEAD The Classic Definition way worked, I borrowed the ASL code from one of my other systems that is working properly in XP. I suppose I should learn what the arguments mean. I'm happy that I've got a known good ACPI table mod now at least, even if I have to apply it at boot each time. Any ideas on why Processor() is not called? Could my theory that the Processor Container Device as the cause be correct? or do you think it's something else?
Mov AX, 0xDEAD Posted July 29, 2022 Author Posted July 29, 2022 5 hours ago, Damnation said: @Mov AX, 0xDEAD Any ideas on why Processor() is not called? Could my theory that the Processor Container Device as the cause be correct? or do you think it's something else? This ssdt out of acpi 1.x/2.x specification, no Processor opcode, now cpu core is just device with "new" special name _HID=ACPI0007 and unique _UID Hard to fix, need hook creating device, check for keyword ACPI0007, manually call to Processor(), there is mismatch arguments, so need patch this part too.
Damnation Posted July 29, 2022 Posted July 29, 2022 @Mov AX, 0xDEAD The newer iASL compilers do have this message - ^ Legacy Processor() keyword detected. Use Device() keyword instead. I'm going to assume using Device() instead of Processor() will be the norm for new hardware from now on.
Damnation Posted August 1, 2022 Posted August 1, 2022 I found this in the most recent ACPI documentation - https://uefi.org/specs/ACPI/6.4/08_Processor_Configuration_and_Control/declaring-processors.html
Damnation Posted August 2, 2022 Posted August 2, 2022 @Mov AX, 0xDEAD Is there anything in the Windows 10 ACPI driver or in the Linux ACPI driver source code that gives hints for how to deal with this change to the ACPI specification?
Mov AX, 0xDEAD Posted August 4, 2022 Author Posted August 4, 2022 On 8/2/2022 at 7:08 AM, Damnation said: @Mov AX, 0xDEAD Is there anything in the Windows 10 ACPI driver or in the Linux ACPI driver source code that gives hints for how to deal with this change to the ACPI specification? disasm win10 driver, see how ACPI0007 detected and related to old Processor(), if it same as xp repeat in sourrces
Damnation Posted August 4, 2022 Posted August 4, 2022 (edited) @Mov AX, 0xDEAD ACPI0007 makes use of AcpiProcessorIrpDispatch the same as Processor in Windows 10 acpi.sys https://ibb.co/s97TwCW AcpiProcessorIrpDispatch does not seem to have been altered since XP and remains the same. 10 AcpiProcessorIrpDispatch https://ibb.co/Kb6tpVp XP AcpiProcessorIrpDispatch https://ibb.co/hK8xRwY I did try to add ACPI0007 in to XP acpi.sys - but my lack of good programming skills meant I was not able to do this successfully. edit: In \driver\nt\dat.c // // Any device in this table is considered to be 'special' // INTERNAL_DEVICE_TABLE AcpiInternalDeviceTable[] = { "ACPI0006", &AcpiGenericBusIrpDispatch, "FixedButton", &AcpiFixedButtonIrpDispatch, "PNP0000", &AcpiRawDeviceIrpDispatch, ... "DockDevice", &AcpiDockPdoIrpDispatch, "ThermalZone", &AcpiThermalZoneIrpDispatch, "Processor", &AcpiProcessorIrpDispatch, NULL, NULL } ; Edited August 5, 2022 by Damnation
Damnation Posted August 6, 2022 Posted August 6, 2022 @Mov AX, 0xDEAD Could we try telling the XP acpi.sys to treat the CompatibleID "ACPI\ACPI0007" the same as it treats "ACPI\Processor" ? I don't think the driver does anything with that ACPI0007 ID currently. I'm not entirely sure how to do this in source code though.
Mov AX, 0xDEAD Posted August 8, 2022 Author Posted August 8, 2022 On 8/6/2022 at 11:08 AM, Damnation said: @Mov AX, 0xDEAD Could we try telling the XP acpi.sys to treat the CompatibleID "ACPI\ACPI0007" the same as it treats "ACPI\Processor" ? I don't think the driver does anything with that ACPI0007 ID currently. I'm not entirely sure how to do this in source code though. @Damnation 1) extended AcpiInternalDeviceFlagTable[] to set DEV_CAP_PROCESSOR flag to special HID name: Quote INTERNAL_DEVICE_FLAG_TABLE AcpiInternalDeviceFlagTable[] = { ... ACPI0007, DEV_CAP_NO_FILTER | DEV_CAP_NO_STOP | DEV_CAP_PROCESSOR, //0x10 0030 0000 ... } 2) extended AcpiInternalDeviceTable[] to enable processor dispatch routines: Quote "Processor", &AcpiProcessorIrpDispatch, "ACPI0007", &AcpiProcessorIrpDispatch, There can be different DEV_CAP_PROCESSOR processing in Win10 code to proper handle CPU device without Processor opcode First extend two tables and see is it enough or not 1
Damnation Posted August 10, 2022 Posted August 10, 2022 @Mov AX, 0xDEAD OK, Adding this code Quote INTERNAL_DEVICE_FLAG_TABLE AcpiInternalDeviceFlagTable[] = { ... ACPI0007, DEV_CAP_NO_FILTER | DEV_CAP_NO_STOP | DEV_CAP_PROCESSOR, //0x10 0030 0000 ... } this caused all of the ACPI0007 devices to completely disappear from the ACPI0010 container. this line Quote "Processor", &AcpiProcessorIrpDispatch, "ACPI0007", &AcpiProcessorIrpDispatch, this at first seemed like it did nothing, except now when I manually brute force install the processor it now freezes my system. With the older acpi.sys it simply says "Device cannot Start (code 10)" after a brute force install and does not freeze. any more ideas I could try?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now