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. BhanuGAnonymous
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 removedAnonymous
May 08, 2008
The comment has been removedAnonymous
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. -kannaAnonymous
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" -kAnonymous
May 09, 2008
The comment has been removedAnonymous
May 09, 2008
The comment has been removedAnonymous
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! -kannaAnonymous
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, PrabalAnonymous
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.docAnonymous
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