Jump to content

DSDT: trick retail drivers by changing "device-id" (e.g USB)


zhell
 Share

366 posts in this topic

Recommended Posts

Thank you very much, Don Quijote. But I was wondering, your posted DSDT.aml is different compared to mine. My sound and the powerbutton fix didn't work - but never mind. :)

 

The UHCI-Fix and EHCI-Fix work, but I can't wake the system by USB-mouse or keyboard. Any tipps or questions?

Link to comment
Share on other sites

A quick question: my PCMCIA stopped working in Snow Leo. I use the IOPCMCIAFamily.kext for 10.5.6 from ~Eureka's aka Chun-Nan's repertoire which is the only IOPCCardFamily/ IOPCIFamily combo known to also work in Snow. It successfully enables LAN & WLAN, but for PCMCIA I now get

IOPCCard notice: Bad bridge mapping at 0xd2100000!
IOPCCard info: no bridges found.
IOPCCardBridge::start faile

Yes, I deleted the existing IOPCIFamily.kext from S/L/E, and I also tried a couple of different IOPCCardFamily.kexts (beta 1.6.4 rev8 was the IOPCCardFamily/ IOPCIFamily combo working for me in Leo).

 

I wonder if that is s.th. that can be addressed in the DSDT at all? Unfortunately Chun Nan's only IOPCIFamily.kext which corrected the buggy PCI bridge mapping and gave me PCMCIA in Leo causes a KP in Snow ..

 

I attached current DSDT + lspci -v from Kantotix.

 

Can this be addressed in the DSDT?

DSDT___lspci__v.zip

Link to comment
Share on other sites

Thank you very much, Don Quijote. But I was wondering, your posted DSDT.aml is different compared to mine. My sound and the powerbutton fix didn't work - but never mind. :hysterical:

 

The UHCI-Fix and EHCI-Fix work, but I can't wake the system by USB-mouse or keyboard. Any tipps or questions?

I'm not an expert in dsdt, but i think that the power button can bring the menu only when running on a laptop. Glad it worked the fix. I've also changed AZAL with HDEF in you dsdt (purelly cosmetic) and fixed some warnings.

 

Hella

 

Is it possible to solve USB Wifi adapter in SL using DSDT/ modified the Apple plist?

My adapter was G-122 rev.C1 & WUSB54G v4.

 

Thanks

Maybe modifing the plist can help you. In dsdt you can only define onboard devices. But that's another discussion, out of the current topic. Please open a new one or write in the corresponding one about your problem.

Link to comment
Share on other sites

I'm not an expert in dsdt, but i think that the power button can bring the menu only when running on a laptop. Glad it worked the fix. I've also changed AZAL with HDEF in you dsdt (purelly cosmetic) and fixed some warnings.

No, it also works on normal computers. But that was my fault, wrong settings in BIOS for the power button. Anyways, thanks for your help. :rolleyes:

Link to comment
Share on other sites

I have an IP35-e board, and I now have sleep almost working after applying the EHCI and UHCI fix. The system will completely power down and shut off all fans.

 

However, when I try to wake up the system, it won't really wake up. The fan will just be going max speed, and the screen will be blank. Anyone know what the last thing is I'm missing?

 

Thanks a lot, this thread rules.

Link to comment
Share on other sites

Regarding wake-by-ehci Keyboard: I found out that some PCI Register entries aren't set correctly, but trying to write to them doesn't work (it should work)

17.1.25

PWAKE_CAP—Port Wake Capability Register (USB EHCI—D29:F7, D26:F7)

Address Offset: Default Value: Function Level Reset:

62–63h Attribute: R/W 01FFh Size: 16 bits No

