`Phoenix Technologies Ltd.
`Intel Corporation
`
`BIOS Boot Specification
`
`Version 1.01
`January 11, 1996
`
`This specification has been made available to the public. You are hereby granted the right to use,
`implement, reproduce, and distribute this specification with the foregoing rights at no charge. This
`specification is, and shall remain, the property of Compaq Computer Corporation (“Compaq”),
`Phoenix Technologies Ltd (“Phoenix”), and Intel Corporation (“Intel”).
`
`NEITHER COMPAQ, PHOENIX NOR INTEL MAKE ANY REPRESENTATION OR
`WARRANTY REGARDING THIS SPECIFICATION OR ANY PRODUCT OR ITEM
`DEVELOPED BASED ON THIS SPECIFICATION. USE OF THIS SPECIFICATION FOR
`ANY PURPOSE IS AT THE RISK OF THE PERSON OR ENTITY USING IT. COMPAQ,
`PHOENIX AND INTEL DISCLAIM ALL EXPRESS AND IMPLIED WARRANTIES,
`INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
`MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND FREEDOM FROM
`INFRINGEMENT. WITHOUT LIMITING THE GENERALITY OF THE FOREGOING,
`NEITHER COMPAQ, PHOENIX NOR INTEL MAKE ANY WARRANTY OF ANY KIND
`THAT ANY ITEM DEVELOPED BASED ON THIS SPECIFICATION, OR ANY PORTION
`OF IT, WILL NOT INFRINGE ANY COPYRIGHT, PATENT, TRADE SECRET OR OTHER
`INTELLECTUAL PROPERTY RIGHT OF ANY PERSON OR ENTITY IN ANY COUNTRY.
`
`1
`
`
`
`Table of Contents
`
`1.0 INTRODUCTION 5
`
`1.1 REVISION HISTORY
`1.2 RELATED DOCUMENTS
`1.3 PURPOSE
`1.4 TERMS
`
`5
`5
`5
`6
`
`2.0 OVERVIEW 9
`
`2.1 DESCRIPTION
`
`9
`
`3.0 IPL DEVICES 10
`
`3.1 REQUIREMENTS FOR IPL DEVICES
`3.1.1 IPL TABLE
`3.1.2 PRODUCT NAME STRING
`3.2 BAIDS
`3.3 DEVICES WITH PNP EXPANSION HEADERS
`3.4 LEGACY IPL DEVICES
`3.5 IDENTIFYING IPL DEVICES
`3.5.1 BAIDS
`3.5.2 PNP EXPANSION HEADER
`3.5.3 PCI DEVICES
`3.5.4 IDENTICAL IPL DEVICES
`
`10
`10
`11
`11
`11
`12
`13
`14
`14
`14
`15
`
`4.0 IPL PRIORITY 16
`
`4.1 MAINTAINING THE IPL PRIORITY
`4.2 IPL PRIORITY PSEUDOCODE
`
`16
`18
`
`5.0 BCV PRIORITY 19
`
`5.1 INTRODUCTION
`5.2 INT 13H DEVICE CONTROLLERS
`5.2.1 ATA DRIVE SUPPORT IN THE BIOS
`5.2.2 PNP CARDS WITH BCVS
`5.2.3 LEGACY CARDS WITH OPTION ROMS
`5.2.4 HARD DRIVE BAID
`5.2.5 CONTROLLER INSTALLATION GUIDELINES
`5.2.6 NOTES ON INT 13H DEVICES
`5.3 INSTALLATION ORDERING
`5.4 POST PSEUDOCODE
`
`2
`
`19
`19
`19
`20
`20
`20
`20
`21
`21
`23
`
`2
`
`
`
`6.0 POST SEQUENCE 24
`6.0 POST SE UENCE
`24
`
`6.1 POWER-ON INITIALIZATION
`6.1 POWER—ON INITIALIZATION
`6.1.1 INITIALIZING BAIDS
`6.1.1 INITIALIZING BAIDs
`6.1.2 PNP BOOT DEVICES
`6.1.2 PNP BOOT DEVICES
`6.2 PNP OPTION ROM INITIALIZATION
`6.2 PNP OPTION ROM INITIALIZATION
`6.3 CHECK IPL PRIORITY AND BCV PRIORITY
`6.3 CHECK IPL PRIORITY AND BCV PRIORITY
`6.4 INT 13H DEVICE CONTROLLER INSTALLATION
`6.4 INT 13H DEVICE CONTROLLER INSTALLATION
`6.4.1 BOOT CONNECTION VECTORS
`6.4.1 BOOT CONNECTION VECTORS
`6.4.2 DISCONNECT VECTOR
`6.4.2 DISCONNECT VECTOR
`6.4.3 LEGACY ROM SCAN
`6.4.3 LEGACY ROM SCAN
`6.4.4 ON-BOARD ATA SUPPORT
`6.4.4 ON—BOARD ATA SUPPORT
`6.5 INT 19H PROCESSING
`6.5 INT 19H PROCESSING
`6.5.1 BOOTING FROM BAIDS
`6.5.1 BOOTING FROM BAIDs
`6.5.2 BOOTING FROM BEVS
`6.5.2 BOOTING FROM BEVS
`6.6 INT 19H PSEUDOCODE
`6.6 INT 19H PSEUDOCODE
`6.7 INT 18H PSEUDOCODE
`6.7 INT 18H PSEUDOCODE
`6.8 NOTES ON THE POST PROCESS
`6.8 NOTES ON THE POST PROCESS
`
`24
`24
`24
`24
`24
`24
`24
`24
`25
`25
`25
`25
`26
`26
`26
`26
`27
`27
`27
`27
`27
`27
`29
`29
`29
`29
`30
`30
`30
`30
`31
`31
`
`APPENDIX A: DATA STRUCTURES 32
`APPENDIX A: DATA STRUCTURES
`32
`
`A.1 IPL TABLE AND BCV TABLE ENTRY DATA STRUCTURE
`A.1 IPL TABLE AND BCV TABLE ENTRY DATA STRUCTURE
`A.2 PNP OPTION ROM HEADER
`A2 PNP OPTION ROM HEADER
`A.3 PNP EXPANSION HEADER
`A3 PNP EXPANSION HEADER
`A.4 PCI DATA STRUCTURE
`A4 PCI DATA STRUCTURE
`
`32
`32
`33
`33
`33
`33
`33
`33
`
`APPENDIX B: RUN-TIME FUNCTIONS (OPTIONAL) 34
`APPENDIX B: RUN—TIME FUNCTIONS OPTIONAL
`34
`
`FUNCTION 60H - GET VERSION AND INSTALLATION CHECK
`FUNCTION 60H — GET VERSION AND INSTALLATION CHECK
`FUNCTION 61H - GET DEVICE COUNT
`FUNCTION 61H — GET DEVICE COUNT
`FUNCTION 62H - GET PRIORITY AND TABLE
`FUNCTION 62H — GET PRIORITY AND TABLE
`FUNCTION 63H - SET PRIORITY
`FUNCTION 63H — SET PRIORITY
`FUNCTION 64H - GET IPL DEVICE FROM LAST BOOT
`FUNCTION 64H — GET IPL DEVICE FROM LAST BOOT
`FUNCTION 65H - GET BOOT FIRST
`FUNCTION 65H — GET BOOT FIRST
`FUNCTION 66H - SET BOOT FIRST
`FUNCTION 66H — SET BOOT FIRST
`
`35
`35
`36
`36
`37
`37
`38
`38
`39
`39
`40
`40
`41
`41
`
`APPENDIX C: BOOT MENU (OPTIONAL) 42
`APPENDIX C: BOOT MENU OPTIONAL
`42
`
`C.1 BOOT MENU POP-UP
`C. 1 BOOT MENU POP—UP
`C.2 BOOT MENU INT 19H PSEUDOCODE
`C2 BOOT MENU INT 19H PSEUDOCODE
`C.3 BOOT FIRST RUN-TIME FUNCTIONS
`C3 BOOT FIRST RUN—TIME FUNCTIONS
`
`42
`42
`42
`42
`42
`42
`
`APPENDIX D: RECOMMENDED BOOT SECTOR CHANGES (OPTIONAL) 43
`APPENDIX D: RECOMMENDED BOOT SECTOR CHANGES OPTIONAL
`43
`
`D.1 USE DL FOR DRIVE NUMBER
`D1 USE DL FOR DRIVE NUMBER
`
`43
`43
`
`3
`ODD.)
`
`3
`
`
`
`D.2 INT 18H ON BOOT FAILURE
`D2 INT 18H ON BOOT FAILURE
`
`43
`43
`
`APPENDIX E: PCI WITH MULTIPLE PNP HEADERS (OPTIONAL) 44
`APPENDIX E: PCI WITH MULTIPLE PNP HEADERS OPTIONAL
`
`E.1 DESCRIPTION
`E.1 DESCRIPTION
`E.2 REQUIREMENTS
`E.2 REQUIREMENTS
`E.3 OPTION ROM INITIALIZATION
`E.3 OPTION ROM INITIALIZATION
`E.3.1 BEFORE OPTION ROM PLACEMENT
`E.3.1 BEFORE OPTION ROM PLACEMENT
`E.3.2 PLACING THE PCI OPTION ROM
`E.3.2 PLACING THE PCI OPTION ROM
`E.3.3 CALLING THE PCI OPTION ROM
`E.3.3 CALLING THE PCI OPTION ROM
`E.3.4 NO DEVICES PRESENT
`E.3.4 NO DEVICES PRESENT
`E.3.5 DEVICES ARE PRESENT
`E.3.5 DEVICES ARE PRESENT
`E.4 ENUMERATING PNP EXPANSION HEADERS
`E.4 ENUMERATING PNP EXPANSION HEADERS
`E.5 CALLING THE BCVS
`E.5 CALLING THE BCVs
`
`44
`44
`44
`44
`44
`44
`44
`44
`44
`44
`45
`45
`45
`45
`45
`45
`46
`46
`46
`46
`
`4
`:44;
`
`4
`
`
`
`1.0 Introduction
`
`1.1 Revision History
`
`Version Changes
`0.80
`Original version.
`0.81
`Grammatical corrections.
`1.00
`Finalized for public release.
`1.01
`Added the BiosSelector parameter to the run-time functions.
`Moved run-time functions 65h and 66h from Appendix C to Appendix B.
`Cleaned up documentation on the run-time functions.
`
`You may obtain the latest copy of the BIOS Boot Specification from the Phoenix
`world wide web site at http://www.ptltd.com, or by contacting a representative from
`one of the authoring companies.
`
`Technical Editor:
`
`Scott Townsend
`Phoenix Technologies Ltd.
`2575 McCabe Way
`Irvine, CA 92714
`Phone:(714) 440-8000
`Fax:
`(714) 440-8300
`Email: Scott_Townsend@ptltd.com
`
`1.2 Related Documents
`
`Title
`Plug and Play BIOS Specification
`Hardware Design Guide for Microsoft Windows 95
`Enhanced Disk Drive Specification
`“El
`Torito” Bootable CD-ROM
`Specification
`PCI Local Bus Specification
`
`Format
`
`Version
`1.0A
`1.0
`1.1
`1.0
`
`Author
`Compaq/Phoenix/Intel
`Microsoft Corporation
`Phoenix
`Phoenix/IBM
`
`2.1
`
`PCI Special Interest Group
`
`1.3 Purpose
`
`The purpose of this specification is to describe a methodology by which the BIOS will
`identify all IPL (Initial Program Load) devices in the system, prioritize them in the
`order the user selects, and then sequentially go through each device and attempt to
`boot. The BIOS must become more intelligent about booting because the Plug and
`Play BIOS Specification places additional requirements on the BIOS during the boot
`process, and there are now more devices that are bootable such as CD-ROM, network
`remote boot, PCMCIA, etc. It is important that this specification define a boot scheme
`that is generic and flexible enough to allow booting from virtually any existing IPL
`device, and for the definition of future IPL devices as well.
`
`5
`
`5
`
`
`
`1.4 Terms
`
`To avoid confusion and to be consistent with the Plug and Play BIOS Specification,
`definitions of some of the terminology used in this document are listed below.
`
`ATA
`An Advanced Technology Attachment drive, also known as an IDE drive, is a hard
`drive with the interface built-in.
`
`ASCIIZ
`An ASCIIZ string is simply a string of ASCII characters terminated by a NULL (0
`byte).
`
`BAID
`A BIOS Aware IPL Device is any device that can boot an O/S, but requires the BIOS
`to have specific code to support it. Some examples are: the first floppy drive, the first
`hard drive, ATAPI CD-ROM, PCMCIA, embedded network adapter, etc.
`
`BCV
`A Boot Connection Vector is a pointer that points to code inside the option ROM that
`will perform device initialization, detect if a peripheral (such as a SCSI hard drive) is
`attached, and optionally hook INT 13h. The BCV resides in a PnP option ROM
`Expansion Header. An example of an option ROM with a BCV is a PnP ISA SCSI
`controller.
`
`BDA
`The BIOS Data Area is a data storage area in RAM. The BDA is used by the BIOS to
`manage the various peripherals and resources in the system. The BDA starts at
`segment address 0040h.
`
`BEV
`A Bootstrap Entry Vector is a pointer that points to code inside an option ROM that
`will directly load an O/S. The BEV resides in a PnP option ROM Expansion Header.
`An example of an option ROM with a BEV is a PnP ISA ethernet controller.
`
`BIOS
`The Basic Input/Output System is the software embedded on a chip located on the
`computer’s main board. The BIOS executes POST to test and initialize the system
`components and then loads (boots) the O/S. The BIOS also handles the low-level
`input/output to the various peripheral devices connected to the computer.
`
`6
`
`6
`
`
`
`Boot Device
`A Boot Device is any device that must be initialized prior to loading the O/S. This
`includes the primary input device (keyboard), the primary output device (display), and
`the initial program load device (floppy drive, hard drive, etc.). An IPL device is one
`form of a boot device.
`
`CDR
`Conflict Detection and Resolution is a method by which a PnP BIOS first detects the
`resource requirements for PnP cards, and then allocates them in a conflict-free way.
`
`CSN
`A Card Select Number is a number that uniquely identifies a PnP ISA card and is used
`to communicate exclusively to that card. The CSN is assigned by the PnP BIOS to
`each PnP ISA card in the system.
`
`DDIM
`The Device Driver Initialization Model is a method of initializing an option ROM
`whereby the option ROM is first copied to shadow RAM, then its initialization vector
`is called with the shadow RAM write-enabled. When the option ROM completes
`initialization it may dispose of code not needed at run-time by re-sizing the ROM
`memory footprint. Finally, after the option ROM returns and the BIOS regains
`control, the ROM is write-protected.
`
`DV
`A Disconnect Vector is a pointer that points to code inside the option ROM that will
`perform clean-up after the Boot Connection Vector has already been called. The DV
`resides in a PnP option ROM Expansion Header. An example of an option ROM with
`a DV is a PnP ISA SCSI controller.
`
`IPL Device
`An Initial Program Load Device is any device in the system that can boot and load an
`O/S. In standard AT machines, this is the floppy drive or hard drive.
`
`Legacy Card
`A Legacy Card is a standard ISA card that contains no PnP compatible configurability,
`and no PnP Expansion Header.
`
`NV
`Non-Volatile memory is memory that is retained even when the power has been shut
`off. The most common type of NV memory on a PC is the CMOS RAM that is used
`to store system configuration information.
`
`O/S
`An Operating System is loaded from an IPL device when that device is selected for
`booting.
`
`7
`
`7
`
`
`
`PFA
`A PCI Function Address is a unique number assigned to a PCI function on a PCI
`device. The PFA consists of a function number, a device number, and a bus number.
`
`PnP
`Plug and Play is a term used to identify anything defined by the Plug and Play BIOS
`specification or the Plug and Play ISA specification. The term will typically be used
`to reference some device or behavior that is specific to PnP technology.
`
`PnP Cards
`PnP Cards consist of any cards that contain an option ROM with a PnP Expansion
`Header.
`
`POST
`The Power-On Self Test is the part of the BIOS that takes control immediately after the
`computer is turned on. POST initializes the computer hardware so that an O/S can be
`loaded.
`
`Setup
`The system Setup program is the part of the BIOS that is executed after a user
`specified <Hot Key> is pressed during the BIOS initialization. Setup allows the user
`to set up and configure the system as well as select the IPL Priority of the system.
`
`8
`
`8
`
`
`
`2.0 Overview
`
`2.1 Description
`
`The BIOS Boot Specification defines a feature within the BIOS that creates and
`maintains a list of all the IPL devices found in the system and stores this list in NV
`memory. IPL devices come in three flavors: BAID, PnP Card, and Legacy. Only
`BAIDs and PnP Cards are enumerated. Legacy devices are not supported for several
`reasons. First, they tend to take control of the boot process altogether making them
`rather unfriendly. Second, they provide no means for identifying themselves as an IPL
`device. Finally, the BIOS cannot selectively boot from one of several Legacy IPL
`devices in a system.
`
`The BIOS Boot Specification provides one basic feature, the IPL Priority. The IPL
`Priority is a user-specified priority of IPL devices that is arranged in Setup. This boot
`order is similar to the common feature of boot A: then C: or vice versa, but supports
`additional IPL devices. Also, the number of IPL devices in the system may vary from
`one power-on to another. Each time the user turns on the system all IPL devices in the
`system are enumerated.
`
`Additionally, the BIOS Boot Specification defines the BCV Priority. The BCV
`Priority is a user-specified priority list of INT 13h Device Controllers that is arranged
`in Setup. This list specifies the order that the controllers will be called to install their
`INT 13h drive support during POST.
`
`If an IPL device fails to load an O/S, the BIOS regains control and attempts to boot
`from the next available IPL device. This procedure will continue until all possible IPL
`devices have been exhausted. Only then will the BIOS display a message that an O/S
`cannot be found, wait for a key stroke, and then invoke INT 19h again. This method
`ensures that the BIOS has intelligently made every attempt to boot.
`
`The BIOS Boot Specification encompasses the boot process of both PnP and non-PnP
`systems. The support for PnP Cards wherever mentioned is only pertinent to systems
`which include PnP support in their BIOS. A standard AT compatible system (also
`called a Legacy system) is much simpler than one with a PnP BIOS because it only
`supports BAIDs. A Legacy system does not need to provide any dynamic IPL device
`enumeration or configuration, nor does it support PnP Cards in their native mode.
`This is because the number of IPL devices in such a system will never change.
`
`9
`
`9
`
`
`
`3.0 IPL Devices
`
`3.1 Requirements for IPL Devices
`
`An IPL device can be virtually any device that has the ability to load and execute an
`O/S.
` This includes floppy drives, hard drives, CD-ROM drives, PCMCIA
`controllers/cards, PnP Cards, Legacy cards, and could, in the future, include virtually
`any devices such as serial ports, parallel ports, etc. An IPL device falls into one of
`three categories: BAID, Legacy IPL Device, or PnP Card. There are two varieties of
`PnP Cards, BCV devices and BEV devices.
`
`One of the key points of concern about an IPL device is that it be able to return back to
`the BIOS with an error if the O/S load fails. The BIOS Boot Specification defines INT
`18h as the recovery vector for failed boot attempts. For example, if a PnP ISA
`network card was configured to boot from the network, but the network cable wasn’t
`attached, the card’s option ROM should signal to the BIOS that it cannot boot by
`invoking INT 18h.
`
`If a Legacy card’s option ROM code hooks INT 19h during its initialization call it
`controls the boot process. If a Legacy card hooks INT 18h, the boot failure recovery
`will not work. For this reason, it is recommended that all future Legacy boot devices
`include the PnP Expansion Header and its associated support in their option ROMs so
`that their priority in the booting process can be controlled.
`
`3.1.1 IPL Table
`
`Each BAID and BEV device must have corresponding entries in the IPL Table. An
`IPL Table for a typical PC would have two BAID entries, one for diskette drive A: and
`one for hard drive C:, and one for each BEV device found. A sample IPL Table is
`shown in section 4.1.
`
`The information stored in the IPL Table consists of identification information, pointers
`to description strings, and pointers to handlers that will initiate an O/S load. The IPL
`Table and BCV Table data structure is defined in detail in Appendix A.
`
`10
`
`10
`
`
`
`3.1.2 Product Name String
`
`The Plug and Play BIOS Specification defines fields in the PnP Expansion Header for
`optional description strings. Vendors of PnP Cards must have meaningful strings in
`the Product Name String and Manufacturer String fields of the PnP Expansion Header.
`The Product Name String is particularly important since it will be displayed to the user
`as an identifier for that device. Although the only current limitation to these strings is
`that they be terminated by a NULL (0 byte), it is declared here that only the first 32
`characters (bytes) of the Product Name String are significant. Characters beyond 32
`will not be displayed. This is a reasonable length to provide the user with a unique
`name for that device. Product Name Strings shorter than 32 will be displayed in their
`entirety.
`
`3.2 BAIDs
`
`BAIDs include the first floppy drive, the first hard drive, and any other bootable
`device that has specific code in the BIOS to support it. A BAID is able to launch a
`bootstrap only because the BIOS has built-in support as part of the INT 19h service
`routine. Some examples of this might be an ATAPI compatible CD-ROM drive or a
`PCMCIA card/controller. BAIDs do not have option ROMs, nor can they function
`without specific code embedded in the BIOS.
`
`Each BAID will have an entry in the IPL Table. This entry will contain the following
`information: the device type, a device sub-type, a pointer to a description string, and a
`pointer to code that will attempt to boot from the device. The INT 19h handler will
`read this table and be able to boot from any one of these devices without having to
`know what type of device it is. The table consists of a contiguous array of data
`structures of which each corresponds to a particular IPL device.
`
`Note that only the first floppy drive and the first hard drive are considered IPL devices.
`The main reason why a system cannot boot from other drives is that the boot sector
`code specifically addresses only these drives (00h for floppy and 80h for hard drive)
`when INT 13h is called to load the O/S. See Appendix D for recommended changes
`to the O/S boot sector that could solve this problem.
`
`11
`
`11
`
`
`
`3.3 Devices with PnP Expansion Headers
`
`All IPL devices with option ROMs must contain a valid option ROM header that
`resides between system memory addresses C0000h and EFFFFh on a 2k boundary and
`begins with 55AAh. A Device’s booting can only be controlled if it has a PnP
`Expansion Header. The Expansion Header, whose address resides within the standard
`option ROM header at offset +1Ah, contains important information used to configure
`the device. It also contains pointers to code in the device’s option ROM (BCV or
`BEV) that the BIOS will call to boot from the device. See Appendix A for the
`structure of the PnP Expansion Header. There are two ways an IPL device with a PnP
`Expansion Header can be booted. It must contain a BCV or a BEV.
`
`A BEV device, typically a network card, is booted by the BIOS making a far call
`directly to its BEV. If the device fails to boot, it executes an INT 18h which returns
`control back to the BIOS. BEV devices behave much like BAIDs in that they are
`selectively bootable.
`
`A BCV device, typically a SCSI controller, is not directly bootable. Rather, it merely
`adds its drives to the system by hooking into the BIOS’ INT 13h services and
`appending drive numbers to any existing drives. Since only drive 80h is bootable, a
`BCV would only be able to boot one of its drives if it installed before any other drives
`in the system. For this reason, it is necessary to control the order that all drives are
`installed into the system, including on-board ATA drives and those controlled by
`Legacy devices such as older SCSI controllers. The only way to control a BCV
`device’s drives in the boot order is by allowing the user to specify the order of
`initialization among ATA, BCV, and Legacy option ROMs. This will be discussed in
`detail in section 5.0.
`
`3.4 Legacy IPL Devices
`
`This is a standard ISA card with a valid option ROM that resides in system memory
`address space between C0000h and EFFFFh on a 2k boundary. An example of this
`type of device is a Legacy SCSI hard drive controller with a bootable ROM installed.
`Legacy IPL devices do not contain PnP Expansion Headers in their option ROMs.
`
`Option ROMs are detected during the BIOS’ scan and their initialization vectors are
`called. During initialization, devices may hook INT 19h so that they will gain control
`when the BIOS issues INT 19h to boot the system. Or, they may hook INT 18h so that
`if all other IPL devices in the system fail to boot they will take over. Or, they may
`simply hook INT 13h and only respond to calls that reference their drive number. In
`any case, the first two methods provide no consistent way for the BIOS to regain
`control if the device fails to boot.
`
`12
`
`12
`
`
`
`Legacy IPL devices will be allowed to take control of the system (via hooking
`interrupts) in both Legacy and PnP systems. The Plug and Play BIOS specification
`recommends that Legacy devices that hook a bootstrap interrupt such as INT 19h, 18h,
`or 13h have the interrupt re-captured by the BIOS. This is not done because grabbing
`an interrupt vector back after a device has hooked it can produce unpredictable results.
`Further, by allowing the card to take control, the behavior of these Legacy cards will
`be the same on both PnP and Legacy machines.
`
`Legacy IPL devices are not enumerated or handled in any special way. Their behavior
`will be largely unknown by the BIOS. If a Legacy IPL device traps INT 19h it takes
`control of the boot process. This is acceptable because it is consistent with what
`Legacy systems do now. If a Legacy IPL device traps INT 13h, it becomes the local
`hard drive from the BIOS’ perspective since it would then respond to INT 13h
`function calls executed in the INT 19h handler.
`
`13
`
`13
`
`
`
`3.5 Identifying IPL Devices
`
`The large variety of possible IPL devices dictates that a generic methodology be
`implemented so that all existing and future devices can be made bootable with a
`minimum of difficulty. All IPL devices in the system need to be enumerated during
`POST, but before INT 19h. All IPL devices fall into one of three categories: BAID,
`PnP Card, or Legacy.
`
`IPL Device
`First floppy drive
`First ATA Hard drive
`PCI ATA card w/ drive
`ATAPI CD-ROM drive
`PCMCIA controller w/ bootable card
`Ethernet controller w/ code embedded in BIOS
`PnP Token Ring card
`PnP ethernet card
`Non-PnP card w/ PnP Expansion Header
`
`PnP SCSI card w/ drive
`
`3.5.1 BAIDs
`
`Type
`BAID
`BAID
`BAID
`BAID
`BAID
`BAID
`PnP (BEV)
`PnP (BEV)
`PnP
`(BEV
`BCV)
`PnP (BCV)
`
`or
`
`All BAIDs are automatically identified because the BIOS has specific code to support
`them. In addition, each BAID has a corresponding entry in the IPL Table.
`
`3.5.2 PnP Expansion Header
`
`A PnP Card is defined by having a PnP Expansion Header in its option ROM. Any
`IPL device with an option ROM can contain the PnP Expansion Header, including PCI
`and ISA devices. If a PnP Expansion Header exists, the device will be treated as a
`PnP Card. If it is a BEV device it will be included in the IPL Priority. If it is a BCV
`device the BCV will be called. The PnP Expansion Header method of identifying boot
`devices with option ROMs is expected to become the future standard.
`
`3.5.3 PCI Devices
`
`From the standpoint of booting, most PCI IPL devices with option ROMs behave just
`like Legacy IPL devices. Currently, most PCI SCSI controllers will typically hook
`INT 13h and most PCI network cards typically hook either INT 19h or INT 18h in
`order to be an IPL device. It is recommended that all future PCI devices with option
`ROMs employ the PnP Expansion Header method for booting so that they may enjoy
`the benefits of appearing on a boot menu and allowing users to select its boot order.
`
`14
`
`14
`
`
`
`PCI devices without option ROMs are either not an IPL device, or they behave like a
`BAID. For example, a PCI ATA controller will not have an option ROM, but will
`become the system ATA controller and utilize the BIOS’ INT 13h services to interface
`to attached ATA drives.
`
`The address space for option ROMs conforming to the Device Driver Initialization
`Model (DDIM), such as PCI, shall be write-enabled both when their initialization
`vector is called, and when their BCV is called.
`
`3.5.4 Identical IPL Devices
`
`In an implementation of the BIOS Boot Specification, the system BIOS may choose to
`distinguish between identical IPL devices so that the user will be able to choose the
`correct device, given a menu of selections. For instance, the system BIOS may
`recognize that two identical PnP SCSI controllers are present in the system and
`distinguish them by numbering them, by displaying their CSN, or some other method.
`Currently, no specific method is recommended nor defined here. Recognizing and
`dealing with identical devices is optional and not required for BIOS Boot Specification
`compliance.
`
`15
`
`15
`
`
`
`4.0 IPL Priority
`
`Once all BAIDs and BEV devices in the system have been identified and enumerated,
`the BIOS needs to decide in which order they will be selected for booting. This is
`handled by the IPL Priority.
`
`The IPL Priority consists of an array of ordinal values, one for each BAID and BEV
`device found in the system at POST. An IPL Priority ordinal value is the index of a
`BAID or BEV device entry in the IPL Table. The priority for IPL devices is
`configurable by the user by editing the IPL Priority in Setup. The order the user
`selects is then stored in NV memory so that it can be retrieved by the BIOS at INT 19h
`time. The IPL Priority specifies not only the number of BAIDs and BEV devices in
`the system, but their order of booting as well.
`
`When the INT 19h handler gains control, the first IPL device in the IPL Priority is
`used to attempt to boot. If that fails, the next device is tried, and so on until all devices
`in the IPL Priority have been tried. At that point an error message will be displayed
`since all attempts to boot have been exhausted.
`
`4.1 Maintaining the IPL Priority
`
`Since the ordinal values in the IPL Priority are simply the index of the IPL device in
`the IPL Table, no information is stored as to the specific IPL device that the ordinal
`value represents. Here we assume that the number of BAIDs in a system does not
`change because the BIOS contains the code for them. The BIOS recognizes only a
`change in the number of BEV devices, and not a change in the type of BEV devices.
`
`If the user changes the BEV devices they have in their system without changing the
`total number of BEV devices, the BIOS will not detect this and will keep the previous
`IPL Priority. For example, if there is a PnP ISA ethernet card in a system and the user
`removes it and installs a different PnP ISA ethernet card, the IPL Priority would not
`change because the BIOS does not track individual BEV devices. It merely tracks the
`number of them and their order in the IPL Priority. The IPL Table would contain an
`entry for the new PnP ethernet card in the same location as where the old one was
`before. Again, as long as the total number of BEV devices doesn’t change, the BIOS
`uses the last order that was stored in NV memory.
`
`16
`
`16
`
`
`
`The way the IPL Priority is constructed is by taking the range of ordinal values for
`BAIDs and BEV devices, and storing them in NV memory in the IPL Priority order.
`The maximum number of IPL devices supported is implementation specific, and is
`defined at BIOS build time. The number of BAIDs also does not change. The number
`of BEV devices that were detected at the last boot is stored in NV memory so that a
`change in this number can be recognized by the BIOS. If the number of BEVs found
`during POST differs from the number found at last boot as indicated by the value
`stored in NV memory, the BIOS should either reset the IPL Priority automatically to
`reflect the changes, or prompt the user to enter Setup.
`
`When the system boots for the first time, or if the NV memory is corrupted, a default
`IPL Priority is created. The default IPL Priority consists of the BAIDs followed by the
`BEV devices found in the system. The BEV devices are placed at the end of the IPL
`Priority in the order that they are found. Optionally, the user can be prompted to enter
`Setup.
`
`The IPL Priority remains in effect until either the user changes it or the number of
`BEV devices in the system changes. However, the IPL Priority could change in a
`system with more than one BEV device if the order the BEV devices were found by
`the PnP BIOS changed. This seems odd at first to have the IPL Priority change and
`the user not be notified. But ultimately, if the user is changing boot devices they will
`probably want to manually edit the IPL Priority anyway. This caveat saves a lot of
`potential consumption of NV memory that would be used to store unique serial
`numbers for each BEV device. Additionally, BIOS code space is saved by not
`tracking individual BEV devices as opposed to simply enumerating the existing ones
`without reference to what type of device they are.
`
`IPL Table
`Floppy A:
`Hard Drive C:
`CD-ROM
`BEV #1
`BEV #2
`
`0
`1
`2
`3
`4
`
`567
`
`IPL Priority
`2
`3
`4
`1
`0
`3 4 1 2 0
`
`5
`
`6
`
`7
`
`When INT 19h is executed, the BIOS will process the IPL Priority shown above in the
`following order: BEV #1, BEV #2, Hard Drive C:, CD-ROM, Floppy A:.
`
`17
`
`17
`
`
`
`4.2 IPL Priority Pseudocode
`
`The following pseudocode describes an example of managing the IPL Priority during
`POST.
`
`Created at BIOS build time:
`• First few IPL Table entries are filled in by the BAIDs.
`• maxIPLCount = Number of entries in IPL Table.
`• baidCount = Number of BAIDs in the system.
`• maxBEVCount = (maxIPLCount - baidCount).
`• The NV memory space for the IPL Priority is reserved.
`
`Assumptions:
`• The default for the IPL Priority will automatically be created during POST in case
`the NV memory gets corrupted.
`• nvBEVCount = number of BEV devices found last time - stored in NV memory.
`• postBEVCount = number of BEV devices found this time.
`
`Execution at POST time:
`• All option ROMs with a PnP Expansion Header are identified and their
`initialization entry points are called.
`• Additional IPL Table entries are filled in with the BEV devices found.
`IF (NV memory is corrupted)
`•
`• Set default IPL Priority by first placing the BAIDs, and then adding in the
`BEVs in the order they were found.
`
`• ELSE
`• The IPL Priority is retrieved from NV memory.
`• deltaBEVCount = (nvBEVCount - postBEVCount).
`IF (deltaBEVCount != 0)
`•
`IF (deltaBEVCount > 0)
`•
`• FOR (i = 0; i != deltaBEVCount; ++i)
`• Add a new BEV device to the end of IPL Priority.
`
`• ELSE
`• For (i = 0; i != deltaBEVCount; --i)
`• Delete the BEV device nearest the end of IPL Priority.
`
`• ENDIF
`• Save the postBEVCount in NV memory as nvBEVCount.
`• Save the new IPL Priority in NV memory.
`(Optional) - Display a message that the IPL Priority changed and
`•
`allow the user to enter Setup to reconfigure the IPL Priority.
`• ENDIF
`• ENDIF
`Invoke INT 19h.
`•
`
`18
`
`18
`
`
`
`5.0 BCV Priority
`
`5.1 Introduction
`
`In order to fully manipulate the order that IPL devices attempt to boot, it is necessary
`to control the order of installation of devices utilizing INT 13h. Since many INT 13h
`devices can be managed by one controller, we need to control the order that the
`controllers’ INT 13h support is installed. The need to manage this ordering arises out
`of the currently limited booting capabilities of today’s average PCs. Specifically, there
`is