Page 1 of 1
[Solved] Location of ACPI tables, purpose of AML at runtime.
Posted: Mon Aug 12, 2024 1:21 pm
by onelastdevalex
Hi,
I was wondering whether ACPI tables are always located inside a memory region marked as EfiACPIReclaimMemory on UEFI systems, could anybody confirm this please? I looked at the ACPI specifications and it says it should (ACPI 6.2 figure 16-82).
However, what troubles me the most is that if those tables are in such memory regions, which can be freely overwritten by the OS later on, doesn't this mean that ACPI tables are only meant to be read during the boot/loading process of the OS? Then what's the point of having an AML interpreter at runtime?
I'm pretty sure I'm missing a ton of details, but I'm trying to learn as much as I can (I never really bothered using ACPI before, and I don't want to use ACPICA yet as my brain would be too lazy to learn ACPI stuff afterwards :D). I know AML can be needed for SMP, and HPET but those tables are available at boot time ; are there any tables that can appear during runtime?
Forgive me if those questions sound stupid, I've been stuck on them for a while now, so I guessed asking here would not be a bad idea.
Thanks in advance, Alex.
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Mon Aug 12, 2024 3:04 pm
by Octocontrabass
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmI was wondering whether ACPI tables are always located inside a memory region marked as EfiACPIReclaimMemory on UEFI systems, could anybody confirm this please?
ACPI tables are often located in ACPI reclaim memory, but not always.
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmdoesn't this mean that ACPI tables are only meant to be read during the boot/loading process of the OS?
That's up to you. You'll need information from the ACPI tables the entire time your OS is running. You don't need to keep the original ACPI tables around if you've got a copy of that information somewhere else.
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmI know AML can be needed for SMP, and HPET
Neither of those require AML...
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmbut those tables are available at boot time ; are there any tables that can appear during runtime?
You might need to load definition blocks (basically SSDTs) at runtime, but they'll never be in ACPI reclaim memory.
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Mon Aug 12, 2024 3:18 pm
by onelastdevalex
Octocontrabass wrote: ↑Mon Aug 12, 2024 3:04 pm
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmI was wondering whether ACPI tables are always located inside a memory region marked as EfiACPIReclaimMemory on UEFI systems, could anybody confirm this please?
ACPI tables are often located in ACPI reclaim memory, but not always.
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmdoesn't this mean that ACPI tables are only meant to be read during the boot/loading process of the OS?
That's up to you. You'll need information from the ACPI tables the entire time your OS is running. You don't need to keep the original ACPI tables around if you've got a copy of that information somewhere else.
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmbut those tables are available at boot time ; are there any tables that can appear during runtime?
You might need to load definition blocks (basically SSDTs) at runtime, but they'll never be in ACPI reclaim memory.
So if I understand correctly, making a copy of these tables is enough (that is, they don't contain data that is needed by something else than the OS at runtime?), meaning I can remap them where I want and I should be good? (also, can I remap the NVS memory where I want, and calling SetVirtualAddressMap with the new addresses?)
Octocontrabass wrote: ↑Mon Aug 12, 2024 3:04 pm
onelastdevalex wrote: ↑Mon Aug 12, 2024 1:21 pmI know AML can be needed for SMP, and HPET
Neither of those require AML...
Oh my bad, I thought I read this somewhere...
Thank you!
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Mon Aug 12, 2024 6:04 pm
by Octocontrabass
onelastdevalex wrote: ↑Mon Aug 12, 2024 3:18 pmSo if I understand correctly, making a copy of these tables is enough (that is, they don't contain data that is needed by something else than the OS at runtime?), meaning I can remap them where I want and I should be good?
Copying and remapping are two completely different things. But yes, you can do whatever you want with ACPI reclaim memory, your OS is the only thing allowed to use it.
onelastdevalex wrote: ↑Mon Aug 12, 2024 3:18 pm(also, can I remap the NVS memory where I want, and calling SetVirtualAddressMap with the new addresses?)
Yes, you can remap ACPI NVS memory however you like.
ACPI NVS memory isn't supposed to have the EFI_MEMORY_RUNTIME attribute, but if it does, you'll need to handle it the same as anything else with the EFI_MEMORY_RUNTIME attribute: assign a virtual address when you call SetVirtualAddressMap, then make sure it's mapped at that virtual address any time you call runtime services.
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Tue Aug 13, 2024 2:55 am
by onelastdevalex
Octocontrabass wrote: ↑Mon Aug 12, 2024 6:04 pm
onelastdevalex wrote: ↑Mon Aug 12, 2024 3:18 pmSo if I understand correctly, making a copy of these tables is enough (that is, they don't contain data that is needed by something else than the OS at runtime?), meaning I can remap them where I want and I should be good?
Copying and remapping are two completely different things. But yes, you can do whatever you want with ACPI reclaim memory, your OS is the only thing allowed to use it.
Yes my bad, I was a bit tired when I wrote this, I meant to copy and unmap the original ACPI tables, but I get what you mean. Thanks.
Octocontrabass wrote: ↑Mon Aug 12, 2024 6:04 pm
onelastdevalex wrote: ↑Mon Aug 12, 2024 3:18 pm(also, can I remap the NVS memory where I want, and calling SetVirtualAddressMap with the new addresses?)
Yes, you can remap ACPI NVS memory however you like.
ACPI NVS memory isn't supposed to have the EFI_MEMORY_RUNTIME attribute, but if it does, you'll need to handle it the same as anything else with the EFI_MEMORY_RUNTIME attribute: assign a virtual address when you call SetVirtualAddressMap, then make sure it's mapped at that virtual address any time you call runtime services.
Again, I'm so sorry if my questions seem really basic. If I can remap the NVS space however I like, then it means that the firmware accesses it using physical addressing and not virtual addressing, otherwise it would not make a lot of sense, especially when switching to/from S4 and S5 states (ACPI 6.2 figure 15-363)?
Following the same logic, can I remap the PCI devices configuration spaces wherever I want because the devices/peripherals also use physical addressing instead of virtual addressing, or am I completely wrong for doing this?
I think my biggest misunderstanding lies in what uses physical addressing and what does not...
(I went though the PCIe specification again, and read other related posts and found my answer to this)
Anyway, thank you for your answers and your patience
, theses are probably my last questions regarding this topic anyway.
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Tue Aug 13, 2024 11:35 am
by Octocontrabass
onelastdevalex wrote: ↑Tue Aug 13, 2024 2:55 amAgain, I'm so sorry if my questions seem really basic. If I can remap the NVS space however I like, then it means that the firmware accesses it using physical addressing and not virtual addressing, otherwise it would not make a lot of sense, especially when switching to/from S4 and S5 states (ACPI 6.2 figure 15-363)?
Any addresses you see will be physical addresses. ACPI is not a UEFI runtime service.
Re: Location of ACPI tables, purpose of AML at runtime.
Posted: Tue Aug 13, 2024 12:01 pm
by onelastdevalex
Okay thank you very much!