This register is in the suspend power well. The intended use of this register is to establish a policy about which ports are to be used for wake events. Bit positions 1– 8(D29) or 1–6(D26) in the mask correspond to a physical port implemented on the current EHCI controller. A 1 in a bit position indicates that a device connected below the port can be enabled as a wake-up device and the port may be enabled for disconnect/ connect or overcurrent events as wake-up events. This is an information-only mask register. The bits in this register do not affect the actual operation of the EHCI host controller. The system-specific policy can be established by BIOS initializing this register to a system-specific value. System software uses the information in this register when enabling devices and ports for remote wake-up.

These bits are not reset by a D3-to-D0 warm rest or a core well reset.

 

 

For me, i have 00 at Offset 63h. So writing FF to Offset 63h should enable all EHCI Devices to wake the System. You can view the registers with lspci -xxx. If there is anything other than FF at Offset 63 you can try to write the register with sudo setpci -s 00:1d.7 63.b=ff (for EHCI2) and sudo setpci -s 00:1a.7 63.b=ff (for EHCI1)

 

But on my GA-EP45 i have strangely no write access to that registers, bug i suppose :)

Link to comment
Share on other sites

  • 2 weeks later...
Hi guys!

 

Just installed SL - everything works but sound and sleep.

 

My MoBo is Asus P5E Deluxe.

 

Can you please help me patch this dsdt file please.

I got stuck with it!

 

Many thanks!

Find an application called DSDTSE at kexts dot com.

Link to comment
Share on other sites

Hi guys!

 

Just installed SL - everything works but sound and sleep.

 

My MoBo is Asus P5E Deluxe.

 

Can you please help me patch this dsdt file please.

I got stuck with it!

 

Many thanks!

 

Take a look at my dsdt.aml, it has fixes for audio (kext included), SpeedStep, sleep and AHCI SATA.

My MoBo is an Asus P5E (not deluxe).

dsdt.zip

Link to comment
Share on other sites

Take a look at my dsdt.aml, it has fixes for audio (kext included), SpeedStep, sleep and AHCI SATA.

My MoBo is an Asus P5E (not deluxe).

dsdt.zip

 

Thank you.

Well, I replaced my dsdt with your - and no boot.

Then I realized that maybe I should just use some parts of code from it.

 

Though I don't know what are these parts.

 

Can you give me some hint?

Link to comment
Share on other sites

Thank you.

Well, I replaced my dsdt with your - and no boot.

Then I realized that maybe I should just use some parts of code from it.

 

Though I don't know what are these parts.

 

Can you give me some hint?

 

Right, it won't boot if you just copy my DSDT, you have to copy only the additions in my file.

 

To visualize it better, I suggest that you do a diff between my DSDT and yours, and open it in TextMate.

In terminal: diff yourDSDT.dsl myDSDT.dsl > DSDT.diff

dsdt.diff.zip

 

Then you will copy only the parts that were added (without the ">" at the beggining), for example:

20a21,53

>     Method (DTGP, 5, NotSerialized)
>     {
>         If (LEqual (Arg0, Buffer (0x10)
>                 {
>                     /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
>                     /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
>                 }))
>         {
>             If (LEqual (Arg1, One))
>             {
>                 If (LEqual (Arg2, Zero))
>                 {
>                     Store (Buffer (One)
>                         {
>                             0x03
>                         }, Arg4)
>                     Return (One)
>                 }
> 
>                 If (LEqual (Arg2, One))
>                 {
>                     Return (One)
>                 }
>             }
>         }
> 
>         Store (Buffer (One)
>             {
>                 0x00
>             }, Arg4)
>         Return (Zero)
>     }
> 

 

and do nothing with the changed parts, you'll keep as it is in your file, for example:

25c58

<			 OperationRegion (STBL, SystemMemory, 0xCFF8E0D0, 0x01D2)
---
>			 OperationRegion (STBL, SystemMemory, 0x7FF8E0D0, 0x01D2)

 

also you won't remove de deleted parts, keep them in your file, example:

1238,1305d1413

