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;
} 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: compatable, 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 always initialized by ScsiPort.

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