基於訊息的裝置¶
Fusion 訊息裝置¶
-
u8 mpt_register(MPT_CALLBACK cbfunc, MPT_DRIVER_CLASS dclass, char *func_name)¶
註冊協議特定的主回撥處理程式。
引數
MPT_CALLBACK cbfunc回撥函式指標
MPT_DRIVER_CLASS dclass協議驅動程式的類(
MPT_DRIVER_CLASS列舉值)char *func_name呼叫函式的名稱
此例程由協議特定的驅動程式(SCSI 主機、LAN、SCSI 目標)呼叫,以註冊其回覆回撥例程。每個協議特定的驅動程式必須在能夠使用任何 IOC 資源(例如獲取請求幀)之前執行此操作。
注意
- SCSI 協議驅動程式目前呼叫此例程三次
以便註冊單獨的回撥;一個用於“正常”SCSI IO;一個用於 MptScsiTaskMgmt 請求;一個用於 Scan/DV 請求。
如果成功,則返回 u8 值的“控制代碼”,範圍為(並且 S.O.D. 順序){N,...,7,6,5,...,1}。呼叫者應將 MPT_MAX_PROTOCOL_DRIVERS(包括零!)的返回值視為錯誤。
-
void mpt_deregister(u8 cb_idx)¶
登出協議驅動程式資源。
引數
u8 cb_idx先前註冊的回撥控制代碼
每個協議特定的驅動程式都應在其模組解除安裝時呼叫此例程。
-
int mpt_event_register(u8 cb_idx, MPT_EVHANDLER ev_cbfunc)¶
註冊協議特定的事件回撥處理程式。
引數
u8 cb_idx先前註冊的(透過 mpt_register)回撥控制代碼
MPT_EVHANDLER ev_cbfunc回撥函式
如果一個或多個協議特定的驅動程式選擇接收 MPT 事件的通知,則可以呼叫此例程。
成功返回 0。
-
void mpt_event_deregister(u8 cb_idx)¶
登出協議特定的事件回撥處理程式
引數
u8 cb_idx先前註冊的回撥控制代碼
每個協議特定的驅動程式都應在其不處理(或無法再處理)事件時,或者在其模組解除安裝時呼叫此例程。
-
int mpt_reset_register(u8 cb_idx, MPT_RESETHANDLER reset_func)¶
註冊協議特定的 IOC 重置處理程式。
引數
u8 cb_idx先前註冊的(透過 mpt_register)回撥控制代碼
MPT_RESETHANDLER reset_func重置函式
如果一個或多個協議特定的驅動程式選擇接收 IOC 重置的通知,則可以呼叫此例程。
成功返回 0。
-
void mpt_reset_deregister(u8 cb_idx)¶
登出協議特定的 IOC 重置處理程式。
引數
u8 cb_idx先前註冊的回撥控制代碼
每個協議特定的驅動程式都應在其不處理(或無法再處理)IOC 重置處理時,或者在其模組解除安裝時呼叫此例程。
-
int mpt_device_driver_register(struct mpt_pci_driver *dd_cbfunc, u8 cb_idx)¶
註冊裝置驅動程式鉤子
引數
struct mpt_pci_driver * dd_cbfunc驅動程式回撥結構
u8 cb_idxMPT 協議驅動程式索引
-
void mpt_device_driver_deregister(u8 cb_idx)¶
登出裝置驅動程式鉤子
引數
u8 cb_idxMPT 協議驅動程式索引
-
MPT_FRAME_HDR *mpt_get_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc)¶
從池中獲取 MPT 請求幀
引數
u8 cb_idx已註冊的 MPT 協議驅動程式的控制代碼
MPT_ADAPTER *ioc指向 MPT 介面卡結構的指標
從每個 MPT 介面卡分配的池(1024 個)中獲取 MPT 請求幀。
如果沒有任何可用或 IOC 未啟用,則返回指向 MPT 請求幀的指標或
NULL。
-
void mpt_put_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
將協議特定的 MPT 請求幀傳送到 IOC
引數
u8 cb_idx已註冊的 MPT 協議驅動程式的控制代碼
MPT_ADAPTER *ioc指向 MPT 介面卡結構的指標
MPT_FRAME_HDR *mf指向 MPT 請求幀的指標
此例程將 MPT 請求幀釋出到特定 MPT 介面卡的請求釋出 FIFO。
-
void mpt_put_msg_frame_hi_pri(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
傳送高優先順序協議特定的 MPT 請求幀
引數
u8 cb_idx已註冊的 MPT 協議驅動程式的控制代碼
MPT_ADAPTER *ioc指向 MPT 介面卡結構的指標
MPT_FRAME_HDR *mf指向 MPT 請求幀的指標
使用高優先順序請求佇列將協議特定的 MPT 請求幀傳送到 IOC。
此例程將 MPT 請求幀釋出到特定 MPT 介面卡的請求釋出 FIFO。
-
void mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
將 MPT 請求幀放回 FreeQ。
引數
MPT_ADAPTER *ioc指向 MPT 介面卡結構的指標
MPT_FRAME_HDR *mf指向 MPT 請求幀的指標
此例程將 MPT 請求幀放回 MPT 介面卡的 FreeQ。
-
int mpt_send_handshake_request(u8 cb_idx, MPT_ADAPTER *ioc, int reqBytes, u32 *req, int sleepFlag)¶
透過門鈴握手方法傳送 MPT 請求。
引數
u8 cb_idx已註冊的 MPT 協議驅動程式的控制代碼
MPT_ADAPTER *ioc指向 MPT 介面卡結構的指標
int reqBytes請求的大小(以位元組為單位)
u32 *req指向 MPT 請求幀的指標
int sleepFlag如果 CAN_SLEEP 則使用 schedule,否則使用 udelay。
此例程專門用於傳送 MptScsiTaskMgmt 請求,因為它們需要透過門鈴握手傳送。
注意
- 呼叫者有責任交換請求中大小大於 1 位元組的欄位的位元組。
請求中大小大於 1 位元組的欄位的位元組。
成功返回 0,失敗返回非零。
-
int mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp)¶
給定 IOC 識別符號,設定指向其介面卡結構的指標。
引數
int iocidIOC 唯一識別符號(整數)
MPT_ADAPTER **iocpp指向 IOC 介面卡的指標的指標
給定唯一的 IOC 識別符號,設定指向關聯的 MPT 介面卡結構的指標。
如果找到 iocid,則返回 iocid 並設定 iocpp。如果未找到 iocid,則返回 -1。
-
int mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)¶
安裝 PCI 智慧 MPT 介面卡。
引數
struct pci_dev *pdev指向 pci_dev 結構的指標
const struct pci_device_id *idPCI 裝置 ID 資訊
此例程執行將 MPT 介面卡的 IOC 變為 OPERATIONAL 狀態所需的所有步驟。這包括註冊記憶體區域、註冊中斷以及分配請求和回覆記憶體池。
此例程還預取光纖通道 MPT 介面卡的 LAN MAC 地址。
成功返回 0,失敗返回非零。
TODO:新增對輪詢控制器的支援
-
void mpt_detach(struct pci_dev *pdev)¶
刪除 PCI 智慧 MPT 介面卡。
引數
struct pci_dev *pdev指向 pci_dev 結構的指標
-
int mpt_suspend(struct pci_dev *pdev, pm_message_t state)¶
Fusion MPT 基本驅動程式掛起例程。
引數
struct pci_dev *pdev指向 pci_dev 結構的指標
pm_message_t state要進入的新狀態
-
int mpt_resume(struct pci_dev *pdev)¶
Fusion MPT 基本驅動程式恢復例程。
引數
struct pci_dev *pdev指向 pci_dev 結構的指標
-
u32 mpt_GetIocState(MPT_ADAPTER *ioc, int cooked)¶
獲取 MPT 介面卡的當前狀態。
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
int cooked請求原始或處理過的 IOC 狀態
如果 cooked==0,則返回所有 IOC 門鈴暫存器位;否則,僅返回 MPI_IOC_STATE_MASK 中的門鈴位。
-
int mpt_alloc_fw_memory(MPT_ADAPTER *ioc, int size)¶
分配韌體記憶體
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
int size總 FW 位元組數
如果已分配記憶體,則返回相同(快取)的值。
成功返回 0,失敗返回非零值
-
void mpt_free_fw_memory(MPT_ADAPTER *ioc)¶
釋放韌體記憶體
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
如果 alt_img 為 NULL,則從 ioc 結構中刪除。否則,刪除相同格式的輔助映像。
-
int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode)¶
對 SAS 持久表執行操作
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
u8 persist_opcode見下文
MPI_SAS_OP_CLEAR_NOT_PRESENT
釋放當前不存在的裝置的所有持久 TargetID 對映。
MPI_SAS_OP_CLEAR_ALL_PERSISTENT
清除所有持久 TargetID 對映
注意
請勿在中斷期間使用此函式。
成功返回 0,非零值表示錯誤
-
int mpt_raid_phys_disk_pg0(MPT_ADAPTER *ioc, u8 phys_disk_num, RaidPhysDiskPage0_t *phys_disk)¶
返回物理磁碟 page zero
引數
MPT_ADAPTER *ioc指向介面卡結構的指標
u8 phys_disk_numio 單元唯一的 phys disk num 由 ioc 生成
RaidPhysDiskPage0_t *phys_disk返回請求的有效負載資料
返回
成功時返回 0;如果讀取配置頁面頭失敗或資料指標不為 NULL,則返回 -EFAULT;如果 pci_alloc 失敗,則返回 -ENOMEM
-
int mpt_raid_phys_disk_get_num_paths(MPT_ADAPTER *ioc, u8 phys_disk_num)¶
返回與此 phys_num 關聯的路徑數
引數
MPT_ADAPTER *ioc指向介面卡結構的指標
u8 phys_disk_numio 單元唯一的 phys disk num 由 ioc 生成
返回
返回路徑數
-
int mpt_raid_phys_disk_pg1(MPT_ADAPTER *ioc, u8 phys_disk_num, RaidPhysDiskPage1_t *phys_disk)¶
返回物理磁碟 page 1
引數
MPT_ADAPTER *ioc指向介面卡結構的指標
u8 phys_disk_numio 單元唯一的 phys disk num 由 ioc 生成
RaidPhysDiskPage1_t *phys_disk返回請求的有效負載資料
返回
成功時返回 0;如果讀取配置頁面頭失敗或資料指標不為 NULL,則返回 -EFAULT;如果 pci_alloc 失敗,則返回 -ENOMEM
-
int mpt_findImVolumes(MPT_ADAPTER *ioc)¶
識別隱藏磁碟和 RAID 卷的 ID
引數
MPT_ADAPTER *ioc指向介面卡結構的指標
返回
成功時返回 0;如果讀取配置頁面頭失敗或資料指標不為 NULL,則返回 -EFAULT;如果 pci_alloc 失敗,則返回 -ENOMEM
-
int mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)¶
用於發出配置訊息的通用函式
引數
MPT_ADAPTER *ioc指向介面卡結構的指標
CONFIGPARMS *pCfg指向配置結構的指標。結構包含操作、頁面地址、方向、物理地址以及指向配置頁面頭的指標。頁面頭已更新。
成功返回 0;如果沒有可用的訊息幀,則返回 -EAGAIN;如果回覆不成功或沒有回覆(超時),則返回 -EFAULT
-
void mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buffer, int *size, int len, int showlan)¶
將 IOC 的 ASCII 摘要寫入緩衝區。
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
char *buffer指向應寫入 IOC 摘要資訊的緩衝區的指標
int *size指向我們寫入的位元組數的指標(由該例程設定)
int len在緩衝區中開始寫入的偏移量
int showlan顯示 LAN 內容?
此例程將(英語可讀的)ASCII 文字(表示 IOC 資訊的摘要)寫入緩衝區。
-
int mpt_set_taskmgmt_in_progress_flag(MPT_ADAPTER *ioc)¶
設定與任務管理相關的標誌
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
成功返回 0,失敗返回 -1。
如果返回 -1,則表示無法設定標誌
-
void mpt_clear_taskmgmt_in_progress_flag(MPT_ADAPTER *ioc)¶
清除與任務管理相關的標誌
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
-
void __noreturn mpt_halt_firmware(MPT_ADAPTER *ioc)¶
如果韌體正在執行,則停止韌體並使核心崩潰
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
-
int mpt_Soft_Hard_ResetHandler(MPT_ADAPTER *ioc, int sleepFlag)¶
嘗試成本較低的重置
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
int sleepFlag指示是否必須呼叫 sleep 或 schedule。
成功返回 0,失敗返回 -1。首先嚐試軟重置,僅當失敗時才進行成本高昂的硬重置。
-
int mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)¶
通用重置處理程式
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
int sleepFlag指示是否必須呼叫 sleep 或 schedule。
根據輸入 arg 值發出 SCSI 任務管理呼叫。如果 TaskMgmt 失敗,則返回關聯的 SCSI 請求。
備註:_HardResetHandler 可以從中斷執行緒(定時器)或非中斷執行緒呼叫。在前一種情況下,不得呼叫 schedule()。
注意
- 返回 -1 是致命錯誤情況,因為它表示
FW 重新載入/初始化失敗。
成功返回 0,失敗返回 -1。
-
const char *mptscsih_info(struct Scsi_Host *SChost)¶
返回有關 MPT 介面卡的資訊
引數
struct Scsi_Host *SChost指向 Scsi_Host 結構的指標
(linux scsi_host_template.info 例程)
返回指向寫入資訊的緩衝區的指標。
-
int mptscsih_qcmd(struct scsi_cmnd *SCpnt)¶
主 Fusion MPT SCSI 發起程式 IO 啟動例程。
引數
struct scsi_cmnd *SCpnt指向 scsi_cmnd 結構的指標
(linux scsi_host_template.queuecommand 例程)這是主要的 SCSI IO 啟動例程。從 linux scsi_cmnd 請求建立一個 MPI SCSIIORequest 並將其傳送到 IOC。
返回 0。(rtn 值被 linux scsi 中間層丟棄)
-
int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, u64 lun, int ctx2abort, ulong timeout)¶
通用傳送任務管理函式。
引數
MPT_SCSI_HOST *hd指向 MPT_SCSI_HOST 結構的指標
u8 type任務管理型別
u8 channel任務管理的通道號
u8 id重置的邏輯 Target ID(如果適用)
u64 lun重置的邏輯單元(如果適用)
int ctx2abort要中止的任務的上下文(如果適用)
ulong timeout任務管理控制的超時時間
備註:_HardResetHandler 可以從中斷執行緒(定時器)或非中斷執行緒呼叫。在前一種情況下,不得呼叫 schedule()。
並非所有欄位都對所有任務型別有意義。
成功返回 0,失敗返回非零值。
-
int mptscsih_abort(struct scsi_cmnd *SCpnt)¶
中止 linux scsi_cmnd 例程,new_eh 變體
引數
struct scsi_cmnd * SCpnt指向 scsi_cmnd 結構的指標,要中止的 IO
(linux scsi_host_template.eh_abort_handler 例程)
成功返回 0,失敗返回非零值。
-
int mptscsih_dev_reset(struct scsi_cmnd *SCpnt)¶
執行 SCSI LOGICAL_UNIT_RESET!
引數
struct scsi_cmnd * SCpnt指向 scsi_cmnd 結構的指標,IO 導致重置
(linux scsi_host_template.eh_dev_reset_handler 例程)
成功返回 0,失敗返回非零值。
-
int mptscsih_bus_reset(struct scsi_cmnd *SCpnt)¶
執行 SCSI BUS_RESET!new_eh 變體
引數
struct scsi_cmnd * SCpnt指向 scsi_cmnd 結構的指標,IO 導致重置
(linux scsi_host_template.eh_bus_reset_handler 例程)
成功返回 0,失敗返回非零值。
-
int mptscsih_host_reset(struct scsi_cmnd *SCpnt)¶
執行 SCSI 主機介面卡 RESET(new_eh 變體)
引數
struct scsi_cmnd *SCpnt指向 scsi_cmnd 結構的指標,IO 導致重置
(linux scsi_host_template.eh_host_reset_handler 例程)
成功返回 0,失敗返回非零值。
-
int mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)¶
在 Fusion MPT 基礎驅動程式中註冊
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
MPT_FRAME_HDR *mf指向 SCSI 任務管理請求幀的指標
MPT_FRAME_HDR *mr指向 SCSI 任務管理回覆幀的指標
此例程在任何 SCSI 任務管理請求完成時從 mptbase.c::mpt_interrupt() 呼叫。此例程在驅動程式載入/初始化時透過
mpt_register()API 呼叫在 MPT(基礎)驅動程式中註冊。返回 1,指示應釋放 alloc'd 請求幀 ptr。
-
struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i)¶
檢索 scmd 條目
引數
MPT_ADAPTER *ioc指向 MPT_ADAPTER 結構的指標
int i陣列中的索引
描述
返回 scsi_cmd 指標