<         Name (PR05, Package (0x04)
<         {
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 Zero, 
<                 LNKB, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 One, 
<                 LNKC, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x02, 
<                 LNKD, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x03, 
<                 LNKA, 
<                 Zero
<             }
<         })
<         Name (AR05, Package (0x04)
<         {
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 Zero, 
<                 Zero, 
<                 0x11
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 One, 
<                 Zero, 
<                 0x12
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x02, 
<                 Zero, 
<                 0x13
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x03, 
<                 Zero, 
<                 0x10
<             }
<         })

 

except by these two, you will have to remove those IRQs if you have problems with sound

2049,2050d2156
<						 IRQNoFlags ()
<							 {2}
2111,2112d2216
<						 IRQNoFlags ()
<							 {0}

 

With patching done, you will have to remove NullCPUPowerManagement.kext in order for sleep to work, because you need AppleIntelCPUPowerManagement.kext running. The SpeedStep patch should take care of the overheating issue. Use VoodooMonitor to check if it's working.

 

Edit: try this

P5E_Deluxe.zip

remove NullCPUPowerManagement.kext and add AD1988b.kext to /Extra/Extensions

Link to comment
Share on other sites

you can fix those errors just adding this code to the scope _pr , and if you want to enable speedstep just change your mac model to macpro3,1 or mod the acpi_smc_platformplugin to match your smbios injection, of course EIST and C1E must be enable in bios

 

	External (PDC0)
External (CFGD)

Scope (_PR)
{
	Processor (CPU0, 0x00, 0x00000410, 0x06)
	{
		Method (_CST, 0, NotSerialized)
		{
			If (LAnd (And (CFGD, 0x01000000), LNot (And (PDC0, 0x10
				))))
			{
				Return (Package (0x02)
				{
					One, 
					Package (0x04)
					{
						ResourceTemplate ()
						{
							Register (FFixedHW, 
								0x00,			   // Bit Width
								0x00,			   // Bit Offset
								0x0000000000000000, // Address
								,)
						}, 

						One, 
						0x9D, 
						0x03E8
					}
				})
			}

			If (And (PDC0, 0x0300))
			{
				If (And (CFGD, 0x20))
				{
					Return (Package (0x03)
					{
						0x02, 
						Package (0x04)
						{
							ResourceTemplate ()
							{
								Register (FFixedHW, 
									0x01,			   // Bit Width
									0x02,			   // Bit Offset
									0x0000000000000000, // Address
									,)
							}, 

							One, 
							One, 
							0x03E8
						}, 

						Package (0x04)
						{
							ResourceTemplate ()
							{
								Register (FFixedHW, 
									0x01,			   // Bit Width
									0x02,			   // Bit Offset
									0x0000000000000010, // Address
									,)
							}, 

							0x02, 
							One, 
							0x01F4
						}
					})
				}
			}

			If (And (CFGD, 0x20))
			{
				Return (Package (0x03)
				{
					0x02, 
					Package (0x04)
					{
						ResourceTemplate ()
						{
							Register (FFixedHW, 
								0x01,			   // Bit Width
								0x02,			   // Bit Offset
								0x0000000000000000, // Address
								,)
						}, 

						One, 
						One, 
						0x03E8
					}, 

					Package (0x04)
					{
						ResourceTemplate ()
						{
							Register (SystemIO, 
								0x08,			   // Bit Width
								0x00,			   // Bit Offset
								0x000000000000000C, // Address
								,)
						}, 

						0x02, 
						One, 
						0x01F4
					}
				})
			}

			Return (Package (0x02)
			{
				One, 
				Package (0x04)
				{
					ResourceTemplate ()
					{
						Register (FFixedHW, 
							0x01,			   // Bit Width
							0x02,			   // Bit Offset
							0x0000000000000000, // Address
							,)
					}, 

					One, 
					One, 
					0x03E8
				}
			})
		}
	}

   Processor (CPU1, 0x01, 0x00000410, 0x06)
	{
		Method (_CST, 0, NotSerialized)
		{
			Return (^^CPU0._CST ())
		}
	}

	Processor (CPU2, 0x02, 0x00000000, 0x00)
	{
		Method (_CST, 0, NotSerialized)
		{
			Return (^^CPU0._CST ())
		}
	}

	Processor (CPU3, 0x03, 0x00000410, 0x06)
	{
		Method (_CST, 0, NotSerialized)
		{
			Return (^^CPU0._CST ())
		}
	}
}

