Unified Extensible Firmware Interface · 2014. 8. 1. · Unified Extensible Firmware Interface...

1682
Unified Extensible Firmware Interface Specification Version 2.1 January 23, 2007

Transcript of Unified Extensible Firmware Interface · 2014. 8. 1. · Unified Extensible Firmware Interface...

  • Unified Extensible Firmware InterfaceSpecification

    Version 2.1January 23, 2007

  • Unified Extensible Firmware Interface Specification

    Acknowledgements

    The material contained herein is not a license, either expressly or impliedly, to any intellectual property owned or controlled by any of the authors or developers of this material or to any contribution thereto. The material contained herein is provided on an "AS IS" basis and, to the maximum extent permitted by applicable law, this information is provided AS IS AND WITH ALL FAULTS, and the authors and developers of this material hereby disclaim all other warranties and conditions, either express, implied or statutory, including, but not limited to, any (if any) implied warranties, duties or conditions of merchantability, of fitness for a particular purpose, of accuracy or completeness of responses, of results, of workmanlike effort, of lack of viruses and of lack of negligence, all with regard to this material and any contribution thereto. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." The Unified EFI Forum, Inc. reserves any features or instructions so marked for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. ALSO, THERE IS NO WARRANTY OR CONDITION OF TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO DESCRIPTION OR NON-INFRINGEMENT WITH REGARD TO THE SPECIFICATION AND ANY CONTRIBUTION THERETO. IN NO EVENT WILL ANY AUTHOR OR DEVELOPER OF THIS MATERIAL OR ANY CONTRIBUTION THERETO BE LIABLE TO ANY OTHER PARTY FOR THE COST OF PROCURING SUBSTITUTE GOODS OR SERVICES, LOST PROFITS, LOSS OF USE, LOSS OF DATA, OR ANY INCIDENTAL, CONSEQUENTIAL, DIRECT, INDIRECT, OR SPECIAL DAMAGES WHETHER UNDER CONTRACT, TORT, WARRANTY, OR OTHERWISE, ARISING IN ANY WAY OUT OF THIS OR ANY OTHER AGREEMENT RELATING TO THIS DOCUMENT, WHETHER OR NOT SUCH PARTY HAD ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.

    Copyright 2006, 2007 Unified EFI, Inc. All Rights Reserved.

    ii January 23, 2007 Version 2.1

  • Revision History

    Revision Revision History Date2.0 First release of specification. January 31, 2006

    2.1 Draft January 23, 2007

  • Unified Extensible Firmware Interface Specification

    iv January 23, 2007 Version 2.1

  • Contents

    Acknowledgements............................................................................................. iiRevision History ................................................................................................. iiiContents ............................................................................................................... vFigures............................................................................................................. xxixTables ............................................................................................................ xxxiii1

    Introduction..................................................................................................... 11.1 UEFI Driver Model Extensions.......................................................................................... 11.2 Overview ........................................................................................................................... 21.3 Goals................................................................................................................................. 51.4 Target Audience................................................................................................................ 71.5 UEFI Design Overview...................................................................................................... 71.6 UEFI Driver Model ............................................................................................................ 9

    1.6.1 UEFI Driver Model Goals ...................................................................................... 91.6.2 Legacy Option ROM Issues ................................................................................ 10

    1.7 Migration Requirements.................................................................................................. 101.7.1 Legacy Operating System Support ..................................................................... 101.7.2 Supporting the UEFI Specification on a Legacy Platform ................................... 11

    1.8 Conventions Used in this Document............................................................................... 111.8.1 Data Structure Descriptions ................................................................................ 111.8.2 Protocol Descriptions .......................................................................................... 111.8.3 Procedure Descriptions....................................................................................... 121.8.4 Instruction Descriptions....................................................................................... 121.8.5 Pseudo-Code Conventions ................................................................................. 121.8.6 Typographic Conventions ................................................................................... 13

    2 Overview........................................................................................................ 152.1 Boot Manager ................................................................................................................. 15

    2.1.1 UEFI Images ....................................................................................................... 162.1.2 Applications......................................................................................................... 172.1.3 UEFI OS Loaders................................................................................................ 172.1.4 UEFI Drivers........................................................................................................ 18

    2.2 Firmware Core ................................................................................................................ 182.2.1 UEFI Services ..................................................................................................... 182.2.2 Runtime Services ................................................................................................ 19

    2.3 Calling Conventions ........................................................................................................ 202.3.1 Data Types.......................................................................................................... 202.3.2 IA-32 Platforms ................................................................................................... 222.3.3 Intel® Itanium®-Based Platforms......................................................................... 242.3.4 x64 Platforms ...................................................................................................... 26

    Version 2.1 January 23, 2007 v

  • Unified Extensible Firmware Interface Specification

    2.4 Protocols ......................................................................................................................... 282.5 UEFI Driver Model .......................................................................................................... 33

    2.5.1 Legacy Option ROM Issues ................................................................................ 342.5.2 Driver Initialization............................................................................................... 362.5.3 Host Bus Controllers ........................................................................................... 382.5.4 Device Drivers..................................................................................................... 402.5.5 Bus Drivers.......................................................................................................... 412.5.6 Platform Components ......................................................................................... 432.5.7 Hot-Plug Events .................................................................................................. 442.5.8 EFI Services Binding........................................................................................... 44

    2.6 Requirements.................................................................................................................. 462.6.1 Required Elements.............................................................................................. 462.6.2 Platform-Specific Elements ................................................................................ 472.6.3 Driver-Specific Elements..................................................................................... 48

    3 Boot Manager................................................................................................ 513.1 Firmware Boot Manager ................................................................................................. 51

    3.1.1 Boot Manager Programming ............................................................................... 523.1.2 Load Option Processing...................................................................................... 523.1.3 Load Options....................................................................................................... 533.1.4 Boot Manager Capabilities .................................................................................. 553.1.5 Launching Boot#### Applications....................................................................... 553.1.6 Launching Boot#### Load Options Using Hot Keys ........................................... 56

    3.2 Globally Defined Variables.............................................................................................. 583.3 Boot Option Variables Default Boot Behavior ................................................................. 603.4 Boot Mechanisms ........................................................................................................... 61

    3.4.1 Boot via the Simple File Protocol ........................................................................ 613.4.2 Boot via LOAD_FILE PROTOCOL...................................................................... 62

    4 EFI System Table.......................................................................................... 654.1 UEFI Image Entry Point .................................................................................................. 65

    EFI_IMAGE_ENTRY_POINT.............................................................................. 654.2 EFI Table Header ........................................................................................................... 66

    EFI_TABLE_HEADER ........................................................................................ 674.3 EFI System Table .......................................................................................................... 68

    EFI_SYSTEM_TABLE......................................................................................... 684.4 EFI Boot Services Table ................................................................................................ 69

    EFI_BOOT_SERVICES ...................................................................................... 704.5 EFI Runtime Services Table .......................................................................................... 74

    EFI_RUNTIME_SERVICES ................................................................................ 744.6 EFI Configuration Table ................................................................................................. 76

    EFI_CONFIGURATION_TABLE ......................................................................... 764.7 Image Entry Point Examples........................................................................................... 77

    4.7.1 Image Entry Point Examples............................................................................... 784.7.2 UEFI Driver Model Example ............................................................................... 794.7.3 UEFI Driver Model Example (Unloadable) .......................................................... 80

    vi January 23, 2007 Version 2.1

  • 4.7.4 EFI Driver Model Example (Multiple Instances) .................................................. 81

    5 GUID Partition Table (GPT) Format............................................................. 855.1 EFI Partition Formats ...................................................................................................... 855.2 LBA 0 Format.................................................................................................................. 85

    5.2.1 Legacy Master Boot Record (MBR) .................................................................... 855.2.2 Protective Master Boot Record .......................................................................... 87

    5.3 GUID Partition Table (GPT) Format................................................................................ 875.3.1 GUID Format overview........................................................................................ 875.3.2 GPT Partition Table Header................................................................................ 895.3.3 GUID Partition Entry Array .................................................................................. 91

    6 Services — Boot Services ........................................................................... 956.1 Event, Timer, and Task Priority Services........................................................................ 96

    CreateEvent() .................................................................................................... 100CreateEventEx()................................................................................................ 104CloseEvent()...................................................................................................... 107SignalEvent()..................................................................................................... 108WaitForEvent() .................................................................................................. 109CheckEvent()..................................................................................................... 111SetTimer() ......................................................................................................... 112RaiseTPL() ........................................................................................................ 114RestoreTPL()..................................................................................................... 116

    6.2 Memory Allocation Services.......................................................................................... 116AllocatePages() ................................................................................................. 119FreePages() ...................................................................................................... 122GetMemoryMap() .............................................................................................. 123AllocatePool() .................................................................................................... 127FreePool() ......................................................................................................... 128

    6.3 Protocol Handler Services ............................................................................................ 1286.3.1 Driver Model Boot Services............................................................................... 130

    InstallProtocolInterface() ................................................................................... 133UninstallProtocolInterface() ............................................................................... 135ReinstallProtocolInterface() ............................................................................... 137RegisterProtocolNotify() .................................................................................... 139LocateHandle().................................................................................................. 141HandleProtocol() ............................................................................................... 143LocateDevicePath()........................................................................................... 145OpenProtocol() .................................................................................................. 147CloseProtocol().................................................................................................. 154OpenProtocolInformation() ................................................................................ 156ConnectController() ........................................................................................... 158DisconnectController()....................................................................................... 162ProtocolsPerHandle() ........................................................................................ 165LocateHandleBuffer() ........................................................................................ 167LocateProtocol() ................................................................................................ 170

    Version 2.1 January 23, 2007 vii

  • Unified Extensible Firmware Interface Specification

    InstallMultipleProtocolInterfaces() ..................................................................... 171UninstallMultipleProtocolInterfaces()................................................................. 172

    6.4 Image Services ............................................................................................................. 172LoadImage() ...................................................................................................... 175StartImage() ...................................................................................................... 177UnloadImage()................................................................................................... 179EFI_IMAGE_ENTRY_POINT............................................................................ 180Exit() .................................................................................................................. 182ExitBootServices()............................................................................................. 184

    6.5 Miscellaneous Boot Services ........................................................................................ 185SetWatchdogTimer() ......................................................................................... 186Stall() ................................................................................................................. 188CopyMem()........................................................................................................ 189SetMem()........................................................................................................... 190GetNextMonotonicCount()................................................................................. 191InstallConfigurationTable() ................................................................................ 192CalculateCrc32() ............................................................................................... 194

    7 Services — Runtime Services ................................................................... 1957.1 Runtime Services Rules and Restrictions..................................................................... 196

    7.1.1 Exception for Machine Check, INIT, and NMI. .................................................. 1967.2 Variable Services .......................................................................................................... 197

    GetVariable() ..................................................................................................... 199GetNextVariableName() .................................................................................... 201SetVariable() ..................................................................................................... 203QueryVariableInfo() ........................................................................................... 209

    7.2.1 Hardware Error Record Persistence ................................................................. 2107.3 Time Services ............................................................................................................... 211

    GetTime() .......................................................................................................... 212SetTime()........................................................................................................... 215GetWakeupTime() ............................................................................................. 216SetWakeupTime() ............................................................................................. 217

    7.4 Virtual Memory Services ............................................................................................... 218SetVirtualAddressMap() .................................................................................... 219ConvertPointer() ................................................................................................ 221

    7.5 Miscellaneous Runtime Services .................................................................................. 2227.5.1 Reset System.................................................................................................... 222

    ResetSystem()................................................................................................... 2237.5.2 Get Next High Monotonic Count ....................................................................... 224

    GetNextHighMonotonicCount() ......................................................................... 2257.5.3 Update Capsule ................................................................................................ 226

    UpdateCapsule() ............................................................................................... 227QueryCapsuleCapabilities() .............................................................................. 232

    8 Protocols — EFI Loaded Image................................................................. 235

    EFI_LOADED_IMAGE_PROTOCOL ................................................................ 235

    viii January 23, 2007 Version 2.1

  • EFI_LOADED_IMAGE_PROTOCOL.Unload() ................................................. 237

    9 Protocols — Device Path Protocol ........................................................... 2399.1 Device Path Overview................................................................................................... 2399.2 EFI Device Path Protocol .............................................................................................. 239

    EFI_DEVICE_PATH_PROTOCOL.................................................................... 2399.3 Device Path Nodes ....................................................................................................... 240

    9.3.1 Generic Device Path Structures........................................................................ 2419.3.2 Hardware Device Path ...................................................................................... 2429.3.3 ACPI Device Path ............................................................................................. 2449.3.4 ACPI _ADR Device Path................................................................................... 2469.3.5 Messaging Device Path .................................................................................... 2479.3.6 Media Device Path ............................................................................................ 2599.3.7 BIOS Boot Specification Device Path ............................................................... 262

    9.4 Device Path Generation Rules...................................................................................... 2639.4.1 Housekeeping Rules ......................................................................................... 2639.4.2 Rules with ACPI _HID and _UID....................................................................... 2639.4.3 Rules with ACPI _ADR...................................................................................... 2649.4.4 Hardware vs. Messaging Device Path Rules .................................................... 2659.4.5 Media Device Path Rules.................................................................................. 2659.4.6 Other Rules ....................................................................................................... 265

    9.5 Device Path Utilities Protocol ........................................................................................ 266EFI_DEVICE_PATH_UTILITIES_PROTOCOL................................................. 266EFI_DEVICE_PATH_UTILITIES_PROTOCOL.GetDevicePathSize() .............. 268EFI_DEVICE_PATH_UTILITIES_PROTOCOL.DuplicateDevicePath() ............ 269EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDevicePath()............... 270EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDeviceNode() ............. 271EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDevicePathInstance() . 272EFI_DEVICE_PATH_UTILITIES_PROTOCOL.GetNextDevicePathInstance() 273EFI_DEVICE_PATH_UTILITIES_PROTOCOL.CreateDeviceNode() ............... 274EFI_DEVICE_PATH_UTILITIES_PROTOCOL.IsDevicePathMultiInstance() ... 275

    9.6 EFI Device Path Display Format Overview................................................................... 2759.6.1 Design Discussion............................................................................................. 2769.6.2 Device Path to Text Protocol............................................................................. 290

    EFI_DEVICE_PATH_TO_TEXT_PROTOCOL ................................................. 290EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDeviceNodeToText()... 291EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDevicePathToText().... 292

    9.6.3 Device Path from Text Protocol ........................................................................ 293EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL............................................ 293EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL.ConvertTextToDeviceNode() ...

    294EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL.ConvertTextToDevicePath() ....

    295

    10 Protocols — UEFI Driver Model ................................................................ 29710.1 EFI Driver Binding Protocol......................................................................................... 297

    Version 2.1 January 23, 2007 ix

  • Unified Extensible Firmware Interface Specification

    EFI_DRIVER_BINDING_PROTOCOL.............................................................. 297EFI_DRIVER_BINDING_PROTOCOL.Supported() .......................................... 300EFI_DRIVER_BINDING_PROTOCOL.Start() ................................................... 306EFI_DRIVER_BINDING_PROTOCOL.Stop() ................................................... 314

    10.2 EFI Platform Driver Override Protocol ........................................................................ 317EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL..................................... 318EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.GetDriver().................. 320EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.GetDriverPath() .......... 322EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.DriverLoaded()............ 324

    10.3 EFI Bus Specific Driver Override Protocol .................................................................. 325EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL .............................. 325EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL.GetDriver() ........... 327

    10.4 EFI Driver Diagnostics Protocol .................................................................................. 328EFI_DRIVER_DIAGNOSTICS_PROTOCOL .................................................... 328EFI_DRIVER_DIAGNOSTICS_PROTOCOL.RunDiagnostics()........................ 330

    10.5 EFI Component Name Protocol .................................................................................. 332EFI_COMPONENT_NAME2_PROTOCOL....................................................... 332EFI_COMPONENT_NAME2_PROTOCOL.GetDriverName() .......................... 334EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName() .................... 335

    10.6 EFI Service Binding Protocol ...................................................................................... 336EFI_SERVICE_BINDING_PROTOCOL............................................................ 336EFI_SERVICE_BINDING_PROTOCOL.CreateChild() ..................................... 338EFI_SERVICE_BINDING_PROTOCOL.DestroyChild().................................... 342

    10.7 EFI Platform to Driver Configuration Protocol ............................................................. 346EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL .................. 346EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL.Query() ..... 348EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL.Response().....

    35010.8 EFI Driver Supported EFI Version Protocol ................................................................ 354

    EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL............................. 354

    11 Protocols — Console Support .................................................................. 35511.1 Console I/O Protocol................................................................................................... 355

    11.1.1 Overview ......................................................................................................... 35511.1.2 ConsoleIn Definition ....................................................................................... 355

    11.2 Simple Text Input Ex Protocol..................................................................................... 357EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL................................................. 357EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.Reset().................................... 358EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx()................ 359EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState() ............................... 362EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.RegisterKeyNotify() ................ 363EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.UnregisterKeyNotify() ............. 365

    11.3 Simple Text Input Protocol.......................................................................................... 365EFI_SIMPLE_TEXT_INPUT_PROTOCOL ....................................................... 365EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset()........................................... 367EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke()........................... 368

    x January 23, 2007 Version 2.1

  • 11.3.1 ConsoleOut or StandardError ......................................................................... 36811.4 Simple Text Output Protocol ....................................................................................... 369

    EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL ................................................... 369EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.Reset()....................................... 372EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString()............................ 373EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.TestString()................................ 376EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.QueryMode() ............................. 377EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetMode().................................. 378EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetAttribute() ............................. 379EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.ClearScreen() ............................ 381EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetCursorPosition() ................... 382EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.EnableCursor() .......................... 383

    11.5 Simple Pointer Protocol .............................................................................................. 383EFI_SIMPLE_POINTER_PROTOCOL ............................................................. 383EFI_SIMPLE_POINTER_PROTOCOL.Reset()................................................. 386EFI_SIMPLE_POINTER_PROTOCOL.GetState()............................................ 387

    11.6 EFI Simple Pointer Device Paths ............................................................................... 38811.7 Absolute Pointer Protocol ........................................................................................... 391

    EFI_ABSOLUTE_POINTER_PROTOCOL ....................................................... 392EFI_ABSOLUTE_POINTER_PROTOCOL.Reset()........................................... 394EFI_ABSOLUTE_POINTER_PROTOCOL.GetState()...................................... 395

    11.8 Serial I/O Protocol....................................................................................................... 396EFI_SERIAL_IO_PROTOCOL.......................................................................... 396EFI_SERIAL_IO_PROTOCOL.Reset() ............................................................. 400EFI_SERIAL_IO_PROTOCOL.SetAttributes() .................................................. 401EFI_SERIAL_IO_PROTOCOL.SetControl()...................................................... 403EFI_SERIAL_IO_PROTOCOL.GetControl() ..................................................... 405EFI_SERIAL_IO_PROTOCOL.Write() .............................................................. 406EFI_SERIAL_IO_PROTOCOL.Read() .............................................................. 407

    11.9 Graphics Output Protocol............................................................................................ 40711.9.1 Blt Buffer ......................................................................................................... 408

    EFI_GRAPHICS_OUTPUT_PROTOCOL......................................................... 409EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode()................................... 413EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode() ....................................... 415EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() ................................................. 416EFI_EDID_DISCOVERED_PROTOCOL .......................................................... 418EFI_EDID_ACTIVE_PROTOCOL..................................................................... 419EFI_EDID_OVERRIDE_PROTOCOL ............................................................... 420EFI_EDID_OVERRIDE_PROTOCOL.GetEdid()............................................... 421

    11.10 Rules for PCI/AGP Devices .................................................................................... 422

    12 Protocols - Media Access .......................................................................... 42512.1 Load File Protocol ....................................................................................................... 425

    EFI_LOAD_FILE_PROTOCOL ......................................................................... 425EFI_LOAD_FILE_PROTOCOL.LoadFile() ........................................................ 426

    12.2 File System Format..................................................................................................... 427

    Version 2.1 January 23, 2007 xi

  • Unified Extensible Firmware Interface Specification

    12.2.1 System Partition .............................................................................................. 42812.2.2 Partition Discovery .......................................................................................... 43012.2.3 Media Formats ................................................................................................ 431

    12.3 Simple File System Protocol ....................................................................................... 432EFI_SIMPLE_FILE_SYSTEM_PROTOCOL..................................................... 433EFI_SIMPLE_FILE SYSTEM_PROTOCOL.OpenVolume().............................. 434

    12.4 EFI File Protocol ......................................................................................................... 435EFI_FILE_PROTOCOL..................................................................................... 435EFI_FILE_PROTOCOL.Open()......................................................................... 437EFI_FILE_PROTOCOL.Close() ........................................................................ 439EFI_FILE_PROTOCOL.Delete() ....................................................................... 440EFI_FILE_PROTOCOL.Read() ......................................................................... 441EFI_FILE_PROTOCOL.Write() ......................................................................... 443EFI_FILE_PROTOCOL.SetPosition() ............................................................... 444EFI_FILE_PROTOCOL.GetPosition() ............................................................... 445EFI_FILE_PROTOCOL.GetInfo()...................................................................... 446EFI_FILE_PROTOCOL.SetInfo() ...................................................................... 448EFI_FILE_PROTOCOL.Flush()......................................................................... 450EFI_FILE_INFO................................................................................................. 450EFI_FILE_SYSTEM_INFO................................................................................ 452EFI_FILE_SYSTEM_VOLUME_LABEL............................................................ 452

    12.5 Tape Boot Support...................................................................................................... 45312.5.1 Tape I/O Support............................................................................................. 45312.5.2 Tape I/O Protocol ............................................................................................ 454

    EFI_TAPE_IO_PROTOCOL ............................................................................. 454EFI_TAPE_IO_PROTOCOL.TapeRead() ......................................................... 456EFI_TAPE_IO_PROTOCOL.TapeWrite() ......................................................... 458EFI_TAPE_IO_PROTOCOL.TapeRewind()...................................................... 460EFI_TAPE_IO_PROTOCOL.TapeSpace()........................................................ 461EFI_TAPE_IO_PROTOCOL.TapeWriteFM() .................................................... 463EFI_TAPE_IO_PROTOCOL.TapeReset() ........................................................ 464

    12.5.3 Tape Header Format....................................................................................... 46412.6 Disk I/O Protocol ......................................................................................................... 466

    EFI_DISK_IO_PROTOCOL .............................................................................. 466EFI_DISK_IO_PROTOCOL.ReadDisk() ........................................................... 468EFI_DISK_IO_PROTOCOL.WriteDisk()............................................................ 469

    12.7 Block I/O Protocol ....................................................................................................... 470EFI_BLOCK_IO_PROTOCOL........................................................................... 470EFI_BLOCK_IO_PROTOCOL.Reset().............................................................. 473EFI_BLOCK_IO_PROTOCOL.ReadBlocks() .................................................... 474EFI_BLOCK_IO_PROTOCOL.WriteBlocks() .................................................... 476EFI_BLOCK_IO_PROTOCOL.FlushBlocks().................................................... 478

    12.8 Unicode Collation Protocol.......................................................................................... 478EFI_UNICODE_COLLATION_ PROTOCOL..................................................... 478EFI_UNICODE_COLLATION_PROTOCOL.StriColl()....................................... 481EFI_UNICODE_COLLATION_PROTOCOL.MetaiMatch()................................ 482EFI_UNICODE_COLLATION_PROTOCOL.StrLwr()........................................ 484

    xii January 23, 2007 Version 2.1

  • EFI_UNICODE_COLLATION_PROTOCOL.StrUpr()........................................ 485EFI_UNICODE_COLLATION_PROTOCOL.FatToStr() .................................... 486EFI_UNICODE_COLLATION_PROTOCOL.StrToFat() .................................... 487

    13 Protocols - PCI Bus Support ..................................................................... 48913.1 PCI Root Bridge I/O Support....................................................................................... 489

    13.1.1 PCI Root Bridge I/O Overview ........................................................................ 48913.2 PCI Root Bridge I/O Protocol ...................................................................................... 494

    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL..................................................... 494EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.PollMem() ................................... 502EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.PollIo() ........................................ 504EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Mem.Read()

    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Mem.Write() .......................... 506EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Io.Read()

    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Io.Write() ............................... 508EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Pci.Read()

    EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Pci.Write() ............................. 510EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.CopyMem() ................................ 512EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Map() .......................................... 514EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Unmap()...................................... 516EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.AllocateBuffer()........................... 517EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.FreeBuffer() ................................ 519EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Flush() ........................................ 520EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.GetAttributes() ............................ 521EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.SetAttributes()............................. 523EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Configuration()............................ 525

    13.2.1 PCI Root Bridge Device Paths ........................................................................ 52613.3 PCI Driver Model......................................................................................................... 529

    13.3.1 PCI Driver Initialization.................................................................................... 52913.3.2 PCI Bus Drivers............................................................................................... 53113.3.3 PCI Device Drivers.......................................................................................... 536

    13.4 EFI PCI I/O Protocol ................................................................................................... 537EFI_PCI_IO_PROTOCOL................................................................................. 538EFI_PCI_IO_PROTOCOL.PollMem() ............................................................... 547EFI_PCI_IO_PROTOCOL.PollIo() .................................................................... 549EFI_PCI_IO_PROTOCOL.Mem.Read()

    EFI_PCI_IO_PROTOCOL.Mem.Write() ...................................................... 551EFI_PCI_IO_PROTOCOL.Io.Read()

    EFI_PCI_IO_PROTOCOL.Io.Write() ........................................................... 553EFI_PCI_IO_PROTOCOL.Pci.Read()

    EFI_PCI_IO_PROTOCOL.Pci.Write() ......................................................... 555EFI_PCI_IO_PROTOCOL.CopyMem() ............................................................ 557EFI_PCI_IO_PROTOCOL.Map() ..................................................................... 560EFI_PCI_IO_PROTOCOL.Unmap().................................................................. 562EFI_PCI_IO_PROTOCOL.AllocateBuffer() ....................................................... 563EFI_PCI_IO_PROTOCOL.FreeBuffer() ............................................................ 565

    Version 2.1 January 23, 2007 xiii

  • Unified Extensible Firmware Interface Specification

    EFI_PCI_IO_PROTOCOL.Flush()..................................................................... 566EFI_PCI_IO_PROTOCOL.GetLocation() .......................................................... 567EFI_PCI_IO_PROTOCOL.Attributes() .............................................................. 568EFI_PCI_IO_PROTOCOL.GetBarAttributes()................................................... 571EFI_PCI_IO_PROTOCOL.SetBarAttributes() ................................................... 574

    13.4.1 PCI Device Paths ........................................................................................... 57513.4.2 PCI Option ROMs ........................................................................................... 57713.4.3 Nonvolatile Storage......................................................................................... 58213.4.4 PCI Hot-Plug Events ....................................................................................... 582

    14 Protocols — SCSI Driver Models and Bus Support ................................ 58314.1 SCSI Driver Model Overview ...................................................................................... 58314.2 SCSI Bus Drivers ........................................................................................................ 584

    14.2.1 Driver Binding Protocol for SCSI Bus Drivers ................................................. 58414.2.2 SCSI Enumeration .......................................................................................... 585

    14.3 SCSI Device Drivers ................................................................................................... 58514.3.1 Driver Binding Protocol for SCSI Device Drivers ............................................ 585

    14.4 EFI SCSI I/O Protocol ................................................................................................. 586EFI_SCSI_IO_PROTOCOL .............................................................................. 586EFI_SCSI_IO_PROTOCOL.GetDeviceType() .................................................. 588EFI_SCSI_IO_PROTOCOL.GetDeviceLocation()............................................. 590EFI_SCSI_IO_PROTOCOL.ResetBus() ........................................................... 591EFI_SCSI_IO_PROTOCOL.ResetDevice()....................................................... 592EFI_SCSI_IO_PROTOCOL.ExecuteScsiCommand()....................................... 593

    14.5 SCSI Device Paths ..................................................................................................... 59714.5.1 SCSI Device Path Example ............................................................................ 59714.5.2 ATAPI Device Path Example .......................................................................... 59814.5.3 Fibre Channel Device Path Example .............................................................. 59914.5.4 InfiniBand Device Path Example..................................................................... 600

    14.6 SCSI Pass Thru Device Paths ................................................................................... 60114.7 Extended SCSI Pass Thru Protocol ............................................................................ 603

    EFI_EXT_SCSI_PASS_THRU_PROTOCOL.................................................... 604EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru()................................. 607EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetNextTargetLun()................... 613EFI_EXT_SCSI_PASS_THRU_PROTOCOL.BuildDevicePath()...................... 615EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetTargetLun() .......................... 617EFI_EXT_SCSI_PASS_THRU_PROTOCOL.ResetChannel() ......................... 619EFI_EXT_SCSI_PASS_THRU_PROTOCOL.ResetTargetLun() ...................... 620EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetNextTarget()......................... 622

    15 Protocols - iSCSI Boot ............................................................................... 62515.1 Overview ..................................................................................................................... 625

    15.1.1 iSCSI UEFI Driver Layering ............................................................................ 62515.2 EFI iSCSI Initiator Name Protocol............................................................................... 625

    EFI_ISCSI_INITIATOR_NAME_PROTOCOL................................................... 625EFI_ISCSI_INITIATOR_NAME_PROTOCOL. Get()......................................... 627

    xiv January 23, 2007 Version 2.1

  • EFI_ISCSI_INITIATOR_NAME_PROTOCOL.Set() .......................................... 628

    16 Protocols — USB Support ......................................................................... 62916.1 USB2 Host Controller Protocol ................................................................................... 629

    16.1.1 USB Host Controller Protocol Overview.......................................................... 629EFI_USB2_HC_PROTOCOL............................................................................ 629EFI_USB2_HC_PROTOCOL.GetCapability() ................................................... 632EFI_USB2_HC_PROTOCOL.Reset() ............................................................... 634EFI_USB2_HC_PROTOCOL.GetState() .......................................................... 636EFI_USB2_HC_PROTOCOL.SetState()........................................................... 638EFI_USB2_HC_PROTOCOL.ControlTransfer()................................................ 640EFI_USB2_HC_PROTOCOL.BulkTransfer() ................................................... 643EFI_USB2_HC_PROTOCOL.AsyncInterruptTransfer() .................................... 646EFI_USB2_HC_PROTOCOL.SyncInterruptTransfer()...................................... 649EFI_USB2_HC_PROTOCOL.IsochronousTransfer()........................................ 651EFI_USB2_HC_PROTOCOL.AsyncIsochronousTransfer().............................. 654EFI_USB2_HC_PROTOCOL.GetRootHubPortStatus().................................... 657EFI_USB2_HC_PROTOCOL.SetRootHubPortFeature() .................................. 661EFI_USB2_HC_PROTOCOL.ClearRootHubPortFeature()............................... 663

    16.2 USB Driver Model ....................................................................................................... 66416.2.1 Scope .............................................................................................................. 66416.2.2 USB Bus Driver ............................................................................................... 66516.2.3 USB Device Driver .......................................................................................... 66616.2.4 USB I/O Protocol............................................................................................. 667

    EFI_USB_IO_PROTOCOL ............................................................................... 667EFI_USB_IO_PROTOCOL.UsbControlTransfer()............................................. 670EFI_USB_IO_PROTOCOL.UsbBulkTransfer() ................................................. 673EFI_USB_IO_PROTOCOL.UsbAsyncInterruptTransfer() ................................. 675EFI_USB_IO_PROTOCOL.UsbSyncInterruptTransfer()................................... 679EFI_USB_IO_PROTOCOL.UsbIsochronousTransfer()..................................... 681EFI_USB_IO_PROTOCOL.UsbAsyncIsochronousTransfer()........................... 683EFI_USB_IO_PROTOCOL.UsbGetDeviceDescriptor() .................................... 685EFI_USB_IO_PROTOCOL.UsbGetConfigDescriptor() ..................................... 687EFI_USB_IO_PROTOCOL.UsbGetInterfaceDescriptor() ................................. 689EFI_USB_IO_PROTOCOL.UsbGetEndpointDescriptor() ................................. 691EFI_USB_IO_PROTOCOL.UsbGetStringDescriptor() ...................................... 693EFI_USB_IO_PROTOCOL.UsbGetSupportedLanguages() ............................. 694EFI_USB_IO_PROTOCOL.UsbPortReset()...................................................... 695

    17 Protocols - Debugger Support .................................................................. 69717.1 Overview ..................................................................................................................... 69717.2 EFI Debug Support Protocol ....................................................................................... 698

    17.2.1 EFI Debug Support Protocol Overview ........................................................... 698EFI_DEBUG_SUPPORT_PROTOCOL ............................................................ 698EFI_DEBUG_SUPPORT_PROTOCOL.GetMaximumProcessorIndex()........... 701EFI_DEBUG_SUPPORT_PROTOCOL.RegisterPeriodicCallback()................. 702

    Version 2.1 January 23, 2007 xv

  • Unified Extensible Firmware Interface Specification

    EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() .............. 707EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache()............... 711

    17.3 EFI Debugport Protocol .............................................................................................. 71217.3.1 EFI Debugport Overview................................................................................. 712

    EFI_DEBUGPORT_PROTOCOL...................................................................... 712EFI_DEBUGPORT_PROTOCOL.Reset() ......................................................... 714EFI_DEBUGPORT_PROTOCOL.Write() .......................................................... 715EFI_DEBUGPORT_PROTOCOL.Read().......................................................... 716EFI_DEBUGPORT_PROTOCOL.Poll() ............................................................ 717

    17.3.2 Debugport Device Path ................................................................................... 71717.3.3 EFI Debugport Variable................................................................................... 718

    17.4 EFI Debug Support Table ........................................................................................... 71917.4.1 Overview ......................................................................................................... 71917.4.2 EFI System Table Location ............................................................................. 72017.4.3 EFI Image Info................................................................................................. 720

    18 Protocols - Compression Algorithm Specification ................................. 72318.1 Algorithm Overview..................................................................................................... 72318.2 Data Format ................................................................................................................ 724

    18.2.1 Bit Order.......................................................................................................... 72418.2.2 Overall Structure ............................................................................................. 72518.2.3 Block Structure................................................................................................ 726

    18.3 Compressor Design .................................................................................................... 72918.3.1 Overall Process............................................................................................... 72918.3.2 String Info Log................................................................................................. 73018.3.3 Huffman Code Generation .............................................................................. 733

    18.4 Decompressor Design ................................................................................................ 73518.5 Decompress Protocol.................................................................................................. 735

    EFI_DECOMPRESS_PROTOCOL................................................................... 736EFI_DECOMPRESS_PROTOCOL.GetInfo().................................................... 737EFI_DECOMPRESS_PROTOCOL.Decompress() ........................................... 739

    19 Protocols - ACPI Protocols........................................................................ 741

    EFI_ACPI_TABLE_PROTOCOL....................................................................... 741EFI_ACPI_TABLE_PROTOCOL.InstallAcpiTable() .......................................... 742EFI_ACPI_TABLE_PROTOCOL.UninstallAcpiTable()...................................... 743

    20 EFI Byte Code Virtual Machine.................................................................. 74520.1 Overview ..................................................................................................................... 745

    20.1.1 Processor Architecture Independence ............................................................ 74520.1.2 OS Independent ............................................................................................. 74620.1.3 EFI Compliant ................................................................................................. 74620.1.4 Coexistence of Legacy Option ROMs ............................................................. 74620.1.5 Relocatable Image .......................................................................................... 74620.1.6 Size Restrictions Based on Memory Available ............................................... 746

    xvi January 23, 2007 Version 2.1

  • 20.2 Memory Ordering ........................................................................................................ 74720.3 Virtual Machine Registers ........................................................................................... 74720.4 Natural Indexing.......................................................................................................... 748

    20.4.1 Sign Bit............................................................................................................ 74920.4.2 Bits Assigned to Natural Units......................................................................... 74920.4.3 Constant.......................................................................................................... 74920.4.4 Natural Units ................................................................................................... 750

    20.5 EBC Instruction Operands .......................................................................................... 75020.5.1 Direct Operands .............................................................................................. 75020.5.2 Indirect Operands............................................................................................ 75120.5.3 Indirect with Index Operands .......................................................................... 75120.5.4 Immediate Operands....................................................................................... 751

    20.6 EBC Instruction Syntax .............................................................................................. 75220.7 Instruction Encoding ................................................................................................... 752

    20.7.1 Instruction Opcode Byte Encoding ................................................................. 75220.7.2 Instruction Operands Byte Encoding............................................................... 75320.7.3 Index/Immediate Data Encoding ..................................................................... 753

    20.8 EBC Instruction Set..................................................................................................... 754ADD................................................................................................................... 755AND................................................................................................................... 756ASHR ................................................................................................................ 757BREAK .............................................................................................................. 758CALL ................................................................................................................. 760CMP .................................................................................................................. 762CMPI ................................................................................................................. 764DIV .................................................................................................................... 766DIVU.................................................................................................................. 767EXTNDB............................................................................................................ 768EXTNDD............................................................................................................ 769EXTNDW........................................................................................................... 770JMP ................................................................................................................... 771JMP8 ................................................................................................................. 773LOADSP............................................................................................................ 774MOD.................................................................................................................. 775MODU ............................................................................................................... 776MOV .................................................................................................................. 777MOVI ................................................................................................................. 779MOVIn ............................................................................................................... 781MOVn ................................................................................................................ 782MOVREL ........................................................................................................... 783MOVsn .............................................................................................................. 784MUL................................................................................................................... 786MULU ................................................................................................................ 787NEG................................................................................................................... 788NOT................................................................................................................... 789OR..................................................................................................................... 790POP................................................................................................................... 791

    Version 2.1 January 23, 2007 xvii

  • Unified Extensible Firmware Interface Specification

    POPn................................................................................................................. 792PUSH ................................................................................................................ 793PUSHn .............................................................................................................. 794RET ................................................................................................................... 795SHL ................................................................................................................... 796SHR................................................................................................................... 797STORESP ......................................................................................................... 798SUB................................................................................................................... 799XOR................................................................................................................... 800

    20.9 Runtime and Software Conventions ........................................................................... 80120.9.1 Calling Outside VM ......................................................................................... 80120.9.2 Calling Inside VM ............................................................................................ 80120.9.3 Parameter Passing.......................................................................................... 80120.9.4 Return Values ................................................................................................. 80120.9.5 Binary Format.................................................................................................. 801

    20.10 Architectural Requirements....................................................................................... 80120.10.1 EBC Image Requirements ............................................................................ 80120.10.2 EBC Execution Interfacing Requirements..................................................... 80220.10.3 Interfacing Function Parameters Requirements............................................ 80220.10.4 Function Return Requirements ..................................................................... 80220.10.5 Function Return Values Requirements ......................................................... 802

    20.11 EBC Interpreter Protocol........................................................................................... 802EFI_EBC_PROTOCOL ..................................................................................... 803EFI_EBC_PROTOCOL.CreateThunk() ............................................................. 804EFI_EBC_PROTOCOL.UnloadImage() ............................................................ 805EFI_EBC_PROTOCOL.RegisterICacheFlush() ................................................ 806EFI_EBC_PROTOCOL.GetVersion()................................................................ 808

    20.12 EBC Tools................................................................................................................. 80820.12.1 EBC C Compiler............................................................................................ 80820.12.2 C Coding Convention .................................................................................... 80820.12.3 EBC Interface Assembly Instructions............................................................ 80920.12.4 Stack Maintenance and Argument Passing .................................................. 80920.12.5 Native to EBC Arguments Calling Convention .............................................. 80920.12.6 EBC to Native Arguments Calling Convention .............................................. 80920.12.7 EBC to EBC Arguments Calling Convention................................................. 81020.12.8 Function Returns........................................................................................... 81020.12.9 Function Return Values................................................................................. 81020.12.10 Thunking ..................................................................................................... 81020.12.11 EBC Linker .................................................................................................. 81220.12.12 Image Loader .............................................................................................. 81320.12.13 Debug Support ............................................................................................ 813

    20.13 VM Exception Handling............................................................................................. 81320.13.1 Divide By 0 Exception ................................................................................... 81320.13.2 Debug Break Exception ................................................................................ 81320.13.3 Invalid Opcode Exception ............................................................................. 81320.13.4 Stack Fault Exception ................................................................................... 81420.13.5 Alignment Exception ..................................................................................... 814

    xviii January 23, 2007 Version 2.1

  • 20.13.6 Instruction Encoding Exception..................................................................... 81420.13.7 Bad Break Exception..................................................................................... 81420.13.8 Undefined Exception ..................................................................................... 814

    20.14 Option ROM Formats................................................................................................ 81420.14.1 EFI Drivers for PCI Add-in Cards .................................................................. 81520.14.2 Non-PCI Bus Support.................................................................................... 815

    21 Network Protocols - SNP, PXE and BIS.................................................... 81721.1 Simple Network Protocol ............................................................................................ 817

    EFI_SIMPLE_NETWORK_PROTOCOL........................................................... 817EFI_SIMPLE_NETWORK.Start() ...................................................................... 822EFI_SIMPLE_NETWORK.Stop() ...................................................................... 823EFI_SIMPLE_NETWORK.Initialize()................................................................. 824EFI_SIMPLE_NETWORK.Reset() .................................................................... 825EFI_SIMPLE_NETWORK.Shutdown().............................................................. 826EFI_SIMPLE_NETWORK.ReceiveFilters() ....................................................... 827EFI_SIMPLE_NETWORK.StationAddress() ..................................................... 830EFI_SIMPLE_NETWORK.Statistics() ............................................................... 831EFI_SIMPLE_NETWORK.MCastIPtoMAC() ..................................................... 834EFI_SIMPLE_NETWORK.NvData().................................................................. 835EFI_SIMPLE_NETWORK.GetStatus().............................................................. 837EFI_SIMPLE_NETWORK.Transmit()................................................................ 839EFI_SIMPLE_NETWORK.Receive()................................................................. 841

    21.2 Network Interface Identifier Protocol ........................................................................... 842EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL.............................. 842

    21.3 PXE Base Code Protocol............................................................................................ 845EFI_PXE_BASE_CODE_PROTOCOL ............................................................. 845EFI_PXE_BASE_CODE_PROTOCOL.Start() .................................................. 856EFI_PXE_BASE_CODE_PROTOCOL.Stop()................................................... 858EFI_PXE_BASE_CODE_PROTOCOL.Dhcp().................................................. 859EFI_PXE_BASE_CODE_PROTOCOL.Discover() ............................................ 861EFI_PXE_BASE_CODE_PROTOCOL.Mtftp() .................................................. 865EFI_PXE_BASE_CODE_PROTOCOL.UdpWrite() ........................................... 869EFI_PXE_BASE_CODE_PROTOCOL.UdpRead()........................................... 871EFI_PXE_BASE_CODE_PROTOCOL.SetIpFilter().......................................... 874EFI_PXE_BASE_CODE_PROTOCOL.Arp() .................................................... 876EFI_PXE_BASE_CODE_PROTOCOL.SetParameters() .................................. 878EFI_PXE_BASE_CODE_PROTOCOL.SetStationIp() ...................................... 880EFI_PXE_BASE_CODE_PROTOCOL.SetPackets()........................................ 882

    21.4 PXE Base Code Callback Protocol ............................................................................. 883EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL ........................................ 883EFI_PXE_BASE_CODE_CALLBACK.Callback().............................................. 885

    21.5 Boot Integrity Services Protocol.................................................................................. 886EFI_BIS_PROTOCOL....................................................................................... 886EFI_BIS_PROTOCOL.Initialize() ...................................................................... 889EFI_BIS_PROTOCOL.Shutdown() ................................................................... 893

    Version 2.1 January 23, 2007 xix

  • Unified Extensible Firmware Interface Specification

    EFI_BIS_PROTOCOL.Free() ............................................................................ 894EFI_BIS_PROTOCOL.GetBootObjectAuthorizationCertificate()....................... 895EFI_BIS_PROTOCOL.GetBootObjectAuthorizationCheckFlag()...................... 896EFI_BIS_PROTOCOL.GetBootObjectAuthorizationUpdateToken() ................. 897EFI_BIS_PROTOCOL.GetSignatureInfo() ........................................................ 898EFI_BIS_PROTOCOL.UpdateBootObjectAuthorization() ................................. 903EFI_BIS_PROTOCOL.VerifyBootObject() ........................................................ 911EFI_BIS_PROTOCOL.VerifyObjectWithCredential() ........................................ 919

    22 Network Protocols — Managed Network ................................................. 92722.1 EFI Managed Network Protocol .................................................................................. 927

    EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL ................... 927EFI_MANAGED_NETWORK_PROTOCOL...................................................... 928EFI_MANAGED_NETWORK_PROTOCOL.GetModeData() ............................ 930EFI_MANAGED_NETWORK_PROTOCOL.Configure() ................................... 933EFI_MANAGED_NETWORK_PROTOCOL.McastIpToMac() ........................... 935EFI_MANAGED_NETWORK_PROTOCOL.Groups()....................................... 936EFI_MANAGED_NETWORK_PROTOCOL.Transmit()..................................... 937EFI_MANAGED_NETWORK_PROTOCOL.Receive()...................................... 943EFI_MANAGED_NETWORK_PROTOCOL.Cancel() ....................................... 944EFI_MANAGED_NETWORK_PROTOCOL.Poll()............................................. 945

    23 Network Protocols - ARP and DHCPv4 ................................................... 94723.1 ARP Protocol .............................................................................................................. 947

    EFI_ARP_SERVICE_BINDING_PROTOCOL .................................................. 947EFI_ARP_PROTOCOL ..................................................................................... 948EFI_ARP_PROTOCOL.Configure() .................................................................. 950EFI_ARP_PROTOCOL.Add() ........................................................................... 952EFI_ARP_PROTOCOL.Find()........................................................................... 954Related Definitions ............................................................................................ 955EFI_ARP_PROTOCOL.Delete() ....................................................................... 956EFI_ARP_PROTOCOL.Flush() ......................................................................... 957EFI_ARP_PROTOCOL.Request() .................................................................... 958EFI_ARP_PROTOCOL.Cancel()....................................................................... 960

    23.2 EFI DHCPv4 Protocol ................................................................................................. 961EFI_DHCP4_SERVICE_BINDING_PROTOCOL.............................................. 961EFI_DHCP4_PROTOCOL ................................................................................ 961EFI_DHCP4_PROTOCOL.GetModeData()....................................................... 964EFI_DHCP4_PROTOCOL.Configure() ............................................................ 968EFI_DHCP4_PROTOCOL.Start() ..................................................................... 975EFI_DHCP4_PROTOCOL.RenewRebind() ...................................................... 977EFI_DHCP4_PROTOCOL.Release()................................................................ 979EFI_DHCP4_PROTOCOL.Stop()...................................................................... 980EFI_DHCP4_PROTOCOL.Build() ..................................................................... 981EFI_DHCP4_PROTOCOL.TransmitReceive() .................................................. 983EFI_DHCP4_PROTOCOL.Parse().................................................................... 986

    xx January 23, 2007 Version 2.1

  • 24 Network Protocols —TCPv4, IPv4 and Configuration ............................ 98924.1 EFI TCPv4 Protocol .................................................................................................... 989

    EFI_TCP4_SERVICE_BINDING_PROTOCOL................................................. 989EFI TCP4 Variable ............................................................................................ 989EFI_TCP4_PROTOCOL ................................................................................... 991EFI_TCP4_PROTOCOL.GetModeData().......................................................... 993EFI_TCP4_PROTOCOL.Configure() ................................................................ 998EFI_TCP4_PROTOCOL.Routes()................................................................... 1000EFI_TCP4_PROTOCOL.Connect()................................................................. 1002EFI_TCP4_PROTOCOL.Accept() ................................................................... 1005EFI_TCP4_PROTOCOL.Transmit() ................................................................ 1007EFI_TCP4_PROTOCOL.Receive() ................................................................. 1012EFI_TCP4_PROTOCOL.Close()..................................................................... 1014EFI_TCP4_PROTOCOL.Cancel()................................................................... 1016EFI_TCP4_PROTOCOL.Poll() ........................................................................ 1017

    24.2 EFI IPv4 Protocol ...................................................................................................... 1017EFI_IP4_SERVICE_BINDING_PROTOCOL .................................................. 1018EFI IPv4 Variable ............................................................................................ 1018EFI_IP4_PROTOCOL ..................................................................................... 1019EFI_IP4_PROTOCOL.GetModeData() ........................................................... 1021EFI_IP4_PROTOCOL.Configure() .................................................................. 1026EFI_IP4_PROTOCOL.Groups() ...................................................................... 1028EFI_IP4_PROTOCOL.Routes() ...................................................................... 1030EFI_IP4_PROTOCOL.Transmit().................................................................... 1032EFI_IP4_PROTOCOL.Receive()..................................................................... 1038EFI_IP4_PROTOCOL.Cancel()....................................................................... 1040EFI_IP4_PROTOCOL.Poll()............................................................................ 1041

    24.3 EFI IPv4 Configuration Protocol................................................................................ 1041EFI_IP4_CONFIG_PROTOCOL ..................................................................... 1041EFI_IP4_CONFIG_PROTOCOL.Start() .......................................................... 1043EFI_IP4_CONFIG_PROTOCOL.Stop() .......................................................... 1045EFI_IP4_CONFIG_PROTOCOL.GetData() .................................................... 1046Related Definitions .......................................................................................... 1046

    25 Network Protocols — UDPv4 and MTFTPv4 .......................................... 104925.1 EFI UDPv4 Protocol.................................................................................................. 1049

    EFI_UDP4_SERVICE_BINDING_PROTOCOL .............................................. 1049EFI UDP4 Variable .......................................................................................... 1049EFI_UDP4_PROTOCOL................................................................................. 1051EFI_UDP4_PROTOCOL.GetModeData() ....................................................... 1053EFI_UDP4_PROTOCOL.Configure() .............................................................. 1056EFI_UDP4_PROTOCOL.Groups().................................................................. 1058EFI_UDP4_PROTOCOL.Routes() .................................................................. 1059EFI_UDP4_PROTOCOL.Transmit()................................................................ 1061EFI_UDP4_PROTOCOL.Receive()................................................................. 1067

    Version 2.1 January 23, 2007 xxi

  • Unified Extensible Firmware Interface Specification

    EFI_UDP4_PROTOCOL.Cancel() .................................................................. 1069EFI_UDP4_PROTOCOL.Poll()........................................................................ 1070

    25.2 EFI MTFTPv4 Protocol ............................................................................................. 1070EFI_MTFTP4_SERVICE_BINDING_PROTOCOL.......................................... 1070EFI_MTFTP4_PROTOCOL............................................................................. 1071EFI_MTFTP4_PROTOCOL.GetModeData()................................................... 1073EFI_MTFTP4_PROTOCOL.Configure().......................................................... 1076EFI_MTFTP4_PROTOCOL.GetInfo() ............................................................. 1078EFI_MTFTP4_PROTOCOL.ParseOptions() ................................................... 1086EFI_MTFTP4_PROTOCOL.ReadFile()........................................................... 1088EFI_MTFTP4_PROTOCOL.WriteFile() ........................................................... 1094EFI_MTFTP4_PROTOCOL.ReadDirectory() .................................................. 1096EFI_MTFTP4_PROTOCOL.Poll() ................................................................... 1098

    26 Security - Secure Boot, Driver Signing and Hash ................................. 109926.1 Secure Boot .............................................................................................................. 1099

    EFI_AUTHENTICATION_INFO_PROTOCOL ................................................ 1099EFI_AUTHENTICATION_INFO_PROTOCOL.Get() ....................................... 1100EFI_AUTHENTICATION_INFO_PROTOCOL.Set()........................................ 1101

    26.2 UEFI Driver Signing Overview .................................................................................. 110426.2.1 Digital Signatures .......................................................................................... 110426.2.2 Embedded Signatures................................................................................... 110526.2.3 Creating Message from Executables ............................................................ 110626.2.4 Code Definitions............................................................................................ 1106

    WIN_CERTIFICATE........................................................................................ 1107WIN_CERTIFICATE_EFI_PKCS1_15 ............................................................ 1108

    26.2.5 WIN_CERTIFICATE_UEFI_GUID ................................................................ 110926.3 Hash Overview.......................................................................................................... 1109

    26.3.1 Hash References .......................................................................................... 110926.4 EFI Hash Protocols .................................................................................................. 1110

    EFI_HASH_SERVICE_BINDING_PROTOCOL.............................................. 1110EFI_HASH_PROTOCOL................................................................................. 1110EFI_HASH_PROTOCOL.GetHashSize() ........................................................ 1112EFI_HASH_PROTOCOL.Hash()..................................................................... 1113

    26.4.1 Other Code Definitions.................................................................................. 1114EFI_SHA1_HASH, EFI_SHA224_HASH, EFI_SHA256_HASH,

    EFI_SHA384_HASH, EFI_SHA512HASH, EFI_MD5_HASH ................... 1114

    27 Human Interface Infrastructure Overview .............................................. 111727.1 Goals......................................................................................................................... 111727.2 Design Discussion .................................................................................................... 1118

    27.2.1 Drivers And Applications ............................................................................... 111827.2.2 Localization ................................................................................................... 112527.2.3 User Input...................................................................................................... 112627.2.4 Keyboard Layout ........................................................................................... 112727.2.5 Forms ............................................................................................................ 1130

    xxii January 23, 2007 Version 2.1

  • 27.2.6 Strings ........................................................................................................... 115227.2.7 Fonts ............................................................................................................. 115627.2.8 Images .......................................................................................................... 116227.2.9 HII Database ................................................................................................. 116327.2.10 Forms Browser............................................................................................ 116327.2.11 Configuration Settings................................................................................. 116427.2.12 Form Callback Logic ................................................................................... 116727.2.13 Driver Model Interaction .............................................................................. 116727.2.14 Human Interface Component Interactions .................................................. 1168

    27.3 Code Definitions........................................................................................................ 116927.3.1 Package Lists and Package Headers ........................................................... 1169

    EFI_HII_PACKAGE_HEADER........................................................................ 116927.3.2 Simplified Fon