Deleted Added
sdiff udiff text old ( 256281 ) new ( 262701 )
full compact
1\ Copyright (c) 2006-2012 Devin Teske <dteske@FreeBSD.org>
2\ All rights reserved.
3\
4\ Redistribution and use in source and binary forms, with or without
5\ modification, are permitted provided that the following conditions
6\ are met:
7\ 1. Redistributions of source code must retain the above copyright
8\ notice, this list of conditions and the following disclaimer.
9\ 2. Redistributions in binary form must reproduce the above copyright
10\ notice, this list of conditions and the following disclaimer in the
11\ documentation and/or other materials provided with the distribution.
12\
13\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23\ SUCH DAMAGE.
24\
25\ $FreeBSD: stable/10/sys/boot/forth/menu-commands.4th 243660 2012-11-28 18:35:46Z dteske $
26
27marker task-menu-commands.4th
28
29include /boot/menusets.4th
30
31variable kernel_state
32variable root_state
33
34\
35\ Boot
36\
37
38: init_boot ( N -- N )
39 dup
40 s" boot_single" getenv -1 <> if
41 drop ( n n c-addr -- n n ) \ unused
42 toggle_menuitem ( n n -- n n )
43 s" set menu_keycode[N]=115" \ base command to execute
44 else
45 s" set menu_keycode[N]=98" \ base command to execute
46 then
47 17 +c! \ replace 'N' with ASCII numeral
48 evaluate
49;
50
51\
52\ Alternate Boot
53\
54
55: init_altboot ( N -- N )
56 dup
57 s" boot_single" getenv -1 <> if
58 drop ( n c-addr -- n ) \ unused
59 toggle_menuitem ( n -- n )
60 s" set menu_keycode[N]=109" \ base command to execute
61 else
62 s" set menu_keycode[N]=115" \ base command to execute
63 then
64 17 +c! \ replace 'N' with ASCII numeral
65 evaluate
66;
67
68: altboot ( -- )
69 s" boot_single" 2dup getenv -1 <> if
70 drop ( c-addr/u c-addr -- c-addr/u ) \ unused
71 unsetenv ( c-addr/u -- )
72 else
73 2drop ( c-addr/u -- ) \ unused
74 s" set boot_single=YES" evaluate
75 then
76 0 boot ( state -- )
77;
78
79\
80\ ACPI
81\
82
83: acpi_enable ( -- )
84 s" set acpi_load=YES" evaluate \ XXX deprecated but harmless
85 s" set hint.acpi.0.disabled=0" evaluate
86 s" loader.acpi_disabled_by_user" unsetenv
87;
88
89: acpi_disable ( -- )
90 s" acpi_load" unsetenv \ XXX deprecated but harmless
91 s" set hint.acpi.0.disabled=1" evaluate
92 s" set loader.acpi_disabled_by_user=1" evaluate
93;
94
95: toggle_acpi ( N -- N TRUE )
96
97 \ Make changes effective _before_ calling menu-redraw
98
99 acpienabled? if
100 acpi_disable
101 else
102 acpi_enable
103 then
104
105 menu-redraw
106
107 TRUE \ loop menu again
108;
109
110\
111\ Safe Mode
112\
113
114: safemode_enabled? ( -- flag )
115 s" kern.smp.disabled" getenv -1 <> dup if
116 swap drop ( c-addr flag -- flag )
117 then
118;
119
120: safemode_enable ( -- )
121 s" set kern.smp.disabled=1" evaluate
122 s" set hw.ata.ata_dma=0" evaluate
123 s" set hw.ata.atapi_dma=0" evaluate
124 s" set hw.ata.wc=0" evaluate
125 s" set hw.eisa_slots=0" evaluate
126 s" set kern.eventtimer.periodic=1" evaluate
127 s" set kern.geom.part.check_integrity=0" evaluate
128;
129
130: safemode_disable ( -- )
131 s" kern.smp.disabled" unsetenv
132 s" hw.ata.ata_dma" unsetenv
133 s" hw.ata.atapi_dma" unsetenv
134 s" hw.ata.wc" unsetenv
135 s" hw.eisa_slots" unsetenv
136 s" kern.eventtimer.periodic" unsetenv
137 s" kern.geom.part.check_integrity" unsetenv
138;
139
140: init_safemode ( N -- N )
141 safemode_enabled? if
142 toggle_menuitem ( n -- n )
143 then
144;
145
146: toggle_safemode ( N -- N TRUE )
147 toggle_menuitem
148
149 \ Now we're going to make the change effective
150
151 dup toggle_stateN @ 0= if
152 safemode_disable
153 else
154 safemode_enable
155 then
156
157 menu-redraw
158
159 TRUE \ loop menu again
160;
161
162\
163\ Single User Mode
164\
165
166: singleuser_enabled? ( -- flag )
167 s" boot_single" getenv -1 <> dup if
168 swap drop ( c-addr flag -- flag )
169 then
170;
171
172: singleuser_enable ( -- )
173 s" set boot_single=YES" evaluate
174;
175
176: singleuser_disable ( -- )
177 s" boot_single" unsetenv
178;
179
180: init_singleuser ( N -- N )
181 singleuser_enabled? if
182 toggle_menuitem ( n -- n )
183 then
184;
185
186: toggle_singleuser ( N -- N TRUE )
187 toggle_menuitem
188 menu-redraw
189
190 \ Now we're going to make the change effective
191
192 dup toggle_stateN @ 0= if
193 singleuser_disable
194 else
195 singleuser_enable
196 then
197
198 TRUE \ loop menu again
199;
200
201\
202\ Verbose Boot
203\
204
205: verbose_enabled? ( -- flag )
206 s" boot_verbose" getenv -1 <> dup if
207 swap drop ( c-addr flag -- flag )
208 then
209;
210
211: verbose_enable ( -- )
212 s" set boot_verbose=YES" evaluate
213;
214
215: verbose_disable ( -- )
216 s" boot_verbose" unsetenv
217;
218
219: init_verbose ( N -- N )
220 verbose_enabled? if
221 toggle_menuitem ( n -- n )
222 then
223;
224
225: toggle_verbose ( N -- N TRUE )
226 toggle_menuitem
227 menu-redraw
228
229 \ Now we're going to make the change effective
230
231 dup toggle_stateN @ 0= if
232 verbose_disable
233 else
234 verbose_enable
235 then
236
237 TRUE \ loop menu again
238;
239
240\
241\ Escape to Prompt
242\
243
244: goto_prompt ( N -- N FALSE )
245
246 s" set autoboot_delay=NO" evaluate
247
248 cr
249 ." To get back to the menu, type `menu' and press ENTER" cr
250 ." or type `boot' and press ENTER to start FreeBSD." cr
251 cr
252
253 FALSE \ exit the menu
254;
255
256\
257\ Cyclestate (used by kernel/root below)
258\
259
260: init_cyclestate ( N K -- N )
261 over cycle_stateN ( n k -- n k addr )
262 begin
263 tuck @ ( n k addr -- n addr k c )
264 over <> ( n addr k c -- n addr k 0|-1 )
265 while
266 rot ( n addr k -- addr k n )
267 cycle_menuitem
268 swap rot ( addr k n -- n k addr )
269 repeat
270 2drop ( n k addr -- n )
271;
272
273\
274\ Kernel
275\
276
277: init_kernel ( N -- N )
278 kernel_state @ ( n -- n k )
279 init_cyclestate ( n k -- n )
280;
281
282: cycle_kernel ( N -- N TRUE )
283 cycle_menuitem
284 menu-redraw
285
286 \ Now we're going to make the change effective
287
288 dup cycle_stateN @
289 dup kernel_state ! \ save a copy for re-initialization
290 48 + \ convert to ASCII numeral
291
292 s" set kernel=${kernel_prefix}${kernel[N]}${kernel_suffix}"
293 36 +c! \ replace 'N' with ASCII numeral
294 evaluate \ sets $kernel to full kernel-path
295
296 TRUE \ loop menu again
297;
298
299\
300\ Root
301\
302
303: init_root ( N -- N )
304 root_state @ ( n -- n k )
305 init_cyclestate ( n k -- n )
306;
307
308: cycle_root ( N -- N TRUE )
309 cycle_menuitem
310 menu-redraw
311
312 \ Now we're going to make the change effective
313
314 dup cycle_stateN @
315 dup root_state ! \ save a copy for re-initialization
316 48 + \ convert to ASCII numeral
317
318 s" set root=${root_prefix}${root[N]}${root_suffix}"
319 30 +c! \ replace 'N' with ASCII numeral
320 evaluate \ sets $root to full root-path
321
322 TRUE \ loop menu again
323;
324
325\
326\ Menusets
327\
328
329: goto_menu ( N M -- N TRUE )
330 menu-unset
331 menuset-loadsetnum ( n m -- n )
332 menu-redraw
333 TRUE \ Loop menu again
334;
335
336\
337\ Defaults
338\
339
340: set_default_boot_options ( N -- N TRUE )
341 acpi_enable
342 safemode_disable
343 singleuser_disable
344 verbose_disable
345 2 goto_menu
346;