Dear roisoft, I just need to solve the "_CST evaluation failed" error when booting Snow Leopard 10.6.1 (and soon 10.6.2). Is it safe to just add the code suggested by you earlier? Is it generic, just to trick the error? Is it safe and will NOT damage the CPU/mainboard? Does this code contain cpu-model-specific values?

 

Personally, I am not insterested in SpeedStepping and SSDTs since they require a lot of reading on time that I don't have free, anymore Plus, I don't overclock the mobo...

 

Thank you in advance for your time.

Link to comment
Share on other sites

Right, it won't boot if you just copy my DSDT, you have to copy only the additions in my file.

 

To visualize it better, I suggest that you do a diff between my DSDT and yours, and open it in TextMate.

In terminal: diff yourDSDT.dsl myDSDT.dsl > DSDT.diff

dsdt.diff.zip

 

Then you will copy only the parts that were added (without the ">" at the beggining), for example:

20a21,53

>     Method (DTGP, 5, NotSerialized)
>     {
>         If (LEqual (Arg0, Buffer (0x10)
>                 {
>                     /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
>                     /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
>                 }))
>         {
>             If (LEqual (Arg1, One))
>             {
>                 If (LEqual (Arg2, Zero))
>                 {
>                     Store (Buffer (One)
>                         {
>                             0x03
>                         }, Arg4)
>                     Return (One)
>                 }
> 
>                 If (LEqual (Arg2, One))
>                 {
>                     Return (One)
>                 }
>             }
>         }
> 
>         Store (Buffer (One)
>             {
>                 0x00
>             }, Arg4)
>         Return (Zero)
>     }
> 

 

and do nothing with the changed parts, you'll keep as it is in your file, for example:

25c58

<			 OperationRegion (STBL, SystemMemory, 0xCFF8E0D0, 0x01D2)
---
>			 OperationRegion (STBL, SystemMemory, 0x7FF8E0D0, 0x01D2)

 

also you won't remove de deleted parts, keep them in your file, example:

1238,1305d1413

<         Name (PR05, Package (0x04)
<         {
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 Zero, 
<                 LNKB, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 One, 
<                 LNKC, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x02, 
<                 LNKD, 
<                 Zero
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x03, 
<                 LNKA, 
<                 Zero
<             }
<         })
<         Name (AR05, Package (0x04)
<         {
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 Zero, 
<                 Zero, 
<                 0x11
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 One, 
<                 Zero, 
<                 0x12
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x02, 
<                 Zero, 
<                 0x13
<             }, 
< 
<             Package (0x04)
<             {
<                 0xFFFF, 
<                 0x03, 
<                 Zero, 
<                 0x10
<             }
<         })

 

except by these two, you will have to remove those IRQs if you have problems with sound

2049,2050d2156
<						 IRQNoFlags ()
<							 {2}
2111,2112d2216
<						 IRQNoFlags ()
<							 {0}

 

With patching done, you will have to remove NullCPUPowerManagement.kext in order for sleep to work, because you need AppleIntelCPUPowerManagement.kext running. The SpeedStep patch should take care of the overheating issue. Use VoodooMonitor to check if it's working.

 

Edit: try this

P5E_Deluxe.zip

remove NullCPUPowerManagement.kext and add AD1988b.kext to /Extra/Extensions

 

Hey! Oldnapalm! Many Thanks!

It WORKS!

 

Thank you very much!

 

Sleep and audio - working.

 

And small question - how can I check that SpeedStep is working?

And also is it possible to enable deepsleep in SnowLeo?

Link to comment
Share on other sites

Hey! Oldnapalm! Many Thanks!

It WORKS!

 

Thank you very much!

 

Sleep and audio - working.

 

And small question - how can I check that SpeedStep is working?

And also is it possible to enable deepsleep in SnowLeo?

 

You're welcome.

 

Use VoodooMonitor to check SpeedStep.

 

Sorry, I don't know about deepsleep.

Link to comment
Share on other sites

UHCI 1: 1D 2934

UHCI 2: 1D,1 2935

UHCI 3: 1D,2 2936

UHCI 4: 1A 2937

UHCI 5: 1A,1 2938

UHCI 6: 1A,2 2939

 

Mine is ICH9M, instead of above configuration, I have

UHCI 1: 1D 2934

UHCI 2: 1D,1 2935

UHCI 3: 1D,2 2936

UHCI 4: 1A 2937

UHCI 5: 1A,1 2938

UHCI 6: 1D,3 2939

 

After applied the trick, 5 out of 6 worked, UHCI6 still remained as "Expansion Slot".

I think the problem is "1D,3", anyone knows how to fix it?

 

UHCIreset or USBBusFix in Chameleon doesn't work.

To sleep, the only option I can have now is the patched IOUSBFamily.kext from Slice.

DSDT.dsl.zip

Link to comment
Share on other sites

Guys, I have two simple questions that I request your attention to...

 

(1) I have added the following code in my DSDT within Device (IDE1) in order for my mobo (Shuttle SG31G2 with ICH7) to display the SATA channels properly in "System Profiler" but upon rebooting, I get kernel panics in both 32 and 64 bit... So my question is, what is the code/ID for ICH7? Without any hack, I get a blank controller line with my SATA SDD and DVD-R...

 

			(...)
		FAS0,   2,
		FAS1,   2
	}

	Method (_DSM, 4, NotSerialized)  // Added for ICH7 SATA controller detection
	{
		Store (Package (0x02)
			{
				"device-id",
				Buffer (0x04)
				{
					0x81, 0x26, 0x00, 0x00
				//  0x22, 0x3A, 0x00, 0x00 // Or is it this?
				}
			}, Local0)
		DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
		Return (Local0)
	}
	Device (PRIM)
	{
		(...)

(2) Secondly, with only two modifications in my DSDT (adding the DTGP method and doing a code-fix for the USBE device to be detected as EHCI) my sleep works well. The mobo wakes up via the USB keyboard and I don't have any USB devices lost upon wake (I admit I don't sleep and wake too many times in a row). So what is the benefit of adding the code in USB0 to USB3 of my DSDT?

		Device (USB0)
	{
		Name (_ADR, 0x001D0000)
		Method (_S3D, 0, NotSerialized)
		{
			If (LEqual (OSFL, 0x02))
			{
				Return (0x02)
			}
			Return (0x03)
		}
		Method (_DSM, 4, NotSerialized)  // Added method for UHCI identification
		{
			Store (Package (0x02)
				{
					"device-id",
					Buffer (0x04)
					{
						0x34, 0x3A, 0x00, 0x00
					}
				}, Local0)
			DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
			Return (Local0)
		}
		Name (_PRW, Package (0x02)
		{
			0x03,
			0x03  // Value was 0x01
		})
	}

When I run the DSDT SE tool and then IORegExplorer, when I search for either "UHCI" or "USB" I get the same results, nothing really has changed.

 

So adding the Method (_DSM, 4, NotSerialized) above, what does it really serve?

Many thanks.

Link to comment
Share on other sites

Guys, I would really appreciate your help on this one...

 

I have a Shuttle XPC SG31G2 with ICH7 chipset and Snow 10.6.2. In System Profiler, there's no indication of the SATA controller on which I've attached the SATA drive and DVD-ROM, despite the devices being shown OK. So I added this code in my DSDT (within device IDE1 and before PRIM) where, according to lspci, the SATA controller is at address 0x001F0002:

 

