Storport Miniport 驅動程式中的錯誤處理

每個 Storport 迷你埠驅動程式都必須通知系統埠驅動程式下列類型的 SCSI 錯誤。 這些錯誤應在 SrbStatus 成員中設定,驅動程式完成發生錯誤時所處理的 SRB:

  • 如果 HBA 傳回非特定匯流排錯誤,SRB_STATUS_ERROR ()

  • SRB_STATUS_PARITY_ERROR

  • SRB_STATUS_UNEXPECTED_BUS_FREE

  • SRB_STATUS_SELECTION_TIMEOUT

  • SRB_STATUS_COMMAND_TIMEOUT

  • SRB_STATUS_MESSAGE_REJECTED

  • SRB_STATUS_NO_DEVICE

  • SRB_STATUS_NO_HBA

  • SRB_STATUS_DATA_OVERRUN (也會針對下溢) 傳回

  • SRB_STATUS_PHASE_SEQUENCE_FAILURE

  • SRB_STATUS_BUSY (TID 忙碌)

對於資料不足,迷你埠驅動程式必須更新 SRB 的 DataTransferLength ,以指出實際傳輸的資料量。

此外,迷你埠驅動程式應該使用下列指導方針,將 SRB 傳遞至 StorPortLogError來記錄上述一些錯誤:

在驅動程式寫入器判斷SRB_STATUS_ERROR時記錄錯誤。

請一律記錄SRB_STATUS_PARITY_ERROR的錯誤。

請一律記錄SRB_STATUS_UNEXPECTED_BUS_FREE的錯誤。

請一律記錄SRB_STATUS_SELECTION_TIMEOUT的錯誤。

請一律記錄SRB_STATUS_COMMAND_TIMEOUT的錯誤。

每當發生溢位時,記錄SRB_STATUS_DATA_OVERRUN的錯誤,但不會在發生下溢時記錄。

請一律記錄SRB_STATUS_PHASE_SEQUENCE_FAILURE的錯誤。

請一律記錄SRB_STATUS_BUSY硬體錯誤的錯誤。

若要記錄錯誤,迷你埠驅動程式會使用下列其中一個系統定義的錯誤或警告碼來呼叫 StorPortLogError

SP_BUS_PARITY_ERROR對應至SRB_STATUS_PARITY_ERROR

目標邏輯單元SP_UNEXPECTED_DISCONNECT ()

SP_INVALID_RESELECTION對應至SRB_STATUS_PHASE_SEQUENCE_FAILURE或SRB_STATUS_ERROR

SP_BUS_TIME_OUT對應至SRB_STATUS_SELECTION_TIMEOUT

SP_REQUEST_TIMEOUT對應至 SRB_STATUS_COMMAND_TIMEOUT

SP_PROTOCOL_ERROR對應至超溢條件SRB_STATUS_PHASE_SELECTION_FAILURE、SRB_STATUS_UNEXPECTED_BUS_FREE或SRB_STATUS_DATA_OVERRUN

SP_INTERNAL_ADAPTER_ERROR對應至 SRB_STATUS_ERROR

SP_IRQ_NOT_RESPONDING (警告,指出迷你埠驅動程式偵測到 HBA 不再產生中斷要求)

SP_BAD_FW_ERROR FW 是 韌體)

SP_BAD_FW_WARNING

StorPortLogError 會配置錯誤記錄檔封包、加以設定,並代表迷你埠驅動程式在事件記錄檔中記錄 I/O 錯誤。 系統管理員或使用者可以檢查系統事件記錄檔,並視需要重新設定、修復或取代 HBA,以監視 HBA 的條件。