1706
Unified Extensible Firmware Interface Specification Version 2.1 Integrates approved Errata and amplifications through December 11, 2007 Note: Added a number of amplifications. These additions are not errata. They clarify particular topics which previously might have been abstract or obscure.

UEFI Specification Version 2.1

  • Upload
    jjwang

  • View
    2.946

  • Download
    3

Embed Size (px)

Citation preview

Unified Extensible Firmware Interface Specification

Version 2.1 Integrates approved Errata and amplifications through December 11, 2007

Note: Added a number of amplifications. These additions are not errata. They clarify particular topicswhich previously might have been abstract or obscure.

Unified Extensible Firmware Interface Specification

AcknowledgementsThe 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

Errata and amplifications through December 11, 2007

Version 2.1

Revision HistoryRevision 2.0 2.1 2.1a 2,1b Revision History First release of specification. Second release 2.1 incorporating Errata through 4-27-07 2.1 incorporating Errata throughOctober -07: Mantis # Date January 31, 2006 January 23, 2007 April 27, 2007 December 11, 2007

51 Long physical blocks updates 156 SendForm API Errata 158 Errata to the UEFI 2.1 configuration sections 159 Adjust some of the #define names in the Simple Text Input Ex protocol 160 Clean up references to PCIR 162 UEFI PIWG Device Path Errata 164 Update to USB2_HC_PROTOCOL Table 165 Fix EFI_GRAPHICS_OUTPUT_PIXEL 168 Remove LOAD_OPTION_GRAPHICS 170 (Addition of) Driver Family Override Protocol 172 Typo for ResetSystem() 173 Minor changes to the description of two of the fields in the Common Platform Error Record, in Appendix N 174 Error record addition for dma remapping units 175 Update to SendForm API 177 remove ending paragraph (editing text) in section 9.6 181 Correct MNP GUID collision 182 Clarify EFI_MTFTP4_TOKEN

Unified Extensible Firmware Interface Specification

additonal errata

184 SNIA/DDF Wording Update 185 Change EFI term to UEFI for consistency 186 change PCIR struct to match PCI FW Spec 3.0 187 Clarify input protocols. 190 Extensive errata form UCST including OP codes changes ro resolve conflicts. 197 EFI Loaded Image Device Path Protocol 205 Change LoadImage() parameter name from FilePath to DevicePath; ends confusion with EFI_LOADED_IMAGE_PROTOCOL

November 5, 2007

iv

Errata and amplifications through December 11, 2007

Version 2.1

Unified Extensible Firmware Interface Specification

vi

Errata and amplifications through December 11, 2007

Version 2.1

ContentsAcknowledgements............................................................................................. ii Revision History ................................................................................................. iii Contents ............................................................................................................. vii Figures............................................................................................................. xxxi Tables ............................................................................................................. xxxv 1 Introduction..................................................................................................... 11.1 UEFI Driver Model Extensions .......................................................................................... 1 1.2 Overview ........................................................................................................................... 2 1.3 Goals................................................................................................................................. 5 1.4 Target Audience................................................................................................................ 7 1.5 UEFI Design Overview...................................................................................................... 7 1.6 UEFI Driver Model ............................................................................................................ 9 1.6.1 UEFI Driver Model Goals ...................................................................................... 9 1.6.2 Legacy Option ROM Issues ................................................................................ 10 1.7 Migration Requirements .................................................................................................. 10 1.7.1 Legacy Operating System Support ..................................................................... 10 1.7.2 Supporting the UEFI Specification on a Legacy Platform ................................... 11 1.8 Conventions Used in this Document............................................................................... 11 1.8.1 Data Structure Descriptions ................................................................................ 11 1.8.2 Protocol Descriptions .......................................................................................... 11 1.8.3 Procedure Descriptions....................................................................................... 12 1.8.4 Instruction Descriptions....................................................................................... 12 1.8.5 Pseudo-Code Conventions ................................................................................. 12 1.8.6 Typographic Conventions ................................................................................... 13

2

Overview........................................................................................................ 152.1 Boot Manager ................................................................................................................. 15 2.1.1 UEFI Images ....................................................................................................... 16 2.1.2 Applications......................................................................................................... 17 2.1.3 UEFI OS Loaders................................................................................................ 17 2.1.4 UEFI Drivers........................................................................................................ 18 2.2 Firmware Core ................................................................................................................ 18 2.2.1 UEFI Services ..................................................................................................... 18 2.2.2 Runtime Services ................................................................................................ 19 2.3 Calling Conventions ........................................................................................................ 20 2.3.1 Data Types.......................................................................................................... 20 2.3.2 IA-32 Platforms ................................................................................................... 22 2.3.3 Intel Itanium-Based Platforms......................................................................... 24 2.3.4 x64 Platforms ...................................................................................................... 26

Version 2.1

Errata and amplifications through December 11, 2007

vii

Unified Extensible Firmware Interface Specification

2.4 Protocols ......................................................................................................................... 28 2.5 UEFI Driver Model .......................................................................................................... 33 2.5.1 Legacy Option ROM Issues ................................................................................ 35 2.5.2 Driver Initialization............................................................................................... 37 2.5.3 Host Bus Controllers ........................................................................................... 38 2.5.4 Device Drivers..................................................................................................... 40 2.5.5 Bus Drivers.......................................................................................................... 41 2.5.6 Platform Components ......................................................................................... 43 2.5.7 Hot-Plug Events .................................................................................................. 44 2.5.8 EFI Services Binding........................................................................................... 44 2.6 Requirements.................................................................................................................. 46 2.6.1 Required Elements.............................................................................................. 46 2.6.2 Platform-Specific Elements ................................................................................ 47 2.6.3 Driver-Specific Elements..................................................................................... 48

3

Boot Manager................................................................................................ 513.1 Firmware Boot Manager ................................................................................................. 51 3.1.1 Boot Manager Programming ............................................................................... 52 3.1.2 Load Option Processing...................................................................................... 52 3.1.3 Load Options....................................................................................................... 53 3.1.4 Boot Manager Capabilities .................................................................................. 55 3.1.5 Launching Boot#### Applications....................................................................... 55 3.1.6 Launching Boot#### Load Options Using Hot Keys ........................................... 56 3.2 Globally Defined Variables.............................................................................................. 58 3.3 Boot Option Variables Default Boot Behavior ................................................................. 60 3.4 Boot Mechanisms ........................................................................................................... 61 3.4.1 Boot via the Simple File Protocol ........................................................................ 61 3.4.2 Boot via LOAD_FILE PROTOCOL...................................................................... 62

4

