ACCESS_RANGE 結構 (strmini.h)
ACCESS_RANGE描述 HBA 所使用的記憶體或 I/O 埠範圍。
SCSI 埠驅動程式和 SCSI 迷你埠驅動程式模型未來可能會改變或無法使用。 相反地,我們建議使用 Storport 驅動程式 和 Storport 迷你埠 驅動程式模型。
語法
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;
成員
RangeStart
包含類型 為 SCSI_PHYSICAL_ADDRESS 的位址,指定範圍的總線相對基位址。 這是可傳遞至 ScsiPortGetDeviceBase 的位址。
RangeLength
指定範圍中的埠大小、位元組或埠數目。 迷你埠驅動程序必須確定此值符合適配卡實際譯碼的範圍。 例如,如果 HBA 使用七個緩存器,但回應 8,則此成員應設定為 8。
RangeInMemory
表示當 為 TRUE 時,範圍位於記憶體中,而不是在 I/O 空間中。 當 為 FALSE 時,範圍會以 I/O 空格為單位。
Reserved
備註
每個ACCESS_RANGE都是PORT_CONFIGURATION_INFORMATION結構內的 AccessRanges 陣列元素,傳遞至迷你埠驅動程式的 HwScsiFindAdapter 例程。
可能的話,OS 特定的埠驅動程式會使用迷你埠驅動程式的總線相對 HBA 範圍來設定每個存取範圍元素,然後再呼叫迷你埠驅動程式的 HwScsiFindAdapter 例程。 否則,埠驅動程式會為無法提供組態資訊的範圍元素零。
如果埠驅動程式確實提供範圍,迷你埠驅動程式的 HwScsiFindAdapter 例程應該只使用提供的位址,而且 絕對不應該 嘗試使用自己設計位址在相同的總線上尋找其他 HBA。 當埠驅動程式提供範圍資訊時,嘗試存取其他總線相對埠或記憶體範圍,特別是在某些裝置在 x86 實際模式中初始化的僅限 x86 系統,可能會導致總線上的其他裝置無法初始化,甚至導致系統無法開機程式。
每個迷你埠驅動程式都應該有一組總線相對預設範圍,以嘗試OS特定的埠驅動程式是否無法提供資訊。 迷你埠驅動程序必須呼叫 ScsiPortValidateRange,才能嘗試使用 ScsiPortGetDeviceBase 對應這類範圍,並使用傳回的邏輯位址來存取配接器,特別是其中一個 HBA 具有 BIOS 時。
迷你埠驅動程式針對PORT_CONFIGURATION_INFORMATION中OS特定埠驅動程式填入的任何存取範圍,都必須將 RangeStart 成員設定為總線相對位址,例如 ScsiPortGetBusData 所傳回的值。
ScsiPortGetDeviceBase 所傳回的對應基底邏輯位址應該儲存在迷你埠驅動程式的裝置擴充功能中,做為用來呼叫 ScsiPortReadXxx 和 ScsiPortWriteXxx 例程之對應 I/O 埠或記憶體位址範圍的 RangeStart 位址。
規格需求
需求 | 值 |
---|---|
標頭 | strmini.h (包含 Srb.h、Storport.h、Strmini.h) |
另請參閱
PORT_CONFIGURATION_INFORMATION (SCSI)