Message-based devices¶
Fusion message devices¶
- 
u8 mpt_register(MPT_CALLBACK cbfunc, MPT_DRIVER_CLASS dclass, char *func_name)¶
- Register protocol-specific main callback handler. 
Parameters
- MPT_CALLBACK cbfunc
- callback function pointer 
- MPT_DRIVER_CLASS dclass
- Protocol driver’s class ( - MPT_DRIVER_CLASSenum value)
- char *func_name
- call function’s name - This routine is called by a protocol-specific driver (SCSI host, LAN, SCSI target) to register its reply callback routine. Each protocol-specific driver must do this before it will be able to use any IOC resources, such as obtaining request frames. 
NOTES
- The SCSI protocol driver currently calls this routine thrice
- in order to register separate callbacks; one for “normal” SCSI IO; one for MptScsiTaskMgmt requests; one for Scan/DV requests. - Returns u8 valued “handle” in the range (and S.O.D. order) {N,...,7,6,5,...,1} if successful. A return value of MPT_MAX_PROTOCOL_DRIVERS (including zero!) should be considered an error by the caller. 
- 
void mpt_deregister(u8 cb_idx)¶
- Deregister a protocol drivers resources. 
Parameters
- u8 cb_idx
- previously registered callback handle - Each protocol-specific driver should call this routine when its module is unloaded. 
- 
int mpt_event_register(u8 cb_idx, MPT_EVHANDLER ev_cbfunc)¶
- Register protocol-specific event callback handler. 
Parameters
- u8 cb_idx
- previously registered (via mpt_register) callback handle 
- MPT_EVHANDLER ev_cbfunc
- callback function - This routine can be called by one or more protocol-specific drivers if/when they choose to be notified of MPT events. - Returns 0 for success. 
- 
void mpt_event_deregister(u8 cb_idx)¶
- Deregister protocol-specific event callback handler 
Parameters
- u8 cb_idx
- previously registered callback handle - Each protocol-specific driver should call this routine when it does not (or can no longer) handle events, or when its module is unloaded. 
- 
int mpt_reset_register(u8 cb_idx, MPT_RESETHANDLER reset_func)¶
- Register protocol-specific IOC reset handler. 
Parameters
- u8 cb_idx
- previously registered (via mpt_register) callback handle 
- MPT_RESETHANDLER reset_func
- reset function - This routine can be called by one or more protocol-specific drivers if/when they choose to be notified of IOC resets. - Returns 0 for success. 
- 
void mpt_reset_deregister(u8 cb_idx)¶
- Deregister protocol-specific IOC reset handler. 
Parameters
- u8 cb_idx
- previously registered callback handle - Each protocol-specific driver should call this routine when it does not (or can no longer) handle IOC reset handling, or when its module is unloaded. 
- 
int mpt_device_driver_register(struct mpt_pci_driver *dd_cbfunc, u8 cb_idx)¶
- Register device driver hooks 
Parameters
- struct mpt_pci_driver * dd_cbfunc
- driver callbacks struct 
- u8 cb_idx
- MPT protocol driver index 
- 
void mpt_device_driver_deregister(u8 cb_idx)¶
- DeRegister device driver hooks 
Parameters
- u8 cb_idx
- MPT protocol driver index 
- 
MPT_FRAME_HDR *mpt_get_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc)¶
- Obtain an MPT request frame from the pool 
Parameters
- u8 cb_idx
- Handle of registered MPT protocol driver 
- MPT_ADAPTER *ioc
- Pointer to MPT adapter structure - Obtain an MPT request frame from the pool (of 1024) that are allocated per MPT adapter. - Returns pointer to a MPT request frame or - NULLif none are available or IOC is not active.
- 
void mpt_put_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
- Send a protocol-specific MPT request frame to an IOC 
Parameters
- u8 cb_idx
- Handle of registered MPT protocol driver 
- MPT_ADAPTER *ioc
- Pointer to MPT adapter structure 
- MPT_FRAME_HDR *mf
- Pointer to MPT request frame - This routine posts an MPT request frame to the request post FIFO of a specific MPT adapter. 
- 
void mpt_put_msg_frame_hi_pri(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
- Send a hi-pri protocol-specific MPT request frame 
Parameters
- u8 cb_idx
- Handle of registered MPT protocol driver 
- MPT_ADAPTER *ioc
- Pointer to MPT adapter structure 
- MPT_FRAME_HDR *mf
- Pointer to MPT request frame - Send a protocol-specific MPT request frame to an IOC using hi-priority request queue. - This routine posts an MPT request frame to the request post FIFO of a specific MPT adapter. 
- 
void mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)¶
- Place MPT request frame back on FreeQ. 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT adapter structure 
- MPT_FRAME_HDR *mf
- Pointer to MPT request frame - This routine places a MPT request frame back on the MPT adapter’s FreeQ. 
- 
int mpt_send_handshake_request(u8 cb_idx, MPT_ADAPTER *ioc, int reqBytes, u32 *req, int sleepFlag)¶
- Send MPT request via doorbell handshake method. 
Parameters
- u8 cb_idx
- Handle of registered MPT protocol driver 
- MPT_ADAPTER *ioc
- Pointer to MPT adapter structure 
- int reqBytes
- Size of the request in bytes 
- u32 *req
- Pointer to MPT request frame 
- int sleepFlag
- Use schedule if CAN_SLEEP else use udelay. - This routine is used exclusively to send MptScsiTaskMgmt requests since they are required to be sent via doorbell handshake. 
NOTE
- It is the callers responsibility to byte-swap fields in the
- request which are greater than 1 byte in size. - Returns 0 for success, non-zero for failure. 
- 
int mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp)¶
- Given IOC identifier, set pointer to its adapter structure. 
Parameters
- int iocid
- IOC unique identifier (integer) 
- MPT_ADAPTER **iocpp
- Pointer to pointer to IOC adapter - Given a unique IOC identifier, set pointer to the associated MPT adapter structure. - Returns iocid and sets iocpp if iocid is found. Returns -1 if iocid is not found. 
- 
int mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)¶
- Install a PCI intelligent MPT adapter. 
Parameters
- struct pci_dev *pdev
- Pointer to pci_dev structure 
- const struct pci_device_id *id
- PCI device ID information - This routine performs all the steps necessary to bring the IOC of a MPT adapter to a OPERATIONAL state. This includes registering memory regions, registering the interrupt, and allocating request and reply memory pools. - This routine also pre-fetches the LAN MAC address of a Fibre Channel MPT adapter. - Returns 0 for success, non-zero for failure. - TODO: Add support for polled controllers 
- 
void mpt_detach(struct pci_dev *pdev)¶
- Remove a PCI intelligent MPT adapter. 
Parameters
- struct pci_dev *pdev
- Pointer to pci_dev structure 
- 
int mpt_suspend(struct pci_dev *pdev, pm_message_t state)¶
- Fusion MPT base driver suspend routine. 
Parameters
- struct pci_dev *pdev
- Pointer to pci_dev structure 
- pm_message_t state
- new state to enter 
- 
int mpt_resume(struct pci_dev *pdev)¶
- Fusion MPT base driver resume routine. 
Parameters
- struct pci_dev *pdev
- Pointer to pci_dev structure 
- 
u32 mpt_GetIocState(MPT_ADAPTER *ioc, int cooked)¶
- Get the current state of a MPT adapter. 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- int cooked
- Request raw or cooked IOC state - Returns all IOC Doorbell register bits if cooked==0, else just the Doorbell bits in MPI_IOC_STATE_MASK. 
- 
int mpt_alloc_fw_memory(MPT_ADAPTER *ioc, int size)¶
- allocate firmware memory 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- int size
- total FW bytes - If memory has already been allocated, the same (cached) value is returned. - Return 0 if successful, or non-zero for failure 
- 
void mpt_free_fw_memory(MPT_ADAPTER *ioc)¶
- free firmware memory 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure - If alt_img is NULL, delete from ioc structure. Else, delete a secondary image in same format. 
- 
int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode)¶
- Perform operation on SAS Persistent Table 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- u8 persist_opcode
- see below - MPI_SAS_OP_CLEAR_NOT_PRESENT - Free all persist TargetID mappings for devices not currently present. - MPI_SAS_OP_CLEAR_ALL_PERSISTENT - Clear al persist TargetID mappings 
NOTE
Don’t use not this function during interrupt time.
Returns 0 for success, non-zero error
- 
int mpt_raid_phys_disk_pg0(MPT_ADAPTER *ioc, u8 phys_disk_num, RaidPhysDiskPage0_t *phys_disk)¶
- returns phys disk page zero 
Parameters
- MPT_ADAPTER *ioc
- Pointer to a Adapter Structure 
- u8 phys_disk_num
- io unit unique phys disk num generated by the ioc 
- RaidPhysDiskPage0_t *phys_disk
- requested payload data returned 
Return
0 on success -EFAULT if read of config page header fails or data pointer not NULL -ENOMEM if pci_alloc failed
- 
int mpt_raid_phys_disk_get_num_paths(MPT_ADAPTER *ioc, u8 phys_disk_num)¶
- returns number paths associated to this phys_num 
Parameters
- MPT_ADAPTER *ioc
- Pointer to a Adapter Structure 
- u8 phys_disk_num
- io unit unique phys disk num generated by the ioc 
Return
returns number paths
- 
int mpt_raid_phys_disk_pg1(MPT_ADAPTER *ioc, u8 phys_disk_num, RaidPhysDiskPage1_t *phys_disk)¶
- returns phys disk page 1 
Parameters
- MPT_ADAPTER *ioc
- Pointer to a Adapter Structure 
- u8 phys_disk_num
- io unit unique phys disk num generated by the ioc 
- RaidPhysDiskPage1_t *phys_disk
- requested payload data returned 
Return
0 on success -EFAULT if read of config page header fails or data pointer not NULL -ENOMEM if pci_alloc failed
- 
int mpt_findImVolumes(MPT_ADAPTER *ioc)¶
- Identify IDs of hidden disks and RAID Volumes 
Parameters
- MPT_ADAPTER *ioc
- Pointer to a Adapter Strucutre 
Return
0 on success -EFAULT if read of config page header fails or data pointer not NULL -ENOMEM if pci_alloc failed
- 
int mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)¶
- Generic function to issue config message 
Parameters
- MPT_ADAPTER *ioc
- Pointer to an adapter structure 
- CONFIGPARMS *pCfg
- Pointer to a configuration structure. Struct contains action, page address, direction, physical address and pointer to a configuration page header Page header is updated. - Returns 0 for success -EAGAIN if no msg frames currently available -EFAULT for non-successful reply or no reply (timeout) 
- 
void mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buffer, int *size, int len, int showlan)¶
- Write ASCII summary of IOC to a buffer. 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- char *buffer
- Pointer to buffer where IOC summary info should be written 
- int *size
- Pointer to number of bytes we wrote (set by this routine) 
- int len
- Offset at which to start writing in buffer 
- int showlan
- Display LAN stuff? - This routine writes (english readable) ASCII text, which represents a summary of IOC information, to a buffer. 
- 
int mpt_set_taskmgmt_in_progress_flag(MPT_ADAPTER *ioc)¶
- set flags associated with task management 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure - Returns 0 for SUCCESS or -1 if FAILED. - If -1 is return, then it was not possible to set the flags 
- 
void mpt_clear_taskmgmt_in_progress_flag(MPT_ADAPTER *ioc)¶
- clear flags associated with task management 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- 
void __noreturn mpt_halt_firmware(MPT_ADAPTER *ioc)¶
- Halts the firmware if it is operational and panic the kernel 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- 
int mpt_Soft_Hard_ResetHandler(MPT_ADAPTER *ioc, int sleepFlag)¶
- Try less expensive reset 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- int sleepFlag
- Indicates if sleep or schedule must be called. - Returns 0 for SUCCESS or -1 if FAILED. Try for softreset first, only if it fails go for expensive HardReset. 
- 
int mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)¶
- Generic reset handler 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- int sleepFlag
- Indicates if sleep or schedule must be called. - Issues SCSI Task Management call based on input arg values. If TaskMgmt fails, returns associated SCSI request. - Remark: _HardResetHandler can be invoked from an interrupt thread (timer) or a non-interrupt thread. In the former, must not call schedule(). 
Note
- A return of -1 is a FATAL error case, as it means a
- FW reload/initialization failed. - Returns 0 for SUCCESS or -1 if FAILED. 
- 
const char *mptscsih_info(struct Scsi_Host *SChost)¶
- Return information about MPT adapter 
Parameters
- struct Scsi_Host *SChost
- Pointer to Scsi_Host structure - (linux scsi_host_template.info routine) - Returns pointer to buffer where information was written. 
- 
int mptscsih_qcmd(struct scsi_cmnd *SCpnt)¶
- Primary Fusion MPT SCSI initiator IO start routine. 
Parameters
- struct scsi_cmnd *SCpnt
- Pointer to scsi_cmnd structure - (linux scsi_host_template.queuecommand routine) This is the primary SCSI IO start routine. Create a MPI SCSIIORequest from a linux scsi_cmnd request and send it to the IOC. - Returns 0. (rtn value discarded by linux scsi mid-layer) 
- 
int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, u64 lun, int ctx2abort, ulong timeout)¶
- Generic send Task Management function. 
Parameters
- MPT_SCSI_HOST *hd
- Pointer to MPT_SCSI_HOST structure 
- u8 type
- Task Management type 
- u8 channel
- channel number for task management 
- u8 id
- Logical Target ID for reset (if appropriate) 
- u64 lun
- Logical Unit for reset (if appropriate) 
- int ctx2abort
- Context for the task to be aborted (if appropriate) 
- ulong timeout
- timeout for task management control - Remark: _HardResetHandler can be invoked from an interrupt thread (timer) or a non-interrupt thread. In the former, must not call schedule(). - Not all fields are meaningfull for all task types. - Returns 0 for SUCCESS, or FAILED. 
- 
int mptscsih_abort(struct scsi_cmnd *SCpnt)¶
- Abort linux scsi_cmnd routine, new_eh variant 
Parameters
- struct scsi_cmnd * SCpnt
- Pointer to scsi_cmnd structure, IO to be aborted - (linux scsi_host_template.eh_abort_handler routine) - Returns SUCCESS or FAILED. 
- 
int mptscsih_dev_reset(struct scsi_cmnd *SCpnt)¶
- Perform a SCSI LOGICAL_UNIT_RESET! 
Parameters
- struct scsi_cmnd * SCpnt
- Pointer to scsi_cmnd structure, IO which reset is due to - (linux scsi_host_template.eh_dev_reset_handler routine) - Returns SUCCESS or FAILED. 
- 
int mptscsih_bus_reset(struct scsi_cmnd *SCpnt)¶
- Perform a SCSI BUS_RESET! new_eh variant 
Parameters
- struct scsi_cmnd * SCpnt
- Pointer to scsi_cmnd structure, IO which reset is due to - (linux scsi_host_template.eh_bus_reset_handler routine) - Returns SUCCESS or FAILED. 
- 
int mptscsih_host_reset(struct scsi_cmnd *SCpnt)¶
- Perform a SCSI host adapter RESET (new_eh variant) 
Parameters
- struct scsi_cmnd *SCpnt
- Pointer to scsi_cmnd structure, IO which reset is due to - (linux scsi_host_template.eh_host_reset_handler routine) - Returns SUCCESS or FAILED. 
- 
int mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)¶
- Registered with Fusion MPT base driver 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- MPT_FRAME_HDR *mf
- Pointer to SCSI task mgmt request frame 
- MPT_FRAME_HDR *mr
- Pointer to SCSI task mgmt reply frame - This routine is called from mptbase.c::mpt_interrupt() at the completion of any SCSI task management request. This routine is registered with the MPT (base) driver at driver load/init time via the - mpt_register()API call.- Returns 1 indicating alloc’d request frame ptr should be freed. 
- 
struct scsi_cmnd *mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i)¶
- retrieves scmd entry 
Parameters
- MPT_ADAPTER *ioc
- Pointer to MPT_ADAPTER structure 
- int i
- index into the array 
Description
Returns the scsi_cmd pointer