EFI System Table.......................................................................................... 654.1 UEFI Image Entry Point .................................................................................................. 65 EFI_IMAGE_ENTRY_POINT .............................................................................. 65 4.2 EFI Table Header ........................................................................................................... 66 EFI_TABLE_HEADER ........................................................................................ 67 4.3 EFI System Table .......................................................................................................... 68 EFI_SYSTEM_TABLE......................................................................................... 68 4.4 EFI Boot Services Table ................................................................................................ 69 EFI_BOOT_SERVICES ...................................................................................... 70 4.5 EFI Runtime Services Table .......................................................................................... 74 EFI_RUNTIME_SERVICES ................................................................................ 74 4.6 EFI Configuration Table ................................................................................................. 76 EFI_CONFIGURATION_TABLE ......................................................................... 76 4.7 Image Entry Point Examples........................................................................................... 77 4.7.1 Image Entry Point Examples............................................................................... 78 4.7.2 UEFI Driver Model Example ............................................................................... 79 4.7.3 UEFI Driver Model Example (Unloadable) .......................................................... 80

viii

Errata and amplifications through December 11, 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 ...................................................................................................... 85 5.2 LBA 0 Format.................................................................................................................. 85 5.2.1 Legacy Master Boot Record (MBR) .................................................................... 85 5.2.2 Protective Master Boot Record .......................................................................... 87 5.3 GUID Partition Table (GPT) Format................................................................................ 87 5.3.1 GUID Format overview........................................................................................ 87 5.3.2 GPT Partition Table Header................................................................................ 90 5.3.3 GUID Partition Entry Array .................................................................................. 92

6

Services Boot Services ........................................................................... 956.1 Event, Timer, and Task Priority Services ........................................................................ 96 CreateEvent() .................................................................................................... 100 CreateEventEx()................................................................................................ 104 CloseEvent()...................................................................................................... 107 SignalEvent()..................................................................................................... 108 WaitForEvent() .................................................................................................. 109 CheckEvent()..................................................................................................... 111 SetTimer() ......................................................................................................... 112 RaiseTPL() ........................................................................................................ 114 RestoreTPL()..................................................................................................... 116 6.2 Memory Allocation Services.......................................................................................... 116 AllocatePages() ................................................................................................. 119 FreePages() ...................................................................................................... 122 GetMemoryMap() .............................................................................................. 123 AllocatePool() .................................................................................................... 127 FreePool() ......................................................................................................... 128 6.3 Protocol Handler Services ............................................................................................ 128 6.3.1 Driver Model Boot Services............................................................................... 130 InstallProtocolInterface() ................................................................................... 133 UninstallProtocolInterface() ............................................................................... 135 ReinstallProtocolInterface() ............................................................................... 137 RegisterProtocolNotify() .................................................................................... 139 LocateHandle().................................................................................................. 141 HandleProtocol() ............................................................................................... 143 LocateDevicePath()........................................................................................... 145 OpenProtocol() .................................................................................................. 147 CloseProtocol().................................................................................................. 154 OpenProtocolInformation() ................................................................................ 156 ConnectController() ........................................................................................... 158 DisconnectController()....................................................................................... 162 ProtocolsPerHandle() ........................................................................................ 165 LocateHandleBuffer() ........................................................................................ 167 LocateProtocol() ................................................................................................ 170

Version 2.1

Errata and amplifications through December 11, 2007

ix

Unified Extensible Firmware Interface Specification

InstallMultipleProtocolInterfaces() ..................................................................... 171 UninstallMultipleProtocolInterfaces()................................................................. 172 6.4 Image Services ............................................................................................................. 172 LoadImage() ...................................................................................................... 175 StartImage() ...................................................................................................... 177 UnloadImage()................................................................................................... 179 EFI_IMAGE_ENTRY_POINT ............................................................................ 180 Exit() .................................................................................................................. 182 ExitBootServices()............................................................................................. 184 6.5 Miscellaneous Boot Services ........................................................................................ 185 SetWatchdogTimer() ......................................................................................... 186 Stall() ................................................................................................................. 188 CopyMem()........................................................................................................ 189 SetMem()........................................................................................................... 190 GetNextMonotonicCount()................................................................................. 191 InstallConfigurationTable() ................................................................................ 192 CalculateCrc32() ............................................................................................... 194

7

Services Runtime Services ................................................................... 1957.1 Runtime Services Rules and Restrictions ..................................................................... 196 7.1.1 Exception for Machine Check, INIT, and NMI. .................................................. 196 7.2 Variable Services .......................................................................................................... 197 GetVariable() ..................................................................................................... 199 GetNextVariableName() .................................................................................... 201 SetVariable() ..................................................................................................... 203 QueryVariableInfo() ........................................................................................... 209 7.2.1 Hardware Error Record Persistence ................................................................. 210 7.3 Time Services ............................................................................................................... 211 GetTime() .......................................................................................................... 212 SetTime()........................................................................................................... 215 GetWakeupTime() ............................................................................................. 216 SetWakeupTime() ............................................................................................. 217 7.4 Virtual Memory Services ............................................................................................... 218 SetVirtualAddressMap() .................................................................................... 219 ConvertPointer() ................................................................................................ 221 7.5 Miscellaneous Runtime Services .................................................................................. 222 7.5.1 Reset System.................................................................................................... 222 ResetSystem()................................................................................................... 223 7.5.2 Get Next High Monotonic Count ....................................................................... 224 GetNextHighMonotonicCount() ......................................................................... 225 7.5.3 Update Capsule ................................................................................................ 226 UpdateCapsule() ............................................................................................... 227 QueryCapsuleCapabilities() .............................................................................. 232

8

Protocols EFI Loaded Image................................................................. 2358.1 EFI Loaded Image Protocol .......................................................................................... 235

x

Errata and amplifications through December 11, 2007

Version 2.1

EFI_LOADED_IMAGE_PROTOCOL ................................................................ 235 EFI_LOADED_IMAGE_PROTOCOL.Unload() ................................................. 237 8.2 EFI Loaded Image Device Path Protocol...................................................................... 237 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL ..................................... 237

9

Protocols Device Path Protocol ........................................................... 2399.1 Device Path Overview................................................................................................... 239 9.2 EFI Device Path Protocol .............................................................................................. 239 EFI_DEVICE_PATH_PROTOCOL.................................................................... 239 9.3 Device Path Nodes ....................................................................................................... 240 9.3.1 Generic Device Path Structures........................................................................ 241 9.3.2 Hardware Device Path ...................................................................................... 242 9.3.3 ACPI Device Path ............................................................................................. 244 9.3.4 ACPI _ADR Device Path................................................................................... 246 9.3.5 Messaging Device Path .................................................................................... 247 9.3.6 Media Device Path ............................................................................................ 259 9.3.7 BIOS Boot Specification Device Path ............................................................... 262 9.4 Device Path Generation Rules...................................................................................... 263 9.4.1 Housekeeping Rules ......................................................................................... 263 9.4.2 Rules with ACPI _HID and _UID....................................................................... 263 9.4.3 Rules with ACPI _ADR...................................................................................... 264 9.4.4 Hardware vs. Messaging Device Path Rules .................................................... 265 9.4.5 Media Device Path Rules.................................................................................. 265 9.4.6 Other Rules ....................................................................................................... 265 9.5 Device Path Utilities Protocol ........................................................................................ 266 EFI_DEVICE_PATH_UTILITIES_PROTOCOL................................................. 266 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.GetDevicePathSize() .............. 268 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.DuplicateDevicePath() ............ 269 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDevicePath()............... 270 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDeviceNode() ............. 271 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.AppendDevicePathInstance() . 272 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.GetNextDevicePathInstance() 273 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.CreateDeviceNode() ............... 274 EFI_DEVICE_PATH_UTILITIES_PROTOCOL.IsDevicePathMultiInstance() ... 275 9.6 EFI Device Path Display Format Overview ................................................................... 275 9.6.1 Design Discussion............................................................................................. 275 9.6.2 Device Path to Text Protocol............................................................................. 290 EFI_DEVICE_PATH_TO_TEXT_PROTOCOL ................................................. 290 EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDeviceNodeToText()... 291 EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDevicePathToText().... 292 9.6.3 Device Path from Text Protocol ........................................................................ 293 EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL............................................ 293 EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL.ConvertTextToDeviceNode() ... 294 EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL.ConvertTextToDevicePath() .... 295

