The ScsiPortIoMapTransfer routine sets up the system DMA controller for a miniport driver to transfer data through a subordinate HBA.
VOID ScsiPortIoMapTransfer( _In_ PVOID HwDeviceExtension, _In_ PSCSI_REQUEST_BLOCK Srb, _In_ PVOID LogicalAddress, _In_ ULONG Length );
- HwDeviceExtension [in]
Pointer to the hardware device extension. This is a per-HBA storage area that the port driver allocates and initializes on behalf of the miniport driver. Miniport drivers usually store HBA-specific information in this extension, such as the state of the HBA and the HBA's mapped access ranges. This area is available to the miniport driver in the DeviceExtension->HwDeviceExtension member of the HBA's device object immediately after the miniport driver calls ScsiPortInitialize. The port driver frees this memory when it removes the device.
- Srb [in]
Pointer to the SCSI request block for the DMA transfer.
- LogicalAddress [in]
Specifies the starting address for the transfer operation. This value can be the base address of a buffer into which or from which data is to be transferred. This value can be an offset within such a buffer.
- Length [in]
Specifies the number of bytes to be transferred.
Only miniport drivers of HBAs that use a system DMA controller (subordinate DMA) call ScsiPortIoMapTransfer. This routine must be called before such a miniport driver sets up its HBA to transfer data. The range specified by the LogicalAddress and Length must be within the buffer described by the given SRB.
After the operating system-specific port driver programs the system DMA controller, it calls the miniport driver's HwScsiDmaStarted routine. HwScsiDmaStarted should program the HBA to begin the data transfer. Note that an HBA can interrupt between the miniport driver's call to ScsiPortIoMapTransfer and the operating system-specific port driver's call to the miniport driver's HwScsiDmaStarted routine.
Build date: 2/12/2014