aboutsummaryrefslogtreecommitdiff
path: root/website/content/en/status/report-2025-07-2025-09/ACPI.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'website/content/en/status/report-2025-07-2025-09/ACPI.adoc')
-rw-r--r--website/content/en/status/report-2025-07-2025-09/ACPI.adoc80
1 files changed, 80 insertions, 0 deletions
diff --git a/website/content/en/status/report-2025-07-2025-09/ACPI.adoc b/website/content/en/status/report-2025-07-2025-09/ACPI.adoc
new file mode 100644
index 0000000000..14a2f67524
--- /dev/null
+++ b/website/content/en/status/report-2025-07-2025-09/ACPI.adoc
@@ -0,0 +1,80 @@
+=== ACPI Lua Bindings
+
+Links: +
+link:https://www.github.com/kpowkitty/freebsd-src[Github] URL: link:https://www.github.com/kpowkitty/freebsd-src[] +
+link:https://www.github.com/freebsd/freebsd-src/pull/1740[PR: libsa: Add isprint()] URL: link:https://www.github.com/freebsd/freebsd-src/pull/1740[] +
+link:https://www.github.com/freebsd/freebsd-src/pull/1843[PR: loader: Move ACPI RSDP detection] URL: link:https://www.github.com/freebsd/freebsd-src/pull/1843[] +
+link:https://www.github.com/freebsd/freebsd-src/pull/1818[PR: efi: Create libacpi] URL: link:https://www.github.com/freebsd/freebsd-src/pull/1818[] +
+link:https://www.github.com/freebsd/freebsd-src/pull/1819[PR: liblua: ACPICA Lua bindings] URL: link:https://www.github.com/freebsd/freebsd-src/pull/1819[]
+
+Contact: Kayla Powell (AKA Kat) <kpowkitty@FreeBSD.org> +
+Mentor: Warner Losh <imp@FreeBSD.org>
+
+==== Introduction
+
+For Google Summer of Code 2025, I have been working on a project under mailto:imp@FreeBSD.org[Warner Losh] for ACPI Lua Bindings.
+ACPI (Advanced Power and Configuration Interface) is an interface for managing power in the OS, rather than in the BIOS.
+The goal is to expose ACPI to Lua in the loader for amd64 platforms, with future arm64 support.
+
+==== Outcomes
+
+* Lua is a much simpler, higher level scripting language that enables faster development.
+* It reduces ACPI-related guesswork in the bootloader.
+* It allows users to query and manipulate ACPI data before the kernel is entered, giving them control over loader-time configuration.
+
+==== Remarks
+
+If there are any specialized use cases for ACPI in the loader that my interface does not aid in, please reach out to me, and I will see what I can do.
+For now, this is the interface that I will be committing to the tree for GSoC, so while any extra work will have to come afterwards, I am interested in it (and encourage it).
+
+==== Current status
+
+* Completed:
+** ACPICA initialized in loader for amd64
+*** [.filename]#OsdMemory.c#
+*** [.filename]#osunixxf.c#
+*** AcpiInitializeSubsystem
+*** AcpiInitializeTables
+*** AcpiEnableSubsystem (in reduced hardware mode, with events enabled)
+*** AcpiLoadTables
+*** AcpiWalkNamespace
+*** AcpiEvaluateObject
+*** AcpiAttachData
+*** AcpiGetData
+*** AcpiDetachData
+** Lua bindings
+*** [.filename]#lacpi_walk.c#
+**** Users can walk and read nodes on the namespace
+*** [.filename]#lacpi_object.c#
+**** Users can evaluate objects
+*** [.filename]#lacpi_data.c#
+**** Users can attach, get, and detach data from nodes
+*** Man Page
+* Future plans:
+** [.filename]#lacpi_walk.c# (V2)
+*** Namespace printout format
+** [.filename]#lacpi_walk.c# (V3)
+*** Strategies for walking the namespace
+** arm64 compat
+
+==== Design constraints
+
+The loader is meant to be lightweight and prepare the kernel.
+In order to adhere to that, its initialization of ACPI has been reduced by 130 functions.
+These functions were picked such that they were not necessary for the above interface, or lacked possibility in the loader.
+They are:
+
+* AcpiInitializeObjects
+* AcpiInstallNotifyHandler
+* AcpiRemoveNotifyHandler
+
+Some functions needed to be stubbed in respect to the loader's limited library (specifically in [.filename]#osunixxf.c#).
+Some functions needed to handle physical addresses, rather than virtual memory mappings (specifically in [.filename]#OsdMemory.c#).
+
+==== Testing
+
+* Confirmation tests were performed, demonstrating that the ACPI namespace is initialized correctly by dumping it in the loader (in C and in Lua) and in the kernel (in C) and comparing the results.
+* Regression tests were performed, ensuring FreeBSD builds across all architectures with this change.
+* Unit tests were performed on the Lua bindings, verifying their functionality.
+
+Sponsor: Google Summer of Code 2025