Version 2.1

Errata and amplifications through December 11, 2007

xi

Unified Extensible Firmware Interface Specification

10

Protocols UEFI Driver Model ................................................................ 29710.1 EFI Driver Binding Protocol......................................................................................... 297 EFI_DRIVER_BINDING_PROTOCOL .............................................................. 297 EFI_DRIVER_BINDING_PROTOCOL.Supported() .......................................... 300 EFI_DRIVER_BINDING_PROTOCOL.Start() ................................................... 306 EFI_DRIVER_BINDING_PROTOCOL.Stop() ................................................... 314 10.2 EFI Platform Driver Override Protocol ........................................................................ 317 EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL..................................... 318 EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.GetDriver().................. 320 EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.GetDriverPath() .......... 322 EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL.DriverLoaded()............ 324 10.3 EFI Bus Specific Driver Override Protocol .................................................................. 325 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL .............................. 325 EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL.GetDriver() ........... 327 10.4 EFI Driver Diagnostics Protocol .................................................................................. 328 EFI_DRIVER_DIAGNOSTICS_PROTOCOL .................................................... 328 EFI_DRIVER_DIAGNOSTICS_PROTOCOL.RunDiagnostics()........................ 330 10.5 EFI Component Name Protocol .................................................................................. 332 EFI_COMPONENT_NAME2_PROTOCOL....................................................... 332 EFI_COMPONENT_NAME2_PROTOCOL.GetDriverName() .......................... 334 EFI_COMPONENT_NAME2_PROTOCOL.GetControllerName() .................... 335 10.6 EFI Service Binding Protocol ...................................................................................... 336 EFI_SERVICE_BINDING_PROTOCOL............................................................ 336 EFI_SERVICE_BINDING_PROTOCOL.CreateChild() ..................................... 338 EFI_SERVICE_BINDING_PROTOCOL.DestroyChild().................................... 342 10.7 EFI Platform to Driver Configuration Protocol ............................................................. 346 EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL .................. 346 EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL.Query() ..... 348 EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL.Response()..... 350 10.8 EFI Driver Supported EFI Version Protocol ................................................................ 354 EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL............................. 354 10.9 EFI Driver Family Override Protocol ........................................................................... 354 EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL ........................................... 354 EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL.GetVersion ()..................... 356

11

Protocols Console Support .................................................................. 35711.1 Console I/O Protocol................................................................................................... 357 11.1.1 Overview ......................................................................................................... 357 11.1.2 ConsoleIn Definition ....................................................................................... 357 11.2 Simple Text Input Ex Protocol..................................................................................... 359 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL................................................. 359 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.Reset().................................... 360 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx()................ 361 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState() ............................... 364

xii

Errata and amplifications through December 11, 2007

Version 2.1

EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.RegisterKeyNotify() ................ 365 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.UnregisterKeyNotify() ............. 367 11.3 Simple Text Input Protocol.......................................................................................... 367 EFI_SIMPLE_TEXT_INPUT_PROTOCOL ....................................................... 367 EFI_SIMPLE_TEXT_INPUT_PROTOCOL.Reset()........................................... 369 EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke()........................... 370 11.3.1 ConsoleOut or StandardError ......................................................................... 370 11.4 Simple Text Output Protocol ....................................................................................... 371 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL ................................................... 371 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.Reset()....................................... 374 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString()............................ 375 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.TestString()................................ 378 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.QueryMode() ............................. 379 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetMode().................................. 380 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetAttribute() ............................. 381 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.ClearScreen() ............................ 383 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.SetCursorPosition() ................... 384 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.EnableCursor() .......................... 385 11.5 Simple Pointer Protocol .............................................................................................. 385 EFI_SIMPLE_POINTER_PROTOCOL ............................................................. 385 EFI_SIMPLE_POINTER_PROTOCOL.Reset()................................................. 388 EFI_SIMPLE_POINTER_PROTOCOL.GetState()............................................ 389 11.6 EFI Simple Pointer Device Paths ............................................................................... 390 11.7 Absolute Pointer Protocol ........................................................................................... 393 EFI_ABSOLUTE_POINTER_PROTOCOL ....................................................... 394 EFI_ABSOLUTE_POINTER_PROTOCOL.Reset()........................................... 396 EFI_ABSOLUTE_POINTER_PROTOCOL.GetState()...................................... 397 11.8 Serial I/O Protocol....................................................................................................... 398 EFI_SERIAL_IO_PROTOCOL .......................................................................... 398 EFI_SERIAL_IO_PROTOCOL.Reset() ............................................................. 402 EFI_SERIAL_IO_PROTOCOL.SetAttributes() .................................................. 403 EFI_SERIAL_IO_PROTOCOL.SetControl()...................................................... 405 EFI_SERIAL_IO_PROTOCOL.GetControl() ..................................................... 407 EFI_SERIAL_IO_PROTOCOL.Write() .............................................................. 408 EFI_SERIAL_IO_PROTOCOL.Read() .............................................................. 409 11.9 Graphics Output Protocol............................................................................................ 409 11.9.1 Blt Buffer ......................................................................................................... 410 EFI_GRAPHICS_OUTPUT_PROTOCOL ......................................................... 411 EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode()................................... 415 EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode() ....................................... 417 EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() ................................................. 418 EFI_EDID_DISCOVERED_PROTOCOL .......................................................... 420 EFI_EDID_ACTIVE_PROTOCOL ..................................................................... 421 EFI_EDID_OVERRIDE_PROTOCOL ............................................................... 422 EFI_EDID_OVERRIDE_PROTOCOL.GetEdid()............................................... 423 11.10 Rules for PCI/AGP Devices ...................................................................................... 424

Version 2.1

Errata and amplifications through December 11, 2007

xiii

Unified Extensible Firmware Interface Specification

12

