2 UEFI Driver Implementation Checklist

The following is a checklist for implementing good, conformant, and efficient UEFI Drivers. References to sections of the guide that apply to each of the items in the checklist are provided so a UEFI Driver developer can easily determine the sections of the guide that apply to a specific UEFI Driver development task. The terminology used in this checklist is introduced in Chapter 3.

When possible, copy an existing UEFI Driver with similar features and modify it to match the new UEFI Driver requirements. Appendix B contains a table of UEFI Drivers and features that each implements to help select an existing UEFI Driver.

Some UEFI drivers are ported from PC BIOS legacy option ROMs or EFI/UEFI Drivers based on previous releases of the EFI/UEFI Specification. While porting a driver from one environment to another is often done to save time and leverage resources, note that it requires careful attention to detail. Without a complete understanding of the target environment, the final driver can have remnants of the previous design that may degrade performance and functionality in the new environment.

  1. Determine UEFI Driver Type

    • UEFI Driver Model (Section 3.10 and Chapter 6)
      • Must produce Driver Binding Protocol (Chapter 9)
        • Device Driver (Section 6.1, Section 7.2, and Chapter 9)
        • Bus Driver (Section 6.2, Section 7.2, and Chapter 9)
        • Hybrid Drive (Section 6.3, Section 7.2, and Chapter 9)
      • Determine Optional UEFI Driver Model Features
      • Component Name 2 Protocol (Section 7.1, Section 7.2, Chapter 11)
      • Component Name Protocol (Section 7.1, Section 7.2, Chapter 11)
      • Driver Family Override Protocol (Section 7.2.4 and Chapter 15)
      • Driver Diagnostics 2 Protocol (Section 7.1, Section 7.2, Chapter 13)
      • HII Packages (Section 7.1, Section 7.4, and Chapter 12)
      • HII Config Access Protocol (Section 7.1, Section 7.5, and Chapter 12)
      • Driver Configuration 2 Protocol (Section 7.1 and Chapter 12)
      • Driver Configuration Protocol (Section 7.1 and Chapter 12)
      • Driver Health Protocol (Section 7.1, Section 7.2.3, Chapter 14)
      • Bus Specific Driver Override Protocol (Chapter 17)
    • Service Binding Protocol (Chapter 10)
    • Service Driver (Section 6.4 and Section 7.9)
    • Root Bridge Driver (Section 6.5 and Section 7.10)
    • Initializing Driver (Section 6.6 and Section 7.8)
  2. Determine Optional UEFI Driver Features

    • Install an Unload() handler (Section 7.6 and Section 5.2.1.2)
    • HII Packages (Section 7.1, Section 7.4, and Chapter 12)
    • HII Config Access Protocol (Section 7.1, Section 7.5, and Chapter 12)
    • Driver Supported EFI Version Protocol (Chapter 6, Section 7.3, Chapter 16)
      • Required for all plug in cards
    • Service Binding Protocol (Chapter 10)
  3. Identify the required UEFI supported CPU architectures

    • IA32 (Chapter 4)
    • X64 (Chapter 4)
    • IPF (Chapter 4 and Chapter 28)
    • EFI Byte Code (Chapter 4, Section 4.4, Section 18.6, and Chapter 29)
  4. Identify consumed I/O protocols

    • PCI I/O Protocol to access a PCI Controller (Chapter 18)
      • Always call PciIo->Attributes() (Section 18.3.2)
        • Advertises dual address cycle capability
        • Save and enable attributes in Start()
        • Disable attributes in Stop()
      • DMA-Bus master write operations (Section 18.5)
    • Must call PciIo->Flush()
      • DMA-Setting up with PciIo->Map() (Section 18.5)
        • Do not use returned device address
        • Not all chipsets have 1:1 bus/system mappings
      • PCI Option ROM (Section 18.7)
    • USB I/O Protocol to access a USB (Chapter 19) Device
    • SCSI I/O Protocol to access a SCSI Device (Chapter 20)
    • ATA Pass Thru Protocol to access a SATA Device (Chapter 21)
  5. Identify the boot related protocol(s) the UEFI Driver must produce

    • Keyboard (Section 22.2)
    • Mouse
    • Tablet
    • Text Console (Section 22.3)
    • Serial Port (Section 22.4)
    • Graphics Console (Chapter 23)
    • Mass Storage (Chapter 24)
    • Network Controller (Chapter 25)
    • Load File Protocol (Chapter 27)
    • User Credential Provider (Chapter 26)
    • USB Host Controller (Section 19.1)
    • SCSI Host Controller (Section 20.1)
    • ATA Host Controller (Section 21.1 and Section 20.1)
  6. Build UEFI Driver (Chapter 30)

  7. Test and Debug UEFI Driver (Chapter 31)

    • Use UEFI Shell to load and exercise functionality
    • Test all produced protocols
    • Test on multiple platforms
    • Pass UEFI SCT tests for the devices the UEFI Driver manages