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 所傳回的對應基底邏輯位址, 通常是在迷你埠驅動程式的裝置擴充功能中,做為 RangeStart 位址,用於呼叫 ScsiPortReadXxx 和 ScsiPortWriteXxx 例程的對應 I/O 埠或記憶體位址。
要求
要求 | 價值 |
---|---|
標頭 | srb.h (包括 Srb.h、Storport.h、Strmini.h) |
另請參閱
PORT_CONFIGURATION_INFORMATION (SCSI)