24 Mass Storage Driver Design Guidelines
This chapter covers the general guidelines for implementing UEFI Drivers for mass storage devices. Most mass storage devices reside on industry standard busses such as ATA, SCSI, or USB. This means that the design guidelines as described in Chapter 21 for ATA, Chapter 20 for SCSI, or Chapter 19 for USB must be followed along with the general guidelines described in Chapter 4 of this guide.
If a mass storage device is intended to be used as a boot device for a UEFI operating system or UEFI applications, then a UEFI Driver must be implemented that produces the Block I/O Protocol. If the UEFI Driver is required to be conformant with the UEFI Specification 2.3.1 or higher, then the Block I/O 2 Protocol must also be produced. If the mass storage device supports the SPC-4 or ATA8-ACS security commands, then the Storage Security Command Protocol must also be produced. A mass storage device must either directly support or be able to emulate the following operations:
Read blocks of data from the mass storage device.
Write blocks of data to the mass storage device.
Determine the size of the blocks on the mass storage device.
Determine the total number of blocks on the mass storage device.
If the mass storage device supports removable media, then methods must exist to determine if media is present, media is not present, and if the media has been changed.
If a mass storage device does not meet these requirements, but still must support being used as a boot device, then consider implementing a UEFI Driver that produces either the Simple File System Protocol or the Load File Protocol. Please see the Media Access chapter of the UEFI Specification for details on the Simple File System Protocol and Chapter 27 for details on the Load File Protocol.
The EDK II provides a set of platform agnostic drivers in the MdeModulePkg
and the FatBinPkg
that consume the Block I/O Protocols and produce the Simple
File System Protocol which is one of the two protocols from which a UEFI Boot Manager is
able to boot a UEFI operating system or a UEFI application. These platform
agnostic drivers allow the contents of the mass storage media to be accessed
without any specialized knowledge of the specific device or controller. The set
platform agnostic drivers UEFI Drivers include:
MdeModulePkg/Universal/Disk/DiskIoDxe
MdeModulePkg/Universal/Disk/PartitionDxe
MdeModulePkg/Universal/Disk/UnicodeCollation
FatBinPkg/EnhancedFatDxe