#ifndef LSI_MEGARAID_SAS_H
#define LSI_MEGARAID_SAS_H
#include <scsi/scsi_cmnd.h>
#define MEGASAS_VERSION …
#define MEGASAS_RELDATE …
#define MEGASAS_MSIX_NAME_LEN …
#define PCI_DEVICE_ID_LSI_SAS1078R …
#define PCI_DEVICE_ID_LSI_SAS1078DE …
#define PCI_DEVICE_ID_LSI_VERDE_ZCR …
#define PCI_DEVICE_ID_LSI_SAS1078GEN2 …
#define PCI_DEVICE_ID_LSI_SAS0079GEN2 …
#define PCI_DEVICE_ID_LSI_SAS0073SKINNY …
#define PCI_DEVICE_ID_LSI_SAS0071SKINNY …
#define PCI_DEVICE_ID_LSI_FUSION …
#define PCI_DEVICE_ID_LSI_PLASMA …
#define PCI_DEVICE_ID_LSI_INVADER …
#define PCI_DEVICE_ID_LSI_FURY …
#define PCI_DEVICE_ID_LSI_INTRUDER …
#define PCI_DEVICE_ID_LSI_INTRUDER_24 …
#define PCI_DEVICE_ID_LSI_CUTLASS_52 …
#define PCI_DEVICE_ID_LSI_CUTLASS_53 …
#define PCI_DEVICE_ID_LSI_VENTURA …
#define PCI_DEVICE_ID_LSI_CRUSADER …
#define PCI_DEVICE_ID_LSI_HARPOON …
#define PCI_DEVICE_ID_LSI_TOMCAT …
#define PCI_DEVICE_ID_LSI_VENTURA_4PORT …
#define PCI_DEVICE_ID_LSI_CRUSADER_4PORT …
#define PCI_DEVICE_ID_LSI_AERO_10E1 …
#define PCI_DEVICE_ID_LSI_AERO_10E2 …
#define PCI_DEVICE_ID_LSI_AERO_10E5 …
#define PCI_DEVICE_ID_LSI_AERO_10E6 …
#define PCI_DEVICE_ID_LSI_AERO_10E0 …
#define PCI_DEVICE_ID_LSI_AERO_10E3 …
#define PCI_DEVICE_ID_LSI_AERO_10E4 …
#define PCI_DEVICE_ID_LSI_AERO_10E7 …
#define MEGARAID_INTEL_RS3DC080_SSDID …
#define MEGARAID_INTEL_RS3DC040_SSDID …
#define MEGARAID_INTEL_RS3SC008_SSDID …
#define MEGARAID_INTEL_RS3MC044_SSDID …
#define MEGARAID_INTEL_RS3WC080_SSDID …
#define MEGARAID_INTEL_RS3WC040_SSDID …
#define MEGARAID_INTEL_RMS3BC160_SSDID …
#define MEGARAID_INTRUDER_SSDID1 …
#define MEGARAID_INTRUDER_SSDID2 …
#define MEGARAID_INTRUDER_SSDID3 …
#define MEGARAID_INTEL_RS3DC080_BRANDING …
#define MEGARAID_INTEL_RS3DC040_BRANDING …
#define MEGARAID_INTEL_RS3SC008_BRANDING …
#define MEGARAID_INTEL_RS3MC044_BRANDING …
#define MEGARAID_INTEL_RS3WC080_BRANDING …
#define MEGARAID_INTEL_RS3WC040_BRANDING …
#define MEGARAID_INTEL_RMS3BC160_BRANDING …
#define MFI_STATE_MASK …
#define MFI_STATE_UNDEFINED …
#define MFI_STATE_BB_INIT …
#define MFI_STATE_FW_INIT …
#define MFI_STATE_WAIT_HANDSHAKE …
#define MFI_STATE_FW_INIT_2 …
#define MFI_STATE_DEVICE_SCAN …
#define MFI_STATE_BOOT_MESSAGE_PENDING …
#define MFI_STATE_FLUSH_CACHE …
#define MFI_STATE_READY …
#define MFI_STATE_OPERATIONAL …
#define MFI_STATE_FAULT …
#define MFI_STATE_FORCE_OCR …
#define MFI_STATE_DMADONE …
#define MFI_STATE_CRASH_DUMP_DONE …
#define MFI_RESET_REQUIRED …
#define MFI_RESET_ADAPTER …
#define MEGAMFI_FRAME_SIZE …
#define MFI_STATE_FAULT_CODE …
#define MFI_STATE_FAULT_SUBCODE …
#define WRITE_SEQUENCE_OFFSET …
#define HOST_DIAGNOSTIC_OFFSET …
#define DIAG_WRITE_ENABLE …
#define DIAG_RESET_ADAPTER …
#define MFI_ADP_RESET …
#define MFI_INIT_ABORT …
#define MFI_INIT_READY …
#define MFI_INIT_MFIMODE …
#define MFI_INIT_CLEAR_HANDSHAKE …
#define MFI_INIT_HOTPLUG …
#define MFI_STOP_ADP …
#define MFI_RESET_FLAGS …
#define MFI_ADP_TRIGGER_SNAP_DUMP …
#define MPI2_IOCINIT_MSGFLAG_RDPQ_ARRAY_MODE …
#define MFI_FRAME_POST_IN_REPLY_QUEUE …
#define MFI_FRAME_DONT_POST_IN_REPLY_QUEUE …
#define MFI_FRAME_SGL32 …
#define MFI_FRAME_SGL64 …
#define MFI_FRAME_SENSE32 …
#define MFI_FRAME_SENSE64 …
#define MFI_FRAME_DIR_NONE …
#define MFI_FRAME_DIR_WRITE …
#define MFI_FRAME_DIR_READ …
#define MFI_FRAME_DIR_BOTH …
#define MFI_FRAME_IEEE …
#define DRV_DCMD_POLLED_MODE …
#define DRV_DCMD_SKIP_REFIRE …
#define MFI_CMD_STATUS_POLL_MODE …
enum MFI_CMD_OP { … };
#define MR_DCMD_CTRL_GET_INFO …
#define MR_DCMD_LD_GET_LIST …
#define MR_DCMD_LD_LIST_QUERY …
#define MR_DCMD_CTRL_CACHE_FLUSH …
#define MR_FLUSH_CTRL_CACHE …
#define MR_FLUSH_DISK_CACHE …
#define MR_DCMD_CTRL_SHUTDOWN …
#define MR_DCMD_HIBERNATE_SHUTDOWN …
#define MR_ENABLE_DRIVE_SPINDOWN …
#define MR_DCMD_CTRL_EVENT_GET_INFO …
#define MR_DCMD_CTRL_EVENT_GET …
#define MR_DCMD_CTRL_EVENT_WAIT …
#define MR_DCMD_LD_GET_PROPERTIES …
#define MR_DCMD_CLUSTER …
#define MR_DCMD_CLUSTER_RESET_ALL …
#define MR_DCMD_CLUSTER_RESET_LD …
#define MR_DCMD_PD_LIST_QUERY …
#define MR_DCMD_CTRL_SET_CRASH_DUMP_PARAMS …
#define MR_DRIVER_SET_APP_CRASHDUMP_MODE …
#define MR_DCMD_PD_GET_INFO …
extern u8 MR_ValidateMapInfo(struct megasas_instance *instance, u64 map_id);
enum MFI_STAT { … };
enum mfi_evt_class { … };
#define MAX_CRASH_DUMP_SIZE …
#define CRASH_DMA_BUF_SIZE …
enum MR_FW_CRASH_DUMP_STATE { … };
enum _MR_CRASH_BUF_STATUS { … };
#define MFI_MBOX_SIZE …
enum MR_EVT_CLASS { … };
enum MR_EVT_LOCALE { … };
enum MR_EVT_ARGS { … };
#define SGE_BUFFER_SIZE …
#define MEGASAS_CLUSTER_ID_SIZE …
enum MR_PD_QUERY_TYPE { … };
enum MR_LD_QUERY_TYPE { … };
#define MR_EVT_CFG_CLEARED …
#define MR_EVT_LD_STATE_CHANGE …
#define MR_EVT_PD_INSERTED …
#define MR_EVT_PD_REMOVED …
#define MR_EVT_LD_CREATED …
#define MR_EVT_LD_DELETED …
#define MR_EVT_FOREIGN_CFG_IMPORTED …
#define MR_EVT_LD_OFFLINE …
#define MR_EVT_CTRL_HOST_BUS_SCAN_REQUESTED …
#define MR_EVT_CTRL_PROP_CHANGED …
enum MR_PD_STATE { … };
MR_PD_REF;
MR_PD_DDF_TYPE __packed;
MR_PROGRESS __packed;
struct MR_PD_PROGRESS { … } __packed;
struct MR_PD_INFO { … } __packed;
struct MR_TARGET_PROPERTIES { … } __packed;
struct MR_PD_ADDRESS { … } __packed;
struct MR_PD_LIST { … } __packed;
struct megasas_pd_list { … } __packed;
MR_LD_REF __packed;
struct MR_LD_LIST { … } __packed;
struct MR_LD_TARGETID_LIST { … };
struct MR_HOST_DEVICE_LIST_ENTRY { … } __packed;
struct MR_HOST_DEVICE_LIST { … } __packed;
#define HOST_DEVICE_LIST_SZ …
struct megasas_ctrl_prop { … } __packed;
struct megasas_ctrl_info { … } __packed;
#define MEGASAS_MAX_PD_CHANNELS …
#define MEGASAS_MAX_LD_CHANNELS …
#define MEGASAS_MAX_CHANNELS …
#define MEGASAS_MAX_DEV_PER_CHANNEL …
#define MEGASAS_DEFAULT_INIT_ID …
#define MEGASAS_MAX_LUN …
#define MEGASAS_DEFAULT_CMD_PER_LUN …
#define MEGASAS_MAX_PD …
#define MEGASAS_MAX_LD_IDS …
#define MEGASAS_MAX_SUPPORTED_LD_IDS …
#define MEGASAS_MAX_SECTORS …
#define MEGASAS_MAX_SECTORS_IEEE …
#define MEGASAS_DBG_LVL …
#define MEGASAS_FW_BUSY …
#define OCR_DEBUG …
#define TM_DEBUG …
#define LD_PD_DEBUG …
#define SCAN_PD_CHANNEL …
#define SCAN_VD_CHANNEL …
#define MEGASAS_KDUMP_QUEUE_DEPTH …
#define MR_LARGE_IO_MIN_SIZE …
#define MR_R1_LDIO_PIGGYBACK_DEFAULT …
enum MR_SCSI_CMD_TYPE { … };
enum DCMD_TIMEOUT_ACTION { … };
enum FW_BOOT_CONTEXT { … };
#define IO_FRAME …
#define PTHRU_FRAME …
#define MEGASAS_RESET_WAIT_TIME …
#define MEGASAS_INTERNAL_CMD_WAIT_TIME …
#define MEGASAS_RESET_NOTICE_INTERVAL …
#define MEGASAS_IOCTL_CMD …
#define MEGASAS_DEFAULT_CMD_TIMEOUT …
#define MEGASAS_THROTTLE_QUEUE_DEPTH …
#define MEGASAS_DEFAULT_TM_TIMEOUT …
#define MEGASAS_INT_CMDS …
#define MEGASAS_SKINNY_INT_CMDS …
#define MEGASAS_FUSION_INTERNAL_CMDS …
#define MEGASAS_FUSION_IOCTL_CMDS …
#define MEGASAS_MFI_IOCTL_CMDS …
#define MEGASAS_MAX_MSIX_QUEUES …
#define IS_DMA64 …
#define MFI_XSCALE_OMR0_CHANGE_INTERRUPT …
#define MFI_INTR_FLAG_REPLY_MESSAGE …
#define MFI_INTR_FLAG_FIRMWARE_STATE_CHANGE …
#define MFI_G2_OUTBOUND_DOORBELL_CHANGE_INTERRUPT …
#define MFI_OB_INTR_STATUS_MASK …
#define MFI_POLL_TIMEOUT_SECS …
#define MFI_IO_TIMEOUT_SECS …
#define MEGASAS_SRIOV_HEARTBEAT_INTERVAL_VF …
#define MEGASAS_OCR_SETTLE_TIME_VF …
#define MEGASAS_SRIOV_MAX_RESET_TRIES_VF …
#define MEGASAS_ROUTINE_WAIT_TIME_VF …
#define MFI_REPLY_1078_MESSAGE_INTERRUPT …
#define MFI_REPLY_GEN2_MESSAGE_INTERRUPT …
#define MFI_GEN2_ENABLE_INTERRUPT_MASK …
#define MFI_REPLY_SKINNY_MESSAGE_INTERRUPT …
#define MFI_SKINNY_ENABLE_INTERRUPT_MASK …
#define MFI_1068_PCSR_OFFSET …
#define MFI_1068_FW_HANDSHAKE_OFFSET …
#define MFI_1068_FW_READY …
#define MR_MAX_REPLY_QUEUES_OFFSET …
#define MR_MAX_REPLY_QUEUES_EXT_OFFSET …
#define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT …
#define MR_MAX_MSIX_REG_ARRAY …
#define MR_RDPQ_MODE_OFFSET …
#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT …
#define MR_MAX_RAID_MAP_SIZE_MASK …
#define MR_MIN_MAP_SIZE …
#define MR_CAN_HANDLE_SYNC_CACHE_OFFSET …
#define MR_ATOMIC_DESCRIPTOR_SUPPORT_OFFSET …
#define MR_CAN_HANDLE_64_BIT_DMA_OFFSET …
#define MR_INTR_COALESCING_SUPPORT_OFFSET …
#define MEGASAS_WATCHDOG_THREAD_INTERVAL …
#define MEGASAS_WAIT_FOR_NEXT_DMA_MSECS …
#define MEGASAS_WATCHDOG_WAIT_COUNT …
enum MR_ADAPTER_TYPE { … };
struct megasas_register_set { … } __attribute__ ((packed));
struct megasas_sge32 { … } __attribute__ ((packed));
struct megasas_sge64 { … } __attribute__ ((packed));
struct megasas_sge_skinny { … } __packed;
megasas_sgl __attribute__ ((packed));
struct megasas_header { … } __attribute__ ((packed));
megasas_sgl_frame __attribute__ ((packed));
MFI_CAPABILITIES;
struct megasas_init_frame { … } __attribute__ ((packed));
struct megasas_init_queue_info { … } __attribute__ ((packed));
struct megasas_io_frame { … } __attribute__ ((packed));
struct megasas_pthru_frame { … } __attribute__ ((packed));
struct megasas_dcmd_frame { … } __attribute__ ((packed));
struct megasas_abort_frame { … } __attribute__ ((packed));
struct megasas_smp_frame { … } __attribute__ ((packed));
struct megasas_stp_frame { … } __attribute__ ((packed));
megasas_frame;
struct MR_PRIV_DEVICE { … };
struct megasas_cmd;
megasas_evt_class_locale __attribute__ ((packed));
struct megasas_evt_log_info { … } __attribute__ ((packed));
struct megasas_progress { … } __attribute__ ((packed));
struct megasas_evtarg_ld { … } __attribute__ ((packed));
struct megasas_evtarg_pd { … } __attribute__ ((packed));
struct megasas_evt_detail { … } __attribute__ ((packed));
struct megasas_aen_event { … };
struct megasas_irq_context { … };
struct MR_DRV_SYSTEM_INFO { … };
enum MR_PD_TYPE { … };
#define MEGASAS_SATA_QD …
#define MEGASAS_SAS_QD …
#define MEGASAS_DEFAULT_PD_QD …
#define MEGASAS_NVME_QD …
#define MR_DEFAULT_NVME_PAGE_SIZE …
#define MR_DEFAULT_NVME_PAGE_SHIFT …
#define MR_DEFAULT_NVME_MDTS_KB …
#define MR_NVME_PAGE_SIZE_MASK …
#define MR_HIGH_IOPS_QUEUE_COUNT …
#define MR_DEVICE_HIGH_IOPS_DEPTH …
#define MR_HIGH_IOPS_BATCH_COUNT …
enum MR_PERF_MODE { … };
#define MEGASAS_PERF_MODE_2STR(mode) …
enum MEGASAS_LD_TARGET_ID_STATUS { … };
#define MEGASAS_TARGET_ID(sdev) …
struct megasas_instance { … };
struct MR_LD_VF_MAP { … };
struct MR_LD_VF_AFFILIATION { … };
#define IOV_111_OFFSET …
#define MAX_VIRTUAL_FUNCTIONS …
#define MR_LD_ACCESS_HIDDEN …
struct IOV_111 { … };
struct MR_LD_VF_MAP_111 { … };
struct MR_LD_VF_AFFILIATION_111 { … };
struct MR_CTRL_HB_HOST_MEM { … };
enum { … };
struct megasas_instance_template { … };
#define MEGASAS_IS_LOGICAL(sdev) …
#define MEGASAS_IS_LUN_VALID(sdev) …
#define MEGASAS_DEV_INDEX(scp) …
#define MEGASAS_PD_INDEX(scp) …
struct megasas_cmd { … };
struct megasas_cmd_priv { … };
static inline struct megasas_cmd_priv *megasas_priv(struct scsi_cmnd *cmd)
{ … }
#define MAX_MGMT_ADAPTERS …
#define MAX_IOCTL_SGE …
struct megasas_iocpacket { … } __attribute__ ((packed));
struct megasas_aen { … } __attribute__ ((packed));
struct compat_megasas_iocpacket { … } __attribute__ ((packed));
#define MEGASAS_IOC_FIRMWARE32 …
#define MEGASAS_IOC_FIRMWARE …
#define MEGASAS_IOC_GET_AEN …
struct megasas_mgmt_info { … };
enum MEGASAS_OCR_CAUSE { … };
enum DCMD_RETURN_STATUS { … };
u8
MR_BuildRaidContext(struct megasas_instance *instance,
struct IO_REQUEST_INFO *io_info,
struct RAID_CONTEXT *pRAID_Context,
struct MR_DRV_RAID_MAP_ALL *map, u8 **raidLUN);
u16 MR_TargetIdToLdGet(u32 ldTgtId, struct MR_DRV_RAID_MAP_ALL *map);
struct MR_LD_RAID *MR_LdRaidGet(u32 ld, struct MR_DRV_RAID_MAP_ALL *map);
u16 MR_ArPdGet(u32 ar, u32 arm, struct MR_DRV_RAID_MAP_ALL *map);
u16 MR_LdSpanArrayGet(u32 ld, u32 span, struct MR_DRV_RAID_MAP_ALL *map);
__le16 MR_PdDevHandleGet(u32 pd, struct MR_DRV_RAID_MAP_ALL *map);
u16 MR_GetLDTgtId(u32 ld, struct MR_DRV_RAID_MAP_ALL *map);
__le16 get_updated_dev_handle(struct megasas_instance *instance,
struct LD_LOAD_BALANCE_INFO *lbInfo,
struct IO_REQUEST_INFO *in_info,
struct MR_DRV_RAID_MAP_ALL *drv_map);
void mr_update_load_balance_params(struct MR_DRV_RAID_MAP_ALL *map,
struct LD_LOAD_BALANCE_INFO *lbInfo);
int megasas_get_ctrl_info(struct megasas_instance *instance);
int
megasas_sync_pd_seq_num(struct megasas_instance *instance, bool pend);
void megasas_set_dynamic_target_properties(struct scsi_device *sdev,
struct queue_limits *lim, bool is_target_prop);
int megasas_get_target_prop(struct megasas_instance *instance,
struct scsi_device *sdev);
void megasas_get_snapdump_properties(struct megasas_instance *instance);
int megasas_set_crash_dump_params(struct megasas_instance *instance,
u8 crash_buf_state);
void megasas_free_host_crash_buffer(struct megasas_instance *instance);
void megasas_return_cmd_fusion(struct megasas_instance *instance,
struct megasas_cmd_fusion *cmd);
int megasas_issue_blocked_cmd(struct megasas_instance *instance,
struct megasas_cmd *cmd, int timeout);
void __megasas_return_cmd(struct megasas_instance *instance,
struct megasas_cmd *cmd);
void megasas_return_mfi_mpt_pthr(struct megasas_instance *instance,
struct megasas_cmd *cmd_mfi, struct megasas_cmd_fusion *cmd_fusion);
int megasas_cmd_type(struct scsi_cmnd *cmd);
void megasas_setup_jbod_map(struct megasas_instance *instance);
void megasas_update_sdev_properties(struct scsi_device *sdev);
int megasas_reset_fusion(struct Scsi_Host *shost, int reason);
int megasas_task_abort_fusion(struct scsi_cmnd *scmd);
int megasas_reset_target_fusion(struct scsi_cmnd *scmd);
u32 mega_mod64(u64 dividend, u32 divisor);
int megasas_alloc_fusion_context(struct megasas_instance *instance);
void megasas_free_fusion_context(struct megasas_instance *instance);
int megasas_fusion_start_watchdog(struct megasas_instance *instance);
void megasas_fusion_stop_watchdog(struct megasas_instance *instance);
void megasas_set_dma_settings(struct megasas_instance *instance,
struct megasas_dcmd_frame *dcmd,
dma_addr_t dma_addr, u32 dma_len);
int megasas_adp_reset_wait_for_ready(struct megasas_instance *instance,
bool do_adp_reset,
int ocr_context);
int megasas_irqpoll(struct irq_poll *irqpoll, int budget);
void megasas_dump_fusion_io(struct scsi_cmnd *scmd);
u32 megasas_readl(struct megasas_instance *instance,
const volatile void __iomem *addr);
struct megasas_cmd *megasas_get_cmd(struct megasas_instance *instance);
void megasas_return_cmd(struct megasas_instance *instance,
struct megasas_cmd *cmd);
int megasas_issue_polled(struct megasas_instance *instance,
struct megasas_cmd *cmd);
void megaraid_sas_kill_hba(struct megasas_instance *instance);
void megasas_check_and_restore_queue_depth(struct megasas_instance *instance);
void megasas_start_timer(struct megasas_instance *instance);
int megasas_sriov_start_heartbeat(struct megasas_instance *instance,
int initial);
int megasas_alloc_cmds(struct megasas_instance *instance);
void megasas_free_cmds(struct megasas_instance *instance);
void megasas_init_debugfs(void);
void megasas_exit_debugfs(void);
void megasas_setup_debugfs(struct megasas_instance *instance);
void megasas_destroy_debugfs(struct megasas_instance *instance);
int megasas_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num);
#endif