mirror of https://gitee.com/openkylin/qemu.git
pc: acpi: piix4: move remaining PCI hotplug bits into SSDT
Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
196e213783
commit
b616ec4d6f
|
@ -1637,6 +1637,48 @@ static void build_piix4_isa_bridge(Aml *table)
|
|||
aml_append(table, scope);
|
||||
}
|
||||
|
||||
static void build_piix4_pci_hotplug(Aml *table)
|
||||
{
|
||||
Aml *scope;
|
||||
Aml *field;
|
||||
Aml *method;
|
||||
|
||||
scope = aml_scope("_SB.PCI0");
|
||||
|
||||
aml_append(scope,
|
||||
aml_operation_region("PCST", AML_SYSTEM_IO, 0xae00, 0x08));
|
||||
field = aml_field("PCST", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZEROS);
|
||||
aml_append(field, aml_named_field("PCIU", 32));
|
||||
aml_append(field, aml_named_field("PCID", 32));
|
||||
aml_append(scope, field);
|
||||
|
||||
aml_append(scope,
|
||||
aml_operation_region("SEJ", AML_SYSTEM_IO, 0xae08, 0x04));
|
||||
field = aml_field("SEJ", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZEROS);
|
||||
aml_append(field, aml_named_field("B0EJ", 32));
|
||||
aml_append(scope, field);
|
||||
|
||||
aml_append(scope,
|
||||
aml_operation_region("BNMR", AML_SYSTEM_IO, 0xae10, 0x04));
|
||||
field = aml_field("BNMR", AML_DWORD_ACC, AML_NOLOCK, AML_WRITE_AS_ZEROS);
|
||||
aml_append(field, aml_named_field("BNUM", 32));
|
||||
aml_append(scope, field);
|
||||
|
||||
aml_append(scope, aml_mutex("BLCK", 0));
|
||||
|
||||
method = aml_method("PCEJ", 2, AML_NOTSERIALIZED);
|
||||
aml_append(method, aml_acquire(aml_name("BLCK"), 0xFFFF));
|
||||
aml_append(method, aml_store(aml_arg(0), aml_name("BNUM")));
|
||||
aml_append(method,
|
||||
aml_store(aml_shiftleft(aml_int(1), aml_arg(1)), aml_name("B0EJ")));
|
||||
aml_append(method, aml_release(aml_name("BLCK")));
|
||||
aml_append(method, aml_return(aml_int(0)));
|
||||
aml_append(scope, method);
|
||||
|
||||
aml_append(table, scope);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
build_ssdt(GArray *table_data, GArray *linker,
|
||||
AcpiCpuInfo *cpu, AcpiPmInfo *pm, AcpiMiscInfo *misc,
|
||||
|
@ -1663,6 +1705,7 @@ build_ssdt(GArray *table_data, GArray *linker,
|
|||
build_piix4_pm(ssdt);
|
||||
build_piix4_isa_bridge(ssdt);
|
||||
build_isa_devices_aml(ssdt);
|
||||
build_piix4_pci_hotplug(ssdt);
|
||||
build_piix4_pci0_int(ssdt);
|
||||
} else {
|
||||
build_hpet_aml(ssdt);
|
||||
|
|
|
@ -38,44 +38,4 @@ DefinitionBlock (
|
|||
// External(PX13, DeviceObj)
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
* PCI hotplug
|
||||
****************************************************************/
|
||||
|
||||
Scope(\_SB.PCI0) {
|
||||
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(BNMR, SystemIO, 0xae10, 0x04)
|
||||
Field(BNMR, DWordAcc, NoLock, WriteAsZeros) {
|
||||
BNUM, 32,
|
||||
}
|
||||
|
||||
/* Lock to protect access to fields above. */
|
||||
Mutex(BLCK, 0)
|
||||
|
||||
/* Methods called by bulk generated PCI devices below */
|
||||
|
||||
/* Methods called by hotplug devices */
|
||||
Method(PCEJ, 2, NotSerialized) {
|
||||
// _EJ0 method - eject callback
|
||||
Acquire(BLCK, 0xFFFF)
|
||||
Store(Arg0, BNUM)
|
||||
Store(ShiftLeft(1, Arg1), B0EJ)
|
||||
Release(BLCK)
|
||||
Return (0x0)
|
||||
}
|
||||
|
||||
/* Hotplug notification method supplied by SSDT */
|
||||
External(\_SB.PCI0.PCNT, MethodObj)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue