blob: 5a082156ff55e98009e7e986e0ae46821df59b53 [file] [log] [blame]
\ *****************************************************************************
\ * Copyright (c) 2004, 2008 IBM Corporation
\ * All rights reserved.
\ * This program and the accompanying materials
\ * are made available under the terms of the BSD License
\ * which accompanies this distribution, and is available at
\ * http://www.opensource.org/licenses/bsd-license.php
\ *
\ * Contributors:
\ * IBM Corporation - initial implementation
\ ****************************************************************************/
4 CONSTANT vpd-bootlist-size
\ Bootable devices
00 CONSTANT FLOPPY
01 CONSTANT USB
02 CONSTANT SAS
03 CONSTANT SATA
04 CONSTANT ISCSI
05 CONSTANT ISCSICRITICAL
06 CONSTANT NET
07 CONSTANT NOTSPECIFIED
08 CONSTANT HDD0
09 CONSTANT HDD1
0a CONSTANT HDD2
0b CONSTANT HDD3
0c CONSTANT CDROM
0e CONSTANT HDD4
10 CONSTANT SCSI
: check-bootlist ( -- true | false )
vpd-bootlist l@
dup 0= IF
( bootlist == 0 means that probably nothing from vpd has been received )
s" Boot list could not be read from VPD" log-string cr
s" Boot watchdog has been rearmed" log-string cr
2 set-watchdog
EXIT
THEN
FFFFFFFF = IF
( bootlist all FFs means that the vpd has no useful information )
.banner
-6b boot-exception-handler
\ The next message is duplicate, but sent w. log-string
s" Boot list successfully read from VPD but no useful information received" log-string cr
s" Please specify the boot device in the management module" log-string cr
s" Specified Boot Sequence not valid" mm-log-warning
false
EXIT
THEN
true
;
\ the following words are necessary for vpd-boot-import
defer set-boot-device
defer add-boot-device
\ select-install? is a flag which is used in the SMS panel #20
\ "Select/Install Boot Devices".
\ This panel can be used to temporarily override the boot device.
false VALUE select-install?
\ select/install-path stores string address and string length of the
\ device node chosen in the SMS panel #20 "Select/Install Boot Devices"
\ This device node is prepended to the boot path if select-install? is
\ true.
CREATE select/install-path 2 cells allot
\ Import boot device list from VPD
\ If none, keep the existing list in NVRAM
\ This word can be used to overwrite read-bootlist if wanted
: vpd-boot-import ( -- )
0 0 set-boot-device
select-install? IF
select/install-path 2@ add-boot-device
THEN
vpd-read-bootlist
check-bootlist IF
4 0 DO vpd-bootlist i + c@
CASE
6 OF \ cr s" 2B Booting from Network" log-string cr
furnish-boot-file strdup add-boot-device
ENDOF
HDD0 OF \ cr s" 2B Booting from hdd0" log-string cr
s" disk hdd0" add-boot-device ENDOF
HDD1 OF \ cr s" 2B Booting from hdd1" log-string cr
s" hdd1" add-boot-device ENDOF
HDD2 OF \ cr s" 2B Booting from hdd2" log-string cr
s" hdd2" add-boot-device ENDOF
HDD3 OF \ cr s" 2B Booting from hdd3" log-string cr
s" hdd3" add-boot-device ENDOF
CDROM OF \ cr s" 2B Booting from CDROM" log-string cr
s" cdrom" add-boot-device ENDOF
HDD4 OF \ cr s" 2B Booting from hdd4" log-string cr
s" hdd4" add-boot-device ENDOF
F OF \ cr s" 2B Booting from SAS - w. Timeout" log-string cr
s" sas" add-boot-device ENDOF
SCSI OF \ cr s" 2B Booting from SAS - Continuous Retry" log-string cr
s" sas" add-boot-device ENDOF
ENDCASE
LOOP
bootdevice 2@ nip
IF 0
ELSE
\ Check for all no device -> use boot-device
vpd-bootlist l@ 07070707 = IF 0 ELSE -6b THEN
THEN
ELSE -6a THEN
boot-exception-handler
;
: vpd-bootlist-restore-default ( -- )
NOTSPECIFIED vpd-bootlist 0 + c!
NOTSPECIFIED vpd-bootlist 1 + c!
NOTSPECIFIED vpd-bootlist 2 + c!
HDD0 vpd-bootlist 3 + c!
vpd-write-bootlist
;