Il codice che ho postato fa parte del corpo centrale del Device LPCB.
Ho provato a fare dei tagli basandomi sul tuo dsdt, ora sto utilizzando questo ridotto, i kernellog combaciano e l'avvio è più veloce.
Tutto sembra funzionare regolarmente. Lo testo un po' .....
Device (LPCB)
{
Name (_ADR, 0x001F0000)
[color="#FF0000"]OperationRegion (LPC0, PCI_Config, 0xA0, 0x60)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
, 10,
XPME, 1,
Offset (0x04),
AG3E, 1,
Offset (0x50),
RAEN, 1,
, 13,
RCBA, 18
}
Name (SMIP, 0xB2)
OperationRegion (APMP, SystemIO, SMIP, 0x02)
Field (APMP, ByteAcc, NoLock, Preserve)
{
APMC, 8,
APMS, 8
}
Field (APMP, ByteAcc, NoLock, Preserve)
{
Offset (0x01),
, 1,
BRTC, 1
}
Name (PMBS, 0x0800)
OperationRegion (PMS0, SystemIO, PMBS, 0x04)
Field (PMS0, ByteAcc, NoLock, Preserve)
{
Offset (0x01),
PWBE, 1,
, 1,
RTCS, 1,
, 4,
WAKS, 1,
Offset (0x03),
PWBT, 1,
Offset (0x04)
}[/color]
Name (PM30, 0x0830)
OperationRegion (SMIE, SystemIO, PM30, 0x08)
Field (SMIE, ByteAcc, NoLock, Preserve)
{
, 4,
PS1E, 1,
Offset (0x04),
, 4,
PS1S, 1
}
Method (SPTS, 0, NotSerialized)
{
Store (One, PS1S)
Store (One, PS1E)
}
[color="#FF0000"]Method (SWAK, 1, NotSerialized)
{
Store (Zero, PS1E)
If (LAnd (LEqual (Arg0, One), RTCS)) {}
Else
{
If (LAnd (LEqual (Arg0, 0x03), BRTC)) {}
Else
{
Notify (PWRB, 0x02)
}
}
}[/color]
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x18, 0x3A, 0x00, 0x00
}
}, Local0)
MCDP (Arg2, RefOf (Local0))
Return (Local0)
}
[color="#FF0000"]Device (DMAC)
{
Name (_HID, EisaId ("PNP0200"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x10, // Length
)
IO (Decode16,
0x0081, // Range Minimum
0x0081, // Range Maximum
0x00, // Alignment
0x03, // Length
)
IO (Decode16,
0x0087, // Range Minimum
0x0087, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x0089, // Range Minimum
0x0089, // Range Maximum
0x00, // Alignment
0x03, // Length
)
IO (Decode16,
0x008F, // Range Minimum
0x008F, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x00C0, // Range Minimum
0x00C0, // Range Maximum
0x00, // Alignment
0x20, // Length
)
DMA (Compatibility, BusMaster, Transfer8, )
{4}
})
}
Device (EC)
{
Name (_HID, EisaId ("PNP0C09"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0062, // Range Minimum
0x0062, // Range Maximum
0x00, // Alignment
0x01, // Length
)
IO (Decode16,
0x0066, // Range Minimum
0x0066, // Range Maximum
0x00, // Alignment
0x01, // Length
)
})
Name (_GPE, 0x11)
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Name (ECOK, Zero)
OperationRegion (ECOR, EmbeddedControl, Zero, 0xFF)
Field (ECOR, ByteAcc, Lock, Preserve)
{
ECVS, 8,
LSTE, 1,
RPWR, 1,
Offset (0x02),
LWAK, 1,
ACWK, 1,
CDWK, 1,
Offset (0x03),
G3HT, 1,
Offset (0x04),
Offset (0x10),
ECSS, 8,
PLIM, 8,
Offset (0x20),
SPTR, 8,
SSTS, 8,
SADR, 8,
SCMD, 8,
SBFR, 256,
SCNT, 8,
SAAD, 8,
SAD0, 8,
SAD1, 8,
SMUX, 8
}
OperationRegion (KBCP, SystemIO, 0x64, One)
Field (KBCP, ByteAcc, Lock, Preserve)
{
CMD, 8
}
Method (_Q5A, 0, NotSerialized)
{
Notify (PWRB, 0x80)
}
Method (_Q80, 0, NotSerialized)
{
PNOT ()
}
Method (_REG, 2, NotSerialized)
{
If (LEqual (Arg0, 0x03))
{
Store (Arg1, ECOK)
If (LEqual (Arg1, One))
{
Store (Zero, ECSS)
}
}
}
}
Device (FWHD)
{
Name (_HID, EisaId ("INT0800"))
Name (_CRS, ResourceTemplate ()
{
Memory32Fixed (ReadOnly,
0xFF000000, // Address Base
0x01000000, // Address Length
)
})
}[/color]
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (CRS, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y00)
})
Name (_STA, 0x0F)
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_CRS, 0, NotSerialized)
{
CreateDWordField (CRS, \_SB.PCI0.LPCB.HPET._Y00._BAS, HPT)
Multiply (HPTS, 0x1000, Local0)
Add (Local0, 0xFED00000, HPT)
Return (CRS)
}
}
[color="#FF0000"]Device (IPIC)
{
Name (_HID, EisaId ("PNP0000"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0020, // Range Minimum
0x0020, // Range Maximum
0x00, // Alignment
0x02, // Length
)
IO (Decode16,
0x00A0, // Range Minimum
0x00A0, // Range Maximum
0x00, // Alignment
0x02, // Length
)
IO (Decode16,
0x04D0, // Range Minimum
0x04D0, // Range Maximum
0x00, // Alignment
0x02, // Length
)
})
}
Device (MATH)
{
Name (_HID, EisaId ("PNP0C04"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x00F0, // Range Minimum
0x00F0, // Range Maximum
0x00, // Alignment
0x10, // Length
)
IRQNoFlags ()
{13}
})
}[/color]
Device (RTC)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
})
}
Device (TIMR)
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040, // Range Minimum
0x0040, // Range Maximum
0x01, // Alignment
0x04, // Length
)
IO (Decode16,
0x0050, // Range Minimum
0x0050, // Range Maximum
0x01, // Alignment
0x04, // Length
)
})
}
[color="#FF0000"]Device (LDRC)
{
Name (_HID, EisaId ("PNP0C02"))
Name (_UID, Zero)
Name (CRS, ResourceTemplate ()
{
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y03)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y04)
Memory32Fixed (ReadOnly,
0x00000000, // Address Base
0x00000000, // Address Length
_Y01)
Memory32Fixed (ReadOnly,
0x00000000, // Address Base
0x00000000, // Address Length
_Y02)
})
Method (_CRS, 0, NotSerialized)
{
CreateDWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y01._LEN, ML01)
CreateDWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y01._BAS, MB01)
CreateDWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y02._LEN, ML02)
CreateDWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y02._BAS, MB02)
Store (0xFEC00000, MB01)
Store (0x1000, ML01)
Store (0xFEE00000, MB02)
Store (0x1000, ML02)
ShiftLeft (One, 0x0A, Local0)
If (And (IOST, Local0)) {}
Else
{
ShiftLeft (One, 0x0C, Local1)
If (And (IOST, Local1)) {}
Else
{
CreateWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y03._MIN, P60N)
CreateWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y03._MAX, P60M)
CreateByteField (CRS, \_SB.PCI0.LPCB.LDRC._Y03._LEN, P60L)
CreateWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y04._MIN, P64N)
CreateWordField (CRS, \_SB.PCI0.LPCB.LDRC._Y04._MAX, P64M)
CreateByteField (CRS, \_SB.PCI0.LPCB.LDRC._Y04._LEN, P64L)
Store (0x60, P60N)
Store (0x60, P60M)
Store (One, P60L)
Store (0x64, P64N)
Store (0x64, P64M)
Store (One, P64L)
}
}
Return (CRS)
}
}[/color]
}
Device (LPCB)
{
Name (_ADR, 0x001F0000)
OperationRegion (SMIE, SystemIO, 0x0830, 0x08)
Field (SMIE, ByteAcc, NoLock, Preserve)
{
, 4,
PS1E, 1,
Offset (0x04),
, 4,
PS1S, 1
}
Method (SPTS, 0, NotSerialized)
{
Store (One, PS1S)
Store (One, PS1E)
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x18, 0x3A, 0x00, 0x00
}
}, Local0)
MCDP (Arg2, RefOf (Local0))
Return (Local0)
}
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (CRS, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y00)
})
Name (_STA, 0x0F)
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_CRS, 0, NotSerialized)
{
CreateDWordField (CRS, \_SB.PCI0.LPCB.HPET._Y00._BAS, HPT)
Multiply (HPTS, 0x1000, Local0)
Add (Local0, 0xFED00000, HPT)
Return (CRS)
}
}
Device (RTC)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
})
}
Device (TIMR)
{
Name (_HID, EisaId ("PNP0100"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0040, // Range Minimum
0x0040, // Range Maximum
0x01, // Alignment
0x04, // Length
)
IO (Decode16,
0x0050, // Range Minimum
0x0050, // Range Maximum
0x01, // Alignment
0x04, // Length
)
})
}
}
Un'altra cosa!
Nella guida di Master Chief disse di eliminare nei vari P0PX quei controlli If che portavano agli AR0X ma piazzarli direttamente dentro il Device.
Io così ho fatto. Sempre nel tuo dsdt però ho visto che hai messo degli Alias sia per gli AR0X che per il PWR. In questo modo eviti di fare ripetizioni di codice e vai a chiamarlo con gli Alias giusto? Gli alias sono come dei puntatori ...o almeno è questa la loro funzione ..giusto?
Grazie scrax