1088b4f5fSWarner Losh-- 2088b4f5fSWarner Losh-- Copyright (c) 2015 Pedro Souza <pedrosouza@freebsd.org> 3088b4f5fSWarner Losh-- All rights reserved. 4088b4f5fSWarner Losh-- 5088b4f5fSWarner Losh-- Redistribution and use in source and binary forms, with or without 6088b4f5fSWarner Losh-- modification, are permitted provided that the following conditions 7088b4f5fSWarner Losh-- are met: 8088b4f5fSWarner Losh-- 1. Redistributions of source code must retain the above copyright 9088b4f5fSWarner Losh-- notice, this list of conditions and the following disclaimer. 10088b4f5fSWarner Losh-- 2. Redistributions in binary form must reproduce the above copyright 11088b4f5fSWarner Losh-- notice, this list of conditions and the following disclaimer in the 12088b4f5fSWarner Losh-- documentation and/or other materials provided with the distribution. 13088b4f5fSWarner Losh-- 14088b4f5fSWarner Losh-- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15088b4f5fSWarner Losh-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16088b4f5fSWarner Losh-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17088b4f5fSWarner Losh-- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18088b4f5fSWarner Losh-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19088b4f5fSWarner Losh-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20088b4f5fSWarner Losh-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21088b4f5fSWarner Losh-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22088b4f5fSWarner Losh-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23088b4f5fSWarner Losh-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24088b4f5fSWarner Losh-- SUCH DAMAGE. 25088b4f5fSWarner Losh-- 26088b4f5fSWarner Losh-- $FreeBSD$ 27088b4f5fSWarner Losh-- 28088b4f5fSWarner Losh 29088b4f5fSWarner Loshlocal core = {}; 30088b4f5fSWarner Losh 31fe672a15SKyle Evans-- Commonly appearing constants 32fe672a15SKyle Evanscore.KEY_ENTER = 13 33fe672a15SKyle Evanscore.KEY_BACKSPACE = 127 34fe672a15SKyle Evans 35088b4f5fSWarner Loshfunction core.setVerbose(b) 36088b4f5fSWarner Losh if (b == nil) then 37088b4f5fSWarner Losh b = not core.verbose; 38088b4f5fSWarner Losh end 39088b4f5fSWarner Losh 40088b4f5fSWarner Losh if (b == true) then 41088b4f5fSWarner Losh loader.setenv("boot_verbose", "YES"); 42088b4f5fSWarner Losh else 43088b4f5fSWarner Losh loader.unsetenv("boot_verbose"); 44088b4f5fSWarner Losh end 45088b4f5fSWarner Losh core.verbose = b; 46088b4f5fSWarner Loshend 47088b4f5fSWarner Losh 48088b4f5fSWarner Loshfunction core.setSingleUser(b) 49088b4f5fSWarner Losh if (b == nil) then 50088b4f5fSWarner Losh b = not core.su; 51088b4f5fSWarner Losh end 52088b4f5fSWarner Losh 53088b4f5fSWarner Losh if (b == true) then 54088b4f5fSWarner Losh loader.setenv("boot_single", "YES"); 55088b4f5fSWarner Losh else 56088b4f5fSWarner Losh loader.unsetenv("boot_single"); 57088b4f5fSWarner Losh end 58088b4f5fSWarner Losh core.su = b; 59088b4f5fSWarner Loshend 60088b4f5fSWarner Losh 61*6401094fSKyle Evansfunction core.getACPIPresent(checkingSystemDefaults) 62*6401094fSKyle Evans local c = loader.getenv("hint.acpi.0.rsdp"); 63*6401094fSKyle Evans 64*6401094fSKyle Evans if (c ~= nil) then 65*6401094fSKyle Evans if (checkingSystemDefaults == true) then 66*6401094fSKyle Evans return true; 67*6401094fSKyle Evans end 68*6401094fSKyle Evans -- Otherwise, respect disabled if it's set 69*6401094fSKyle Evans c = loader.getenv("hint.acpi.0.disabled"); 70*6401094fSKyle Evans return (c == nil) or (tonumber(c) ~= 1); 71*6401094fSKyle Evans end 72*6401094fSKyle Evans return false; 73*6401094fSKyle Evansend 74*6401094fSKyle Evans 75088b4f5fSWarner Loshfunction core.setACPI(b) 76088b4f5fSWarner Losh if (b == nil) then 77088b4f5fSWarner Losh b = not core.acpi; 78088b4f5fSWarner Losh end 79088b4f5fSWarner Losh 80088b4f5fSWarner Losh if (b == true) then 81088b4f5fSWarner Losh loader.setenv("acpi_load", "YES"); 82088b4f5fSWarner Losh loader.setenv("hint.acpi.0.disabled", "0"); 83088b4f5fSWarner Losh loader.unsetenv("loader.acpi_disabled_by_user"); 84088b4f5fSWarner Losh else 85088b4f5fSWarner Losh loader.unsetenv("acpi_load"); 86088b4f5fSWarner Losh loader.setenv("hint.acpi.0.disabled", "1"); 87088b4f5fSWarner Losh loader.setenv("loader.acpi_disabled_by_user", "1"); 88088b4f5fSWarner Losh end 89088b4f5fSWarner Losh core.acpi = b; 90088b4f5fSWarner Loshend 91088b4f5fSWarner Losh 92088b4f5fSWarner Loshfunction core.setSafeMode(b) 93088b4f5fSWarner Losh if (b == nil) then 94088b4f5fSWarner Losh b = not core.sm; 95088b4f5fSWarner Losh end 96088b4f5fSWarner Losh if (b == true) then 97088b4f5fSWarner Losh loader.setenv("kern.smp.disabled", "1"); 98088b4f5fSWarner Losh loader.setenv("hw.ata.ata_dma", "0"); 99088b4f5fSWarner Losh loader.setenv("hw.ata.atapi_dma", "0"); 100088b4f5fSWarner Losh loader.setenv("hw.ata.wc", "0"); 101088b4f5fSWarner Losh loader.setenv("hw.eisa_slots", "0"); 102088b4f5fSWarner Losh loader.setenv("kern.eventtimer.periodic", "1"); 103088b4f5fSWarner Losh loader.setenv("kern.geom.part.check_integrity", "0"); 104088b4f5fSWarner Losh else 105088b4f5fSWarner Losh loader.unsetenv("kern.smp.disabled"); 106088b4f5fSWarner Losh loader.unsetenv("hw.ata.ata_dma"); 107088b4f5fSWarner Losh loader.unsetenv("hw.ata.atapi_dma"); 108088b4f5fSWarner Losh loader.unsetenv("hw.ata.wc"); 109088b4f5fSWarner Losh loader.unsetenv("hw.eisa_slots"); 110088b4f5fSWarner Losh loader.unsetenv("kern.eventtimer.periodic"); 111088b4f5fSWarner Losh loader.unsetenv("kern.geom.part.check_integrity"); 112088b4f5fSWarner Losh end 113088b4f5fSWarner Losh core.sm = b; 114088b4f5fSWarner Loshend 115088b4f5fSWarner Losh 116088b4f5fSWarner Loshfunction core.kernelList() 117088b4f5fSWarner Losh local k = loader.getenv("kernel"); 118088b4f5fSWarner Losh local v = loader.getenv("kernels") or ""; 119088b4f5fSWarner Losh 120088b4f5fSWarner Losh local kernels = {}; 121088b4f5fSWarner Losh local i = 0; 122088b4f5fSWarner Losh if k ~= nil then 123088b4f5fSWarner Losh i = i + 1; 124088b4f5fSWarner Losh kernels[i] = k; 125088b4f5fSWarner Losh end 126088b4f5fSWarner Losh 127088b4f5fSWarner Losh for n in v:gmatch("([^; ]+)[; ]?") do 128088b4f5fSWarner Losh if n ~= k then 129088b4f5fSWarner Losh i = i + 1; 130088b4f5fSWarner Losh kernels[i] = n; 131088b4f5fSWarner Losh end 132088b4f5fSWarner Losh end 133088b4f5fSWarner Losh return kernels; 134088b4f5fSWarner Loshend 135088b4f5fSWarner Losh 136088b4f5fSWarner Loshfunction core.setDefaults() 137*6401094fSKyle Evans core.setACPI(core.getACPIPresent(true)); 138088b4f5fSWarner Losh core.setSafeMode(false); 139088b4f5fSWarner Losh core.setSingleUser(false); 140088b4f5fSWarner Losh core.setVerbose(false); 141088b4f5fSWarner Loshend 142088b4f5fSWarner Losh 143088b4f5fSWarner Loshfunction core.autoboot() 144088b4f5fSWarner Losh loader.perform("autoboot"); 145088b4f5fSWarner Loshend 146088b4f5fSWarner Losh 147088b4f5fSWarner Loshfunction core.boot() 148088b4f5fSWarner Losh loader.perform("boot"); 149088b4f5fSWarner Loshend 150088b4f5fSWarner Losh 151088b4f5fSWarner Loshfunction core.bootserial() 152088b4f5fSWarner Losh local c = loader.getenv("console"); 153088b4f5fSWarner Losh 154088b4f5fSWarner Losh if c ~= nil then 155088b4f5fSWarner Losh if c:find("comconsole") ~= nil then 156088b4f5fSWarner Losh return true; 157088b4f5fSWarner Losh end 158088b4f5fSWarner Losh end 159088b4f5fSWarner Losh 160088b4f5fSWarner Losh local s = loader.getenv("boot_serial"); 161088b4f5fSWarner Losh if s ~= nil then 162088b4f5fSWarner Losh return true; 163088b4f5fSWarner Losh end 164088b4f5fSWarner Losh 165088b4f5fSWarner Losh local m = loader.getenv("boot_multicons"); 166088b4f5fSWarner Losh if m ~= nil then 167088b4f5fSWarner Losh return true; 168088b4f5fSWarner Losh end 169088b4f5fSWarner Losh return false; 170088b4f5fSWarner Loshend 171088b4f5fSWarner Losh 172*6401094fSKyle Evanscore.acpi = core.getACPIPresent(false) 173088b4f5fSWarner Loshreturn core 174