mirror of
https://git.FreeBSD.org/src.git
synced 2024-10-19 02:29:40 +00:00
loader: improve lua ACPI detection and handling
This is a follow-up patch to https://reviews.freebsd.org/D42459 that modifies the loader lua to use the correct loader variables for determining ACPI availability. This also fixes a bug where ACPI can be inadvertently disabled when setting System Defaults at the loader menu. Reviewed by: imp, kevans Approved by: kp Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D42483
This commit is contained in:
parent
0b01d45783
commit
e0f3dc8272
@ -32,6 +32,7 @@ local hook = require("hook")
|
||||
|
||||
local core = {}
|
||||
|
||||
local default_acpi = false
|
||||
local default_safe_mode = false
|
||||
local default_single_user = false
|
||||
local default_verbose = false
|
||||
@ -46,20 +47,14 @@ local function composeLoaderCmd(cmd_name, argstr)
|
||||
end
|
||||
|
||||
local function recordDefaults()
|
||||
-- On i386, hint.acpi.0.rsdp will be set before we're loaded. On !i386,
|
||||
-- it will generally be set upon execution of the kernel. Because of
|
||||
-- this, we can't (or don't really want to) detect/disable ACPI on !i386
|
||||
-- reliably. Just set it enabled if we detect it and leave well enough
|
||||
-- alone if we don't.
|
||||
local boot_acpi = core.isSystem386() and core.getACPIPresent(false)
|
||||
local boot_single = loader.getenv("boot_single") or "no"
|
||||
local boot_verbose = loader.getenv("boot_verbose") or "no"
|
||||
|
||||
default_acpi = core.getACPI()
|
||||
default_single_user = boot_single:lower() ~= "no"
|
||||
default_verbose = boot_verbose:lower() ~= "no"
|
||||
|
||||
if boot_acpi then
|
||||
core.setACPI(true)
|
||||
end
|
||||
core.setACPI(default_acpi)
|
||||
core.setSingleUser(default_single_user)
|
||||
core.setVerbose(default_verbose)
|
||||
end
|
||||
@ -137,18 +132,18 @@ function core.setSingleUser(single_user)
|
||||
core.su = single_user
|
||||
end
|
||||
|
||||
function core.getACPIPresent(checking_system_defaults)
|
||||
local c = loader.getenv("hint.acpi.0.rsdp")
|
||||
function core.hasACPI()
|
||||
return loader.getenv("acpi.rsdp") ~= nil
|
||||
end
|
||||
|
||||
if c ~= nil then
|
||||
if checking_system_defaults then
|
||||
return true
|
||||
end
|
||||
-- Otherwise, respect disabled if it's set
|
||||
c = loader.getenv("hint.acpi.0.disabled")
|
||||
return c == nil or tonumber(c) ~= 1
|
||||
function core.getACPI()
|
||||
if not core.hasACPI() then
|
||||
return false
|
||||
end
|
||||
return false
|
||||
|
||||
-- Otherwise, respect disabled if it's set
|
||||
local c = loader.getenv("hint.acpi.0.disabled")
|
||||
return c == nil or tonumber(c) ~= 1
|
||||
end
|
||||
|
||||
function core.setACPI(acpi)
|
||||
@ -358,7 +353,7 @@ function core.loadEntropy()
|
||||
end
|
||||
|
||||
function core.setDefaults()
|
||||
core.setACPI(core.getACPIPresent(true))
|
||||
core.setACPI(default_acpi)
|
||||
core.setSafeMode(default_safe_mode)
|
||||
core.setSingleUser(default_single_user)
|
||||
core.setVerbose(default_verbose)
|
||||
@ -441,10 +436,6 @@ function core.isSerialBoot()
|
||||
return false
|
||||
end
|
||||
|
||||
function core.isSystem386()
|
||||
return loader.machine_arch == "i386"
|
||||
end
|
||||
|
||||
-- Is the menu skipped in the environment in which we've booted?
|
||||
function core.isMenuSkipped()
|
||||
return string.lower(loader.getenv("beastie_disable") or "") == "yes"
|
||||
|
@ -24,7 +24,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd March 21, 2018
|
||||
.Dd November 20, 2023
|
||||
.Dt CORE.LUA 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -90,7 +90,7 @@ constants.
|
||||
.Ss Exported functions
|
||||
The following functions are exported from
|
||||
.Nm :
|
||||
.Bl -tag -width core.getACPIPresent -offset indent
|
||||
.Bl -tag -width core.setSingleUser -offset indent
|
||||
.It Fn core.setVerbose verbose
|
||||
Sets or unsets
|
||||
.Ev boot_verbose .
|
||||
@ -103,15 +103,14 @@ Sets or unsets
|
||||
If
|
||||
.Fa singleUser
|
||||
is omitted, toggle the current single user setting.
|
||||
.It Fn core.getACPIPresent checkingSystemDefaults
|
||||
Check whether ACPI is present.
|
||||
This will only be accurate for i386-compatible loaders, including non-UEFI
|
||||
loaders on amd64 systems.
|
||||
If
|
||||
.Fa checkingSystemDefaults
|
||||
is true, ignore the current value of
|
||||
.Ev hint.acpi.0.disabled .
|
||||
Otherwise, return true only if ACPI is both present and not disabled.
|
||||
.It Fn core.getACPI
|
||||
Return true if ACPI is both present and not explicitly disabled by
|
||||
.Ev hints.acpi.0.disabled .
|
||||
.It Fn core.hasACPI
|
||||
Checks whether ACPI support is present.
|
||||
This requires the loader to probe the system and set
|
||||
.Ev acpi.rsdp
|
||||
early before starting the interpreter.
|
||||
.It Fn core.setACPI acpi
|
||||
Sets or unsets
|
||||
.Ev acpi_load ,
|
||||
@ -202,9 +201,6 @@ This checks
|
||||
.Ev boot_serial ,
|
||||
and
|
||||
.Ev boot_multicons .
|
||||
.It Fn core.isSystem386
|
||||
Returns true if this bootloader was compiled as an i386 binary.
|
||||
This generally applies to i386 loaders as well as non-UEFI loaders on amd64.
|
||||
.It Fn core.deepCopyTable tbl
|
||||
Recursively deep copies
|
||||
.Fa tbl
|
||||
|
@ -176,7 +176,7 @@ menu.boot_options = {
|
||||
-- acpi
|
||||
{
|
||||
entry_type = core.MENU_ENTRY,
|
||||
visible = core.isSystem386,
|
||||
visible = core.hasACPI,
|
||||
name = function()
|
||||
return OnOff(color.highlight("A") ..
|
||||
"CPI :", core.acpi)
|
||||
|
Loading…
Reference in New Issue
Block a user