Protocols - Media Access .......................................................................... 42712.1 Load File Protocol ....................................................................................................... 427 EFI_LOAD_FILE_PROTOCOL ......................................................................... 427 EFI_LOAD_FILE_PROTOCOL.LoadFile() ........................................................ 428 12.2 File System Format..................................................................................................... 429 12.2.1 System Partition .............................................................................................. 430 12.2.2 Partition Discovery .......................................................................................... 432 12.2.3 Media Formats ................................................................................................ 433 12.3 Simple File System Protocol ....................................................................................... 435 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL ..................................................... 435 EFI_SIMPLE_FILE SYSTEM_PROTOCOL.OpenVolume().............................. 437 12.4 EFI File Protocol ......................................................................................................... 438 EFI_FILE_PROTOCOL ..................................................................................... 438 EFI_FILE_PROTOCOL.Open()......................................................................... 440 EFI_FILE_PROTOCOL.Close() ........................................................................ 442 EFI_FILE_PROTOCOL.Delete() ....................................................................... 443 EFI_FILE_PROTOCOL.Read() ......................................................................... 444 EFI_FILE_PROTOCOL.Write() ......................................................................... 446 EFI_FILE_PROTOCOL.SetPosition() ............................................................... 447 EFI_FILE_PROTOCOL.GetPosition() ............................................................... 448 EFI_FILE_PROTOCOL.GetInfo()...................................................................... 449 EFI_FILE_PROTOCOL.SetInfo() ...................................................................... 451 EFI_FILE_PROTOCOL.Flush()......................................................................... 453 EFI_FILE_INFO................................................................................................. 453 EFI_FILE_SYSTEM_INFO................................................................................ 455 EFI_FILE_SYSTEM_VOLUME_LABEL ............................................................ 455 12.5 Tape Boot Support...................................................................................................... 456 12.5.1 Tape I/O Support............................................................................................. 456 12.5.2 Tape I/O Protocol ............................................................................................ 457 EFI_TAPE_IO_PROTOCOL ............................................................................. 457 EFI_TAPE_IO_PROTOCOL.TapeRead() ......................................................... 459 EFI_TAPE_IO_PROTOCOL.TapeWrite() ......................................................... 461 EFI_TAPE_IO_PROTOCOL.TapeRewind()...................................................... 463 EFI_TAPE_IO_PROTOCOL.TapeSpace()........................................................ 464 EFI_TAPE_IO_PROTOCOL.TapeWriteFM() .................................................... 466 EFI_TAPE_IO_PROTOCOL.TapeReset() ........................................................ 467 12.5.3 Tape Header Format....................................................................................... 467 12.6 Disk I/O Protocol ......................................................................................................... 469 EFI_DISK_IO_PROTOCOL .............................................................................. 469 EFI_DISK_IO_PROTOCOL.ReadDisk() ........................................................... 471 EFI_DISK_IO_PROTOCOL.WriteDisk()............................................................ 472 12.7 Updated EFI Block I/O Protocol................................................................................ 473 EFI_BLOCK_IO_PROTOCOL........................................................................... 473 EFI_BLOCK_IO_PROTOCOL.Reset().............................................................. 477 EFI_BLOCK_IO_PROTOCOL.ReadBlocks() .................................................... 478 EFI_BLOCK_IO_PROTOCOL.WriteBlocks() .................................................... 480

xiv

Errata and amplifications through December 11, 2007

Version 2.1

EFI_BLOCK_IO_PROTOCOL.FlushBlocks().................................................... 482 12.8 Unicode Collation Protocol.......................................................................................... 482 EFI_UNICODE_COLLATION_ PROTOCOL..................................................... 482 EFI_UNICODE_COLLATION_PROTOCOL.StriColl()....................................... 485 EFI_UNICODE_COLLATION_PROTOCOL.MetaiMatch()................................ 486 EFI_UNICODE_COLLATION_PROTOCOL.StrLwr()........................................ 488 EFI_UNICODE_COLLATION_PROTOCOL.StrUpr()........................................ 489 EFI_UNICODE_COLLATION_PROTOCOL.FatToStr() .................................... 490 EFI_UNICODE_COLLATION_PROTOCOL.StrToFat() .................................... 491

13

Protocols - PCI Bus Support ..................................................................... 49313.1 PCI Root Bridge I/O Support....................................................................................... 493 13.1.1 PCI Root Bridge I/O Overview ........................................................................ 493 13.2 PCI Root Bridge I/O Protocol ...................................................................................... 498 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL..................................................... 498 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.PollMem() ................................... 506 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.PollIo() ........................................ 508 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Mem.Read() EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Mem.Write() .......................... 510 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Io.Read() EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Io.Write() ............................... 512 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Pci.Read() EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Pci.Write() ............................. 514 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.CopyMem() ................................ 516 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Map() .......................................... 518 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Unmap()...................................... 520 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.AllocateBuffer()........................... 521 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.FreeBuffer() ................................ 523 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Flush() ........................................ 524 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.GetAttributes() ............................ 525 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.SetAttributes()............................. 527 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.Configuration()............................ 529 13.2.1 PCI Root Bridge Device Paths ........................................................................ 530 13.3 PCI Driver Model......................................................................................................... 533 13.3.1 PCI Driver Initialization.................................................................................... 533 13.3.2 PCI Bus Drivers............................................................................................... 536 13.3.3 PCI Device Drivers.......................................................................................... 541 13.4 EFI PCI I/O Protocol ................................................................................................... 542 EFI_PCI_IO_PROTOCOL................................................................................. 543 EFI_PCI_IO_PROTOCOL.PollMem() ............................................................... 552 EFI_PCI_IO_PROTOCOL.PollIo() .................................................................... 554 EFI_PCI_IO_PROTOCOL.Mem.Read() EFI_PCI_IO_PROTOCOL.Mem.Write() ...................................................... 556 EFI_PCI_IO_PROTOCOL.Io.Read() EFI_PCI_IO_PROTOCOL.Io.Write() ........................................................... 558

Version 2.1

Errata and amplifications through December 11, 2007

xv

Unified Extensible Firmware Interface Specification

EFI_PCI_IO_PROTOCOL.Pci.Read() EFI_PCI_IO_PROTOCOL.Pci.Write() ......................................................... 560 EFI_PCI_IO_PROTOCOL.CopyMem() ............................................................ 562 EFI_PCI_IO_PROTOCOL.Map() ..................................................................... 565 EFI_PCI_IO_PROTOCOL.Unmap().................................................................. 567 EFI_PCI_IO_PROTOCOL.AllocateBuffer() ....................................................... 568 EFI_PCI_IO_PROTOCOL.FreeBuffer() ............................................................ 570 EFI_PCI_IO_PROTOCOL.Flush()..................................................................... 571 EFI_PCI_IO_PROTOCOL.GetLocation() .......................................................... 572 EFI_PCI_IO_PROTOCOL.Attributes() .............................................................. 573 EFI_PCI_IO_PROTOCOL.GetBarAttributes()................................................... 576 EFI_PCI_IO_PROTOCOL.SetBarAttributes() ................................................... 579 13.4.1 PCI Device Paths ........................................................................................... 580 13.4.2 PCI Option ROMs ........................................................................................... 582 13.4.3 Nonvolatile Storage......................................................................................... 586 13.4.4 PCI Hot-Plug Events ....................................................................................... 587

