#ifndef MPT3SAS_BASE_H_INCLUDED
#define MPT3SAS_BASE_H_INCLUDED
#include "mpi/mpi2_type.h"
#include "mpi/mpi2.h"
#include "mpi/mpi2_ioc.h"
#include "mpi/mpi2_cnfg.h"
#include "mpi/mpi2_init.h"
#include "mpi/mpi2_raid.h"
#include "mpi/mpi2_tool.h"
#include "mpi/mpi2_sas.h"
#include "mpi/mpi2_pci.h"
#include "mpi/mpi2_image.h"
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_tcq.h>
#include <scsi/scsi_transport_sas.h>
#include <scsi/scsi_dbg.h>
#include <scsi/scsi_eh.h>
#include <linux/pci.h>
#include <linux/poll.h>
#include <linux/irq_poll.h>
#include "mpt3sas_debug.h"
#include "mpt3sas_trigger_diag.h"
#include "mpt3sas_trigger_pages.h"
#define MPT3SAS_DRIVER_NAME …
#define MPT3SAS_AUTHOR …
#define MPT3SAS_DESCRIPTION …
#define MPT3SAS_DRIVER_VERSION …
#define MPT3SAS_MAJOR_VERSION …
#define MPT3SAS_MINOR_VERSION …
#define MPT3SAS_BUILD_VERSION …
#define MPT3SAS_RELEASE_VERSION …
#define MPT2SAS_DRIVER_NAME …
#define MPT2SAS_DESCRIPTION …
#define MPT2SAS_DRIVER_VERSION …
#define MPT2SAS_MAJOR_VERSION …
#define MPT2SAS_MINOR_VERSION …
#define MPT2SAS_BUILD_VERSION …
#define MPT2SAS_RELEASE_VERSION …
#define MPT3SAS_DEFAULT_COREDUMP_TIMEOUT_SECONDS …
#define MPT3SAS_COREDUMP_LOOP_DONE …
#define MPT3SAS_TIMESYNC_TIMEOUT_SECONDS …
#define MPT3SAS_TIMESYNC_UPDATE_INTERVAL …
#define MPT3SAS_TIMESYNC_UNIT_MASK …
#define MPT3SAS_TIMESYNC_MASK …
#define SECONDS_PER_MIN …
#define SECONDS_PER_HOUR …
#define MPT3SAS_COREDUMP_LOOP_DONE …
#define MPI26_SET_IOC_PARAMETER_SYNC_TIMESTAMP …
#define MPT_MAX_PHYS_SEGMENTS …
#define MPT_MIN_PHYS_SEGMENTS …
#define MPT_KDUMP_MIN_PHYS_SEGMENTS …
#define MCPU_MAX_CHAINS_PER_IO …
#ifdef CONFIG_SCSI_MPT3SAS_MAX_SGE
#define MPT3SAS_SG_DEPTH …
#else
#define MPT3SAS_SG_DEPTH …
#endif
#ifdef CONFIG_SCSI_MPT2SAS_MAX_SGE
#define MPT2SAS_SG_DEPTH …
#else
#define MPT2SAS_SG_DEPTH …
#endif
#define MPT3SAS_SATA_QUEUE_DEPTH …
#define MPT3SAS_SAS_QUEUE_DEPTH …
#define MPT3SAS_RAID_QUEUE_DEPTH …
#define MPT3SAS_KDUMP_SCSI_IO_DEPTH …
#define MPT3SAS_RAID_MAX_SECTORS …
#define MPT3SAS_HOST_PAGE_SIZE_4K …
#define MPT3SAS_NVME_QUEUE_DEPTH …
#define MPT_NAME_LENGTH …
#define MPT_STRING_LENGTH …
#define MPI_FRAME_START_OFFSET …
#define REPLY_FREE_POOL_SIZE …
#define MPT_MAX_CALLBACKS …
#define MPT_MAX_HBA_NUM_PHYS …
#define INTERNAL_CMDS_COUNT …
#define INTERNAL_SCSIIO_CMDS_COUNT …
#define MPI3_HIM_MASK …
#define MPT3SAS_INVALID_DEVICE_HANDLE …
#define MAX_CHAIN_ELEMT_SZ …
#define DEFAULT_NUM_FWCHAIN_ELEMTS …
#define IO_UNIT_CONTROL_SHUTDOWN_TIMEOUT …
#define FW_IMG_HDR_READ_TIMEOUT …
#define IOC_OPERATIONAL_WAIT_COUNT …
#define NVME_PRP_SIZE …
#define NVME_ERROR_RESPONSE_SIZE …
#define NVME_TASK_ABORT_MIN_TIMEOUT …
#define NVME_TASK_ABORT_MAX_TIMEOUT …
#define NVME_TASK_MNGT_CUSTOM_MASK …
#define NVME_PRP_PAGE_SIZE …
struct mpt3sas_nvme_cmd { … };
#define ioc_err(ioc, fmt, ...) …
#define ioc_notice(ioc, fmt, ...) …
#define ioc_warn(ioc, fmt, ...) …
#define ioc_info(ioc, fmt, ...) …
#define MPT2_WARPDRIVE_LOGENTRY …
#define MPT2_WARPDRIVE_LC_SSDT …
#define MPT2_WARPDRIVE_LC_SSDLW …
#define MPT2_WARPDRIVE_LC_SSDLF …
#define MPT2_WARPDRIVE_LC_BRMF …
#define MPT_TARGET_FLAGS_RAID_COMPONENT …
#define MPT_TARGET_FLAGS_VOLUME …
#define MPT_TARGET_FLAGS_DELETED …
#define MPT_TARGET_FASTPATH_IO …
#define MPT_TARGET_FLAGS_PCIE_DEVICE …
#define SAS2_PCI_DEVICE_B0_REVISION …
#define SAS3_PCI_DEVICE_C0_REVISION …
#define MPI26_ATLAS_PCIe_SWITCH_DEVID …
#define MPT2SAS_INTEL_RMS25JB080_BRANDING …
#define MPT2SAS_INTEL_RMS25JB040_BRANDING …
#define MPT2SAS_INTEL_RMS25KB080_BRANDING …
#define MPT2SAS_INTEL_RMS25KB040_BRANDING …
#define MPT2SAS_INTEL_RMS25LB040_BRANDING …
#define MPT2SAS_INTEL_RMS25LB080_BRANDING …
#define MPT2SAS_INTEL_RMS2LL080_BRANDING …
#define MPT2SAS_INTEL_RMS2LL040_BRANDING …
#define MPT2SAS_INTEL_RS25GB008_BRANDING …
#define MPT2SAS_INTEL_SSD910_BRANDING …
#define MPT3SAS_INTEL_RMS3JC080_BRANDING …
#define MPT3SAS_INTEL_RS3GC008_BRANDING …
#define MPT3SAS_INTEL_RS3FC044_BRANDING …
#define MPT3SAS_INTEL_RS3UC080_BRANDING …
#define MPT2SAS_INTEL_RMS25JB080_SSDID …
#define MPT2SAS_INTEL_RMS25JB040_SSDID …
#define MPT2SAS_INTEL_RMS25KB080_SSDID …
#define MPT2SAS_INTEL_RMS25KB040_SSDID …
#define MPT2SAS_INTEL_RMS25LB040_SSDID …
#define MPT2SAS_INTEL_RMS25LB080_SSDID …
#define MPT2SAS_INTEL_RMS2LL080_SSDID …
#define MPT2SAS_INTEL_RMS2LL040_SSDID …
#define MPT2SAS_INTEL_RS25GB008_SSDID …
#define MPT2SAS_INTEL_SSD910_SSDID …
#define MPT3SAS_INTEL_RMS3JC080_SSDID …
#define MPT3SAS_INTEL_RS3GC008_SSDID …
#define MPT3SAS_INTEL_RS3FC044_SSDID …
#define MPT3SAS_INTEL_RS3UC080_SSDID …
#define MPT2SAS_DELL_BRANDING_SIZE …
#define MPT2SAS_DELL_6GBPS_SAS_HBA_BRANDING …
#define MPT2SAS_DELL_PERC_H200_ADAPTER_BRANDING …
#define MPT2SAS_DELL_PERC_H200_INTEGRATED_BRANDING …
#define MPT2SAS_DELL_PERC_H200_MODULAR_BRANDING …
#define MPT2SAS_DELL_PERC_H200_EMBEDDED_BRANDING …
#define MPT2SAS_DELL_PERC_H200_BRANDING …
#define MPT2SAS_DELL_6GBPS_SAS_BRANDING …
#define MPT3SAS_DELL_12G_HBA_BRANDING …
#define MPT2SAS_DELL_6GBPS_SAS_HBA_SSDID …
#define MPT2SAS_DELL_PERC_H200_ADAPTER_SSDID …
#define MPT2SAS_DELL_PERC_H200_INTEGRATED_SSDID …
#define MPT2SAS_DELL_PERC_H200_MODULAR_SSDID …
#define MPT2SAS_DELL_PERC_H200_EMBEDDED_SSDID …
#define MPT2SAS_DELL_PERC_H200_SSDID …
#define MPT2SAS_DELL_6GBPS_SAS_SSDID …
#define MPT3SAS_DELL_12G_HBA_SSDID …
#define MPT3SAS_CISCO_12G_8E_HBA_BRANDING …
#define MPT3SAS_CISCO_12G_8I_HBA_BRANDING …
#define MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING …
#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING …
#define MPT3SAS_CISCO_12G_8E_HBA_SSDID …
#define MPT3SAS_CISCO_12G_8I_HBA_SSDID …
#define MPT3SAS_CISCO_12G_AVILA_HBA_SSDID …
#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID …
#define MPT3_DIAG_BUFFER_IS_REGISTERED …
#define MPT3_DIAG_BUFFER_IS_RELEASED …
#define MPT3_DIAG_BUFFER_IS_DIAG_RESET …
#define MPT3_DIAG_BUFFER_IS_DRIVER_ALLOCATED …
#define MPT3_DIAG_BUFFER_IS_APP_OWNED …
#define MPT2SAS_HP_3PAR_SSVID …
#define MPT2SAS_HP_2_4_INTERNAL_BRANDING …
#define MPT2SAS_HP_2_4_EXTERNAL_BRANDING …
#define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_BRANDING …
#define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_BRANDING …
#define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_BRANDING …
#define MPT2SAS_HP_2_4_INTERNAL_SSDID …
#define MPT2SAS_HP_2_4_EXTERNAL_SSDID …
#define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_SSDID …
#define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_SSDID …
#define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_SSDID …
#define MAX_COMBINED_MSIX_VECTORS(gen35) …
#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G3 …
#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G35 …
#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET …
#define MPT3_MIN_IRQS …
#define MFG10_OEM_ID_INVALID …
#define MFG10_OEM_ID_DELL …
#define MFG10_OEM_ID_FSC …
#define MFG10_OEM_ID_SUN …
#define MFG10_OEM_ID_IBM …
#define MFG10_GF0_OCE_DISABLED …
#define MFG10_GF0_R1E_DRIVE_COUNT …
#define MFG10_GF0_R10_DISPLAY …
#define MFG10_GF0_SSD_DATA_SCRUB_DISABLE …
#define MFG10_GF0_SINGLE_DRIVE_R0 …
#define VIRTUAL_IO_FAILED_RETRY …
#define MPT3SAS_DEVICE_HIGH_IOPS_DEPTH …
#define MPT3SAS_HIGH_IOPS_REPLY_QUEUES …
#define MPT3SAS_HIGH_IOPS_BATCH_COUNT …
#define MPT3SAS_GEN35_MAX_MSIX_QUEUES …
#define RDPQ_MAX_INDEX_IN_ONE_CHUNK …
struct Mpi2ManufacturingPage10_t { … };
struct Mpi2ManufacturingPage11_t { … };
struct MPT3SAS_TARGET { … };
#define MPT_DEVICE_FLAGS_INIT …
#define MFG_PAGE10_HIDE_SSDS_MASK …
#define MFG_PAGE10_HIDE_ALL_DISKS …
#define MFG_PAGE10_EXPOSE_ALL_DISKS …
#define MFG_PAGE10_HIDE_IF_VOL_PRESENT …
struct MPT3SAS_DEVICE { … };
#define MPT3_CMD_NOT_USED …
#define MPT3_CMD_COMPLETE …
#define MPT3_CMD_PENDING …
#define MPT3_CMD_REPLY_VALID …
#define MPT3_CMD_RESET …
#define MPT3_CMD_COMPLETE_ASYNC …
struct _internal_cmd { … };
struct _sas_device { … };
static inline void sas_device_get(struct _sas_device *s)
{ … }
static inline void sas_device_free(struct kref *r)
{ … }
static inline void sas_device_put(struct _sas_device *s)
{ … }
struct _pcie_device { … };
static inline void pcie_device_get(struct _pcie_device *p)
{ … }
static inline void pcie_device_free(struct kref *r)
{ … }
static inline void pcie_device_put(struct _pcie_device *p)
{ … }
#define MPT_MAX_WARPDRIVE_PDS …
struct _raid_device { … };
struct _boot_device { … };
struct _sas_port { … };
struct _sas_phy { … };
struct _sas_node { … };
struct _enclosure_node { … };
enum reset_type { … };
struct pcie_sg_list { … };
struct chain_tracker { … };
struct chain_lookup { … };
struct scsiio_tracker { … };
struct request_tracker { … };
struct _tr_list { … };
struct _sc_list { … };
struct _event_ack_list { … };
struct adapter_reply_queue { … };
struct io_uring_poll_queue { … };
MPT_ADD_SGE;
MPT_BUILD_SG_SCMD;
MPT_BUILD_SG;
MPT_BUILD_ZERO_LEN_SGE;
NVME_BUILD_PRP;
PUT_SMID_IO_FP_HIP;
PUT_SMID_DEFAULT;
BASE_READ_REG;
GET_MSIX_INDEX;
mpi3_version_union;
struct mpt3sas_facts { … };
struct mpt3sas_port_facts { … };
struct reply_post_struct { … };
struct virtual_phy { … };
#define MPT_VPHY_FLAG_DIRTY_PHY …
struct hba_port { … };
#define HBA_PORT_FLAG_DIRTY_PORT …
#define HBA_PORT_FLAG_NEW_PORT …
#define MULTIPATH_DISABLED_PORT_ID …
struct htb_rel_query { … };
#define MPT3_DIAG_BUFFER_NOT_RELEASED …
#define MPT3_DIAG_BUFFER_RELEASED …
#define MPT3_DIAG_BUFFER_REL_IOCTL …
#define MPT3_DIAG_BUFFER_REL_TRIGGER …
#define MPT3_DIAG_BUFFER_REL_SYSFS …
#define MPT_DIAG_RESET_ISSUED_BY_DRIVER …
#define MPT_DIAG_RESET_ISSUED_BY_USER …
MPT3SAS_FLUSH_RUNNING_CMDS;
struct MPT3SAS_ADAPTER { … };
struct mpt3sas_debugfs_buffer { … };
#define MPT_DRV_SUPPORT_BITMAP_MEMMOVE …
#define MPT_DRV_SUPPORT_BITMAP_ADDNLQUERY …
#define MPT_DRV_INTERNAL_FIRST_PE_ISSUED …
MPT_CALLBACK;
struct ATTO_SAS_NVRAM { … };
#define ATTO_SAS_ADDR_DEVNAME_BIAS …
ATTO_SAS_ADDRESS;
extern struct list_head mpt3sas_ioc_list;
extern char driver_name[MPT_NAME_LENGTH];
extern spinlock_t gioc_lock;
void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_detach(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_free_enclosure_list(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc,
enum reset_type type);
void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
__le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
u16 smid);
void *mpt3sas_base_get_pcie_sgl(struct MPT3SAS_ADAPTER *ioc, u16 smid);
dma_addr_t mpt3sas_base_get_pcie_sgl_dma(struct MPT3SAS_ADAPTER *ioc, u16 smid);
void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc, u8 poll);
void mpt3sas_base_mask_interrupts(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_unmask_interrupts(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid,
u16 handle);
void mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid,
u16 msix_task);
void mpt3sas_base_put_smid_nvme_encap(struct MPT3SAS_ADAPTER *ioc, u16 smid);
void mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid);
u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
u16 mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx,
struct scsi_cmnd *scmd);
void mpt3sas_base_clear_st(struct MPT3SAS_ADAPTER *ioc,
struct scsiio_tracker *st);
u16 mpt3sas_base_get_smid(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
void mpt3sas_base_free_smid(struct MPT3SAS_ADAPTER *ioc, u16 smid);
void mpt3sas_base_initialize_callback_handler(void);
u8 mpt3sas_base_register_callback_handler(MPT_CALLBACK cb_func);
void mpt3sas_base_release_callback_handler(u8 cb_idx);
u8 mpt3sas_base_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
u32 reply);
u8 mpt3sas_port_enable_done(struct MPT3SAS_ADAPTER *ioc, u16 smid,
u8 msix_index, u32 reply);
void *mpt3sas_base_get_reply_virt_addr(struct MPT3SAS_ADAPTER *ioc,
u32 phys_addr);
u32 mpt3sas_base_get_iocstate(struct MPT3SAS_ADAPTER *ioc, int cooked);
void mpt3sas_base_fault_info(struct MPT3SAS_ADAPTER *ioc , u16 fault_code);
#define mpt3sas_print_fault_code(ioc, fault_code) …
void mpt3sas_base_coredump_info(struct MPT3SAS_ADAPTER *ioc, u16 fault_code);
#define mpt3sas_print_coredump_info(ioc, fault_code) …
int mpt3sas_base_wait_for_coredump_completion(struct MPT3SAS_ADAPTER *ioc,
const char *caller);
int mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
Mpi2SasIoUnitControlReply_t *mpi_reply,
Mpi2SasIoUnitControlRequest_t *mpi_request);
int mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
Mpi2SepReply_t *mpi_reply, Mpi2SepRequest_t *mpi_request);
void mpt3sas_base_validate_event_type(struct MPT3SAS_ADAPTER *ioc,
u32 *event_type);
void mpt3sas_halt_firmware(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_update_missing_delay(struct MPT3SAS_ADAPTER *ioc,
u16 device_missing_delay, u8 io_missing_delay);
int mpt3sas_base_check_for_fault_and_issue_reset(
struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc);
void
mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc);
u8 mpt3sas_base_check_cmd_timeout(struct MPT3SAS_ADAPTER *ioc,
u8 status, void *mpi_request, int sz);
#define mpt3sas_check_cmd_timeout(ioc, status, mpi_request, sz, issue_reset) …
int mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int wait_count);
int mpt3sas_base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type);
void mpt3sas_base_free_irq(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_disable_msix(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num);
void mpt3sas_base_pause_mq_polling(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_base_resume_mq_polling(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_base_unlock_and_get_host_diagnostic(struct MPT3SAS_ADAPTER *ioc,
u32 *host_diagnostic);
void mpt3sas_base_lock_host_diagnostic(struct MPT3SAS_ADAPTER *ioc);
struct scsi_cmnd *mpt3sas_scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc,
u16 smid);
u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
u32 reply);
void mpt3sas_scsih_pre_reset_handler(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_scsih_clear_outstanding_scsi_tm_commands(
struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_scsih_reset_done_handler(struct MPT3SAS_ADAPTER *ioc);
int mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
uint channel, uint id, u64 lun, u8 type, u16 smid_task,
u16 msix_task, u8 timeout, u8 tr_method);
int mpt3sas_scsih_issue_locked_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
uint channel, uint id, u64 lun, u8 type, u16 smid_task,
u16 msix_task, u8 timeout, u8 tr_method);
void mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
void mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
void mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
struct hba_port *port);
void mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc,
u64 sas_address, struct hba_port *port);
u8 mpt3sas_check_for_pending_internal_cmds(struct MPT3SAS_ADAPTER *ioc,
u16 smid);
struct hba_port *
mpt3sas_get_port_by_id(struct MPT3SAS_ADAPTER *ioc, u8 port,
u8 bypass_dirty_port_flag);
struct _sas_node *mpt3sas_scsih_expander_find_by_handle(
struct MPT3SAS_ADAPTER *ioc, u16 handle);
struct _sas_node *mpt3sas_scsih_expander_find_by_sas_address(
struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
struct hba_port *port);
struct _sas_device *mpt3sas_get_sdev_by_addr(
struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
struct hba_port *port);
struct _sas_device *__mpt3sas_get_sdev_by_addr(
struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
struct hba_port *port);
struct _sas_device *mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc,
u16 handle);
struct _pcie_device *mpt3sas_get_pdev_by_handle(struct MPT3SAS_ADAPTER *ioc,
u16 handle);
void mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc);
struct _raid_device *
mpt3sas_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle);
void mpt3sas_scsih_change_queue_depth(struct scsi_device *sdev, int qdepth);
struct _sas_device *
__mpt3sas_get_sdev_by_rphy(struct MPT3SAS_ADAPTER *ioc, struct sas_rphy *rphy);
struct virtual_phy *
mpt3sas_get_vphy_by_phy(struct MPT3SAS_ADAPTER *ioc,
struct hba_port *port, u32 phy);
u8 mpt3sas_config_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
u32 reply);
int mpt3sas_config_get_number_hba_phys(struct MPT3SAS_ADAPTER *ioc,
u8 *num_phys);
int mpt3sas_config_get_manufacturing_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage0_t *config_page);
int mpt3sas_config_get_manufacturing_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage1_t *config_page);
int mpt3sas_config_get_manufacturing_pg7(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage7_t *config_page,
u16 sz);
int mpt3sas_config_get_manufacturing_pg10(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply,
struct Mpi2ManufacturingPage10_t *config_page);
int mpt3sas_config_get_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply,
struct Mpi2ManufacturingPage11_t *config_page);
int mpt3sas_config_set_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply,
struct Mpi2ManufacturingPage11_t *config_page);
int mpt3sas_config_get_bios_pg2(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2BiosPage2_t *config_page);
int mpt3sas_config_get_bios_pg3(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2BiosPage3_t *config_page);
int mpt3sas_config_set_bios_pg4(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2BiosPage4_t *config_page,
int sz_config_page);
int mpt3sas_config_get_bios_pg4(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2BiosPage4_t *config_page,
int sz_config_page);
int mpt3sas_config_get_iounit_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOUnitPage0_t *config_page);
int mpt3sas_config_get_sas_device_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage0_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_sas_device_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage1_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_pcie_device_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26PCIeDevicePage0_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_pcie_device_pg2(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26PCIeDevicePage2_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_pcie_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26PCIeIOUnitPage1_t *config_page,
u16 sz);
int mpt3sas_config_get_sas_iounit_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage0_t *config_page,
u16 sz);
int mpt3sas_config_get_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOUnitPage1_t *config_page);
int mpt3sas_config_get_iounit_pg3(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
int mpt3sas_config_set_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOUnitPage1_t *config_page);
int mpt3sas_config_get_iounit_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOUnitPage8_t *config_page);
int mpt3sas_config_get_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
u16 sz);
int mpt3sas_config_set_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
u16 sz);
int mpt3sas_config_get_ioc_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOCPage1_t *config_page);
int mpt3sas_config_set_ioc_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOCPage1_t *config_page);
int mpt3sas_config_get_ioc_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2IOCPage8_t *config_page);
int mpt3sas_config_get_expander_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage0_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_expander_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage1_t *config_page,
u32 phy_number, u16 handle);
int mpt3sas_config_get_enclosure_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2SasEnclosurePage0_t *config_page,
u32 form, u32 handle);
int mpt3sas_config_get_phy_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2SasPhyPage0_t *config_page, u32 phy_number);
int mpt3sas_config_get_phy_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
*mpi_reply, Mpi2SasPhyPage1_t *config_page, u32 phy_number);
int mpt3sas_config_get_raid_volume_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage1_t *config_page, u32 form,
u32 handle);
int mpt3sas_config_get_number_pds(struct MPT3SAS_ADAPTER *ioc, u16 handle,
u8 *num_pds);
int mpt3sas_config_get_raid_volume_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage0_t *config_page, u32 form,
u32 handle, u16 sz);
int mpt3sas_config_get_phys_disk_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi2RaidPhysDiskPage0_t *config_page,
u32 form, u32 form_specific);
int mpt3sas_config_get_volume_handle(struct MPT3SAS_ADAPTER *ioc, u16 pd_handle,
u16 *volume_handle);
int mpt3sas_config_get_volume_wwid(struct MPT3SAS_ADAPTER *ioc,
u16 volume_handle, u64 *wwid);
int
mpt3sas_config_get_driver_trigger_pg0(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26DriverTriggerPage0_t *config_page);
int
mpt3sas_config_get_driver_trigger_pg1(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26DriverTriggerPage1_t *config_page);
int
mpt3sas_config_get_driver_trigger_pg2(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26DriverTriggerPage2_t *config_page);
int
mpt3sas_config_get_driver_trigger_pg3(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26DriverTriggerPage3_t *config_page);
int
mpt3sas_config_get_driver_trigger_pg4(struct MPT3SAS_ADAPTER *ioc,
Mpi2ConfigReply_t *mpi_reply, Mpi26DriverTriggerPage4_t *config_page);
int
mpt3sas_config_update_driver_trigger_pg1(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_MASTER_TRIGGER_T *master_tg, bool set);
int
mpt3sas_config_update_driver_trigger_pg2(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_EVENT_TRIGGERS_T *event_tg, bool set);
int
mpt3sas_config_update_driver_trigger_pg3(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_SCSI_TRIGGERS_T *scsi_tg, bool set);
int
mpt3sas_config_update_driver_trigger_pg4(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_MPI_TRIGGERS_T *mpi_tg, bool set);
extern const struct attribute_group *mpt3sas_host_groups[];
extern const struct attribute_group *mpt3sas_dev_groups[];
void mpt3sas_ctl_init(ushort hbas_to_enumerate);
void mpt3sas_ctl_exit(ushort hbas_to_enumerate);
void mpt3sas_ctl_release(struct MPT3SAS_ADAPTER *ioc);
u8 mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
u32 reply);
void mpt3sas_ctl_pre_reset_handler(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_ctl_clear_outstanding_ioctls(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_ctl_reset_done_handler(struct MPT3SAS_ADAPTER *ioc);
u8 mpt3sas_ctl_event_callback(struct MPT3SAS_ADAPTER *ioc,
u8 msix_index, u32 reply);
void mpt3sas_ctl_add_to_event_log(struct MPT3SAS_ADAPTER *ioc,
Mpi2EventNotificationReply_t *mpi_reply);
void mpt3sas_enable_diag_buffer(struct MPT3SAS_ADAPTER *ioc,
u8 bits_to_register);
int mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
u8 *issue_reset);
extern struct scsi_transport_template *mpt3sas_transport_template;
u8 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
u32 reply);
struct _sas_port *mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc,
u16 handle, u64 sas_address, struct hba_port *port);
void mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
u64 sas_address_parent, struct hba_port *port);
int mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy
*mpt3sas_phy, Mpi2SasPhyPage0_t phy_pg0, struct device *parent_dev);
int mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc,
struct _sas_phy *mpt3sas_phy, Mpi2ExpanderPage1_t expander_pg1,
struct device *parent_dev);
void mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
u64 sas_address, u16 handle, u8 phy_number, u8 link_rate,
struct hba_port *port);
extern struct sas_function_template mpt3sas_transport_functions;
extern struct scsi_transport_template *mpt3sas_transport_template;
void
mpt3sas_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy);
void
mpt3sas_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
struct _sas_node *sas_node, struct _sas_phy *mpt3sas_phy,
u64 sas_address, struct hba_port *port);
void mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
void mpt3sas_process_trigger_data(struct MPT3SAS_ADAPTER *ioc,
struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
void mpt3sas_trigger_master(struct MPT3SAS_ADAPTER *ioc,
u32 trigger_bitmask);
void mpt3sas_trigger_event(struct MPT3SAS_ADAPTER *ioc, u16 event,
u16 log_entry_qualifier);
void mpt3sas_trigger_scsi(struct MPT3SAS_ADAPTER *ioc, u8 sense_key,
u8 asc, u8 ascq);
void mpt3sas_trigger_mpi(struct MPT3SAS_ADAPTER *ioc, u16 ioc_status,
u32 loginfo);
u8 mpt3sas_get_num_volumes(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
struct _raid_device *raid_device);
void
mpt3sas_setup_direct_io(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
struct _raid_device *raid_device, Mpi25SCSIIORequest_t *mpi_request);
void mpt3sas_setup_debugfs(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_destroy_debugfs(struct MPT3SAS_ADAPTER *ioc);
void mpt3sas_init_debugfs(void);
void mpt3sas_exit_debugfs(void);
static inline int
mpt3sas_scsih_is_pcie_scsi_device(u32 device_info)
{ … }
#endif