HW_INITIALIZATION_DATA structure (storport.h)

The HW_INITIALIZATION_DATA (Storport) structure contains information particular to each miniport driver and the hardware that the miniport driver manages.

Syntax

typedef struct _HW_INITIALIZATION_DATA {
  ULONG                       HwInitializationDataSize;
  INTERFACE_TYPE              AdapterInterfaceType;
  PHW_INITIALIZE              HwInitialize;
  PHW_STARTIO                 HwStartIo;
  PHW_INTERRUPT               HwInterrupt;
  PVOID                       HwFindAdapter;
  PHW_RESET_BUS               HwResetBus;
  PHW_DMA_STARTED             HwDmaStarted;
  PHW_ADAPTER_STATE           HwAdapterState;
  ULONG                       DeviceExtensionSize;
  ULONG                       SpecificLuExtensionSize;
  ULONG                       SrbExtensionSize;
  ULONG                       NumberOfAccessRanges;
  PVOID                       Reserved;
  UCHAR                       MapBuffers;
  BOOLEAN                     NeedPhysicalAddresses;
  BOOLEAN                     TaggedQueuing;
  BOOLEAN                     AutoRequestSense;
  BOOLEAN                     MultipleRequestPerLu;
  BOOLEAN                     ReceiveEvent;
  USHORT                      VendorIdLength;
  PVOID                       VendorId;
  union {
    USHORT ReservedUshort;
    USHORT PortVersionFlags;
  };
  USHORT                      DeviceIdLength;
  PVOID                       DeviceId;
  PHW_ADAPTER_CONTROL         HwAdapterControl;
  PHW_BUILDIO                 HwBuildIo;
  PHW_FREE_ADAPTER_RESOURCES  HwFreeAdapterResources;
  PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
  PHW_COMPLETE_SERVICE_IRP    HwCompleteServiceIrp;
  PHW_INITIALIZE_TRACING      HwInitializeTracing;
  PHW_CLEANUP_TRACING         HwCleanupTracing;
  PHW_TRACING_ENABLED         HwTracingEnabled;
  ULONG                       FeatureSupport;
  ULONG                       SrbTypeFlags;
  ULONG                       AddressTypeFlags;
  ULONG                       Reserved1;
  PHW_UNIT_CONTROL            HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;

Members

HwInitializationDataSize

Specifies the size of this structure in bytes, as returned by sizeof(HW_INITIALIZATION_DATA). In effect, this member indicates the version of this structure being used by the miniport driver. A miniport driver's DriverEntry routine should set this member's value for the port driver.

AdapterInterfaceType

The Storport driver does not support legacy buses. Therefore, most of the adapter interface types used with the SCSI Port driver are invalid for Storport. In particular, Isa, Eisa, MicroChannel, and TurboChannel are not supported. Furthermore, unlike the SCSI Port case, a miniport driver that works with the Storport driver is not required to supply values for the VendorIdLength, VendorId, DeviceIdLength, and DeviceId members.

HwInitialize

Pointer to the miniport driver's HwStorInitialize routine, which is a required entry point for all miniport drivers.

HwStartIo

Pointer to the miniport driver's HwStorStartIo routine, which is a required entry point for all miniport drivers.

HwInterrupt

Pointer to the miniport driver's HwStorInterrupt routine, which is a required entry point for all miniport drivers.

HwFindAdapter

Pointer to the miniport driver's HwStorFindAdapter routine, which is a required entry point for all miniport drivers.

HwResetBus

Pointer to the miniport driver's HwStorResetBus routine, which is a required entry point for all miniport drivers.

HwDmaStarted

The Storport driver does not support subordinate-mode DMA. Therefore, this member must be NULL.

HwAdapterState

The Storport driver does not support legacy drivers. Therefore, this member must be NULL.

DeviceExtensionSize

Specifies the size, in bytes, required by the miniport driver for its per-adapter device extension. A miniport driver uses its device extension as storage for driver-determined host bus adapter (HBA) information. The operating system-specific port driver initializes each device extension one time, when it first allocates the extension and fills it with zeros. It passes a pointer to the HBA-specific device extension in every call to a miniport driver. The given size does not include any miniport driver-requested per-logical-unit storage. The size of per-logical-unit storage is specified via the SpecificLuExtensionSize field, described later in this topic.

Although SCSIPort re-initializes the device extension whenever the adapter is stopped and thus subsequent calls to HwScsiFindAdapter receive a zeroed-out device extension, Storport does not follow that model. Rather, Storport resets the device extension to zero only when it is first allocated, so only the first call to HwStorFindAdapter for a given adapter receives a zeroed-out device extension. Subsequent calls to HwStorFindAdapter and other miniport functions receive the device extension as last modified by the miniport. This allows the miniport driver to maintain knowledge about the state of the adapter between Plug and Play (PnP) stops and restarts, possibly enabling the miniport driver to optimize its initialization procedure.

SpecificLuExtensionSize

Specifies the size in bytes required by the miniport driver for its per-logical-unit storage, if any. A miniport driver can use its LU extensions as storage for driver-determined logical-unit information about peripherals on the bus. The Storport driver initializes each LU extension it allocates with zeros. Leave this member set to zero if the miniport driver does not maintain per-LU information for which it requires storage. This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as StorPortGetUncachedExtension.

SrbExtensionSize

Specifies the size, in bytes, required by the miniport driver for its per-request storage, if any. A miniport driver can use SRB extensions as storage for driver-determined, request-specific information, such as data necessary to process a particular request. The Storport driver does not initialize SRB extensions, but sets a pointer to this storage in each SRB it sends to the miniport driver. An SRB extension can be safely accessed by the HBA hardware. Because miniport drivers that work with the Storport driver must support scatter/gather lists, and the per-SRB scatter/gather lists are usually allocated in the SRB extension, this member is rarely zero. Leave this member set to zero if the miniport driver does not maintain per-SRB information for which it requires storage.

This value is based on the assumption that the HBA is able to receive 32-bit addresses, regardless of what the controller can actually support. If additional space is needed in the LUN or SRB extensions to handle 64-bit addresses, then appropriate adjustments must be made to this value before using it with routines such as StorPortGetUncachedExtension.

NumberOfAccessRanges

Specifies how many access ranges the adapter uses. Each is a range either of memory addresses or I/O port addresses.

Reserved

Reserved for system use and not available for use by miniport drivers.

MapBuffers

Indicates whether the Storport driver maps SRB data buffer addresses to system virtual addresses. The MapBuffers member can have one of the following values.

Value Meaning
STOR_MAP_NO_BUFFERS Do not map for any SRB except SRB_FUNCTION_IO_CONTROL and SRB_FUNCTION_WMI.
STOR_MAP_ALL_BUFFERS Obsolete. This value has the same effect as STOR_MAP_NON_READ_WRITE_BUFFERS.
STOR_MAP_NON_READ_WRITE_BUFFERS Map the buffer for all I/O except for read or write requests.
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE Map the buffer for all I/O including read and write requests. This value is valid starting with Windows 8.

NeedPhysicalAddresses

Must be set to TRUE. A value of TRUE indicates that the miniport driver must translate certain types of addresses to physical addresses. Miniport drivers that work with the Storport driver must support bus-master DMA, so they will always be required to do address translation.

TaggedQueuing

Must be set to TRUE. A value of TRUE indicates that the miniport driver supports SCSI tagged queuing. All miniport drivers that work with the Storport driver must support tagged queuing.

AutoRequestSense

Must be TRUE. A value of TRUE indicates that the HBA can perform a request-sense operation without requiring an explicit request to do so. All miniport drivers that work with the Storport driver must support SCSI Auto-Request Sense.

MultipleRequestPerLu

Must be set to TRUE. A value of TRUE indicates that the miniport driver can queue multiple requests per logical unit. Miniport drivers that work with the Storport driver must support multiple requests per logical unit.

ReceiveEvent

The Storport driver ignores this member.

VendorIdLength

The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.

VendorId

The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.

ReservedUshort

PortVersionFlags

Flags to indicate supported features.

DeviceIdLength

The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.

DeviceId

The Storport driver ignores this member, because miniport drivers that work with the Storport driver must support PnP.

HwAdapterControl

Pointer to the miniport driver's HwStorAdapterControl routine. This is a required routine because miniport drivers that work with the Storport driver require PnP support.

HwBuildIo

Pointer to an optional HwStorBuildIo routine that the port driver calls to do unsynchronized processing prior to calling the miniport driver's HwStorStartIo routine. This callback is specific to physical miniports and should be set to NULL by virtual miniports.

HwFreeAdapterResources

A pointer to the virtual miniport driver's HwStorFreeAdapterResources routine, which is a required entry point for all virtual miniport drivers. This callback is specific to virtual miniports and is set to NULL for physical miniports.

This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.

HwProcessServiceRequest

A pointer to the virtual miniport driver's HwStorProcessServiceRequest routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.

This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.

HwCompleteServiceIrp

A pointer to the virtual miniport driver's HwStorCompleteServiceIrp routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.

This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.

HwInitializeTracing

A pointer to the virtual miniport driver's HwStorInitializeTracing routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.

This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.

HwCleanupTracing

A pointer to the virtual miniport driver's HwStorCleanupTracing routine. This callback is specific to virtual miniports and is set to NULL for physical miniports.

This callback is added in Windows 8. Virtual miniports for previous versions of Windows should use VIRTUAL_HW_INITIALIZATION_DATA instead of this structure.

HwTracingEnabled

A pointer to an optional HwStorTracingEnabled routine that the port driver calls to notify the miniport of whether tracing is enabled or not.

FeatureSupport

Flags indicating features that are supported by the miniport. FeatureSupport is set to a combination of these values:

Value Meaning
STOR_FEATURE_VIRTUAL_MINIPORT This is a virtual miniport driver.
STOR_FEATURE_ATA_PASS_THROUGH The miniport supports ATA pass through.
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES The miniport provides complete settings in its STOR_DEVICE_CAPABILITIES_EX structure.
STOR_FEATURE_DUMP_POINTERS The miniport supports the dump pointer SRBs.
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX The miniport driver does not want the suffix "SCSI type Device" as part of the device friendly name.
STOR_FEATURE_DUMP_RESUME_CAPABLE The miniport's dump capability is functional for resume from hibernation.
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD The Storport driver initializes the STORAGE_DEVICE_DESCRIPTOR from the ATA Information VPD page instead of from INQUIRY data.
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE The Storport driver sets the adapter interface type.

SrbTypeFlags

Flags indicating the SRB types supported by the miniport. SrbTypeFlags is set to 0 or a combination of the following values:

Value Meaning
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK The miniport uses standard SRBs.
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK The miniport supports extended SRBs.

AddressTypeFlags

The address schemes supported by the miniport. Currently, the only one address scheme is supported and the miniport must set this member to ADDRESS_TYPE_FLAG_BTL8.

Value Meaning
ADDRESS_TYPE_FLAG_BTL8 Bus, Target, and LUN (BTL) 8-bit addressing.

Reserved1

Reserved, set to 0.

HwUnitControl

A pointer the miniport driver's HwStorUnitControl routine. The port driver calls this routine with a control request for a storage unit device.

Remarks

Every Storport miniport driver's DriverEntry routine must call StorPortInitialize after the miniport driver has first zeroed and then set the members of HW_INITIALIZATION_DATA.

Requirements

Requirement Value
Header storport.h (include Storport.h)