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