summaryrefslogtreecommitdiffstats
path: root/sys/boot/forth/menu-commands.4th
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2012-11-16 01:24:11 +0000
committerdteske <dteske@FreeBSD.org>2012-11-16 01:24:11 +0000
commit48176b8f78106dce8ff54e657c3116365c3506d8 (patch)
tree31783a69ab6ec457b22778b5dab45a8dbe7434ba /sys/boot/forth/menu-commands.4th
parent0c0893582c1b0f767e754780731825b4ca62589c (diff)
downloadFreeBSD-src-48176b8f78106dce8ff54e657c3116365c3506d8.zip
FreeBSD-src-48176b8f78106dce8ff54e657c3116365c3506d8.tar.gz
+ This patch does not change user experience or functionality
+ Cleanup syntax, slim-down code, and make things more readable + Introduce new +c! operator and ilk to reduce heap usage/allocations + Add safemode_enabled? safemode_enable and safemode_disable functions + Add singleuser_enabled? singleuser_enable singleuser_disable functions + Add verbose_enabled? verbose_enable and verbose_disable functions + Centralize strings (also to reduce heap usage) Reviewed by: peterj, adrian (co-mentor) Approved by: adrian (co-mentor)
Diffstat (limited to 'sys/boot/forth/menu-commands.4th')
-rw-r--r--sys/boot/forth/menu-commands.4th163
1 files changed, 109 insertions, 54 deletions
diff --git a/sys/boot/forth/menu-commands.4th b/sys/boot/forth/menu-commands.4th
index 5c76769..a3ee588 100644
--- a/sys/boot/forth/menu-commands.4th
+++ b/sys/boot/forth/menu-commands.4th
@@ -31,6 +31,10 @@ include /boot/menusets.4th
variable kernel_state
variable root_state
+\
+\ ACPI
+\
+
: acpi_enable ( -- )
s" set acpi_load=YES" evaluate \ XXX deprecated but harmless
s" set hint.acpi.0.disabled=0" evaluate
@@ -58,9 +62,38 @@ variable root_state
TRUE \ loop menu again
;
+\
+\ Safe Mode
+\
+
+: safemode_enabled? ( -- flag )
+ s" kern.smp.disabled" getenv -1 <> dup if
+ swap drop ( c-addr flag -- flag )
+ then
+;
+
+: safemode_enable ( -- )
+ s" set kern.smp.disabled=1" evaluate
+ s" set hw.ata.ata_dma=0" evaluate
+ s" set hw.ata.atapi_dma=0" evaluate
+ s" set hw.ata.wc=0" evaluate
+ s" set hw.eisa_slots=0" evaluate
+ s" set kern.eventtimer.periodic=1" evaluate
+ s" set kern.geom.part.check_integrity=0" evaluate
+;
+
+: safemode_disable ( -- )
+ s" kern.smp.disabled" unsetenv
+ s" hw.ata.ata_dma" unsetenv
+ s" hw.ata.atapi_dma" unsetenv
+ s" hw.ata.wc" unsetenv
+ s" hw.eisa_slots" unsetenv
+ s" kern.eventtimer.periodic" unsetenv
+ s" kern.geom.part.check_integrity" unsetenv
+;
+
: init_safemode ( N -- N )
- s" kern.smp.disabled" getenv -1 <> if
- drop ( n c-addr -- n ) \ unused
+ safemode_enabled? if
toggle_menuitem ( n -- n )
then
;
@@ -70,25 +103,10 @@ variable root_state
\ Now we're going to make the change effective
- s" toggle_stateN @" \ base name of toggle state var
- -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral
-
- evaluate 0= if
- s" kern.smp.disabled" unsetenv
- s" hw.ata.ata_dma" unsetenv
- s" hw.ata.atapi_dma" unsetenv
- s" hw.ata.wc" unsetenv
- s" hw.eisa_slots" unsetenv
- s" kern.eventtimer.periodic" unsetenv
- s" kern.geom.part.check_integrity" unsetenv
+ dup toggle_stateN @ 0= if
+ safemode_disable
else
- s" set kern.smp.disabled=1" evaluate
- s" set hw.ata.ata_dma=0" evaluate
- s" set hw.ata.atapi_dma=0" evaluate
- s" set hw.ata.wc=0" evaluate
- s" set hw.eisa_slots=0" evaluate
- s" set kern.eventtimer.periodic=1" evaluate
- s" set kern.geom.part.check_integrity=0" evaluate
+ safemode_enable
then
menu-redraw
@@ -96,9 +114,26 @@ variable root_state
TRUE \ loop menu again
;
+\
+\ Single User Mode
+\
+
+: singleuser_enabled? ( -- flag )
+ s" boot_single" getenv -1 <> dup if
+ swap drop ( c-addr flag -- flag )
+ then
+;
+
+: singleuser_enable ( -- )
+ s" set boot_single=YES" evaluate
+;
+
+: singleuser_disable ( -- )
+ s" boot_single" unsetenv
+;
+
: init_singleuser ( N -- N )
- s" boot_single" getenv -1 <> if
- drop ( n c-addr -- n ) \ unused
+ singleuser_enabled? if
toggle_menuitem ( n -- n )
then
;
@@ -109,21 +144,35 @@ variable root_state
\ Now we're going to make the change effective
- s" toggle_stateN @" \ base name of toggle state var
- -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral
-
- evaluate 0= if
- s" boot_single" unsetenv
+ dup toggle_stateN @ 0= if
+ singleuser_disable
else
- s" set boot_single=YES" evaluate
+ singleuser_enable
then
TRUE \ loop menu again
;
+\
+\ Verbose Boot
+\
+
+: verbose_enabled? ( -- flag )
+ s" boot_verbose" getenv -1 <> dup if
+ swap drop ( c-addr flag -- flag )
+ then
+;
+
+: verbose_enable ( -- )
+ s" set boot_verbose=YES" evaluate
+;
+
+: verbose_disable ( -- )
+ s" boot_verbose" unsetenv
+;
+
: init_verbose ( N -- N )
- s" boot_verbose" getenv -1 <> if
- drop ( n c-addr -- n ) \ unused
+ verbose_enabled? if
toggle_menuitem ( n -- n )
then
;
@@ -134,18 +183,19 @@ variable root_state
\ Now we're going to make the change effective
- s" toggle_stateN @" \ base name of toggle state var
- -rot 2dup 12 + c! rot \ replace 'N' with ASCII numeral
-
- evaluate 0= if
- s" boot_verbose" unsetenv
+ dup toggle_stateN @ 0= if
+ verbose_disable
else
- s" set boot_verbose=YES" evaluate
+ verbose_enable
then
TRUE \ loop menu again
;
+\
+\ Escape to Prompt
+\
+
: goto_prompt ( N -- N FALSE )
s" set autoboot_delay=NO" evaluate
@@ -158,11 +208,12 @@ variable root_state
FALSE \ exit the menu
;
+\
+\ Cyclestate (used by kernel/root below)
+\
+
: init_cyclestate ( N K -- N )
- over ( n k -- n k n )
- s" cycle_stateN" ( n k n -- n k n c-addr u )
- -rot tuck 11 + c! swap ( n k n c-addr u -- n k c-addr u )
- evaluate ( n k c-addr u -- n k addr )
+ over cycle_stateN ( n k -- n k addr )
begin
tuck @ ( n k addr -- n addr k c )
over <> ( n addr k c -- n addr k 0|-1 )
@@ -174,6 +225,10 @@ variable root_state
2drop ( n k addr -- n )
;
+\
+\ Kernel
+\
+
: init_kernel ( N -- N )
kernel_state @ ( n -- n k )
init_cyclestate ( n k -- n )
@@ -185,21 +240,21 @@ variable root_state
\ Now we're going to make the change effective
- s" cycle_stateN" \ base name of array state var
- -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral
- evaluate \ translate name into address
- @ \ dereference address into value
+ dup cycle_stateN @
dup kernel_state ! \ save a copy for re-initialization
48 + \ convert to ASCII numeral
s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}"
- \ command to assemble full kernel-path
- -rot tuck 36 + c! swap \ replace 'N' with array index value
- evaluate \ sets $kernel to full kernel-path
+ 36 +c! \ replace 'N' with ASCII numeral
+ evaluate \ sets $kernel to full kernel-path
TRUE \ loop menu again
;
+\
+\ Root
+\
+
: init_root ( N -- N )
root_state @ ( n -- n k )
init_cyclestate ( n k -- n )
@@ -211,21 +266,21 @@ variable root_state
\ Now we're going to make the change effective
- s" cycle_stateN" \ base name of array state var
- -rot 2dup 11 + c! rot \ replace 'N' with ASCII numeral
- evaluate \ translate name into address
- @ \ dereference address into value
+ dup cycle_stateN @
dup root_state ! \ save a copy for re-initialization
48 + \ convert to ASCII numeral
s" set root=${root_prefix}${root[N]}${root_suffix}"
- \ command to assemble root image-path
- -rot tuck 30 + c! swap \ replace 'N' with array index value
- evaluate \ sets $kernel to full kernel-path
+ 30 +c! \ replace 'N' with ASCII numeral
+ evaluate \ sets $root to full root-path
TRUE \ loop menu again
;
+\
+\ Menusets
+\
+
: goto_menu ( N M -- N TRUE )
menu-unset
menuset-loadsetnum ( n m -- n )
OpenPOWER on IntegriCloud