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.

Comments

  • Anonymous
    April 10, 2008
    Hi Bhanu, Following is the feedback from our engineering team on the Storage Query Property Test.  Would you mind commenting on it?  Thanks! ================================================== The PCI class codes dictated by this blog entry won't work for our Sable architecture controllers (3124, 3132, and 3531) in non-RAID mode.  The last sentence of the entry is what causes the problem:   "Vendor-specific SATA is not supported in Windows, all SATA controllers    must report either 0x0101XX in IDE Compatible mode or 0x010601 in AHCI    mode, 0x010600 is not allowed." Sable architecture controllers have neither an IDE compatible or AHCI mode programming interface, instead they only support our own proprietary programming interface. If we changed our PCI Class Code to one of these, we would risk having an inbox driver attempting to program our controller, which would almost certainly cause problems for the system.  For these controllers we MUST be allowed to use the 0x010600 PCI Class Code/Programming Interface.

  • Anonymous
    April 10, 2008
    ATang,      The sentence has been reworded and it is allowed to report 0x010600 in vendor specific SATA implementations. BhanuG

  • Anonymous
    April 10, 2008
    Hi Bhanu, Thanks for the reply.  As we try to follow the rules set by Microsoft on this test, we were looked at it from the engineer's point of view.  But we found its seriousness on this change after we discussed it with our marketing and sales groups.  As one of our main goals here is the customer satisfaction and we realized that the simple PCI class code change to pass the WHQL test will manifest more problems than benefit for the millions of user whom are currently using our SATA chipset. We will need help from Microsoft and especially from your team to help us and see if there is any way that Microsoft can accommodate our unique situation so we can keep the PCI class code of 018000h.  Thanks.

  • Anonymous
    May 05, 2008
    The comment has been removed

  • Anonymous
    May 08, 2008
    The comment has been removed

  • Anonymous
    May 09, 2008
    Hi Bhanu, I ran the test from the DTM submission console. The output I got from the "View Task Log" option when you right click on the failed test I am using Qlogic driver ver 9.1.7.16. the card model is the QLE2462 I think the DTM test is classifying PCI class code 0xC (Serial Controller) as BusTypeUnknown and compares this with BusTypeFibre reported by the driver. -kanna

  • Anonymous
    May 09, 2008
    Which version of the logo kit are you using ? Did you select the device bus type as "Fibre Channel" in the submission wizard ?

  • Anonymous
    May 09, 2008
    WLK Version 1.2.6475.0 Storage Query Property (LOGO)ID 525 WDKDataStorage_bus_type - BusTypeFibre WDKDeviceID - PCIVEN_1077&DEV_2432&SUBSYS_01381077&REV_024&727DAF7&0&0108 I cannot set "FibreChannel", I just put "BusTypeFibre" -k

  • Anonymous
    May 09, 2008
    The comment has been removed

  • Anonymous
    May 09, 2008
    The comment has been removed

  • Anonymous
    May 09, 2008
    The method that you are using to run this test is not a supported approach. We never mentioned in the documentation to run the job like that. Please use WLK 1.2 for creating the submission for this hardware and run this job from that submission. Thanks,

  • Anonymous
    May 09, 2008
    Bhanu, Looks like using submission is the way to go. The tests are finally passing. I thought I could just run the jobs manually instead of going through the submission process, guess that was the wrong way to go. thanks for all your help! -kanna

  • Anonymous
    June 30, 2008
    Picking up an old thread - "The test verifies if the bus type reported by the miniport driver matches with the bus type for the storage controller PCI class code." How is the miniport driver supposed to report the bustype? TIA, Prabal

  • Anonymous
    July 01, 2008
    Hello, We have run the Storage Property test on our iSCSI product and are failing. My question today is about test configuration. Please correct/confirm my setup. On the Controller/Studio I create a new submission as normal, choosing bus type "iSCSI". I select Storage Query Property test. There are no options to "Edit Parameters" or "Add Information" for this test. OK so far? I have tried both HBAs (Win 2008 Logo with WLK 1.2 requires 2 HBAs or 2 systems) both fail. IS this the proper way to setup for test? Most all other tests are Passing, so I feel the config is OK. Any help/advice is appreciated.

  • Anonymous
    July 01, 2008
    Prabal: The minport INF file should provide the bustype information. In the INF file BusType parameter should be set with the bustype value. The following white paper discusses about this requirement http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/RAID_design.doc

  • Anonymous
    July 01, 2008
    I hope you are trying to logo your hardware for Storage Controller logo program. For iSCSI controller testing, only one iSCSI controller is required. The following WLK documentation explains the test system setup instructions http://msdn.microsoft.com/en-us/library/bb961561.aspx