14

Protocols SCSI Driver Models and Bus Support ................................ 58914.1 SCSI Driver Model Overview ...................................................................................... 589 14.2 SCSI Bus Drivers ........................................................................................................ 590 14.2.1 Driver Binding Protocol for SCSI Bus Drivers ................................................. 590 14.2.2 SCSI Enumeration .......................................................................................... 591 14.3 SCSI Device Drivers ................................................................................................... 591 14.3.1 Driver Binding Protocol for SCSI Device Drivers ............................................ 591 14.4 EFI SCSI I/O Protocol ................................................................................................. 592 EFI_SCSI_IO_PROTOCOL .............................................................................. 592 EFI_SCSI_IO_PROTOCOL.GetDeviceType() .................................................. 594 EFI_SCSI_IO_PROTOCOL.GetDeviceLocation()............................................. 596 EFI_SCSI_IO_PROTOCOL.ResetBus() ........................................................... 597 EFI_SCSI_IO_PROTOCOL.ResetDevice()....................................................... 598 EFI_SCSI_IO_PROTOCOL.ExecuteScsiCommand()....................................... 599 14.5 SCSI Device Paths ..................................................................................................... 603 14.5.1 SCSI Device Path Example ............................................................................ 603 14.5.2 ATAPI Device Path Example .......................................................................... 604 14.5.3 Fibre Channel Device Path Example .............................................................. 605 14.5.4 InfiniBand Device Path Example..................................................................... 606 14.6 SCSI Pass Thru Device Paths ................................................................................... 607 14.7 Extended SCSI Pass Thru Protocol ............................................................................ 609 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.................................................... 610 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru()................................. 613 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetNextTargetLun()................... 619 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.BuildDevicePath()...................... 621 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetTargetLun() .......................... 623 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.ResetChannel() ......................... 625 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.ResetTargetLun() ...................... 626 EFI_EXT_SCSI_PASS_THRU_PROTOCOL.GetNextTarget()......................... 628

xvi

Errata and amplifications through December 11, 2007

Version 2.1

15

Protocols - iSCSI Boot ............................................................................... 63115.1 Overview ..................................................................................................................... 631 15.1.1 iSCSI UEFI Driver Layering ............................................................................ 631 15.2 EFI iSCSI Initiator Name Protocol............................................................................... 631 EFI_ISCSI_INITIATOR_NAME_PROTOCOL ................................................... 631 EFI_ISCSI_INITIATOR_NAME_PROTOCOL. Get()......................................... 633 EFI_ISCSI_INITIATOR_NAME_PROTOCOL.Set() .......................................... 634

16

Protocols USB Support ......................................................................... 63516.1 USB2 Host Controller Protocol ................................................................................... 635 16.1.1 USB Host Controller Protocol Overview.......................................................... 635 EFI_USB2_HC_PROTOCOL ............................................................................ 635 EFI_USB2_HC_PROTOCOL.GetCapability() ................................................... 638 EFI_USB2_HC_PROTOCOL.Reset() ............................................................... 640 EFI_USB2_HC_PROTOCOL.GetState() .......................................................... 642 EFI_USB2_HC_PROTOCOL.SetState()........................................................... 644 EFI_USB2_HC_PROTOCOL.ControlTransfer()................................................ 646 EFI_USB2_HC_PROTOCOL.BulkTransfer() .................................................... 649 EFI_USB2_HC_PROTOCOL.AsyncInterruptTransfer() .................................... 652 EFI_USB2_HC_PROTOCOL.SyncInterruptTransfer()...................................... 655 EFI_USB2_HC_PROTOCOL.IsochronousTransfer()........................................ 657 EFI_USB2_HC_PROTOCOL.AsyncIsochronousTransfer().............................. 660 EFI_USB2_HC_PROTOCOL.GetRootHubPortStatus().................................... 663 EFI_USB2_HC_PROTOCOL.SetRootHubPortFeature() .................................. 667 EFI_USB2_HC_PROTOCOL.ClearRootHubPortFeature()............................... 669 16.2 USB Driver Model ....................................................................................................... 670 16.2.1 Scope .............................................................................................................. 670 16.2.2 USB Bus Driver ............................................................................................... 671 16.2.3 USB Device Driver .......................................................................................... 672 16.2.4 USB I/O Protocol............................................................................................. 673 EFI_USB_IO_PROTOCOL ............................................................................... 673 EFI_USB_IO_PROTOCOL.UsbControlTransfer()............................................. 676 EFI_USB_IO_PROTOCOL.UsbBulkTransfer() ................................................. 679 EFI_USB_IO_PROTOCOL.UsbAsyncInterruptTransfer() ................................. 681 EFI_USB_IO_PROTOCOL.UsbSyncInterruptTransfer()................................... 685 EFI_USB_IO_PROTOCOL.UsbIsochronousTransfer()..................................... 687 EFI_USB_IO_PROTOCOL.UsbAsyncIsochronousTransfer()........................... 689 EFI_USB_IO_PROTOCOL.UsbGetDeviceDescriptor() .................................... 691 EFI_USB_IO_PROTOCOL.UsbGetConfigDescriptor() ..................................... 693 EFI_USB_IO_PROTOCOL.UsbGetInterfaceDescriptor() ................................. 695 EFI_USB_IO_PROTOCOL.UsbGetEndpointDescriptor() ................................. 697 EFI_USB_IO_PROTOCOL.UsbGetStringDescriptor() ...................................... 699 EFI_USB_IO_PROTOCOL.UsbGetSupportedLanguages() ............................. 700 EFI_USB_IO_PROTOCOL.UsbPortReset()...................................................... 701

Version 2.1

Errata and amplifications through December 11, 2007

xvii

Unified Extensible Firmware Interface Specification

17

Protocols - Debugger Support .................................................................. 70317.1 Overview ..................................................................................................................... 703 17.2 EFI Debug Support Protocol ....................................................................................... 704 17.2.1 EFI Debug Support Protocol Overview ........................................................... 704 EFI_DEBUG_SUPPORT_PROTOCOL ............................................................ 704 EFI_DEBUG_SUPPORT_PROTOCOL.GetMaximumProcessorIndex()........... 707 EFI_DEBUG_SUPPORT_PROTOCOL.RegisterPeriodicCallback()................. 708 EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() .............. 713 EFI_DEBUG_SUPPORT_PROTOCOL.InvalidateInstructionCache()............... 717 17.3 EFI Debugport Protocol .............................................................................................. 718 17.3.1 EFI Debugport Overview................................................................................. 718 EFI_DEBUGPORT_PROTOCOL...................................................................... 718 EFI_DEBUGPORT_PROTOCOL.Reset() ......................................................... 720 EFI_DEBUGPORT_PROTOCOL.Write() .......................................................... 721 EFI_DEBUGPORT_PROTOCOL.Read().......................................................... 722 EFI_DEBUGPORT_PROTOCOL.Poll() ............................................................ 723 17.3.2 Debugport Device Path ................................................................................... 723 17.3.3 EFI Debugport Variable................................................................................... 724 17.4 EFI Debug Support Table ........................................................................................... 725 17.4.1 Overview ......................................................................................................... 725 17.4.2 EFI System Table Location ............................................................................. 726 17.4.3 EFI Image Info................................................................................................. 726

