[SeaBIOS] [PATCH v15 2/2] patch dsdt to use passed-in pvpanic ioport
Paolo Bonzini
pbonzini at redhat.com
Thu Mar 21 10:11:54 CET 2013
Il 21/03/2013 10:08, Hu Tao ha scritto:
> Signed-off-by: Hu Tao <hutao at cn.fujitsu.com>
> ---
> src/acpi-dsdt-isa.dsl | 14 ++++++++++++--
> src/acpi.c | 9 +++++++++
> 2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
> index 87a31b9..43fe719 100644
> --- a/src/acpi-dsdt-isa.dsl
> +++ b/src/acpi-dsdt-isa.dsl
> @@ -102,7 +102,9 @@ Scope(\_SB.PCI0.ISA) {
>
> Device(PEVT) {
> Name(_HID, "QEMU0001")
> - OperationRegion(PEOR, SystemIO, 0x0505, 0x01)
> + ACPI_EXTRACT_NAME_WORD_CONST dsdt_isa_pest
> + Name(PEST, 0x505)
> + OperationRegion(PEOR, SystemIO, PEST, 0x01)
> Field(PEOR, ByteAcc, NoLock, Preserve) {
> PEPT, 8,
> }
> @@ -126,7 +128,15 @@ Scope(\_SB.PCI0.ISA) {
> }
>
> Name(_CRS, ResourceTemplate() {
> - IO(Decode16, 0x0505, 0x0505, 0x01, 0x01)
> + IO(Decode16, 0x0505, 0x0505, 0x01, 0x01, IO)
> })
> +
> + CreateWordField(_CRS, IO._MIN, IOMN)
> + CreateWordField(_CRS, IO._MAX, IOMX)
> +
> + Method(_INI, 0, NotSerialized) {
> + Store(PEST, IOMN)
> + Store(PEST, IOMX)
> + }
> }
> }
> diff --git a/src/acpi.c b/src/acpi.c
> index 119d1c1..42fa06e 100644
> --- a/src/acpi.c
> +++ b/src/acpi.c
> @@ -286,11 +286,20 @@ static const struct pci_device_id fadt_init_tbl[] = {
> PCI_DEVICE_END
> };
>
> +static void patch_dsdt(void *dsdt)
> +{
> + u8 *dsdt_ptr = dsdt;
> + int pvpanic_port = romfile_loadint("etc/pvpanic-port", 0x505);
The default must be 0.
Also, here:
+
+ Method(_STA, 0, NotSerialized) {
+ Store(PEPT, Local0)
+ If (LEqual(Local0, Zero)) {
+ Return (0x00)
+ } Else {
+ Return (0x0F)
+ }
+ }
+
You must change it to look at PEST instead of PEPT (i.e. do not probe,
just see if you have a meaningful address).
Just squash the patches, it's simpler that way probably.
Paolo
> + *(u16 *)(dsdt_ptr + *dsdt_isa_pest) = pvpanic_port;
> +}
> +
> static void fill_dsdt(struct fadt_descriptor_rev1 *fadt, void *dsdt)
> {
> if (fadt->dsdt) {
> free((void *)le32_to_cpu(fadt->dsdt));
> }
> + patch_dsdt(dsdt);
> fadt->dsdt = cpu_to_le32((u32)dsdt);
> fadt->checksum -= checksum(fadt, sizeof(*fadt));
> dprintf(1, "ACPI DSDT=%p\n", dsdt);
>
More information about the SeaBIOS
mailing list