Firewire hot-plug issue AND power conservation SOLVED. Here is my code, and it is irrelevant if your machine is declared as iMac5,1 (due to my ICH7 chipset) or MacPro3,1. I tried iMac5,1 first, then reverted back to MacPro3,1 because speed-stepping on my Q9550 wasn't working with iMacPro5,1 for some reason...
The trick was to make a (_GPE) callback not to a new notification for firewire, but instead, to the device that
includes the firewire:
Intel Corporation 82801 PCI Bridge
{
Name (_ADR, 0x001E0000)
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Name (PICM, Package (0x0C)
{
blah-blah
}
Name (APIC, Package (0x0C)
{
blah-blah
}
Method (_PRT, 0, NotSerialized)
{
blah-blah
}
Method (_PRW, 0, NotSerialized) // Very important that you leave this operational
{
Return (Package (0x02)
{
0x0B, // Callback to (_GPE) Method (_L0B)
0x05
})
}
Device (FRWR) // Added device for Texas Instruments TSB43AB22/A IEEE-1394A Controller
{
Name (_ADR, 0x060A0000) // Reported by 'lspci'
Name (_GPE, 0x0B) // Callback to (_GPE) Method (_L0B) for (HUB0)
// Name (_SUN, 0x01) // PCI slot 1 in System Profiler (cosmetic)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"built-in",
Buffer (0x01)
{
Zero
},
"fwhub",
Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
},
"device-id",
Buffer (0x04)
{
0x23, 0x80, 0x00, 0x00 // Needed device ID for ICH7 is [8023]
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
} _linenums:0'>Device (HUB0) // <strong class='bbc'>Intel Corporation 82801 PCI Bridge</strong> { Name (_ADR, 0x001E0000) Method (_STA, 0, NotSerialized) { Return (0x0F) } Name (PICM, Package (0x0C) { blah-blah } Name (APIC, Package (0x0C) { blah-blah } Method (_PRT, 0, NotSerialized) { blah-blah } Method (_PRW, 0, NotSerialized) // Very important that you leave this operational { Return (Package (0x02) { 0x0B, // <strong class='bbc'>Callback to (_GPE) Method (_L0B)</strong> 0x05 }) } <strong class='bbc'>Device (FRWR) // Added device for Texas Instruments TSB43AB22/A IEEE-1394A Controller</strong> { Name (_ADR, 0x060A0000) // <strong class='bbc'>Reported by 'lspci'</strong> Name (_GPE, 0x0B) // <strong class='bbc'>Callback to (_GPE) Method (_L0B) for (HUB0)</strong> // Name (_SUN, 0x01) // PCI slot 1 in System Profiler (cosmetic) Method (_DSM, 4, NotSerialized) { Store (Package (0x06) { "built-in", Buffer (0x01) { Zero }, "fwhub", Buffer (0x04) { 0x00, 0x00, 0x00, 0x00 }, "device-id", Buffer (0x04) { 0x23, 0x80, 0x00, 0x00 // <strong class='bbc'>Needed device ID for ICH7 is [8023]</strong> } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) } } }
Don't forget (1) there's no need to add a notification Method (_L1A) inside
Scope (\_GPE) anymore and that (2) you must find and insert the address of the firewire device using
lspci -nn as 'Zero' doesn't seem to work.
Most importantly, though, (3) the callback must be directed to (_GPE) at the appropriate superset device, in my case (HUB0).
Hope this helps.
Konsti