PORT_CONFIGURATION_INFORMATION
typedef struct _PORT_CONFIGURATION_INFORMATION {
ULONG Length;
ULONG SystemIoBusNumber;
INTERFACE_TYPE AdapterInterfaceType;
ULONG BusInterruptLevel;
ULONG BusInterruptVector;
KINTERRUPT_MODE InterruptMode;
ULONG MaximumTransferLength;
ULONG NumberOfPhysicalBreaks;
ULONG DmaChannel;
ULONG DmaPort;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG AlignmentMask;
ULONG NumberOfAccessRanges;
ACCESS_RANGE (*AccessRanges)[];
PVOID Reserved;
UCHAR NumberOfBuses;
UCHAR InitiatorBusId[8];
BOOLEAN ScatterGather;
BOOLEAN Master;
BOOLEAN CachesData;
BOOLEAN AdapterScansDown;
BOOLEAN AtdiskPrimaryClaimed;
BOOLEAN AtdiskSecondaryClaimed;
BOOLEAN Dma32BitAddresses;
BOOLEAN DemandMode;
BOOLEAN MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
BOOLEAN RealModeInitialized;
BOOLEAN BufferAccessScsiPortControlled;
UCHAR MaximumNumberOfTargets;
UCHAR ReservedUchars[2];
ULONG SlotNumber;
ULONG BusInterruptLevel2;
ULONG BusInterruptVector2;
KINTERRUPT_MODE InterruptMode2;
ULONG DmaChannel2;
ULONG DmaPort2;
DMA_WIDTH DmaWidth2;
DMA_SPEED DmaSpeed2;
} PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
PORT_CONFIGURATION_INFORMATION provides port configuration information.
- Length
- Specifies the length of the PORT_CONFIGURATION_INFORMATION structure as return by sizeof(). Because this structure might grow in later releases, HBA miniport drivers should check that the Length is greater than or equal to the required length. This field is always initialized by the port driver.
- SystemIoBusNumber
- Specifies the system I/O bus to be scanned. This field is used for several ScsiPortXxxx calls and is always initialized by the port driver. Its value is zero for machines that have only one I/O bus of the given Adapter Interface Type.
- AdapterInterfaceType
- Specifies the type of the bus being scanned. This field is equal to the value being passed into ScsiPortInitialize in the HW_INITIALIZATION_DATA structure. This field is always initialized.
- BusInterruptLevel
- Specifies the bus interrupt request level. This value corresponds to the IRQL on some buses, such as ISA and MCA. The uninitialized value is zero and no interrupt is assumed. EISA cards must set this value to level if the card is configured for level sensitive interrupts.
- BusInterruptVector
- Specifies the bus vector returned by the host bus adapter. This field is pertinent to I/O buses that use interrupt vectors. For ISA, EISA, and MCA I/O buses this field is unused. The uninitialized value is zero and no interrupt is assumed.
- InterruptMode
- Specifies whether this host bus adapter uses LevelSensitive or Latched interrupts. This value is always initialized to Latched. EISA cards must set this value
- MaximumTransferLength
- Specifies the maximum transfer length this adapter can support. This value should always be set by the HBA miniport driver. A value of 0xFFFFFFFF indicates unlimited. The uninitialized value is 0xFFFFFFFF.
- NumberOfPhysicalBreaks
- Specifies the maximum number of physical segments that a data buffer can have if the host bus adapter supports scatter/gather. A value of 0xFFFFFFFF indicates unlimited and is the uninitialized value.
- DmaChannel
- Specifies the DMA channel used by the host bus adapter. The uninitialized value is 0xFFFFFFFF.
- DmaPort
- Specifies the DMA port used by the host bus adapter. This is meaningful for MCA-type buses. The uninitialized value is zero.
- DmaWidth
- Specifies the width of the DMA transfer. The uninitialized value is zero. Accepted widths are 8, 16, 32, and maximum DMA widths.
- DmaSpeed
- Specifies the data transfer speed for EISA system buses. The default is compatibility timing. Accepted types are: compatible, type a, type b, type c, and maximum DMA speed.
- AlignmentMask
- Is a mask indicating the alignment boundary for buffers required by the HBA for transfer operations. Valid bitsets are 1, 3, 7, and so on.
- NumberOfAccessRanges
- Specifies the number of access ranges that the adapter uses. This value is the same as was passed in to ScsiPortInitialize in the HW_INITIALIZATION_DATA structure. It indicates the number of array elements in the following field.
- AccessRanges
- Points to an array of ACCESS_RANGE structures. The number of elements is indicated by the NumberOfAccessRanges field. The driver should fill in each structure for the host bus adapter. The uninitialized values for the array elements are zero. AccessRanges will be NULL if NumberOfAccessRanges is zero.
- Reserved
- This field is reserved for system use and should be ignored by miniport drivers.
- NumberOfBuses
- Specifies the number of SCSI buses attached to the HBA. The uninitialized value is zero.
- InitiatorBusId
- Specifies the initiator bus ID used by the HBA. An entry should be set for each SCSI bus. The uninitialized value is 0xFF.
- ScatterGather
- Indicates the HBA supports scatter/gather. The uninitialized value is FALSE.
- Master
- Indicates the HBA is a busmaster. The uninitialized value is FALSE.
- CachesData
- Indicates the HBA caches data or maintains cached state on the peripherals, for example a controller that mirrors two disks would normally set this bit. When this bit is set, the OS-specific port driver notifies the HBA miniport driver of events such as a file system flush and system shutdown. The uninitialized value is FALSE.
- AdapterScansDown
- Indicates the BIOS for this adapter scans for SCSI bus targets from 7 to 0. The uninitialized value is FALSE.
- AtdiskPrimaryClaimed
- Indicates that the primary AT disk address range, 0x1F0 to 0x1FF, has been claimed. This field is set by adapters that emulate an AT disk controller and that want to prevent access by the AT disk driver. If this field is set, the HBA miniport driver should assume that an already loaded driver has claimed the device.
- AtdiskSecondaryClaimed
- Indicates that the secondary AT disk address range, 0x170 to 0x17F has been claimed. This field is set by adapters that emulate an AT disk controller and that want to prevent access by the AT disk driver. If this field is set, the HBA miniport driver should assume that an already loaded driver has claimed the device.
- Dma32BitAddresses
- Indicates that the HBA has 32 address lines and can access memory with physical addresses greater than 0x00FFFFFF.
- DemandMode
- Indicates the system DMA controller should be programmed for demand-mode rather than single-cycle operations.
- MapBuffers
- Indicates data buffers must be mapped into system virtual address ranges. The value is copied from HW_INITIALIZATION_DATA. The driver may update the value for each particular HBA.
- NeedPhysicalAddresses
- Indicates the driver needs to translate virtual addresses to physical ones. The value is copied from HW_INITIALIZATION_DATA. The driver may update the value for each particular HBA.
- TaggedQueuing
- Indicates the device supports SCSI-II tagged queuing. The value is copied from HW_INITIALIZATION_DATA. The driver may update the value for each particular HBA.
- AutoRequestSense
- Indicates the device supports auto request sense. The value is copied from HW_INITIALIZATION_DATA. The driver may update the value for each particular HBA. This member must be set before ScsiPortGetUncachedExtension is called.
- MultipleRequestPerLu
- Indicates the device supports multiple requests per logical unit. The value is copied from HW_INITIALIZATION_DATA. The driver may update the value for each particular HBA.
- ReceiveEvent
- Indicates the device supports receive event operation. The uninitialized value is zero.
- RealModeInitialized
- Indicates the real-mode driver has initialized the card. This field is always initialized by ScsiPort.
- BufferAccessScsiPortControlled;
- Used only in Windows 95, not in Windows NT. Indicates that the miniport will not touch the data buffers directly. Refer to KB Article Q116450, BufferAccessScsiPortControlled Flag Information.
MaximumNumberOfTargets;
Indicator for wide scsi.
- ReservedUchars[2];
- Ensure quadword alignment.
- ULONG SlotNumber;
- Adapter slot number
- ULONG BusInterruptLevel2;
- ULONG BusInterruptVector2;
- KINTERRUPT_MODE InterruptMode2;
- Interrupt information for a second IRQ.
- ULONG DmaChannel2;
- ULONG DmaPort2;
- DMA_WIDTH DmaWidth2;
- DMA_SPEED DmaSpeed2;
DMA information for a second channel.
The specific fields initialized depend on the HBA miniport driver and the information available to the OS-specific port driver. All uninitialized fields are set to a default value.
All HBA miniport drivers should have at least one set of defaults to use for relevant fields if a value is not specified. All relevant fields should be updated by the HBA miniport driver.
SCSI class drivers, which load later than miniport drivers, depend on the information supplied by HwFindAdapter to customize their subsequent requests. For example, the MaximumTransferLength and NumberOfPhysicalBreaks values supplied by the miniport driver control whether class driver must split large transfer requests into a set of partial transfers to suit the limits of the HBA.
See Also
ACCESS_RANGE, HwFindAdapter, ScsiPortInitialize