18

Protocols - Compression Algorithm Specification ................................. 72918.1 Algorithm Overview..................................................................................................... 729 18.2 Data Format ................................................................................................................ 730 18.2.1 Bit Order.......................................................................................................... 730 18.2.2 Overall Structure ............................................................................................. 731 18.2.3 Block Structure................................................................................................ 732 18.3 Compressor Design .................................................................................................... 735 18.3.1 Overall Process............................................................................................... 735 18.3.2 String Info Log................................................................................................. 736 18.3.3 Huffman Code Generation .............................................................................. 739 18.4 Decompressor Design ................................................................................................ 741 18.5 Decompress Protocol.................................................................................................. 741 EFI_DECOMPRESS_PROTOCOL ................................................................... 742 EFI_DECOMPRESS_PROTOCOL.GetInfo().................................................... 743 EFI_DECOMPRESS_PROTOCOL.Decompress() ........................................... 745

19

Protocols - ACPI Protocols........................................................................ 747EFI_ACPI_TABLE_PROTOCOL....................................................................... 747 EFI_ACPI_TABLE_PROTOCOL.InstallAcpiTable() .......................................... 748 EFI_ACPI_TABLE_PROTOCOL.UninstallAcpiTable()...................................... 749

xviii

Errata and amplifications through December 11, 2007

Version 2.1

20

EFI Byte Code Virtual Machine.................................................................. 75120.1 Overview ..................................................................................................................... 751 20.1.1 Processor Architecture Independence ............................................................ 751 20.1.2 OS Independent ............................................................................................. 752 20.1.3 EFI Compliant ................................................................................................. 752 20.1.4 Coexistence of Legacy Option ROMs ............................................................. 752 20.1.5 Relocatable Image .......................................................................................... 752 20.1.6 Size Restrictions Based on Memory Available ............................................... 752 20.2 Memory Ordering ........................................................................................................ 753 20.3 Virtual Machine Registers ........................................................................................... 753 20.4 Natural Indexing.......................................................................................................... 754 20.4.1 Sign Bit............................................................................................................ 755 20.4.2 Bits Assigned to Natural Units......................................................................... 755 20.4.3 Constant.......................................................................................................... 755 20.4.4 Natural Units ................................................................................................... 756 20.5 EBC Instruction Operands .......................................................................................... 756 20.5.1 Direct Operands .............................................................................................. 756 20.5.2 Indirect Operands............................................................................................ 757 20.5.3 Indirect with Index Operands .......................................................................... 757 20.5.4 Immediate Operands....................................................................................... 757 20.6 EBC Instruction Syntax .............................................................................................. 758 20.7 Instruction Encoding ................................................................................................... 758 20.7.1 Instruction Opcode Byte Encoding ................................................................. 758 20.7.2 Instruction Operands Byte Encoding............................................................... 759 20.7.3 Index/Immediate Data Encoding ..................................................................... 759 20.8 EBC Instruction Set..................................................................................................... 760 ADD................................................................................................................... 761 AND................................................................................................................... 762 ASHR ................................................................................................................ 763 BREAK .............................................................................................................. 764 CALL ................................................................................................................. 766 CMP .................................................................................................................. 768 CMPI ................................................................................................................. 770 DIV .................................................................................................................... 772 DIVU.................................................................................................................. 773 EXTNDB............................................................................................................ 774 EXTNDD............................................................................................................ 775 EXTNDW........................................................................................................... 776 JMP ................................................................................................................... 777 JMP8 ................................................................................................................. 779 LOADSP............................................................................................................ 780 MOD .................................................................................................................. 781 MODU ............................................................................................................... 782 MOV .................................................................................................................. 783 MOVI ................................................................................................................. 785 MOVIn ............................................................................................................... 787

Version 2.1

Errata and amplifications through December 11, 2007

xix

Unified Extensible Firmware Interface Specification

MOVn ................................................................................................................ 788 MOVREL ........................................................................................................... 789 MOVsn .............................................................................................................. 790 MUL................................................................................................................... 792 MULU ................................................................................................................ 793 NEG................................................................................................................... 794 NOT................................................................................................................... 795 OR ..................................................................................................................... 796 POP................................................................................................................... 797 POPn................................................................................................................. 798 PUSH ................................................................................................................ 799 PUSHn .............................................................................................................. 800 RET ................................................................................................................... 801 SHL ................................................................................................................... 802 SHR................................................................................................................... 803 STORESP ......................................................................................................... 804 SUB ................................................................................................................... 805 XOR................................................................................................................... 806 20.9 Runtime and Software Conventions ........................................................................... 807 20.9.1 Calling Outside VM ......................................................................................... 807 20.9.2 Calling Inside VM ............................................................................................ 807 20.9.3 Parameter Passing.......................................................................................... 807 20.9.4 Return Values ................................................................................................. 807 20.9.5 Binary Format.................................................................................................. 807 20.10 Architectural Requirements....................................................................................... 807 20.10.1 EBC Image Requirements ............................................................................ 807 20.10.2 EBC Execution Interfacing Requirements..................................................... 808 20.10.3 Interfacing Function Parameters Requirements............................................ 808 20.10.4 Function Return Requirements ..................................................................... 808 20.10.5 Function Return Values Requirements ......................................................... 808 20.11 EBC Interpreter Protocol........................................................................................... 808 EFI_EBC_PROTOCOL ..................................................................................... 809 EFI_EBC_PROTOCOL.CreateThunk() ............................................................. 810 EFI_EBC_PROTOCOL.UnloadImage() ............................................................ 811 EFI_EBC_PROTOCOL.RegisterICacheFlush() ................................................ 812 EFI_EBC_PROTOCOL.GetVersion()................................................................ 814 20.12 EBC Tools................................................................................................................. 814 20.12.1 EBC C Compiler............................................................................................ 814 20.12.2 C Coding Convention .................................................................................... 814 20.12.3 EBC Interface Assembly Instructions............................................................ 815 20.12.4 Stack Maintenance and Argument Passing .................................................. 815 20.12.5 Native to EBC Arguments Calling Convention .............................................. 815 20.12.6 EBC to Native Arguments Calling Convention .............................................. 815 20.12.7 EBC to EBC Arguments Calling Convention................................................. 816 20.12.8 Function Returns........................................................................................... 816 20.12.9 Function Return Values................................................................................. 816 20.12.10 Thunking ..................................................................................................... 816