Device (IDE1)  // Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller
{
   Name (_ADR, [b]0x001F0002[/b])  <--- the address of SATA according to [b]lspci[/b]
   [blah blah]

   [b]Method (_DSM, 4, NotSerialized)  // Added method for AppleIntelPIIXATA.kext detection[/b]
   {
       Store (Package (0x02)
       {
           "device-id",
           Buffer (0x04)
           {
               0xC0, 0x27, 0x00, 0x00  // Needed device ID is [27C0]
           }
       }, Local0)
       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
       Return (Local0)
   }

   Device (PRIM)
   {
   [code continues]

I checked inside AppleIntelPIIXATA.kext's Info.plist that ICH7 must have device-id 0x27C08086 to be detected. This kext loads (confirmed via kextstat) Profiler doesn't seem to display the controller string.

 

Am I doing something wrong, here? Should I enter the whole 0x27C08086 id in the DSDT code?

 

Thanks in advance....!

Link to comment
Share on other sites

Hello there,

 

I install SL and everything works fine except sleep (I fixed my audio using dsdt patch). I have the infamous problem where the computer won't fully go to sleep. I tried your dsdt patching and it didn't work, but since I don't understand what is really going on I might have made some mistakes.

 

Would anyone please take a look at my dsdt file and tell me what I did wrong?

 

Thanks in advance ;)

dsdt.aml.zip

Link to comment
Share on other sites

@Datoshing:

 

Just tried to compile your DSDT->

 

ASL Input: /Library/DSDT/DSDTFiles/dsdt.dsl - 10880 lines, 358842 bytes, 5429 keywords

AML Output: /Library/DSDT/DSDTFiles/./dsdt.aml - 41678 bytes, 1132 named objects, 4297 executable opcodes

 

Compilation complete. 0 Errors, 6 Warnings, 0 Remarks, 53 Optimizations

 

Have you tried fixing the warnings? Also i can´t find:

 

OperationRegion (BAR0, PCI_Config, 0xC4, One)

Field (BAR0, ByteAcc, NoLock, Preserve)

 

in my DSDT USB sections, so i can´t tell if there persists a problem, too.

 

Goron

Link to comment
Share on other sites

Hello!

 

I have a quick question...

 

I know that this "00:1b.0 Audio device" corresponds to "Name (_ADR, 0x001B0000)", but,

 

which _ADR might these be?

 

01:09.0 FireWire (IEEE 1394)

01:0a.0 Network controller

02:00.0 Ethernet controller

04:00.0 VGA compatible controller

 

 

Also... under IORegistryExplorer, my wifi card and my firewire card appear under P0P3@1E device tree, so if I wanted to hack something under DSDT, I should put the Device(FRWR) inside the Device (P0P3) with their correct _ADR, shouldn't I?

 

Thanks in advance :(

Link to comment
Share on other sites

Hi all,

first thanks for this amazing dsdt device id injection thing

now the question:

i'm on a laptop with ich9-M intel chipset [8086:2929]

currently using

AHCIPortInjector.kext

IOAHCIBlockStorageInjector.kext

 

I'm planning to inject 2929 through SAT0 device with DSDT

but my point is

i've got an external serial ata port in which i'd like the hot plug capability to work (orange icon)

is this even possible?

removing the blockstorage kext just puts all drives on "orange icons"

instead i'd like to have only the e-sata plugged drives with that icon

thank you

kind regards

 

kidA

 

addendum

 

tried to add my ich9-m device id 2929 through dsdt in the Device (SAT0) section,

all works without AHCIPortInjector.kext but now system profiler reports

Unknown AHCI Standard Controller

how do i fix that, is this a bad sign?

 

thank you all

Link to comment
Share on other sites

 Share

×
×
  • Create New...