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.
[Solved] Location of ACPI tables, purpose of AML at runtime.
-
- Posts: 6
- Joined: Sat Aug 03, 2024 3:21 pm
[Solved] Location of ACPI tables, purpose of AML at runtime.
Last edited by onelastdevalex on Tue Aug 13, 2024 12:02 pm, edited 1 time in total.
-
- Member
- Posts: 5494
- Joined: Mon Mar 25, 2013 7:01 pm
Re: Location of ACPI tables, purpose of AML at runtime.
ACPI tables are often located in ACPI reclaim memory, but not always.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?
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 pmdoesn't this mean that ACPI tables are only meant to be read during the boot/loading process of the OS?
Neither of those require AML...
You might need to load definition blocks (basically SSDTs) at runtime, but they'll never be in ACPI reclaim memory.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?
-
- Posts: 6
- Joined: Sat Aug 03, 2024 3:21 pm
Re: Location of ACPI tables, purpose of AML at runtime.
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 pmACPI tables are often located in ACPI reclaim memory, but not always.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?
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 pmdoesn't this mean that ACPI tables are only meant to be read during the boot/loading process of the OS?
You might need to load definition blocks (basically SSDTs) at runtime, but they'll never be in ACPI reclaim memory.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?
Oh my bad, I thought I read this somewhere...
Thank you!
-
- Member
- Posts: 5494
- Joined: Mon Mar 25, 2013 7:01 pm
Re: Location of ACPI tables, purpose of AML at runtime.
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 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?
Yes, you can remap ACPI NVS memory however you like.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?)
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.
-
- Posts: 6
- Joined: Sat Aug 03, 2024 3:21 pm
Re: Location of ACPI tables, purpose of AML at runtime.
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 pmCopying 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 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?
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)?Octocontrabass wrote: ↑Mon Aug 12, 2024 6:04 pmYes, you can remap ACPI NVS memory however you like.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?)
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.
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.
-
- Member
- Posts: 5494
- Joined: Mon Mar 25, 2013 7:01 pm
Re: Location of ACPI tables, purpose of AML at runtime.
Any addresses you see will be physical addresses. ACPI is not a UEFI runtime service.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)?
-
- Posts: 6
- Joined: Sat Aug 03, 2024 3:21 pm
Re: Location of ACPI tables, purpose of AML at runtime.
Okay thank you very much!