[SeaBIOS] [PATCH RFC] acpi: add ssdt for cpi hotplug

Kevin O'Connor kevin at koconnor.net
Tue Nov 1 23:59:01 CET 2011


On Tue, Nov 01, 2011 at 09:11:40PM +0200, Michael S. Tsirkin wrote:
> So here's the plan: move all hotplug handling out
> to ssdt, this way it'll keep working even with a
> user-supplied dsdt. Next step we can patch
> this ssdt at runtime.
> 
> There's little point in this change alone, so posting as RFC,
> will repost with the patching part when it's ready,
> posting now to present opportunity for early feedback.
> 

[...]
> -            OperationRegion(PCST, SystemIO, 0xae00, 0x08)
> -            Field (PCST, DWordAcc, NoLock, WriteAsZeros)
> -            {
> -                PCIU, 32,
> -                PCID, 32,
> -            }
> -
> -            OperationRegion(SEJ, SystemIO, 0xae08, 0x04)
> -            Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
> -            {
> -                B0EJ, 32,
> -            }
> -
> -            OperationRegion(RMVC, SystemIO, 0xae0c, 0x04)
> -            Field(RMVC, DWordAcc, NoLock, WriteAsZeros)
> -            {
> -                PCRM, 32,
> -            }
> -
[...]
> -    Scope(\_SB.PCI0) {
> -        /* Methods called by bulk generated PCI devices below */
> -        Method (PRMV, 1, NotSerialized) {
> -            // _RMV method - check if device can be removed
> -            If (And(\_SB.PCI0.PCRM, ShiftLeft(1, Arg0))) {
> -                Return (0x1)
> -            }
> -            Return (0x0)
> -        }
[...]
> -        /* Methods called by bulk generated hotplug devices below */
> -        Method (PCEJ, 1, NotSerialized) {
> -            // _EJ0 method - eject callback
> -            Store(ShiftLeft(1, Arg0), B0EJ)
> -            Return (0x0)
> -        }
[...]
> -        /* PCI hotplug notify method */
> -        Method(PCNF, 0) {
> -            // Local0 = iterator
> -            Store (Zero, Local0)
> -            While (LLess(Local0, 31)) {
> -                Increment(Local0)
> -                If (And(PCIU, ShiftLeft(1, Local0))) {
> -                    PCNT(Local0, 1)
> -                }
> -                If (And(PCID, ShiftLeft(1, Local0))) {
> -                    PCNT(Local0, 3)
> -                }
> -            }
> -            Return(One)
> -        }
[...]
> -        Method(_L01) {
> -            // PCI hotplug event
> -            Return(\_SB.PCI0.PCNF())
> -        }

Can we leave these parts in the DSDT and only move the bulk generated
stuff to the SSDT?

-Kevin



More information about the SeaBIOS mailing list