Storage Query Property test
The storage query property test validates if the storage miniport driver is reporting the correct bus type and the storage controller is reporting the correct PCI class code.
The test sends the IOCTL_STORAGE_QUERY_PROPERTY with STORAGE_PROPERTY_ID set to StorageAdapterProperty/StorageDeviceProperty to get the device bus type from the storage miniport driver. The miniport driver should report the correct bus type from the following bus type enumeration values
typedef enum _STORAGE_BUS_TYPE {
BusTypeUnknown = 0x00,
BusTypeScsi = 0x01,
BusTypeAtapi = 0x02,
BusTypeAta = 0x03,
BusType1394 = 0x04,
BusTypeSsa = 0x05,
BusTypeFibre = 0x06,
BusTypeUsb = 0x07,
BusTypeRAID = 0x08,
BusTypeiSCSI = 0x09,
BusTypeSas = 0x0A,
BusTypeSata = 0x0B,
BusTypeMaxReserved = 0x7F
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
The documentation for these bus type values can be found at: https://msdn2.microsoft.com/en-us/library/aa363465.aspx
The test gets the storage controller PCI class code from the OS generated PNP compatibility IDs and determines the controller bus type based on the PCI class code. The test verifies if the bus type reported by the miniport driver matches with the bus type for the storage controller PCI class code. The test also verifies if the user supplied device bus type in the DTM submission matches with the corresponding bus type for the controller PCI class code.
The test uses the following PCI class code table to determine the storage controller bus type
CLASS CODE |
SUB CLASS CODE |
PROGRAMMING INTERFACE |
DESCRIPTION |
0x01 |
0x00 |
0x00 |
SCSI CONTROLLER |
0x01 |
0x01 |
XX |
IDE CONTROLLER |
0x01 |
0x02 |
0x00 |
FLOPPY CONTROLLER |
0x01 |
0x03 |
0x00 |
IPI BUS CONTROLLER |
0x01 |
0x04 |
0x00 |
RAID CONTROLLER |
0x01 |
0x05 |
0x20/0x30 |
ATA CONTROLLER |
0x01 |
0x06 |
0x00/0x01 |
SERIAL ATA CONTROLLER |
0x01 |
0x07 |
0x00 |
SERIAL ATTACHED SCSI (SAS) COTNROLLER |
0x01 |
0x80 |
0x00 |
OTHER MASS STORAGE CONTROLLER |
The controller bus type validation testing will continue to be a key test scenario in the Storage HBA category, but it will be modified to stop checking the Programming Interface byte (IF), of the 0x0101 (IDE) and 0x0104 (RAID) types to determine the bus type.
This results in being the following required class code definitions that must be present:
IDE Type: Mass Storage Device (0x01), ATA Parallel - IDE Type (0x01), Programming Interface (Don’t Care - 0xXX )
RAID Type: Mass Storage Device (0x01), RAID Type (0x04), Programming Interface (Don’t Care - 0xXX)
However, because the PCI Conventional specification (2.3) declares two unique values for the SATA Type (Non-ATA Compatible Mode) Programming Interface, the following is required for AHCI-enabled controllers:
AHCI Type: Mass Storage Device (0x01), SATA Type (0x06), AHCI Type (0x01)
The SATA controller must report 0x0101XX in IDE compatible mode, 0x010601 in AHCI mode and 0x010600 in vendor specific implementations.