xx

Errata and amplifications through December 11, 2007

Version 2.1

20.12.11 EBC Linker .................................................................................................. 818 20.12.12 Image Loader .............................................................................................. 819 20.12.13 Debug Support ............................................................................................ 819 20.13 VM Exception Handling............................................................................................. 819 20.13.1 Divide By 0 Exception ................................................................................... 819 20.13.2 Debug Break Exception ................................................................................ 819 20.13.3 Invalid Opcode Exception ............................................................................. 819 20.13.4 Stack Fault Exception ................................................................................... 820 20.13.5 Alignment Exception ..................................................................................... 820 20.13.6 Instruction Encoding Exception..................................................................... 820 20.13.7 Bad Break Exception..................................................................................... 820 20.13.8 Undefined Exception ..................................................................................... 820 20.14 Option ROM Formats ................................................................................................ 820 20.14.1 EFI Drivers for PCI Add-in Cards .................................................................. 821 20.14.2 Non-PCI Bus Support.................................................................................... 821

21

Network Protocols - SNP, PXE and BIS.................................................... 82321.1 Simple Network Protocol ............................................................................................ 823 EFI_SIMPLE_NETWORK_PROTOCOL ........................................................... 823 EFI_SIMPLE_NETWORK.Start() ...................................................................... 828 EFI_SIMPLE_NETWORK.Stop() ...................................................................... 829 EFI_SIMPLE_NETWORK.Initialize()................................................................. 830 EFI_SIMPLE_NETWORK.Reset() .................................................................... 831 EFI_SIMPLE_NETWORK.Shutdown().............................................................. 832 EFI_SIMPLE_NETWORK.ReceiveFilters() ....................................................... 833 EFI_SIMPLE_NETWORK.StationAddress() ..................................................... 836 EFI_SIMPLE_NETWORK.Statistics() ............................................................... 837 EFI_SIMPLE_NETWORK.MCastIPtoMAC() ..................................................... 840 EFI_SIMPLE_NETWORK.NvData().................................................................. 841 EFI_SIMPLE_NETWORK.GetStatus().............................................................. 843 EFI_SIMPLE_NETWORK.Transmit()................................................................ 845 EFI_SIMPLE_NETWORK.Receive()................................................................. 847 21.2 Network Interface Identifier Protocol ........................................................................... 848 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL.............................. 848 21.3 PXE Base Code Protocol............................................................................................ 851 EFI_PXE_BASE_CODE_PROTOCOL ............................................................. 851 EFI_PXE_BASE_CODE_PROTOCOL.Start() .................................................. 862 EFI_PXE_BASE_CODE_PROTOCOL.Stop()................................................... 864 EFI_PXE_BASE_CODE_PROTOCOL.Dhcp().................................................. 865 EFI_PXE_BASE_CODE_PROTOCOL.Discover() ............................................ 867 EFI_PXE_BASE_CODE_PROTOCOL.Mtftp() .................................................. 871 EFI_PXE_BASE_CODE_PROTOCOL.UdpWrite() ........................................... 875 EFI_PXE_BASE_CODE_PROTOCOL.UdpRead()........................................... 877 EFI_PXE_BASE_CODE_PROTOCOL.SetIpFilter().......................................... 880 EFI_PXE_BASE_CODE_PROTOCOL.Arp() .................................................... 882 EFI_PXE_BASE_CODE_PROTOCOL.SetParameters() .................................. 884

Version 2.1

Errata and amplifications through December 11, 2007

xxi

Unified Extensible Firmware Interface Specification

EFI_PXE_BASE_CODE_PROTOCOL.SetStationIp() ...................................... 886 EFI_PXE_BASE_CODE_PROTOCOL.SetPackets()........................................ 888 21.4 PXE Base Code Callback Protocol ............................................................................. 889 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL ........................................ 889 EFI_PXE_BASE_CODE_CALLBACK.Callback().............................................. 891 21.5 Boot Integrity Services Protocol.................................................................................. 892 EFI_BIS_PROTOCOL....................................................................................... 892 EFI_BIS_PROTOCOL.Initialize() ...................................................................... 895 EFI_BIS_PROTOCOL.Shutdown() ................................................................... 899 EFI_BIS_PROTOCOL.Free() ............................................................................ 900 EFI_BIS_PROTOCOL.GetBootObjectAuthorizationCertificate()....................... 901 EFI_BIS_PROTOCOL.GetBootObjectAuthorizationCheckFlag()...................... 902 EFI_BIS_PROTOCOL.GetBootObjectAuthorizationUpdateToken() ................. 903 EFI_BIS_PROTOCOL.GetSignatureInfo() ........................................................ 904 EFI_BIS_PROTOCOL.UpdateBootObjectAuthorization() ................................. 909 EFI_BIS_PROTOCOL.VerifyBootObject() ........................................................ 917 EFI_BIS_PROTOCOL.VerifyObjectWithCredential() ........................................ 925

22

Network Protocols Managed Network ................................................. 93322.1 EFI Managed Network Protocol .................................................................................. 933 EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL ................... 933 EFI_MANAGED_NETWORK_PROTOCOL ...................................................... 934 EFI_MANAGED_NETWORK_PROTOCOL.GetModeData() ............................ 936 EFI_MANAGED_NETWORK_PROTOCOL.Configure() ................................... 939 EFI_MANAGED_NETWORK_PROTOCOL.McastIpToMac() ........................... 941 EFI_MANAGED_NETWORK_PROTOCOL.Groups()....................................... 942 EFI_MANAGED_NETWORK_PROTOCOL.Transmit()..................................... 943 EFI_MANAGED_NETWORK_PROTOCOL.Receive()...................................... 949 EFI_MANAGED_NETWORK_PROTOCOL.Cancel() ....................................... 950 EFI_MANAGED_NETWORK_PROTOCOL.Poll()............................................. 951

23

Network Protocols - ARP and DHCPv4 ................................................... 95323.1 ARP Protocol .............................................................................................................. 953 EFI_ARP_SERVICE_BINDING_PROTOCOL .................................................. 953 EFI_ARP_PROTOCOL ..................................................................................... 954 EFI_ARP_PROTOCOL.Configure() .................................................................. 956 EFI_ARP_PROTOCOL.Add() ........................................................................... 958 EFI_ARP_PROTOCOL.Find()........................................................................... 960 Related Definitions ............................................................................................ 961 EFI_ARP_PROTOCOL.Delete() ....................................................................... 962 EFI_ARP_PROTOCOL.Flush() ......................................................................... 963 EFI_ARP_PROTOCOL.Request() .................................................................... 964 EFI_ARP_PROTOCOL.Cancel()....................................................................... 966 23.2 EFI DHCPv4 Protocol ................................................................................................. 967 EFI_DHCP4_SERVICE_BINDING_PROTOCOL.............................................. 967 EFI_DHCP4_PROTOCOL ................................................................................ 967

