1f5e6d5a3SSumit Saxena /* SPDX-License-Identifier: GPL-2.0-or-later WITH Linux-syscall-note */ 2f5e6d5a3SSumit Saxena /* 3f5e6d5a3SSumit Saxena * Driver for Broadcom MPI3 Storage Controllers 4f5e6d5a3SSumit Saxena * 5f5e6d5a3SSumit Saxena * Copyright (C) 2017-2022 Broadcom Inc. 6f5e6d5a3SSumit Saxena * (mailto: mpi3mr-linuxdrv.pdl@broadcom.com) 7f5e6d5a3SSumit Saxena * 8f5e6d5a3SSumit Saxena */ 9f5e6d5a3SSumit Saxena 10f5e6d5a3SSumit Saxena #ifndef SCSI_BSG_MPI3MR_H_INCLUDED 11f5e6d5a3SSumit Saxena #define SCSI_BSG_MPI3MR_H_INCLUDED 12f5e6d5a3SSumit Saxena 13f5e6d5a3SSumit Saxena #include <linux/types.h> 14f5e6d5a3SSumit Saxena 15f5e6d5a3SSumit Saxena /* Definitions for BSG commands */ 16f5e6d5a3SSumit Saxena #define MPI3MR_IOCTL_VERSION 0x06 17f5e6d5a3SSumit Saxena 18f5e6d5a3SSumit Saxena #define MPI3MR_APP_DEFAULT_TIMEOUT (60) /*seconds*/ 19f5e6d5a3SSumit Saxena 20f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPTYPE_UNKNOWN 0 21f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPTYPE_AVGFAMILY 1 22f5e6d5a3SSumit Saxena 23f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPSTATE_UNKNOWN 0 24f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPSTATE_OPERATIONAL 1 25f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPSTATE_FAULT 2 26f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPSTATE_IN_RESET 3 27f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPSTATE_UNRECOVERABLE 4 28f5e6d5a3SSumit Saxena 29f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPRESET_UNKNOWN 0 30f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPRESET_SOFT 1 31f5e6d5a3SSumit Saxena #define MPI3MR_BSG_ADPRESET_DIAG_FAULT 2 32f5e6d5a3SSumit Saxena 33f5e6d5a3SSumit Saxena #define MPI3MR_BSG_LOGDATA_MAX_ENTRIES 400 34f5e6d5a3SSumit Saxena #define MPI3MR_BSG_LOGDATA_ENTRY_HEADER_SZ 4 35f5e6d5a3SSumit Saxena 36f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_UNKNOWN 0 37f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_ADPINFO 1 38f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_ADPRESET 2 39f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_ALLTGTDEVINFO 4 40f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_GETCHGCNT 5 41f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_LOGDATAENABLE 6 42f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_PELENABLE 7 43f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_GETLOGDATA 8 44f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_QUERY_HDB 9 45f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_REPOST_HDB 10 46f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_UPLOAD_HDB 11 47f5e6d5a3SSumit Saxena #define MPI3MR_DRVBSG_OPCODE_REFRESH_HDB_TRIGGERS 12 48f5e6d5a3SSumit Saxena 49f5e6d5a3SSumit Saxena 50f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_UNKNOWN 0 51f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_RAIDMGMT_CMD 1 52f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_RAIDMGMT_RESP 2 53f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_DATA_IN 3 54f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_DATA_OUT 4 55f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_MPI_REPLY 5 56f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_ERR_RESPONSE 6 57f5e6d5a3SSumit Saxena #define MPI3MR_BSG_BUFTYPE_MPI_REQUEST 0xFE 58f5e6d5a3SSumit Saxena 59f5e6d5a3SSumit Saxena #define MPI3MR_BSG_MPI_REPLY_BUFTYPE_UNKNOWN 0 60f5e6d5a3SSumit Saxena #define MPI3MR_BSG_MPI_REPLY_BUFTYPE_STATUS 1 61f5e6d5a3SSumit Saxena #define MPI3MR_BSG_MPI_REPLY_BUFTYPE_ADDRESS 2 62f5e6d5a3SSumit Saxena 63f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFTYPE_UNKNOWN 0 64f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFTYPE_TRACE 1 65f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFTYPE_FIRMWARE 2 66f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFTYPE_RESERVED 3 67f5e6d5a3SSumit Saxena 68f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFSTATUS_UNKNOWN 0 69f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFSTATUS_NOT_ALLOCATED 1 70f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFSTATUS_POSTED_UNPAUSED 2 71f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFSTATUS_POSTED_PAUSED 3 72f5e6d5a3SSumit Saxena #define MPI3MR_HDB_BUFSTATUS_RELEASED 4 73f5e6d5a3SSumit Saxena 74f5e6d5a3SSumit Saxena #define MPI3MR_HDB_TRIGGER_TYPE_UNKNOWN 0 75f5e6d5a3SSumit Saxena #define MPI3MR_HDB_TRIGGER_TYPE_DIAGFAULT 1 76f5e6d5a3SSumit Saxena #define MPI3MR_HDB_TRIGGER_TYPE_ELEMENT 2 77f5e6d5a3SSumit Saxena #define MPI3MR_HDB_TRIGGER_TYPE_MASTER 3 78f5e6d5a3SSumit Saxena 79f5e6d5a3SSumit Saxena 80f5e6d5a3SSumit Saxena /* Supported BSG commands */ 81f5e6d5a3SSumit Saxena enum command { 82f5e6d5a3SSumit Saxena MPI3MR_DRV_CMD = 1, 83f5e6d5a3SSumit Saxena MPI3MR_MPT_CMD = 2, 84f5e6d5a3SSumit Saxena }; 85f5e6d5a3SSumit Saxena 86f5e6d5a3SSumit Saxena /** 87f5e6d5a3SSumit Saxena * struct mpi3_driver_info_layout - Information about driver 88f5e6d5a3SSumit Saxena * 89f5e6d5a3SSumit Saxena * @information_length: Length of this structure in bytes 90f5e6d5a3SSumit Saxena * @driver_signature: Driver Vendor name 91f5e6d5a3SSumit Saxena * @os_name: Operating System Name 92f5e6d5a3SSumit Saxena * @driver_name: Driver name 93f5e6d5a3SSumit Saxena * @driver_version: Driver version 94f5e6d5a3SSumit Saxena * @driver_release_date: Driver release date 95f5e6d5a3SSumit Saxena * @driver_capabilities: Driver capabilities 96f5e6d5a3SSumit Saxena */ 97f5e6d5a3SSumit Saxena struct mpi3_driver_info_layout { 98f5e6d5a3SSumit Saxena __le32 information_length; 99f5e6d5a3SSumit Saxena __u8 driver_signature[12]; 100f5e6d5a3SSumit Saxena __u8 os_name[16]; 101f5e6d5a3SSumit Saxena __u8 os_version[12]; 102f5e6d5a3SSumit Saxena __u8 driver_name[20]; 103f5e6d5a3SSumit Saxena __u8 driver_version[32]; 104f5e6d5a3SSumit Saxena __u8 driver_release_date[20]; 105f5e6d5a3SSumit Saxena __le32 driver_capabilities; 106f5e6d5a3SSumit Saxena }; 107f5e6d5a3SSumit Saxena 108f5e6d5a3SSumit Saxena /** 109f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_in_adpinfo - Adapter information request 110f5e6d5a3SSumit Saxena * data returned by the driver. 111f5e6d5a3SSumit Saxena * 112f5e6d5a3SSumit Saxena * @adp_type: Adapter type 113f5e6d5a3SSumit Saxena * @rsvd1: Reserved 114f5e6d5a3SSumit Saxena * @pci_dev_id: PCI device ID of the adapter 115f5e6d5a3SSumit Saxena * @pci_dev_hw_rev: PCI revision of the adapter 116f5e6d5a3SSumit Saxena * @pci_subsys_dev_id: PCI subsystem device ID of the adapter 117f5e6d5a3SSumit Saxena * @pci_subsys_ven_id: PCI subsystem vendor ID of the adapter 118f5e6d5a3SSumit Saxena * @pci_dev: PCI device 119f5e6d5a3SSumit Saxena * @pci_func: PCI function 120f5e6d5a3SSumit Saxena * @pci_bus: PCI bus 121f5e6d5a3SSumit Saxena * @rsvd2: Reserved 122f5e6d5a3SSumit Saxena * @pci_seg_id: PCI segment ID 123f5e6d5a3SSumit Saxena * @app_intfc_ver: version of the application interface definition 124f5e6d5a3SSumit Saxena * @rsvd3: Reserved 125f5e6d5a3SSumit Saxena * @rsvd4: Reserved 126f5e6d5a3SSumit Saxena * @rsvd5: Reserved 127f5e6d5a3SSumit Saxena * @driver_info: Driver Information (Version/Name) 128f5e6d5a3SSumit Saxena */ 129f5e6d5a3SSumit Saxena struct mpi3mr_bsg_in_adpinfo { 130f5e6d5a3SSumit Saxena __u32 adp_type; 131f5e6d5a3SSumit Saxena __u32 rsvd1; 132f5e6d5a3SSumit Saxena __u32 pci_dev_id; 133f5e6d5a3SSumit Saxena __u32 pci_dev_hw_rev; 134f5e6d5a3SSumit Saxena __u32 pci_subsys_dev_id; 135f5e6d5a3SSumit Saxena __u32 pci_subsys_ven_id; 136f5e6d5a3SSumit Saxena __u32 pci_dev:5; 137f5e6d5a3SSumit Saxena __u32 pci_func:3; 138f5e6d5a3SSumit Saxena __u32 pci_bus:8; 139f5e6d5a3SSumit Saxena __u16 rsvd2; 140f5e6d5a3SSumit Saxena __u32 pci_seg_id; 141f5e6d5a3SSumit Saxena __u32 app_intfc_ver; 142f5e6d5a3SSumit Saxena __u8 adp_state; 143f5e6d5a3SSumit Saxena __u8 rsvd3; 144f5e6d5a3SSumit Saxena __u16 rsvd4; 145f5e6d5a3SSumit Saxena __u32 rsvd5[2]; 146f5e6d5a3SSumit Saxena struct mpi3_driver_info_layout driver_info; 147f5e6d5a3SSumit Saxena }; 148f5e6d5a3SSumit Saxena 149f5e6d5a3SSumit Saxena /** 150f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_adp_reset - Adapter reset request 151f5e6d5a3SSumit Saxena * payload data to the driver. 152f5e6d5a3SSumit Saxena * 153f5e6d5a3SSumit Saxena * @reset_type: Reset type 154f5e6d5a3SSumit Saxena * @rsvd1: Reserved 155f5e6d5a3SSumit Saxena * @rsvd2: Reserved 156f5e6d5a3SSumit Saxena */ 157f5e6d5a3SSumit Saxena struct mpi3mr_bsg_adp_reset { 158f5e6d5a3SSumit Saxena __u8 reset_type; 159f5e6d5a3SSumit Saxena __u8 rsvd1; 160f5e6d5a3SSumit Saxena __u16 rsvd2; 161f5e6d5a3SSumit Saxena }; 162f5e6d5a3SSumit Saxena 163f5e6d5a3SSumit Saxena /** 164f5e6d5a3SSumit Saxena * struct mpi3mr_change_count - Topology change count 165f5e6d5a3SSumit Saxena * returned by the driver. 166f5e6d5a3SSumit Saxena * 167f5e6d5a3SSumit Saxena * @change_count: Topology change count 168f5e6d5a3SSumit Saxena * @rsvd: Reserved 169f5e6d5a3SSumit Saxena */ 170f5e6d5a3SSumit Saxena struct mpi3mr_change_count { 171f5e6d5a3SSumit Saxena __u16 change_count; 172f5e6d5a3SSumit Saxena __u16 rsvd; 173f5e6d5a3SSumit Saxena }; 174f5e6d5a3SSumit Saxena 175f5e6d5a3SSumit Saxena /** 176f5e6d5a3SSumit Saxena * struct mpi3mr_device_map_info - Target device mapping 177f5e6d5a3SSumit Saxena * information 178f5e6d5a3SSumit Saxena * 179f5e6d5a3SSumit Saxena * @handle: Firmware device handle 180f5e6d5a3SSumit Saxena * @perst_id: Persistent ID assigned by the firmware 181f5e6d5a3SSumit Saxena * @target_id: Target ID assigned by the driver 182f5e6d5a3SSumit Saxena * @bus_id: Bus ID assigned by the driver 183f5e6d5a3SSumit Saxena * @rsvd1: Reserved 184f5e6d5a3SSumit Saxena * @rsvd2: Reserved 185f5e6d5a3SSumit Saxena */ 186f5e6d5a3SSumit Saxena struct mpi3mr_device_map_info { 187f5e6d5a3SSumit Saxena __u16 handle; 188f5e6d5a3SSumit Saxena __u16 perst_id; 189f5e6d5a3SSumit Saxena __u32 target_id; 190f5e6d5a3SSumit Saxena __u8 bus_id; 191f5e6d5a3SSumit Saxena __u8 rsvd1; 192f5e6d5a3SSumit Saxena __u16 rsvd2; 193f5e6d5a3SSumit Saxena }; 194f5e6d5a3SSumit Saxena 195f5e6d5a3SSumit Saxena /** 196f5e6d5a3SSumit Saxena * struct mpi3mr_all_tgt_info - Target device mapping 197f5e6d5a3SSumit Saxena * information returned by the driver 198f5e6d5a3SSumit Saxena * 199f5e6d5a3SSumit Saxena * @num_devices: The number of devices in driver's inventory 200f5e6d5a3SSumit Saxena * @rsvd1: Reserved 201f5e6d5a3SSumit Saxena * @rsvd2: Reserved 202f5e6d5a3SSumit Saxena * @dmi: Variable length array of mapping information of targets 203f5e6d5a3SSumit Saxena */ 204f5e6d5a3SSumit Saxena struct mpi3mr_all_tgt_info { 205f5e6d5a3SSumit Saxena __u16 num_devices; 206f5e6d5a3SSumit Saxena __u16 rsvd1; 207f5e6d5a3SSumit Saxena __u32 rsvd2; 208f5e6d5a3SSumit Saxena struct mpi3mr_device_map_info dmi[1]; 209f5e6d5a3SSumit Saxena }; 210f5e6d5a3SSumit Saxena 211f5e6d5a3SSumit Saxena /** 212f5e6d5a3SSumit Saxena * struct mpi3mr_logdata_enable - Number of log data 213f5e6d5a3SSumit Saxena * entries saved by the driver returned as payload data for 214f5e6d5a3SSumit Saxena * enable logdata BSG request by the driver. 215f5e6d5a3SSumit Saxena * 216f5e6d5a3SSumit Saxena * @max_entries: Number of log data entries cached by the driver 217f5e6d5a3SSumit Saxena * @rsvd: Reserved 218f5e6d5a3SSumit Saxena */ 219f5e6d5a3SSumit Saxena struct mpi3mr_logdata_enable { 220f5e6d5a3SSumit Saxena __u16 max_entries; 221f5e6d5a3SSumit Saxena __u16 rsvd; 222f5e6d5a3SSumit Saxena }; 223f5e6d5a3SSumit Saxena 224f5e6d5a3SSumit Saxena /** 225f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_out_pel_enable - PEL enable request payload 226f5e6d5a3SSumit Saxena * data to the driver. 227f5e6d5a3SSumit Saxena * 228f5e6d5a3SSumit Saxena * @pel_locale: PEL locale to the firmware 229f5e6d5a3SSumit Saxena * @pel_class: PEL class to the firmware 230f5e6d5a3SSumit Saxena * @rsvd: Reserved 231f5e6d5a3SSumit Saxena */ 232f5e6d5a3SSumit Saxena struct mpi3mr_bsg_out_pel_enable { 233f5e6d5a3SSumit Saxena __u16 pel_locale; 234f5e6d5a3SSumit Saxena __u8 pel_class; 235f5e6d5a3SSumit Saxena __u8 rsvd; 236f5e6d5a3SSumit Saxena }; 237f5e6d5a3SSumit Saxena 238f5e6d5a3SSumit Saxena /** 239f5e6d5a3SSumit Saxena * struct mpi3mr_logdata_entry - Log data entry cached by the 240f5e6d5a3SSumit Saxena * driver. 241f5e6d5a3SSumit Saxena * 242f5e6d5a3SSumit Saxena * @valid_entry: Is the entry valid 243f5e6d5a3SSumit Saxena * @rsvd1: Reserved 244f5e6d5a3SSumit Saxena * @rsvd2: Reserved 245f5e6d5a3SSumit Saxena * @data: Variable length Log entry data 246f5e6d5a3SSumit Saxena */ 247f5e6d5a3SSumit Saxena struct mpi3mr_logdata_entry { 248f5e6d5a3SSumit Saxena __u8 valid_entry; 249f5e6d5a3SSumit Saxena __u8 rsvd1; 250f5e6d5a3SSumit Saxena __u16 rsvd2; 251f5e6d5a3SSumit Saxena __u8 data[1]; /* Variable length Array */ 252f5e6d5a3SSumit Saxena }; 253f5e6d5a3SSumit Saxena 254f5e6d5a3SSumit Saxena /** 255f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_in_log_data - Log data entries saved by 256f5e6d5a3SSumit Saxena * the driver returned as payload data for Get logdata request 257f5e6d5a3SSumit Saxena * by the driver. 258f5e6d5a3SSumit Saxena * 259f5e6d5a3SSumit Saxena * @entry: Variable length Log data entry array 260f5e6d5a3SSumit Saxena */ 261f5e6d5a3SSumit Saxena struct mpi3mr_bsg_in_log_data { 262f5e6d5a3SSumit Saxena struct mpi3mr_logdata_entry entry[1]; 263f5e6d5a3SSumit Saxena }; 264f5e6d5a3SSumit Saxena 265f5e6d5a3SSumit Saxena /** 266f5e6d5a3SSumit Saxena * struct mpi3mr_hdb_entry - host diag buffer entry. 267f5e6d5a3SSumit Saxena * 268f5e6d5a3SSumit Saxena * @buf_type: Buffer type 269f5e6d5a3SSumit Saxena * @status: Buffer status 270f5e6d5a3SSumit Saxena * @trigger_type: Trigger type 271f5e6d5a3SSumit Saxena * @rsvd1: Reserved 272f5e6d5a3SSumit Saxena * @size: Buffer size 273f5e6d5a3SSumit Saxena * @rsvd2: Reserved 274f5e6d5a3SSumit Saxena * @trigger_data: Trigger specific data 275f5e6d5a3SSumit Saxena * @rsvd3: Reserved 276f5e6d5a3SSumit Saxena * @rsvd4: Reserved 277f5e6d5a3SSumit Saxena */ 278f5e6d5a3SSumit Saxena struct mpi3mr_hdb_entry { 279f5e6d5a3SSumit Saxena __u8 buf_type; 280f5e6d5a3SSumit Saxena __u8 status; 281f5e6d5a3SSumit Saxena __u8 trigger_type; 282f5e6d5a3SSumit Saxena __u8 rsvd1; 283f5e6d5a3SSumit Saxena __u16 size; 284f5e6d5a3SSumit Saxena __u16 rsvd2; 285f5e6d5a3SSumit Saxena __u64 trigger_data; 286f5e6d5a3SSumit Saxena __u32 rsvd3; 287f5e6d5a3SSumit Saxena __u32 rsvd4; 288f5e6d5a3SSumit Saxena }; 289f5e6d5a3SSumit Saxena 290f5e6d5a3SSumit Saxena 291f5e6d5a3SSumit Saxena /** 292f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_in_hdb_status - This structure contains 293f5e6d5a3SSumit Saxena * return data for the BSG request to retrieve the number of host 294f5e6d5a3SSumit Saxena * diagnostic buffers supported by the driver and their current 295f5e6d5a3SSumit Saxena * status and additional status specific data if any in forms of 296f5e6d5a3SSumit Saxena * multiple hdb entries. 297f5e6d5a3SSumit Saxena * 298f5e6d5a3SSumit Saxena * @num_hdb_types: Number of host diag buffer types supported 299f5e6d5a3SSumit Saxena * @rsvd1: Reserved 300f5e6d5a3SSumit Saxena * @rsvd2: Reserved 301f5e6d5a3SSumit Saxena * @rsvd3: Reserved 302f5e6d5a3SSumit Saxena * @entry: Variable length Diag buffer status entry array 303f5e6d5a3SSumit Saxena */ 304f5e6d5a3SSumit Saxena struct mpi3mr_bsg_in_hdb_status { 305f5e6d5a3SSumit Saxena __u8 num_hdb_types; 306f5e6d5a3SSumit Saxena __u8 rsvd1; 307f5e6d5a3SSumit Saxena __u16 rsvd2; 308f5e6d5a3SSumit Saxena __u32 rsvd3; 309f5e6d5a3SSumit Saxena struct mpi3mr_hdb_entry entry[1]; 310f5e6d5a3SSumit Saxena }; 311f5e6d5a3SSumit Saxena 312f5e6d5a3SSumit Saxena /** 313f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_out_repost_hdb - Repost host diagnostic 314f5e6d5a3SSumit Saxena * buffer request payload data to the driver. 315f5e6d5a3SSumit Saxena * 316f5e6d5a3SSumit Saxena * @buf_type: Buffer type 317f5e6d5a3SSumit Saxena * @rsvd1: Reserved 318f5e6d5a3SSumit Saxena * @rsvd2: Reserved 319f5e6d5a3SSumit Saxena */ 320f5e6d5a3SSumit Saxena struct mpi3mr_bsg_out_repost_hdb { 321f5e6d5a3SSumit Saxena __u8 buf_type; 322f5e6d5a3SSumit Saxena __u8 rsvd1; 323f5e6d5a3SSumit Saxena __u16 rsvd2; 324f5e6d5a3SSumit Saxena }; 325f5e6d5a3SSumit Saxena 326f5e6d5a3SSumit Saxena /** 327f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_out_upload_hdb - Upload host diagnostic 328f5e6d5a3SSumit Saxena * buffer request payload data to the driver. 329f5e6d5a3SSumit Saxena * 330f5e6d5a3SSumit Saxena * @buf_type: Buffer type 331f5e6d5a3SSumit Saxena * @rsvd1: Reserved 332f5e6d5a3SSumit Saxena * @rsvd2: Reserved 333f5e6d5a3SSumit Saxena * @start_offset: Start offset of the buffer from where to copy 334f5e6d5a3SSumit Saxena * @length: Length of the buffer to copy 335f5e6d5a3SSumit Saxena */ 336f5e6d5a3SSumit Saxena struct mpi3mr_bsg_out_upload_hdb { 337f5e6d5a3SSumit Saxena __u8 buf_type; 338f5e6d5a3SSumit Saxena __u8 rsvd1; 339f5e6d5a3SSumit Saxena __u16 rsvd2; 340f5e6d5a3SSumit Saxena __u32 start_offset; 341f5e6d5a3SSumit Saxena __u32 length; 342f5e6d5a3SSumit Saxena }; 343f5e6d5a3SSumit Saxena 344f5e6d5a3SSumit Saxena /** 345f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_out_refresh_hdb_triggers - Refresh host 346f5e6d5a3SSumit Saxena * diagnostic buffer triggers request payload data to the driver. 347f5e6d5a3SSumit Saxena * 348f5e6d5a3SSumit Saxena * @page_type: Page type 349f5e6d5a3SSumit Saxena * @rsvd1: Reserved 350f5e6d5a3SSumit Saxena * @rsvd2: Reserved 351f5e6d5a3SSumit Saxena */ 352f5e6d5a3SSumit Saxena struct mpi3mr_bsg_out_refresh_hdb_triggers { 353f5e6d5a3SSumit Saxena __u8 page_type; 354f5e6d5a3SSumit Saxena __u8 rsvd1; 355f5e6d5a3SSumit Saxena __u16 rsvd2; 356f5e6d5a3SSumit Saxena }; 357f5e6d5a3SSumit Saxena /** 358f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_drv_cmd - Generic bsg data 359f5e6d5a3SSumit Saxena * structure for all driver specific requests. 360f5e6d5a3SSumit Saxena * 361f5e6d5a3SSumit Saxena * @mrioc_id: Controller ID 362f5e6d5a3SSumit Saxena * @opcode: Driver specific opcode 363f5e6d5a3SSumit Saxena * @rsvd1: Reserved 364f5e6d5a3SSumit Saxena * @rsvd2: Reserved 365f5e6d5a3SSumit Saxena */ 366f5e6d5a3SSumit Saxena struct mpi3mr_bsg_drv_cmd { 367f5e6d5a3SSumit Saxena __u8 mrioc_id; 368f5e6d5a3SSumit Saxena __u8 opcode; 369f5e6d5a3SSumit Saxena __u16 rsvd1; 370f5e6d5a3SSumit Saxena __u32 rsvd2[4]; 371f5e6d5a3SSumit Saxena }; 372f5e6d5a3SSumit Saxena /** 373f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_in_reply_buf - MPI reply buffer returned 374f5e6d5a3SSumit Saxena * for MPI Passthrough request . 375f5e6d5a3SSumit Saxena * 376f5e6d5a3SSumit Saxena * @mpi_reply_type: Type of MPI reply 377f5e6d5a3SSumit Saxena * @rsvd1: Reserved 378f5e6d5a3SSumit Saxena * @rsvd2: Reserved 379f5e6d5a3SSumit Saxena * @reply_buf: Variable Length buffer based on mpirep type 380f5e6d5a3SSumit Saxena */ 381f5e6d5a3SSumit Saxena struct mpi3mr_bsg_in_reply_buf { 382f5e6d5a3SSumit Saxena __u8 mpi_reply_type; 383f5e6d5a3SSumit Saxena __u8 rsvd1; 384f5e6d5a3SSumit Saxena __u16 rsvd2; 385f5e6d5a3SSumit Saxena __u8 reply_buf[1]; 386f5e6d5a3SSumit Saxena }; 387f5e6d5a3SSumit Saxena 388f5e6d5a3SSumit Saxena /** 389f5e6d5a3SSumit Saxena * struct mpi3mr_buf_entry - User buffer descriptor for MPI 390f5e6d5a3SSumit Saxena * Passthrough requests. 391f5e6d5a3SSumit Saxena * 392f5e6d5a3SSumit Saxena * @buf_type: Buffer type 393f5e6d5a3SSumit Saxena * @rsvd1: Reserved 394f5e6d5a3SSumit Saxena * @rsvd2: Reserved 395f5e6d5a3SSumit Saxena * @buf_len: Buffer length 396f5e6d5a3SSumit Saxena */ 397f5e6d5a3SSumit Saxena struct mpi3mr_buf_entry { 398f5e6d5a3SSumit Saxena __u8 buf_type; 399f5e6d5a3SSumit Saxena __u8 rsvd1; 400f5e6d5a3SSumit Saxena __u16 rsvd2; 401f5e6d5a3SSumit Saxena __u32 buf_len; 402f5e6d5a3SSumit Saxena }; 403f5e6d5a3SSumit Saxena /** 404f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_buf_entry_list - list of user buffer 405f5e6d5a3SSumit Saxena * descriptor for MPI Passthrough requests. 406f5e6d5a3SSumit Saxena * 407f5e6d5a3SSumit Saxena * @num_of_entries: Number of buffer descriptors 408f5e6d5a3SSumit Saxena * @rsvd1: Reserved 409f5e6d5a3SSumit Saxena * @rsvd2: Reserved 410f5e6d5a3SSumit Saxena * @rsvd3: Reserved 411f5e6d5a3SSumit Saxena * @buf_entry: Variable length array of buffer descriptors 412f5e6d5a3SSumit Saxena */ 413f5e6d5a3SSumit Saxena struct mpi3mr_buf_entry_list { 414f5e6d5a3SSumit Saxena __u8 num_of_entries; 415f5e6d5a3SSumit Saxena __u8 rsvd1; 416f5e6d5a3SSumit Saxena __u16 rsvd2; 417f5e6d5a3SSumit Saxena __u32 rsvd3; 418f5e6d5a3SSumit Saxena struct mpi3mr_buf_entry buf_entry[1]; 419f5e6d5a3SSumit Saxena }; 420f5e6d5a3SSumit Saxena /** 421f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_mptcmd - Generic bsg data 422f5e6d5a3SSumit Saxena * structure for all MPI Passthrough requests . 423f5e6d5a3SSumit Saxena * 424f5e6d5a3SSumit Saxena * @mrioc_id: Controller ID 425f5e6d5a3SSumit Saxena * @rsvd1: Reserved 426f5e6d5a3SSumit Saxena * @timeout: MPI request timeout 427f5e6d5a3SSumit Saxena * @buf_entry_list: Buffer descriptor list 428f5e6d5a3SSumit Saxena */ 429f5e6d5a3SSumit Saxena struct mpi3mr_bsg_mptcmd { 430f5e6d5a3SSumit Saxena __u8 mrioc_id; 431f5e6d5a3SSumit Saxena __u8 rsvd1; 432f5e6d5a3SSumit Saxena __u16 timeout; 433f5e6d5a3SSumit Saxena __u32 rsvd2; 434f5e6d5a3SSumit Saxena struct mpi3mr_buf_entry_list buf_entry_list; 435f5e6d5a3SSumit Saxena }; 436f5e6d5a3SSumit Saxena 437f5e6d5a3SSumit Saxena /** 438f5e6d5a3SSumit Saxena * struct mpi3mr_bsg_packet - Generic bsg data 439f5e6d5a3SSumit Saxena * structure for all supported requests . 440f5e6d5a3SSumit Saxena * 441f5e6d5a3SSumit Saxena * @cmd_type: represents drvrcmd or mptcmd 442f5e6d5a3SSumit Saxena * @rsvd1: Reserved 443f5e6d5a3SSumit Saxena * @rsvd2: Reserved 444f5e6d5a3SSumit Saxena * @drvrcmd: driver request structure 445f5e6d5a3SSumit Saxena * @mptcmd: mpt request structure 446f5e6d5a3SSumit Saxena */ 447f5e6d5a3SSumit Saxena struct mpi3mr_bsg_packet { 448f5e6d5a3SSumit Saxena __u8 cmd_type; 449f5e6d5a3SSumit Saxena __u8 rsvd1; 450f5e6d5a3SSumit Saxena __u16 rsvd2; 451f5e6d5a3SSumit Saxena __u32 rsvd3; 452f5e6d5a3SSumit Saxena union { 453f5e6d5a3SSumit Saxena struct mpi3mr_bsg_drv_cmd drvrcmd; 454f5e6d5a3SSumit Saxena struct mpi3mr_bsg_mptcmd mptcmd; 455f5e6d5a3SSumit Saxena } cmd; 456f5e6d5a3SSumit Saxena }; 457f3de4706SSumit Saxena 458f3de4706SSumit Saxena 459f3de4706SSumit Saxena /* MPI3: NVMe Encasulation related definitions */ 460f3de4706SSumit Saxena #ifndef MPI3_NVME_ENCAP_CMD_MAX 461f3de4706SSumit Saxena #define MPI3_NVME_ENCAP_CMD_MAX (1) 462f3de4706SSumit Saxena #endif 463f3de4706SSumit Saxena 464f3de4706SSumit Saxena struct mpi3_nvme_encapsulated_request { 465f3de4706SSumit Saxena __le16 host_tag; 466f3de4706SSumit Saxena __u8 ioc_use_only02; 467f3de4706SSumit Saxena __u8 function; 468f3de4706SSumit Saxena __le16 ioc_use_only04; 469f3de4706SSumit Saxena __u8 ioc_use_only06; 470f3de4706SSumit Saxena __u8 msg_flags; 471f3de4706SSumit Saxena __le16 change_count; 472f3de4706SSumit Saxena __le16 dev_handle; 473f3de4706SSumit Saxena __le16 encapsulated_command_length; 474f3de4706SSumit Saxena __le16 flags; 475f3de4706SSumit Saxena __le32 data_length; 476f3de4706SSumit Saxena __le32 reserved14[3]; 477f3de4706SSumit Saxena __le32 command[MPI3_NVME_ENCAP_CMD_MAX]; 478f3de4706SSumit Saxena }; 479f3de4706SSumit Saxena 480f3de4706SSumit Saxena struct mpi3_nvme_encapsulated_error_reply { 481f3de4706SSumit Saxena __le16 host_tag; 482f3de4706SSumit Saxena __u8 ioc_use_only02; 483f3de4706SSumit Saxena __u8 function; 484f3de4706SSumit Saxena __le16 ioc_use_only04; 485f3de4706SSumit Saxena __u8 ioc_use_only06; 486f3de4706SSumit Saxena __u8 msg_flags; 487f3de4706SSumit Saxena __le16 ioc_use_only08; 488f3de4706SSumit Saxena __le16 ioc_status; 489f3de4706SSumit Saxena __le32 ioc_log_info; 490f3de4706SSumit Saxena __le32 nvme_completion_entry[4]; 491f3de4706SSumit Saxena }; 492f3de4706SSumit Saxena 493*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_PRP_SIZE 8 /* PRP size */ 494*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_CMD_PRP1_OFFSET 24 /* PRP1 offset in NVMe cmd */ 495*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_CMD_PRP2_OFFSET 32 /* PRP2 offset in NVMe cmd */ 496*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_CMD_SGL_OFFSET 24 /* SGL offset in NVMe cmd */ 497*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_DATA_FORMAT_PRP 0 498*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_DATA_FORMAT_SGL1 1 499*7dbd0dd8SSumit Saxena #define MPI3MR_NVME_DATA_FORMAT_SGL2 2 500*7dbd0dd8SSumit Saxena 501f3de4706SSumit Saxena /* MPI3: task management related definitions */ 502f3de4706SSumit Saxena struct mpi3_scsi_task_mgmt_request { 503f3de4706SSumit Saxena __le16 host_tag; 504f3de4706SSumit Saxena __u8 ioc_use_only02; 505f3de4706SSumit Saxena __u8 function; 506f3de4706SSumit Saxena __le16 ioc_use_only04; 507f3de4706SSumit Saxena __u8 ioc_use_only06; 508f3de4706SSumit Saxena __u8 msg_flags; 509f3de4706SSumit Saxena __le16 change_count; 510f3de4706SSumit Saxena __le16 dev_handle; 511f3de4706SSumit Saxena __le16 task_host_tag; 512f3de4706SSumit Saxena __u8 task_type; 513f3de4706SSumit Saxena __u8 reserved0f; 514f3de4706SSumit Saxena __le16 task_request_queue_id; 515f3de4706SSumit Saxena __le16 reserved12; 516f3de4706SSumit Saxena __le32 reserved14; 517f3de4706SSumit Saxena __u8 lun[8]; 518f3de4706SSumit Saxena }; 519f3de4706SSumit Saxena 520f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU (0x08) 521f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK (0x01) 522f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK_SET (0x02) 523f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET (0x03) 524f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET (0x05) 525f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET (0x06) 526f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK (0x07) 527f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_ACA (0x08) 528f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK_SET (0x09) 529f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_ASYNC_EVENT (0x0a) 530f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_TASKTYPE_I_T_NEXUS_RESET (0x0b) 531f3de4706SSumit Saxena struct mpi3_scsi_task_mgmt_reply { 532f3de4706SSumit Saxena __le16 host_tag; 533f3de4706SSumit Saxena __u8 ioc_use_only02; 534f3de4706SSumit Saxena __u8 function; 535f3de4706SSumit Saxena __le16 ioc_use_only04; 536f3de4706SSumit Saxena __u8 ioc_use_only06; 537f3de4706SSumit Saxena __u8 msg_flags; 538f3de4706SSumit Saxena __le16 ioc_use_only08; 539f3de4706SSumit Saxena __le16 ioc_status; 540f3de4706SSumit Saxena __le32 ioc_log_info; 541f3de4706SSumit Saxena __le32 termination_count; 542f3de4706SSumit Saxena __le32 response_data; 543f3de4706SSumit Saxena __le32 reserved18; 544f3de4706SSumit Saxena }; 545f3de4706SSumit Saxena 546f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_COMPLETE (0x00) 547f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_INVALID_FRAME (0x02) 548f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_FUNCTION_NOT_SUPPORTED (0x04) 549f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_FAILED (0x05) 550f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_SUCCEEDED (0x08) 551f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_INVALID_LUN (0x09) 552f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_OVERLAPPED_TAG (0x0a) 553f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_IO_QUEUED_ON_IOC (0x80) 554f3de4706SSumit Saxena #define MPI3_SCSITASKMGMT_RSPCODE_TM_NVME_DENIED (0x81) 555f3de4706SSumit Saxena 556f3de4706SSumit Saxena /* MPI3: PEL related definitions */ 557f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_NON_BLOCKING_BOOT_EVENT (0x0200) 558f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_BLOCKING_BOOT_EVENT (0x0100) 559f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_PCIE (0x0080) 560f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_CONFIGURATION (0x0040) 561f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_CONTROLER (0x0020) 562f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_SAS (0x0010) 563f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_EPACK (0x0008) 564f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_ENCLOSURE (0x0004) 565f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_PD (0x0002) 566f3de4706SSumit Saxena #define MPI3_PEL_LOCALE_FLAGS_VD (0x0001) 567f3de4706SSumit Saxena #define MPI3_PEL_CLASS_DEBUG (0x00) 568f3de4706SSumit Saxena #define MPI3_PEL_CLASS_PROGRESS (0x01) 569f3de4706SSumit Saxena #define MPI3_PEL_CLASS_INFORMATIONAL (0x02) 570f3de4706SSumit Saxena #define MPI3_PEL_CLASS_WARNING (0x03) 571f3de4706SSumit Saxena #define MPI3_PEL_CLASS_CRITICAL (0x04) 572f3de4706SSumit Saxena #define MPI3_PEL_CLASS_FATAL (0x05) 573f3de4706SSumit Saxena #define MPI3_PEL_CLASS_FAULT (0x06) 574f3de4706SSumit Saxena 575f3de4706SSumit Saxena /* MPI3: Function definitions */ 576f3de4706SSumit Saxena #define MPI3_BSG_FUNCTION_MGMT_PASSTHROUGH (0x0a) 577f3de4706SSumit Saxena #define MPI3_BSG_FUNCTION_SCSI_IO (0x20) 578f3de4706SSumit Saxena #define MPI3_BSG_FUNCTION_SCSI_TASK_MGMT (0x21) 579f3de4706SSumit Saxena #define MPI3_BSG_FUNCTION_SMP_PASSTHROUGH (0x22) 580f3de4706SSumit Saxena #define MPI3_BSG_FUNCTION_NVME_ENCAPSULATED (0x24) 581f3de4706SSumit Saxena 582f5e6d5a3SSumit Saxena #endif 583