xxii

Errata and amplifications through December 11, 2007

Version 2.1

EFI_DHCP4_PROTOCOL.GetModeData()....................................................... 970 EFI_DHCP4_PROTOCOL.Configure() ............................................................ 974 EFI_DHCP4_PROTOCOL.Start() ..................................................................... 981 EFI_DHCP4_PROTOCOL.RenewRebind() ...................................................... 983 EFI_DHCP4_PROTOCOL.Release()................................................................ 985 EFI_DHCP4_PROTOCOL.Stop()...................................................................... 986 EFI_DHCP4_PROTOCOL.Build() ..................................................................... 987 EFI_DHCP4_PROTOCOL.TransmitReceive() .................................................. 989 EFI_DHCP4_PROTOCOL.Parse().................................................................... 992

24

Network Protocols TCPv4, IPv4 and Configuration ............................ 99524.1 EFI TCPv4 Protocol .................................................................................................... 995 EFI_TCP4_SERVICE_BINDING_PROTOCOL................................................. 995 EFI TCP4 Variable ............................................................................................ 995 EFI_TCP4_PROTOCOL ................................................................................... 997 EFI_TCP4_PROTOCOL.GetModeData().......................................................... 999 EFI_TCP4_PROTOCOL.Configure() .............................................................. 1004 EFI_TCP4_PROTOCOL.Routes()................................................................... 1006 EFI_TCP4_PROTOCOL.Connect()................................................................. 1008 EFI_TCP4_PROTOCOL.Accept() ................................................................... 1011 EFI_TCP4_PROTOCOL.Transmit() ................................................................ 1013 EFI_TCP4_PROTOCOL.Receive() ................................................................. 1018 EFI_TCP4_PROTOCOL.Close()..................................................................... 1020 EFI_TCP4_PROTOCOL.Cancel()................................................................... 1022 EFI_TCP4_PROTOCOL.Poll() ........................................................................ 1023 24.2 EFI IPv4 Protocol ...................................................................................................... 1023 EFI_IP4_SERVICE_BINDING_PROTOCOL .................................................. 1024 EFI IPv4 Variable ............................................................................................ 1024 EFI_IP4_PROTOCOL ..................................................................................... 1025 EFI_IP4_PROTOCOL.GetModeData() ........................................................... 1027 EFI_IP4_PROTOCOL.Configure() .................................................................. 1032 EFI_IP4_PROTOCOL.Groups() ...................................................................... 1034 EFI_IP4_PROTOCOL.Routes() ...................................................................... 1036 EFI_IP4_PROTOCOL.Transmit().................................................................... 1038 EFI_IP4_PROTOCOL.Receive()..................................................................... 1044 EFI_IP4_PROTOCOL.Cancel()....................................................................... 1046 EFI_IP4_PROTOCOL.Poll()............................................................................ 1047 24.3 EFI IPv4 Configuration Protocol................................................................................ 1047 EFI_IP4_CONFIG_PROTOCOL ..................................................................... 1047 EFI_IP4_CONFIG_PROTOCOL.Start() .......................................................... 1049 EFI_IP4_CONFIG_PROTOCOL.Stop() .......................................................... 1051 EFI_IP4_CONFIG_PROTOCOL.GetData() .................................................... 1052 Related Definitions .......................................................................................... 1052

25

Network Protocols UDPv4 and MTFTPv4 .......................................... 105525.1 EFI UDPv4 Protocol.................................................................................................. 1055

Version 2.1

Errata and amplifications through December 11, 2007

xxiii

Unified Extensible Firmware Interface Specification

EFI_UDP4_SERVICE_BINDING_PROTOCOL .............................................. 1055 EFI UDP4 Variable .......................................................................................... 1055 EFI_UDP4_PROTOCOL ................................................................................. 1057 EFI_UDP4_PROTOCOL.GetModeData() ....................................................... 1059 EFI_UDP4_PROTOCOL.Configure() .............................................................. 1062 EFI_UDP4_PROTOCOL.Groups().................................................................. 1064 EFI_UDP4_PROTOCOL.Routes() .................................................................. 1065 EFI_UDP4_PROTOCOL.Transmit()................................................................ 1067 EFI_UDP4_PROTOCOL.Receive()................................................................. 1073 EFI_UDP4_PROTOCOL.Cancel() .................................................................. 1075 EFI_UDP4_PROTOCOL.Poll()........................................................................ 1076 25.2 EFI MTFTPv4 Protocol ............................................................................................. 1076 EFI_MTFTP4_SERVICE_BINDING_PROTOCOL.......................................... 1076 EFI_MTFTP4_PROTOCOL............................................................................. 1077 EFI_MTFTP4_PROTOCOL.GetModeData()................................................... 1079 EFI_MTFTP4_PROTOCOL.Configure().......................................................... 1082 EFI_MTFTP4_PROTOCOL.GetInfo() ............................................................. 1084 EFI_MTFTP4_PROTOCOL.ParseOptions() ................................................... 1092 EFI_MTFTP4_PROTOCOL.ReadFile()........................................................... 1094 EFI_MTFTP4_PROTOCOL.WriteFile() ........................................................... 1100 EFI_MTFTP4_PROTOCOL.ReadDirectory() .................................................. 1102 EFI_MTFTP4_PROTOCOL.Poll() ................................................................... 1104

26

Security - Secure Boot, Driver Signing and Hash ................................. 110526.1 Secure Boot .............................................................................................................. 1105 EFI_AUTHENTICATION_INFO_PROTOCOL ................................................ 1105 EFI_AUTHENTICATION_INFO_PROTOCOL.Get() ....................................... 1106 EFI_AUTHENTICATION_INFO_PROTOCOL.Set()........................................ 1107 26.2 UEFI Driver Signing Overview .................................................................................. 1110 26.2.1 Digital Signatures .......................................................................................... 1110 26.2.2 Embedded Signatures................................................................................... 1111 26.2.3 Creating Message from Executables ............................................................ 1112 26.2.4 Code Definitions............................................................................................ 1112 WIN_CERTIFICATE........................................................................................ 1113 WIN_CERTIFICATE_EFI_PKCS1_15 ............................................................ 1114 26.2.5 WIN_CERTIFICATE_UEFI_GUID ................................................................ 1115 26.3 Hash Overview.......................................................................................................... 1115 26.3.1 Hash References .......................................................................................... 1115 26.4 EFI Hash Protocols .................................................................................................. 1116 EFI_HASH_SERVICE_BINDING_PROTOCOL.............................................. 1116 EFI_HASH_PROTOCOL................................................................................. 1116 EFI_HASH_PROTOCOL.GetHashSize() ........................................................ 1118 EFI_HASH_PROTOCOL.Hash()..................................................................... 1119 26.4.1 Other Code Definitions................................................