113ef29eaSKashyap Desai /* SPDX-License-Identifier: GPL-2.0-or-later */ 213ef29eaSKashyap Desai /* 3e74f2fbdSRanjan Kumar * Copyright 2017-2023 Broadcom Inc. All rights reserved. 413ef29eaSKashyap Desai */ 513ef29eaSKashyap Desai #ifndef MPI30_CNFG_H 613ef29eaSKashyap Desai #define MPI30_CNFG_H 1 713ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_IO_UNIT (0x00) 813ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_MANUFACTURING (0x01) 913ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_IOC (0x02) 10d00ff7c3SSreekanth Reddy #define MPI3_CONFIG_PAGETYPE_DRIVER (0x03) 1113ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_SECURITY (0x04) 1213ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_ENCLOSURE (0x11) 1313ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_DEVICE (0x12) 1413ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_SAS_IO_UNIT (0x20) 1513ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_SAS_EXPANDER (0x21) 1613ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_SAS_PHY (0x23) 1713ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_SAS_PORT (0x24) 1813ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_PCIE_IO_UNIT (0x30) 1913ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_PCIE_SWITCH (0x31) 2013ef29eaSKashyap Desai #define MPI3_CONFIG_PAGETYPE_PCIE_LINK (0x33) 2113ef29eaSKashyap Desai #define MPI3_CONFIG_PAGEATTR_MASK (0xf0) 2213ef29eaSKashyap Desai #define MPI3_CONFIG_PAGEATTR_READ_ONLY (0x00) 2313ef29eaSKashyap Desai #define MPI3_CONFIG_PAGEATTR_CHANGEABLE (0x10) 2413ef29eaSKashyap Desai #define MPI3_CONFIG_PAGEATTR_PERSISTENT (0x20) 2513ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_PAGE_HEADER (0x00) 2613ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_READ_DEFAULT (0x01) 2713ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_READ_CURRENT (0x02) 2813ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_WRITE_CURRENT (0x03) 2913ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_READ_PERSISTENT (0x04) 3013ef29eaSKashyap Desai #define MPI3_CONFIG_ACTION_WRITE_PERSISTENT (0x05) 3113ef29eaSKashyap Desai #define MPI3_DEVICE_PGAD_FORM_MASK (0xf0000000) 3213ef29eaSKashyap Desai #define MPI3_DEVICE_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 3313ef29eaSKashyap Desai #define MPI3_DEVICE_PGAD_FORM_HANDLE (0x20000000) 3413ef29eaSKashyap Desai #define MPI3_DEVICE_PGAD_HANDLE_MASK (0x0000ffff) 3513ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_FORM_MASK (0xf0000000) 3613ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 3713ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_FORM_HANDLE_PHY_NUM (0x10000000) 3813ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_FORM_HANDLE (0x20000000) 3913ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_PHYNUM_MASK (0x00ff0000) 4013ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_PHYNUM_SHIFT (16) 4113ef29eaSKashyap Desai #define MPI3_SAS_EXPAND_PGAD_HANDLE_MASK (0x0000ffff) 4213ef29eaSKashyap Desai #define MPI3_SAS_PHY_PGAD_FORM_MASK (0xf0000000) 4313ef29eaSKashyap Desai #define MPI3_SAS_PHY_PGAD_FORM_PHY_NUMBER (0x00000000) 4413ef29eaSKashyap Desai #define MPI3_SAS_PHY_PGAD_PHY_NUMBER_MASK (0x000000ff) 4513ef29eaSKashyap Desai #define MPI3_SASPORT_PGAD_FORM_MASK (0xf0000000) 4613ef29eaSKashyap Desai #define MPI3_SASPORT_PGAD_FORM_GET_NEXT_PORT (0x00000000) 4713ef29eaSKashyap Desai #define MPI3_SASPORT_PGAD_FORM_PORT_NUM (0x10000000) 4813ef29eaSKashyap Desai #define MPI3_SASPORT_PGAD_PORT_NUMBER_MASK (0x000000ff) 4913ef29eaSKashyap Desai #define MPI3_ENCLOS_PGAD_FORM_MASK (0xf0000000) 5013ef29eaSKashyap Desai #define MPI3_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 5113ef29eaSKashyap Desai #define MPI3_ENCLOS_PGAD_FORM_HANDLE (0x10000000) 5213ef29eaSKashyap Desai #define MPI3_ENCLOS_PGAD_HANDLE_MASK (0x0000ffff) 5313ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_FORM_MASK (0xf0000000) 5413ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_FORM_GET_NEXT_HANDLE (0x00000000) 5513ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_FORM_HANDLE_PORT_NUM (0x10000000) 5613ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_FORM_HANDLE (0x20000000) 5713ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_PORTNUM_MASK (0x00ff0000) 5813ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_PORTNUM_SHIFT (16) 5913ef29eaSKashyap Desai #define MPI3_PCIE_SWITCH_PGAD_HANDLE_MASK (0x0000ffff) 6013ef29eaSKashyap Desai #define MPI3_PCIE_LINK_PGAD_FORM_MASK (0xf0000000) 6113ef29eaSKashyap Desai #define MPI3_PCIE_LINK_PGAD_FORM_GET_NEXT_LINK (0x00000000) 6213ef29eaSKashyap Desai #define MPI3_PCIE_LINK_PGAD_FORM_LINK_NUM (0x10000000) 6313ef29eaSKashyap Desai #define MPI3_PCIE_LINK_PGAD_LINKNUM_MASK (0x000000ff) 6413ef29eaSKashyap Desai #define MPI3_SECURITY_PGAD_FORM_MASK (0xf0000000) 6513ef29eaSKashyap Desai #define MPI3_SECURITY_PGAD_FORM_GET_NEXT_SLOT (0x00000000) 66e5f596bcSRanjan Kumar #define MPI3_SECURITY_PGAD_FORM_SLOT_NUM (0x10000000) 6713ef29eaSKashyap Desai #define MPI3_SECURITY_PGAD_SLOT_GROUP_MASK (0x0000ff00) 68e5f596bcSRanjan Kumar #define MPI3_SECURITY_PGAD_SLOT_GROUP_SHIFT (8) 6913ef29eaSKashyap Desai #define MPI3_SECURITY_PGAD_SLOT_MASK (0x000000ff) 7013ef29eaSKashyap Desai struct mpi3_config_request { 7113ef29eaSKashyap Desai __le16 host_tag; 7213ef29eaSKashyap Desai u8 ioc_use_only02; 7313ef29eaSKashyap Desai u8 function; 7413ef29eaSKashyap Desai __le16 ioc_use_only04; 7513ef29eaSKashyap Desai u8 ioc_use_only06; 7613ef29eaSKashyap Desai u8 msg_flags; 7713ef29eaSKashyap Desai __le16 change_count; 7813ef29eaSKashyap Desai __le16 reserved0a; 7913ef29eaSKashyap Desai u8 page_version; 8013ef29eaSKashyap Desai u8 page_number; 8113ef29eaSKashyap Desai u8 page_type; 8213ef29eaSKashyap Desai u8 action; 8313ef29eaSKashyap Desai __le32 page_address; 8413ef29eaSKashyap Desai __le16 page_length; 8513ef29eaSKashyap Desai __le16 reserved16; 8613ef29eaSKashyap Desai __le32 reserved18[2]; 8713ef29eaSKashyap Desai union mpi3_sge_union sgl; 8813ef29eaSKashyap Desai }; 8913ef29eaSKashyap Desai 9013ef29eaSKashyap Desai struct mpi3_config_page_header { 9113ef29eaSKashyap Desai u8 page_version; 9213ef29eaSKashyap Desai u8 reserved01; 9313ef29eaSKashyap Desai u8 page_number; 9413ef29eaSKashyap Desai u8 page_attribute; 9513ef29eaSKashyap Desai __le16 page_length; 9613ef29eaSKashyap Desai u8 page_type; 9713ef29eaSKashyap Desai u8 reserved07; 9813ef29eaSKashyap Desai }; 9913ef29eaSKashyap Desai 10013ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_LOGICAL_MASK (0xf0) 10113ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_LOGICAL_SHIFT (4) 10213ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_PHYSICAL_MASK (0x0f) 103ee6f2d6bSSreekanth Reddy #define MPI3_SAS_NEG_LINK_RATE_PHYSICAL_SHIFT (0) 10413ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_UNKNOWN_LINK_RATE (0x00) 10513ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_PHY_DISABLED (0x01) 10613ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_NEGOTIATION_FAILED (0x02) 10713ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_SATA_OOB_COMPLETE (0x03) 10813ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_PORT_SELECTOR (0x04) 10913ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_SMP_RESET_IN_PROGRESS (0x05) 11013ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_UNSUPPORTED_PHY (0x06) 11113ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_1_5 (0x08) 11213ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_3_0 (0x09) 11313ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_6_0 (0x0a) 11413ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_12_0 (0x0b) 11513ef29eaSKashyap Desai #define MPI3_SAS_NEG_LINK_RATE_22_5 (0x0c) 11613ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_INSIDE_ZPSDS_PERSISTENT (0x00000040) 11713ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REQUESTED_INSIDE_ZPSDS (0x00000020) 11813ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_BREAK_REPLY_CAPABLE (0x00000010) 11913ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_MASK (0x0000000f) 12013ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_UNKNOWN (0x00000000) 12113ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_POWER_ON (0x00000001) 12213ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_HARD_RESET (0x00000002) 12313ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_SMP_PHY_CONTROL (0x00000003) 12413ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_LOSS_OF_SYNC (0x00000004) 12513ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_MULTIPLEXING_SEQ (0x00000005) 12613ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00000006) 12713ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_BREAK_TIMEOUT (0x00000007) 12813ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_PHY_TEST_STOPPED (0x00000008) 12913ef29eaSKashyap Desai #define MPI3_SAS_APHYINFO_REASON_EXP_REDUCED_FUNC (0x00000009) 13013ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_STATUS_MASK (0xc0000000) 13113ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_STATUS_SHIFT (30) 13213ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_STATUS_ACCESSIBLE (0x00000000) 13313ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_STATUS_NOT_EXIST (0x40000000) 13413ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_STATUS_VACANT (0x80000000) 13513ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PHY_POWER_CONDITION_MASK (0x18000000) 13613ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PHY_POWER_CONDITION_ACTIVE (0x00000000) 13713ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PHY_POWER_CONDITION_PARTIAL (0x08000000) 13813ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PHY_POWER_CONDITION_SLUMBER (0x10000000) 139ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_REQUESTED_INSIDE_ZPSDS_CHANGED_MASK (0x04000000) 140ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_REQUESTED_INSIDE_ZPSDS_CHANGED_SHIFT (26) 141ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_INSIDE_ZPSDS_PERSISTENT_MASK (0x02000000) 142ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_INSIDE_ZPSDS_PERSISTENT_SHIFT (25) 143ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_REQUESTED_INSIDE_ZPSDS_MASK (0x01000000) 144ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_REQUESTED_INSIDE_ZPSDS_SHIFT (24) 145ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_ZONE_GROUP_PERSISTENT (0x00400000) 146ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_INSIDE_ZPSDS_WITHIN (0x00200000) 147ee6f2d6bSSreekanth Reddy #define MPI3_SAS_PHYINFO_ZONING_ENABLED (0x00100000) 14813ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_MASK (0x000f0000) 14913ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_UNKNOWN (0x00000000) 15013ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_POWER_ON (0x00010000) 15113ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_HARD_RESET (0x00020000) 15213ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_SMP_PHY_CONTROL (0x00030000) 15313ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_LOSS_OF_SYNC (0x00040000) 15413ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_MULTIPLEXING_SEQ (0x00050000) 15513ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_IT_NEXUS_LOSS_TIMER (0x00060000) 15613ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_BREAK_TIMEOUT (0x00070000) 15713ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_PHY_TEST_STOPPED (0x00080000) 15813ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_REASON_EXP_REDUCED_FUNC (0x00090000) 15913ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_SATA_PORT_ACTIVE (0x00004000) 16013ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_SATA_PORT_SELECTOR_PRESENT (0x00002000) 16113ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_VIRTUAL_PHY (0x00001000) 16213ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PARTIAL_PATHWAY_TIME_MASK (0x00000f00) 16313ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_PARTIAL_PATHWAY_TIME_SHIFT (8) 16413ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_ROUTING_ATTRIBUTE_MASK (0x000000f0) 16513ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_ROUTING_ATTRIBUTE_DIRECT (0x00000000) 16613ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_ROUTING_ATTRIBUTE_SUBTRACTIVE (0x00000010) 16713ef29eaSKashyap Desai #define MPI3_SAS_PHYINFO_ROUTING_ATTRIBUTE_TABLE (0x00000020) 16813ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_MASK (0xf0) 16913ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_NOT_PROGRAMMABLE (0x00) 17013ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_1_5 (0x80) 17113ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_3_0 (0x90) 17213ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_6_0 (0xa0) 17313ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_12_0 (0xb0) 17413ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MAX_RATE_22_5 (0xc0) 17513ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_MASK (0x0f) 17613ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_NOT_PROGRAMMABLE (0x00) 17713ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_1_5 (0x08) 17813ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_3_0 (0x09) 17913ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_6_0 (0x0a) 18013ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_12_0 (0x0b) 18113ef29eaSKashyap Desai #define MPI3_SAS_PRATE_MIN_RATE_22_5 (0x0c) 18213ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_MASK (0xf0) 18313ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_1_5 (0x80) 18413ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_3_0 (0x90) 18513ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_6_0 (0xa0) 18613ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_12_0 (0xb0) 18713ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MAX_RATE_22_5 (0xc0) 18813ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_MASK (0x0f) 18913ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_1_5 (0x08) 19013ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_3_0 (0x09) 19113ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_6_0 (0x0a) 19213ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_12_0 (0x0b) 19313ef29eaSKashyap Desai #define MPI3_SAS_HWRATE_MIN_RATE_22_5 (0x0c) 19413ef29eaSKashyap Desai #define MPI3_SLOT_INVALID (0xffff) 19513ef29eaSKashyap Desai #define MPI3_SLOT_INDEX_INVALID (0xffff) 196d00ff7c3SSreekanth Reddy #define MPI3_LINK_CHANGE_COUNT_INVALID (0xffff) 197d00ff7c3SSreekanth Reddy #define MPI3_RATE_CHANGE_COUNT_INVALID (0xffff) 198d00ff7c3SSreekanth Reddy #define MPI3_TEMP_SENSOR_LOCATION_INTERNAL (0x0) 199d00ff7c3SSreekanth Reddy #define MPI3_TEMP_SENSOR_LOCATION_INLET (0x1) 200d00ff7c3SSreekanth Reddy #define MPI3_TEMP_SENSOR_LOCATION_OUTLET (0x2) 201d00ff7c3SSreekanth Reddy #define MPI3_TEMP_SENSOR_LOCATION_DRAM (0x3) 202d00ff7c3SSreekanth Reddy #define MPI3_MFGPAGE_VENDORID_BROADCOM (0x1000) 203d00ff7c3SSreekanth Reddy #define MPI3_MFGPAGE_DEVID_SAS4116 (0x00a5) 204e5f596bcSRanjan Kumar #define MPI3_MFGPAGE_DEVID_SAS5116_MPI (0x00b3) 205e5f596bcSRanjan Kumar #define MPI3_MFGPAGE_DEVID_SAS5116_NVME (0x00b4) 206e5f596bcSRanjan Kumar #define MPI3_MFGPAGE_DEVID_SAS5116_MPI_MGMT (0x00b5) 207e5f596bcSRanjan Kumar #define MPI3_MFGPAGE_DEVID_SAS5116_NVME_MGMT (0x00b6) 208e5f596bcSRanjan Kumar #define MPI3_MFGPAGE_DEVID_SAS5116_PCIE_SWITCH (0x00b8) 20913ef29eaSKashyap Desai struct mpi3_man_page0 { 21013ef29eaSKashyap Desai struct mpi3_config_page_header header; 21113ef29eaSKashyap Desai u8 chip_revision[8]; 21213ef29eaSKashyap Desai u8 chip_name[32]; 21313ef29eaSKashyap Desai u8 board_name[32]; 21413ef29eaSKashyap Desai u8 board_assembly[32]; 21513ef29eaSKashyap Desai u8 board_tracer_number[32]; 21613ef29eaSKashyap Desai __le32 board_power; 21713ef29eaSKashyap Desai __le32 reserved94; 21813ef29eaSKashyap Desai __le32 reserved98; 21913ef29eaSKashyap Desai u8 oem; 22004b27e53SSreekanth Reddy u8 profile_identifier; 221d00ff7c3SSreekanth Reddy __le16 flags; 22213ef29eaSKashyap Desai u8 board_mfg_day; 22313ef29eaSKashyap Desai u8 board_mfg_month; 22413ef29eaSKashyap Desai __le16 board_mfg_year; 22513ef29eaSKashyap Desai u8 board_rework_day; 22613ef29eaSKashyap Desai u8 board_rework_month; 22713ef29eaSKashyap Desai __le16 board_rework_year; 228ee6f2d6bSSreekanth Reddy u8 board_revision[8]; 22913ef29eaSKashyap Desai u8 e_pack_fru[16]; 23013ef29eaSKashyap Desai u8 product_name[256]; 23113ef29eaSKashyap Desai }; 23213ef29eaSKashyap Desai 23313ef29eaSKashyap Desai #define MPI3_MAN0_PAGEVERSION (0x00) 234d00ff7c3SSreekanth Reddy #define MPI3_MAN0_FLAGS_SWITCH_PRESENT (0x0002) 235d00ff7c3SSreekanth Reddy #define MPI3_MAN0_FLAGS_EXPANDER_PRESENT (0x0001) 23613ef29eaSKashyap Desai #define MPI3_MAN1_VPD_SIZE (512) 23713ef29eaSKashyap Desai struct mpi3_man_page1 { 23813ef29eaSKashyap Desai struct mpi3_config_page_header header; 23913ef29eaSKashyap Desai __le32 reserved08[2]; 24013ef29eaSKashyap Desai u8 vpd[MPI3_MAN1_VPD_SIZE]; 24113ef29eaSKashyap Desai }; 24213ef29eaSKashyap Desai 24313ef29eaSKashyap Desai #define MPI3_MAN1_PAGEVERSION (0x00) 244ee6f2d6bSSreekanth Reddy struct mpi3_man_page2 { 245ee6f2d6bSSreekanth Reddy struct mpi3_config_page_header header; 246ee6f2d6bSSreekanth Reddy u8 flags; 247ee6f2d6bSSreekanth Reddy u8 reserved09[3]; 248ee6f2d6bSSreekanth Reddy __le32 reserved0c[3]; 249ee6f2d6bSSreekanth Reddy u8 oem_board_tracer_number[32]; 250ee6f2d6bSSreekanth Reddy }; 251ee6f2d6bSSreekanth Reddy #define MPI3_MAN2_PAGEVERSION (0x00) 252ee6f2d6bSSreekanth Reddy #define MPI3_MAN2_FLAGS_TRACER_PRESENT (0x01) 25313ef29eaSKashyap Desai struct mpi3_man5_phy_entry { 25413ef29eaSKashyap Desai __le64 ioc_wwid; 25513ef29eaSKashyap Desai __le64 device_name; 25613ef29eaSKashyap Desai __le64 sata_wwid; 25713ef29eaSKashyap Desai }; 25813ef29eaSKashyap Desai 25913ef29eaSKashyap Desai #ifndef MPI3_MAN5_PHY_MAX 26013ef29eaSKashyap Desai #define MPI3_MAN5_PHY_MAX (1) 26113ef29eaSKashyap Desai #endif 26213ef29eaSKashyap Desai struct mpi3_man_page5 { 26313ef29eaSKashyap Desai struct mpi3_config_page_header header; 26413ef29eaSKashyap Desai u8 num_phys; 26513ef29eaSKashyap Desai u8 reserved09[3]; 26613ef29eaSKashyap Desai __le32 reserved0c; 26713ef29eaSKashyap Desai struct mpi3_man5_phy_entry phy[MPI3_MAN5_PHY_MAX]; 26813ef29eaSKashyap Desai }; 26913ef29eaSKashyap Desai 27013ef29eaSKashyap Desai #define MPI3_MAN5_PAGEVERSION (0x00) 27113ef29eaSKashyap Desai struct mpi3_man6_gpio_entry { 27213ef29eaSKashyap Desai u8 function_code; 273d00ff7c3SSreekanth Reddy u8 function_flags; 27413ef29eaSKashyap Desai __le16 flags; 27513ef29eaSKashyap Desai u8 param1; 27613ef29eaSKashyap Desai u8 param2; 27713ef29eaSKashyap Desai __le16 reserved06; 27813ef29eaSKashyap Desai __le32 param3; 27913ef29eaSKashyap Desai }; 28013ef29eaSKashyap Desai 28113ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_GENERIC (0x00) 28213ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_ALTERNATE (0x01) 28313ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_EXT_INTERRUPT (0x02) 28413ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_GLOBAL_ACTIVITY (0x03) 28513ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_OVER_TEMPERATURE (0x04) 28613ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_PORT_STATUS_GREEN (0x05) 28713ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_PORT_STATUS_YELLOW (0x06) 28813ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_CABLE_MANAGEMENT (0x07) 28913ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_BKPLANE_MGMT_TYPE (0x08) 29013ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_ISTWI_RESET (0x0a) 29113ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_BACKEND_PCIE_RESET (0x0b) 29213ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_GLOBAL_FAULT (0x0c) 29304b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_PBLP_STATUS_CHANGE (0x0d) 29413ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_EPACK_ONLINE (0x0e) 29513ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_EPACK_FAULT (0x0f) 29613ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_CTRL_TYPE (0x10) 29713ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_LICENSE (0x11) 29813ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FUNCTION_REFCLK_CONTROL (0x12) 299d00ff7c3SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_BACKEND_PCIE_RESET_CLAMP (0x13) 30004b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_AUXILIARY_POWER (0x14) 30104b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_RAID_DATA_CACHE_DIRTY (0x15) 30204b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_BOARD_FAN_CONTROL (0x16) 30304b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_BOARD_FAN_FAULT (0x17) 30404b27e53SSreekanth Reddy #define MPI3_MAN6_GPIO_FUNCTION_POWER_BRAKE (0x18) 305d00ff7c3SSreekanth Reddy #define MPI3_MAN6_GPIO_ISTWI_RESET_FUNCTIONFLAGS_DEVSELECT_MASK (0x01) 306d00ff7c3SSreekanth Reddy #define MPI3_MAN6_GPIO_ISTWI_RESET_FUNCTIONFLAGS_DEVSELECT_ISTWI (0x00) 307d00ff7c3SSreekanth Reddy #define MPI3_MAN6_GPIO_ISTWI_RESET_FUNCTIONFLAGS_DEVSELECT_RECEPTACLEID (0x01) 30813ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_MASK (0xf0) 30913ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_GENERIC (0x00) 31013ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_CABLE_MGMT (0x10) 31113ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_ACTIVE_CABLE_OVERCURRENT (0x20) 31213ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_MASK (0x01) 31313ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_EDGE (0x00) 31413ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_LEVEL (0x01) 31513ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_PORT_GREEN_PARAM1_PHY_STATUS_ALL_UP (0x00) 31613ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_PORT_GREEN_PARAM1_PHY_STATUS_ONE_OR_MORE_UP (0x01) 31713ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_CABLE_MGMT_PARAM1_INTERFACE_MODULE_PRESENT (0x00) 31813ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_CABLE_MGMT_PARAM1_INTERFACE_ACTIVE_CABLE_ENABLE (0x01) 31913ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_CABLE_MGMT_PARAM1_INTERFACE_CABLE_MGMT_ENABLE (0x02) 32013ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_LICENSE_PARAM1_TYPE_IBUTTON (0x00) 32113ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_SLEW_RATE_MASK (0x0100) 32213ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_SLEW_RATE_FAST_EDGE (0x0100) 32313ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_SLEW_RATE_SLOW_EDGE (0x0000) 32413ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DRIVE_STRENGTH_MASK (0x00c0) 32513ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DRIVE_STRENGTH_100OHM (0x0000) 32613ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DRIVE_STRENGTH_66OHM (0x0040) 32713ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DRIVE_STRENGTH_50OHM (0x0080) 32813ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DRIVE_STRENGTH_33OHM (0x00c0) 32913ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_ALT_DATA_SEL_MASK (0x0030) 33013ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_ALT_DATA_SEL_SHIFT (4) 33113ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_ACTIVE_HIGH (0x0008) 33213ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_BI_DIR_ENABLED (0x0004) 33313ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DIRECTION_MASK (0x0003) 33413ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DIRECTION_INPUT (0x0000) 33513ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DIRECTION_OPEN_DRAIN_OUTPUT (0x0001) 33613ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DIRECTION_OPEN_SOURCE_OUTPUT (0x0002) 33713ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_FLAGS_DIRECTION_PUSH_PULL_OUTPUT (0x0003) 33813ef29eaSKashyap Desai #ifndef MPI3_MAN6_GPIO_MAX 33913ef29eaSKashyap Desai #define MPI3_MAN6_GPIO_MAX (1) 34013ef29eaSKashyap Desai #endif 34113ef29eaSKashyap Desai struct mpi3_man_page6 { 34213ef29eaSKashyap Desai struct mpi3_config_page_header header; 34313ef29eaSKashyap Desai __le16 flags; 34413ef29eaSKashyap Desai __le16 reserved0a; 34513ef29eaSKashyap Desai u8 num_gpio; 34613ef29eaSKashyap Desai u8 reserved0d[3]; 34713ef29eaSKashyap Desai struct mpi3_man6_gpio_entry gpio[MPI3_MAN6_GPIO_MAX]; 34813ef29eaSKashyap Desai }; 34913ef29eaSKashyap Desai 35013ef29eaSKashyap Desai #define MPI3_MAN6_PAGEVERSION (0x00) 35113ef29eaSKashyap Desai #define MPI3_MAN6_FLAGS_HEARTBEAT_LED_DISABLED (0x0001) 35213ef29eaSKashyap Desai struct mpi3_man7_receptacle_info { 35313ef29eaSKashyap Desai __le32 name[4]; 35413ef29eaSKashyap Desai u8 location; 35513ef29eaSKashyap Desai u8 connector_type; 35613ef29eaSKashyap Desai u8 ped_clk; 35713ef29eaSKashyap Desai u8 connector_id; 35813ef29eaSKashyap Desai __le32 reserved14; 35913ef29eaSKashyap Desai }; 36013ef29eaSKashyap Desai 36113ef29eaSKashyap Desai #define MPI3_MAN7_LOCATION_UNKNOWN (0x00) 36213ef29eaSKashyap Desai #define MPI3_MAN7_LOCATION_INTERNAL (0x01) 36313ef29eaSKashyap Desai #define MPI3_MAN7_LOCATION_EXTERNAL (0x02) 36413ef29eaSKashyap Desai #define MPI3_MAN7_LOCATION_VIRTUAL (0x03) 365ee6f2d6bSSreekanth Reddy #define MPI3_MAN7_LOCATION_HOST (0x04) 366ee6f2d6bSSreekanth Reddy #define MPI3_MAN7_CONNECTOR_TYPE_NO_INFO (0x00) 36713ef29eaSKashyap Desai #define MPI3_MAN7_PEDCLK_ROUTING_MASK (0x10) 36813ef29eaSKashyap Desai #define MPI3_MAN7_PEDCLK_ROUTING_DIRECT (0x00) 36913ef29eaSKashyap Desai #define MPI3_MAN7_PEDCLK_ROUTING_CLOCK_BUFFER (0x10) 37013ef29eaSKashyap Desai #define MPI3_MAN7_PEDCLK_ID_MASK (0x0f) 37113ef29eaSKashyap Desai #ifndef MPI3_MAN7_RECEPTACLE_INFO_MAX 37213ef29eaSKashyap Desai #define MPI3_MAN7_RECEPTACLE_INFO_MAX (1) 37313ef29eaSKashyap Desai #endif 37413ef29eaSKashyap Desai struct mpi3_man_page7 { 37513ef29eaSKashyap Desai struct mpi3_config_page_header header; 37613ef29eaSKashyap Desai __le32 flags; 37713ef29eaSKashyap Desai u8 num_receptacles; 37813ef29eaSKashyap Desai u8 reserved0d[3]; 37913ef29eaSKashyap Desai __le32 enclosure_name[4]; 38013ef29eaSKashyap Desai struct mpi3_man7_receptacle_info receptacle_info[MPI3_MAN7_RECEPTACLE_INFO_MAX]; 38113ef29eaSKashyap Desai }; 38213ef29eaSKashyap Desai 38313ef29eaSKashyap Desai #define MPI3_MAN7_PAGEVERSION (0x00) 38413ef29eaSKashyap Desai #define MPI3_MAN7_FLAGS_BASE_ENCLOSURE_LEVEL_MASK (0x01) 38513ef29eaSKashyap Desai #define MPI3_MAN7_FLAGS_BASE_ENCLOSURE_LEVEL_0 (0x00) 38613ef29eaSKashyap Desai #define MPI3_MAN7_FLAGS_BASE_ENCLOSURE_LEVEL_1 (0x01) 38713ef29eaSKashyap Desai struct mpi3_man8_phy_info { 38813ef29eaSKashyap Desai u8 receptacle_id; 38913ef29eaSKashyap Desai u8 connector_lane; 39013ef29eaSKashyap Desai __le16 reserved02; 39113ef29eaSKashyap Desai __le16 slotx1; 39213ef29eaSKashyap Desai __le16 slotx2; 39313ef29eaSKashyap Desai __le16 slotx4; 39413ef29eaSKashyap Desai __le16 reserved0a; 39513ef29eaSKashyap Desai __le32 reserved0c; 39613ef29eaSKashyap Desai }; 39713ef29eaSKashyap Desai 398ee6f2d6bSSreekanth Reddy #define MPI3_MAN8_PHY_INFO_RECEPTACLE_ID_NOT_ASSOCIATED (0xff) 399ee6f2d6bSSreekanth Reddy #define MPI3_MAN8_PHY_INFO_CONNECTOR_LANE_NOT_ASSOCIATED (0xff) 40013ef29eaSKashyap Desai #ifndef MPI3_MAN8_PHY_INFO_MAX 40113ef29eaSKashyap Desai #define MPI3_MAN8_PHY_INFO_MAX (1) 40213ef29eaSKashyap Desai #endif 40313ef29eaSKashyap Desai struct mpi3_man_page8 { 40413ef29eaSKashyap Desai struct mpi3_config_page_header header; 40513ef29eaSKashyap Desai __le32 reserved08; 40613ef29eaSKashyap Desai u8 num_phys; 40713ef29eaSKashyap Desai u8 reserved0d[3]; 40813ef29eaSKashyap Desai struct mpi3_man8_phy_info phy_info[MPI3_MAN8_PHY_INFO_MAX]; 40913ef29eaSKashyap Desai }; 41013ef29eaSKashyap Desai 41113ef29eaSKashyap Desai #define MPI3_MAN8_PAGEVERSION (0x00) 41213ef29eaSKashyap Desai struct mpi3_man9_rsrc_entry { 41313ef29eaSKashyap Desai __le32 maximum; 41413ef29eaSKashyap Desai __le32 decrement; 41513ef29eaSKashyap Desai __le32 minimum; 41613ef29eaSKashyap Desai __le32 actual; 41713ef29eaSKashyap Desai }; 41813ef29eaSKashyap Desai 41913ef29eaSKashyap Desai enum mpi3_man9_resources { 42013ef29eaSKashyap Desai MPI3_MAN9_RSRC_OUTSTANDING_REQS = 0, 42113ef29eaSKashyap Desai MPI3_MAN9_RSRC_TARGET_CMDS = 1, 422d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_RESERVED02 = 2, 423d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_NVME = 3, 42413ef29eaSKashyap Desai MPI3_MAN9_RSRC_INITIATORS = 4, 42513ef29eaSKashyap Desai MPI3_MAN9_RSRC_VDS = 5, 42613ef29eaSKashyap Desai MPI3_MAN9_RSRC_ENCLOSURES = 6, 42713ef29eaSKashyap Desai MPI3_MAN9_RSRC_ENCLOSURE_PHYS = 7, 42813ef29eaSKashyap Desai MPI3_MAN9_RSRC_EXPANDERS = 8, 42913ef29eaSKashyap Desai MPI3_MAN9_RSRC_PCIE_SWITCHES = 9, 430d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_RESERVED10 = 10, 431d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_HOST_PD_DRIVES = 11, 432d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_ADV_HOST_PD_DRIVES = 12, 433d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_RAID_PD_DRIVES = 13, 434d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_DRV_DIAG_BUF = 14, 435d00ff7c3SSreekanth Reddy MPI3_MAN9_RSRC_NAMESPACE_COUNT = 15, 43613ef29eaSKashyap Desai MPI3_MAN9_RSRC_NUM_RESOURCES 43713ef29eaSKashyap Desai }; 43813ef29eaSKashyap Desai 43913ef29eaSKashyap Desai #define MPI3_MAN9_MIN_OUTSTANDING_REQS (1) 44013ef29eaSKashyap Desai #define MPI3_MAN9_MAX_OUTSTANDING_REQS (65000) 44113ef29eaSKashyap Desai #define MPI3_MAN9_MIN_TARGET_CMDS (0) 44213ef29eaSKashyap Desai #define MPI3_MAN9_MAX_TARGET_CMDS (65535) 44304b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_NVME_TARGETS (0) 44413ef29eaSKashyap Desai #define MPI3_MAN9_MIN_INITIATORS (0) 44504b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_VDS (0) 44604b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_ENCLOSURES (1) 44713ef29eaSKashyap Desai #define MPI3_MAN9_MAX_ENCLOSURES (65535) 44813ef29eaSKashyap Desai #define MPI3_MAN9_MIN_ENCLOSURE_PHYS (0) 44913ef29eaSKashyap Desai #define MPI3_MAN9_MIN_EXPANDERS (0) 45013ef29eaSKashyap Desai #define MPI3_MAN9_MAX_EXPANDERS (65535) 45113ef29eaSKashyap Desai #define MPI3_MAN9_MIN_PCIE_SWITCHES (0) 45204b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_HOST_PD_DRIVES (0) 45304b27e53SSreekanth Reddy #define MPI3_MAN9_ADV_HOST_PD_DRIVES (0) 45404b27e53SSreekanth Reddy #define MPI3_MAN9_RAID_PD_DRIVES (0) 45504b27e53SSreekanth Reddy #define MPI3_MAN9_DRIVER_DIAG_BUFFER (0) 45604b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_NAMESPACE_COUNT (1) 45704b27e53SSreekanth Reddy #define MPI3_MAN9_MIN_EXPANDERS (0) 45804b27e53SSreekanth Reddy #define MPI3_MAN9_MAX_EXPANDERS (65535) 45913ef29eaSKashyap Desai struct mpi3_man_page9 { 46013ef29eaSKashyap Desai struct mpi3_config_page_header header; 46113ef29eaSKashyap Desai u8 num_resources; 46213ef29eaSKashyap Desai u8 reserved09; 46313ef29eaSKashyap Desai __le16 reserved0a; 46413ef29eaSKashyap Desai __le32 reserved0c; 46513ef29eaSKashyap Desai __le32 reserved10; 46613ef29eaSKashyap Desai __le32 reserved14; 46713ef29eaSKashyap Desai __le32 reserved18; 46813ef29eaSKashyap Desai __le32 reserved1c; 46913ef29eaSKashyap Desai struct mpi3_man9_rsrc_entry resource[MPI3_MAN9_RSRC_NUM_RESOURCES]; 47013ef29eaSKashyap Desai }; 47113ef29eaSKashyap Desai 47213ef29eaSKashyap Desai #define MPI3_MAN9_PAGEVERSION (0x00) 47313ef29eaSKashyap Desai struct mpi3_man10_istwi_ctrlr_entry { 474e5f596bcSRanjan Kumar __le16 target_address; 47513ef29eaSKashyap Desai __le16 flags; 476d00ff7c3SSreekanth Reddy u8 scl_low_override; 477d00ff7c3SSreekanth Reddy u8 scl_high_override; 478d00ff7c3SSreekanth Reddy __le16 reserved06; 47913ef29eaSKashyap Desai }; 48013ef29eaSKashyap Desai 481d00ff7c3SSreekanth Reddy #define MPI3_MAN10_ISTWI_CTRLR_FLAGS_BUS_SPEED_MASK (0x000c) 482d00ff7c3SSreekanth Reddy #define MPI3_MAN10_ISTWI_CTRLR_FLAGS_BUS_SPEED_100K (0x0000) 483d00ff7c3SSreekanth Reddy #define MPI3_MAN10_ISTWI_CTRLR_FLAGS_BUS_SPEED_400K (0x0004) 484e5f596bcSRanjan Kumar #define MPI3_MAN10_ISTWI_CTRLR_FLAGS_TARGET_ENABLED (0x0002) 485e5f596bcSRanjan Kumar #define MPI3_MAN10_ISTWI_CTRLR_FLAGS_INITIATOR_ENABLED (0x0001) 48613ef29eaSKashyap Desai #ifndef MPI3_MAN10_ISTWI_CTRLR_MAX 48713ef29eaSKashyap Desai #define MPI3_MAN10_ISTWI_CTRLR_MAX (1) 48813ef29eaSKashyap Desai #endif 48913ef29eaSKashyap Desai struct mpi3_man_page10 { 49013ef29eaSKashyap Desai struct mpi3_config_page_header header; 49113ef29eaSKashyap Desai __le32 reserved08; 49213ef29eaSKashyap Desai u8 num_istwi_ctrl; 49313ef29eaSKashyap Desai u8 reserved0d[3]; 49413ef29eaSKashyap Desai struct mpi3_man10_istwi_ctrlr_entry istwi_controller[MPI3_MAN10_ISTWI_CTRLR_MAX]; 49513ef29eaSKashyap Desai }; 49613ef29eaSKashyap Desai 49713ef29eaSKashyap Desai #define MPI3_MAN10_PAGEVERSION (0x00) 49813ef29eaSKashyap Desai struct mpi3_man11_mux_device_format { 49913ef29eaSKashyap Desai u8 max_channel; 50013ef29eaSKashyap Desai u8 reserved01[3]; 50113ef29eaSKashyap Desai __le32 reserved04; 50213ef29eaSKashyap Desai }; 50313ef29eaSKashyap Desai 50413ef29eaSKashyap Desai struct mpi3_man11_temp_sensor_device_format { 50513ef29eaSKashyap Desai u8 type; 50613ef29eaSKashyap Desai u8 reserved01[3]; 50713ef29eaSKashyap Desai u8 temp_channel[4]; 50813ef29eaSKashyap Desai }; 50913ef29eaSKashyap Desai 51013ef29eaSKashyap Desai #define MPI3_MAN11_TEMP_SENSOR_TYPE_MAX6654 (0x00) 51113ef29eaSKashyap Desai #define MPI3_MAN11_TEMP_SENSOR_TYPE_EMC1442 (0x01) 51213ef29eaSKashyap Desai #define MPI3_MAN11_TEMP_SENSOR_TYPE_ADT7476 (0x02) 513d00ff7c3SSreekanth Reddy #define MPI3_MAN11_TEMP_SENSOR_TYPE_SE97B (0x03) 514d00ff7c3SSreekanth Reddy #define MPI3_MAN11_TEMP_SENSOR_CHANNEL_LOCATION_MASK (0xe0) 515d00ff7c3SSreekanth Reddy #define MPI3_MAN11_TEMP_SENSOR_CHANNEL_LOCATION_SHIFT (5) 51613ef29eaSKashyap Desai #define MPI3_MAN11_TEMP_SENSOR_CHANNEL_ENABLED (0x01) 51713ef29eaSKashyap Desai struct mpi3_man11_seeprom_device_format { 51813ef29eaSKashyap Desai u8 size; 51913ef29eaSKashyap Desai u8 page_write_size; 52013ef29eaSKashyap Desai __le16 reserved02; 52113ef29eaSKashyap Desai __le32 reserved04; 52213ef29eaSKashyap Desai }; 52313ef29eaSKashyap Desai 52413ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_1KBITS (0x01) 52513ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_2KBITS (0x02) 52613ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_4KBITS (0x03) 52713ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_8KBITS (0x04) 52813ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_16KBITS (0x05) 52913ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_32KBITS (0x06) 53013ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_64KBITS (0x07) 53113ef29eaSKashyap Desai #define MPI3_MAN11_SEEPROM_SIZE_128KBITS (0x08) 53213ef29eaSKashyap Desai struct mpi3_man11_ddr_spd_device_format { 53313ef29eaSKashyap Desai u8 channel; 53413ef29eaSKashyap Desai u8 reserved01[3]; 53513ef29eaSKashyap Desai __le32 reserved04; 53613ef29eaSKashyap Desai }; 53713ef29eaSKashyap Desai 53813ef29eaSKashyap Desai struct mpi3_man11_cable_mgmt_device_format { 53913ef29eaSKashyap Desai u8 type; 54013ef29eaSKashyap Desai u8 receptacle_id; 54113ef29eaSKashyap Desai __le16 reserved02; 54213ef29eaSKashyap Desai __le32 reserved04; 54313ef29eaSKashyap Desai }; 54413ef29eaSKashyap Desai 54513ef29eaSKashyap Desai #define MPI3_MAN11_CABLE_MGMT_TYPE_SFF_8636 (0x00) 54613ef29eaSKashyap Desai struct mpi3_man11_bkplane_spec_ubm_format { 54713ef29eaSKashyap Desai __le16 flags; 54813ef29eaSKashyap Desai __le16 reserved02; 54913ef29eaSKashyap Desai }; 55013ef29eaSKashyap Desai 55113ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_REFCLK_POLICY_ALWAYS_ENABLED (0x0200) 55213ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_FORCE_POLLING (0x0100) 55313ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_MAX_FRU_MASK (0x00f0) 55413ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_MAX_FRU_SHIFT (4) 55513ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_POLL_INTERVAL_MASK (0x000f) 55613ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_UBM_FLAGS_POLL_INTERVAL_SHIFT (0) 557d00ff7c3SSreekanth Reddy struct mpi3_man11_bkplane_spec_non_ubm_format { 55813ef29eaSKashyap Desai __le16 flags; 559d00ff7c3SSreekanth Reddy u8 reserved02; 560d00ff7c3SSreekanth Reddy u8 type; 56113ef29eaSKashyap Desai }; 56213ef29eaSKashyap Desai 563d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_GROUP_MASK (0xf000) 564d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_GROUP_SHIFT (12) 565d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_REFCLK_POLICY_ALWAYS_ENABLED (0x0200) 566ee6f2d6bSSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_LINKWIDTH_MASK (0x00c0) 567ee6f2d6bSSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_LINKWIDTH_4 (0x0000) 568ee6f2d6bSSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_LINKWIDTH_2 (0x0040) 569ee6f2d6bSSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_LINKWIDTH_1 (0x0080) 570d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_PRESENCE_DETECT_MASK (0x0030) 571d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_PRESENCE_DETECT_GPIO (0x0000) 572d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_PRESENCE_DETECT_REG (0x0010) 573d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_POLL_INTERVAL_MASK (0x000f) 574d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_FLAGS_POLL_INTERVAL_SHIFT (0) 575d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_NON_UBM_TYPE_VPP (0x00) 57613ef29eaSKashyap Desai union mpi3_man11_bkplane_spec_format { 57713ef29eaSKashyap Desai struct mpi3_man11_bkplane_spec_ubm_format ubm; 578d00ff7c3SSreekanth Reddy struct mpi3_man11_bkplane_spec_non_ubm_format non_ubm; 57913ef29eaSKashyap Desai }; 58013ef29eaSKashyap Desai 58113ef29eaSKashyap Desai struct mpi3_man11_bkplane_mgmt_device_format { 58213ef29eaSKashyap Desai u8 type; 58313ef29eaSKashyap Desai u8 receptacle_id; 584d00ff7c3SSreekanth Reddy u8 reset_info; 585d00ff7c3SSreekanth Reddy u8 reserved03; 58613ef29eaSKashyap Desai union mpi3_man11_bkplane_spec_format backplane_mgmt_specific; 58713ef29eaSKashyap Desai }; 58813ef29eaSKashyap Desai 58913ef29eaSKashyap Desai #define MPI3_MAN11_BKPLANE_MGMT_TYPE_UBM (0x00) 590d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BKPLANE_MGMT_TYPE_NON_UBM (0x01) 591d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BACKPLANE_RESETINFO_ASSERT_TIME_MASK (0xf0) 592d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BACKPLANE_RESETINFO_ASSERT_TIME_SHIFT (4) 593d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BACKPLANE_RESETINFO_READY_TIME_MASK (0x0f) 594d00ff7c3SSreekanth Reddy #define MPI3_MAN11_BACKPLANE_RESETINFO_READY_TIME_SHIFT (0) 59513ef29eaSKashyap Desai struct mpi3_man11_gas_gauge_device_format { 59613ef29eaSKashyap Desai u8 type; 59713ef29eaSKashyap Desai u8 reserved01[3]; 59813ef29eaSKashyap Desai __le32 reserved04; 59913ef29eaSKashyap Desai }; 60013ef29eaSKashyap Desai 60113ef29eaSKashyap Desai #define MPI3_MAN11_GAS_GAUGE_TYPE_STANDARD (0x00) 602d00ff7c3SSreekanth Reddy struct mpi3_man11_mgmt_ctrlr_device_format { 603d00ff7c3SSreekanth Reddy __le32 reserved00; 604d00ff7c3SSreekanth Reddy __le32 reserved04; 605d00ff7c3SSreekanth Reddy }; 60604b27e53SSreekanth Reddy struct mpi3_man11_board_fan_device_format { 60704b27e53SSreekanth Reddy u8 flags; 60804b27e53SSreekanth Reddy u8 reserved01; 60904b27e53SSreekanth Reddy u8 min_fan_speed; 61004b27e53SSreekanth Reddy u8 max_fan_speed; 61104b27e53SSreekanth Reddy __le32 reserved04; 61204b27e53SSreekanth Reddy }; 61304b27e53SSreekanth Reddy #define MPI3_MAN11_BOARD_FAN_FLAGS_FAN_CTRLR_TYPE_MASK (0x07) 61404b27e53SSreekanth Reddy #define MPI3_MAN11_BOARD_FAN_FLAGS_FAN_CTRLR_TYPE_AMC6821 (0x00) 61513ef29eaSKashyap Desai union mpi3_man11_device_specific_format { 61613ef29eaSKashyap Desai struct mpi3_man11_mux_device_format mux; 61713ef29eaSKashyap Desai struct mpi3_man11_temp_sensor_device_format temp_sensor; 61813ef29eaSKashyap Desai struct mpi3_man11_seeprom_device_format seeprom; 61913ef29eaSKashyap Desai struct mpi3_man11_ddr_spd_device_format ddr_spd; 62013ef29eaSKashyap Desai struct mpi3_man11_cable_mgmt_device_format cable_mgmt; 62113ef29eaSKashyap Desai struct mpi3_man11_bkplane_mgmt_device_format bkplane_mgmt; 62213ef29eaSKashyap Desai struct mpi3_man11_gas_gauge_device_format gas_gauge; 623d00ff7c3SSreekanth Reddy struct mpi3_man11_mgmt_ctrlr_device_format mgmt_controller; 62404b27e53SSreekanth Reddy struct mpi3_man11_board_fan_device_format board_fan; 62513ef29eaSKashyap Desai __le32 words[2]; 62613ef29eaSKashyap Desai }; 62713ef29eaSKashyap Desai struct mpi3_man11_istwi_device_format { 62813ef29eaSKashyap Desai u8 device_type; 62913ef29eaSKashyap Desai u8 controller; 63013ef29eaSKashyap Desai u8 reserved02; 63113ef29eaSKashyap Desai u8 flags; 63213ef29eaSKashyap Desai __le16 device_address; 63313ef29eaSKashyap Desai u8 mux_channel; 63413ef29eaSKashyap Desai u8 mux_index; 63513ef29eaSKashyap Desai union mpi3_man11_device_specific_format device_specific; 63613ef29eaSKashyap Desai }; 63713ef29eaSKashyap Desai 63813ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_MUX (0x00) 63913ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_TEMP_SENSOR (0x01) 64013ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_SEEPROM (0x02) 64113ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_DDR_SPD (0x03) 64213ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_CABLE_MGMT (0x04) 64313ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_BACKPLANE_MGMT (0x05) 64413ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVTYPE_GAS_GAUGE (0x06) 645d00ff7c3SSreekanth Reddy #define MPI3_MAN11_ISTWI_DEVTYPE_MGMT_CONTROLLER (0x07) 64604b27e53SSreekanth Reddy #define MPI3_MAN11_ISTWI_DEVTYPE_BOARD_FAN (0x08) 64713ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_FLAGS_MUX_PRESENT (0x01) 64813ef29eaSKashyap Desai #ifndef MPI3_MAN11_ISTWI_DEVICE_MAX 64913ef29eaSKashyap Desai #define MPI3_MAN11_ISTWI_DEVICE_MAX (1) 65013ef29eaSKashyap Desai #endif 65113ef29eaSKashyap Desai struct mpi3_man_page11 { 65213ef29eaSKashyap Desai struct mpi3_config_page_header header; 65313ef29eaSKashyap Desai __le32 reserved08; 65413ef29eaSKashyap Desai u8 num_istwi_dev; 65513ef29eaSKashyap Desai u8 reserved0d[3]; 65613ef29eaSKashyap Desai struct mpi3_man11_istwi_device_format istwi_device[MPI3_MAN11_ISTWI_DEVICE_MAX]; 65713ef29eaSKashyap Desai }; 65813ef29eaSKashyap Desai 65913ef29eaSKashyap Desai #define MPI3_MAN11_PAGEVERSION (0x00) 66013ef29eaSKashyap Desai #ifndef MPI3_MAN12_NUM_SGPIO_MAX 66113ef29eaSKashyap Desai #define MPI3_MAN12_NUM_SGPIO_MAX (1) 66213ef29eaSKashyap Desai #endif 66313ef29eaSKashyap Desai struct mpi3_man12_sgpio_info { 66413ef29eaSKashyap Desai u8 slot_count; 66513ef29eaSKashyap Desai u8 reserved01[3]; 66613ef29eaSKashyap Desai __le32 reserved04; 66713ef29eaSKashyap Desai u8 phy_order[32]; 66813ef29eaSKashyap Desai }; 66913ef29eaSKashyap Desai 67013ef29eaSKashyap Desai struct mpi3_man_page12 { 67113ef29eaSKashyap Desai struct mpi3_config_page_header header; 67213ef29eaSKashyap Desai __le32 flags; 67313ef29eaSKashyap Desai __le32 s_clock_freq; 67413ef29eaSKashyap Desai __le32 activity_modulation; 67513ef29eaSKashyap Desai u8 num_sgpio; 67613ef29eaSKashyap Desai u8 reserved15[3]; 67713ef29eaSKashyap Desai __le32 reserved18; 67813ef29eaSKashyap Desai __le32 reserved1c; 67913ef29eaSKashyap Desai __le32 pattern[8]; 68013ef29eaSKashyap Desai struct mpi3_man12_sgpio_info sgpio_info[MPI3_MAN12_NUM_SGPIO_MAX]; 68113ef29eaSKashyap Desai }; 68213ef29eaSKashyap Desai 68313ef29eaSKashyap Desai #define MPI3_MAN12_PAGEVERSION (0x00) 68413ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_ERROR_PRESENCE_ENABLED (0x0400) 68513ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_ACTIVITY_INVERT_ENABLED (0x0200) 68613ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_GROUP_ID_DISABLED (0x0100) 68713ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SIO_CLK_FILTER_ENABLED (0x0004) 68813ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SCLOCK_SLOAD_TYPE_MASK (0x0002) 68913ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SCLOCK_SLOAD_TYPE_PUSH_PULL (0x0000) 69013ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SCLOCK_SLOAD_TYPE_OPEN_DRAIN (0x0002) 69113ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_MASK (0x0001) 69213ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_PUSH_PULL (0x0000) 69313ef29eaSKashyap Desai #define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_OPEN_DRAIN (0x0001) 69413ef29eaSKashyap Desai #define MPI3_MAN12_SIO_CLK_FREQ_MIN (32) 69513ef29eaSKashyap Desai #define MPI3_MAN12_SIO_CLK_FREQ_MAX (100000) 69613ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_FORCE_OFF_MASK (0x0000f000) 69713ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_FORCE_OFF_SHIFT (12) 69813ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_MAX_ON_MASK (0x00000f00) 69913ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_MAX_ON_SHIFT (8) 70013ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_STRETCH_OFF_MASK (0x000000f0) 70113ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_STRETCH_OFF_SHIFT (4) 70213ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_STRETCH_ON_MASK (0x0000000f) 70313ef29eaSKashyap Desai #define MPI3_MAN12_ACTIVITY_MODULATION_STRETCH_ON_SHIFT (0) 70413ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_MASK (0xe0000000) 70513ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_2_HZ (0x00000000) 70613ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_4_HZ (0x20000000) 70713ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_8_HZ (0x40000000) 70813ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_16_HZ (0x60000000) 70913ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_10_HZ (0x80000000) 71013ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_20_HZ (0xa0000000) 71113ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_RATE_40_HZ (0xc0000000) 71213ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_LENGTH_MASK (0x1f000000) 71313ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_LENGTH_SHIFT (24) 71413ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_BIT_PATTERN_MASK (0x00ffffff) 71513ef29eaSKashyap Desai #define MPI3_MAN12_PATTERN_BIT_PATTERN_SHIFT (0) 71613ef29eaSKashyap Desai #ifndef MPI3_MAN13_NUM_TRANSLATION_MAX 71713ef29eaSKashyap Desai #define MPI3_MAN13_NUM_TRANSLATION_MAX (1) 71813ef29eaSKashyap Desai #endif 71913ef29eaSKashyap Desai struct mpi3_man13_translation_info { 72013ef29eaSKashyap Desai __le32 slot_status; 72113ef29eaSKashyap Desai __le32 mask; 72213ef29eaSKashyap Desai u8 activity; 72313ef29eaSKashyap Desai u8 locate; 72413ef29eaSKashyap Desai u8 error; 72513ef29eaSKashyap Desai u8 reserved0b; 72613ef29eaSKashyap Desai }; 72713ef29eaSKashyap Desai 72813ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_FAULT (0x20000000) 72913ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_DEVICE_OFF (0x10000000) 73013ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_DEVICE_ACTIVITY (0x00800000) 73113ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_DO_NOT_REMOVE (0x00400000) 73213ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_DEVICE_MISSING (0x00100000) 73313ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_INSERT (0x00080000) 73413ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_REMOVAL (0x00040000) 73513ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_IDENTIFY (0x00020000) 73613ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_OK (0x00008000) 73713ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_RESERVED_DEVICE (0x00004000) 73813ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_HOT_SPARE (0x00002000) 73913ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_CONSISTENCY_CHECK (0x00001000) 74013ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_IN_CRITICAL_ARRAY (0x00000800) 74113ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_IN_FAILED_ARRAY (0x00000400) 74213ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_REBUILD_REMAP (0x00000200) 74313ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_REBUILD_REMAP_ABORT (0x00000100) 74413ef29eaSKashyap Desai #define MPI3_MAN13_TRANSLATION_SLOTSTATUS_PREDICTED_FAILURE (0x00000040) 74513ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_FORCE_OFF (0x00) 74613ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_FORCE_ON (0x01) 74713ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_0 (0x02) 74813ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_1 (0x03) 74913ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_2 (0x04) 75013ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_3 (0x05) 75113ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_4 (0x06) 75213ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_5 (0x07) 75313ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_6 (0x08) 75413ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_PATTERN_7 (0x09) 75513ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_ACTIVITY (0x0a) 75613ef29eaSKashyap Desai #define MPI3_MAN13_BLINK_PATTERN_ACTIVITY_TRAIL (0x0b) 75713ef29eaSKashyap Desai struct mpi3_man_page13 { 75813ef29eaSKashyap Desai struct mpi3_config_page_header header; 75913ef29eaSKashyap Desai u8 num_trans; 76013ef29eaSKashyap Desai u8 reserved09[3]; 76113ef29eaSKashyap Desai __le32 reserved0c; 76213ef29eaSKashyap Desai struct mpi3_man13_translation_info translation[MPI3_MAN13_NUM_TRANSLATION_MAX]; 76313ef29eaSKashyap Desai }; 76413ef29eaSKashyap Desai 76513ef29eaSKashyap Desai #define MPI3_MAN13_PAGEVERSION (0x00) 76613ef29eaSKashyap Desai struct mpi3_man_page14 { 76713ef29eaSKashyap Desai struct mpi3_config_page_header header; 76804b27e53SSreekanth Reddy __le32 reserved08; 76913ef29eaSKashyap Desai u8 num_slot_groups; 77013ef29eaSKashyap Desai u8 num_slots; 77113ef29eaSKashyap Desai __le16 max_cert_chain_length; 77213ef29eaSKashyap Desai __le32 sealed_slots; 77304b27e53SSreekanth Reddy __le32 populated_slots; 77404b27e53SSreekanth Reddy __le32 mgmt_pt_updatable_slots; 77513ef29eaSKashyap Desai }; 77613ef29eaSKashyap Desai #define MPI3_MAN14_PAGEVERSION (0x00) 77704b27e53SSreekanth Reddy #define MPI3_MAN14_NUMSLOTS_MAX (32) 77813ef29eaSKashyap Desai #ifndef MPI3_MAN15_VERSION_RECORD_MAX 77913ef29eaSKashyap Desai #define MPI3_MAN15_VERSION_RECORD_MAX 1 78013ef29eaSKashyap Desai #endif 78113ef29eaSKashyap Desai struct mpi3_man15_version_record { 78213ef29eaSKashyap Desai __le16 spdm_version; 78313ef29eaSKashyap Desai __le16 reserved02; 78413ef29eaSKashyap Desai }; 78513ef29eaSKashyap Desai 78613ef29eaSKashyap Desai struct mpi3_man_page15 { 78713ef29eaSKashyap Desai struct mpi3_config_page_header header; 78813ef29eaSKashyap Desai u8 num_version_records; 78913ef29eaSKashyap Desai u8 reserved09[3]; 79013ef29eaSKashyap Desai __le32 reserved0c; 79113ef29eaSKashyap Desai struct mpi3_man15_version_record version_record[MPI3_MAN15_VERSION_RECORD_MAX]; 79213ef29eaSKashyap Desai }; 79313ef29eaSKashyap Desai 79413ef29eaSKashyap Desai #define MPI3_MAN15_PAGEVERSION (0x00) 79513ef29eaSKashyap Desai #ifndef MPI3_MAN16_CERT_ALGO_MAX 79613ef29eaSKashyap Desai #define MPI3_MAN16_CERT_ALGO_MAX 1 79713ef29eaSKashyap Desai #endif 79813ef29eaSKashyap Desai struct mpi3_man16_certificate_algorithm { 79913ef29eaSKashyap Desai u8 slot_group; 80013ef29eaSKashyap Desai u8 reserved01[3]; 80113ef29eaSKashyap Desai __le32 base_asym_algo; 80213ef29eaSKashyap Desai __le32 base_hash_algo; 80313ef29eaSKashyap Desai __le32 reserved0c[3]; 80413ef29eaSKashyap Desai }; 80513ef29eaSKashyap Desai 80613ef29eaSKashyap Desai struct mpi3_man_page16 { 80713ef29eaSKashyap Desai struct mpi3_config_page_header header; 80813ef29eaSKashyap Desai __le32 reserved08; 80913ef29eaSKashyap Desai u8 num_cert_algos; 81013ef29eaSKashyap Desai u8 reserved0d[3]; 81113ef29eaSKashyap Desai struct mpi3_man16_certificate_algorithm certificate_algorithm[MPI3_MAN16_CERT_ALGO_MAX]; 81213ef29eaSKashyap Desai }; 81313ef29eaSKashyap Desai 81413ef29eaSKashyap Desai #define MPI3_MAN16_PAGEVERSION (0x00) 81513ef29eaSKashyap Desai #ifndef MPI3_MAN17_HASH_ALGORITHM_MAX 81613ef29eaSKashyap Desai #define MPI3_MAN17_HASH_ALGORITHM_MAX 1 81713ef29eaSKashyap Desai #endif 81813ef29eaSKashyap Desai struct mpi3_man17_hash_algorithm { 81913ef29eaSKashyap Desai u8 meas_specification; 82013ef29eaSKashyap Desai u8 reserved01[3]; 82113ef29eaSKashyap Desai __le32 measurement_hash_algo; 82213ef29eaSKashyap Desai __le32 reserved08[2]; 82313ef29eaSKashyap Desai }; 82413ef29eaSKashyap Desai 82513ef29eaSKashyap Desai struct mpi3_man_page17 { 82613ef29eaSKashyap Desai struct mpi3_config_page_header header; 82713ef29eaSKashyap Desai __le32 reserved08; 82813ef29eaSKashyap Desai u8 num_hash_algos; 82913ef29eaSKashyap Desai u8 reserved0d[3]; 83013ef29eaSKashyap Desai struct mpi3_man17_hash_algorithm hash_algorithm[MPI3_MAN17_HASH_ALGORITHM_MAX]; 83113ef29eaSKashyap Desai }; 83213ef29eaSKashyap Desai 83313ef29eaSKashyap Desai #define MPI3_MAN17_PAGEVERSION (0x00) 83413ef29eaSKashyap Desai struct mpi3_man_page20 { 83513ef29eaSKashyap Desai struct mpi3_config_page_header header; 83613ef29eaSKashyap Desai __le32 reserved08; 83713ef29eaSKashyap Desai __le32 nonpremium_features; 83813ef29eaSKashyap Desai u8 allowed_personalities; 83913ef29eaSKashyap Desai u8 reserved11[3]; 84013ef29eaSKashyap Desai }; 84113ef29eaSKashyap Desai 84213ef29eaSKashyap Desai #define MPI3_MAN20_PAGEVERSION (0x00) 84313ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_RAID_MASK (0x02) 84413ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_RAID_ALLOWED (0x02) 84513ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_RAID_NOT_ALLOWED (0x00) 84613ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_EHBA_MASK (0x01) 84713ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_EHBA_ALLOWED (0x01) 84813ef29eaSKashyap Desai #define MPI3_MAN20_ALLOWEDPERSON_EHBA_NOT_ALLOWED (0x00) 84913ef29eaSKashyap Desai #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_MASK (0x01) 85013ef29eaSKashyap Desai #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_ENABLED (0x00) 85113ef29eaSKashyap Desai #define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_DISABLED (0x01) 85213ef29eaSKashyap Desai struct mpi3_man_page21 { 85313ef29eaSKashyap Desai struct mpi3_config_page_header header; 85413ef29eaSKashyap Desai __le32 reserved08; 85513ef29eaSKashyap Desai __le32 flags; 85613ef29eaSKashyap Desai }; 85713ef29eaSKashyap Desai 85813ef29eaSKashyap Desai #define MPI3_MAN21_PAGEVERSION (0x00) 859ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_UNCERTIFIED_DRIVES_MASK (0x00000060) 860ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_UNCERTIFIED_DRIVES_BLOCK (0x00000000) 861ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_UNCERTIFIED_DRIVES_ALLOW (0x00000020) 862ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_UNCERTIFIED_DRIVES_WARN (0x00000040) 863ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_BLOCK_SSD_WR_CACHE_CHANGE_MASK (0x00000008) 864ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_BLOCK_SSD_WR_CACHE_CHANGE_ALLOW (0x00000000) 865ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_BLOCK_SSD_WR_CACHE_CHANGE_PREVENT (0x00000008) 866ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_MASK (0x00000001) 867ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_DEFAULT (0x00000000) 868ee6f2d6bSSreekanth Reddy #define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_OEM_SPECIFIC (0x00000001) 86913ef29eaSKashyap Desai #ifndef MPI3_MAN_PROD_SPECIFIC_MAX 87013ef29eaSKashyap Desai #define MPI3_MAN_PROD_SPECIFIC_MAX (1) 87113ef29eaSKashyap Desai #endif 87213ef29eaSKashyap Desai struct mpi3_man_page_product_specific { 87313ef29eaSKashyap Desai struct mpi3_config_page_header header; 87413ef29eaSKashyap Desai __le32 product_specific_info[MPI3_MAN_PROD_SPECIFIC_MAX]; 87513ef29eaSKashyap Desai }; 87613ef29eaSKashyap Desai 87713ef29eaSKashyap Desai struct mpi3_io_unit_page0 { 87813ef29eaSKashyap Desai struct mpi3_config_page_header header; 87913ef29eaSKashyap Desai __le64 unique_value; 88013ef29eaSKashyap Desai __le32 nvdata_version_default; 88113ef29eaSKashyap Desai __le32 nvdata_version_persistent; 88213ef29eaSKashyap Desai }; 88313ef29eaSKashyap Desai 88413ef29eaSKashyap Desai #define MPI3_IOUNIT0_PAGEVERSION (0x00) 88513ef29eaSKashyap Desai struct mpi3_io_unit_page1 { 88613ef29eaSKashyap Desai struct mpi3_config_page_header header; 88713ef29eaSKashyap Desai __le32 flags; 88813ef29eaSKashyap Desai u8 dmd_io_delay; 889d00ff7c3SSreekanth Reddy u8 dmd_report_pcie; 89013ef29eaSKashyap Desai u8 dmd_report_sata; 89113ef29eaSKashyap Desai u8 dmd_report_sas; 89213ef29eaSKashyap Desai }; 89313ef29eaSKashyap Desai 89413ef29eaSKashyap Desai #define MPI3_IOUNIT1_PAGEVERSION (0x00) 89513ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_NVME_WRITE_CACHE_MASK (0x00000030) 89613ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_NVME_WRITE_CACHE_ENABLE (0x00000000) 89713ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_NVME_WRITE_CACHE_DISABLE (0x00000010) 89813ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_NVME_WRITE_CACHE_NO_MODIFY (0x00000020) 89913ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_ATA_SECURITY_FREEZE_LOCK (0x00000008) 90013ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_WRITE_SAME_BUFFER (0x00000004) 90113ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_SATA_WRITE_CACHE_MASK (0x00000003) 90213ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_SATA_WRITE_CACHE_ENABLE (0x00000000) 90313ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_SATA_WRITE_CACHE_DISABLE (0x00000001) 90413ef29eaSKashyap Desai #define MPI3_IOUNIT1_FLAGS_SATA_WRITE_CACHE_UNCHANGED (0x00000002) 90513ef29eaSKashyap Desai #define MPI3_IOUNIT1_DMD_REPORT_DELAY_TIME_MASK (0x7f) 90613ef29eaSKashyap Desai #define MPI3_IOUNIT1_DMD_REPORT_UNIT_16_SEC (0x80) 90713ef29eaSKashyap Desai #ifndef MPI3_IO_UNIT2_GPIO_VAL_MAX 90813ef29eaSKashyap Desai #define MPI3_IO_UNIT2_GPIO_VAL_MAX (1) 90913ef29eaSKashyap Desai #endif 91013ef29eaSKashyap Desai struct mpi3_io_unit_page2 { 91113ef29eaSKashyap Desai struct mpi3_config_page_header header; 91213ef29eaSKashyap Desai u8 gpio_count; 91313ef29eaSKashyap Desai u8 reserved09[3]; 91413ef29eaSKashyap Desai __le16 gpio_val[MPI3_IO_UNIT2_GPIO_VAL_MAX]; 91513ef29eaSKashyap Desai }; 91613ef29eaSKashyap Desai 91713ef29eaSKashyap Desai #define MPI3_IOUNIT2_PAGEVERSION (0x00) 91813ef29eaSKashyap Desai #define MPI3_IOUNIT2_GPIO_FUNCTION_MASK (0xfffc) 91913ef29eaSKashyap Desai #define MPI3_IOUNIT2_GPIO_FUNCTION_SHIFT (2) 92013ef29eaSKashyap Desai #define MPI3_IOUNIT2_GPIO_SETTING_MASK (0x0001) 92113ef29eaSKashyap Desai #define MPI3_IOUNIT2_GPIO_SETTING_OFF (0x0000) 92213ef29eaSKashyap Desai #define MPI3_IOUNIT2_GPIO_SETTING_ON (0x0001) 92313ef29eaSKashyap Desai struct mpi3_io_unit3_sensor { 92413ef29eaSKashyap Desai __le16 flags; 925d00ff7c3SSreekanth Reddy u8 threshold_margin; 926d00ff7c3SSreekanth Reddy u8 reserved03; 927d00ff7c3SSreekanth Reddy __le16 threshold[3]; 928d00ff7c3SSreekanth Reddy __le16 reserved0a; 92913ef29eaSKashyap Desai __le32 reserved0c; 93013ef29eaSKashyap Desai __le32 reserved10; 93113ef29eaSKashyap Desai __le32 reserved14; 93213ef29eaSKashyap Desai }; 93313ef29eaSKashyap Desai 934d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_EVENT_ENABLED (0x0010) 935d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_ACTION_ENABLED (0x0008) 936d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT3_SENSOR_FLAGS_CRITICAL_EVENT_ENABLED (0x0004) 937d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT3_SENSOR_FLAGS_CRITICAL_ACTION_ENABLED (0x0002) 938d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT3_SENSOR_FLAGS_WARNING_EVENT_ENABLED (0x0001) 93913ef29eaSKashyap Desai #ifndef MPI3_IO_UNIT3_SENSOR_MAX 94013ef29eaSKashyap Desai #define MPI3_IO_UNIT3_SENSOR_MAX (1) 94113ef29eaSKashyap Desai #endif 94213ef29eaSKashyap Desai struct mpi3_io_unit_page3 { 94313ef29eaSKashyap Desai struct mpi3_config_page_header header; 94413ef29eaSKashyap Desai __le32 reserved08; 94513ef29eaSKashyap Desai u8 num_sensors; 946d00ff7c3SSreekanth Reddy u8 nominal_poll_interval; 947d00ff7c3SSreekanth Reddy u8 warning_poll_interval; 948d00ff7c3SSreekanth Reddy u8 reserved0f; 94913ef29eaSKashyap Desai struct mpi3_io_unit3_sensor sensor[MPI3_IO_UNIT3_SENSOR_MAX]; 95013ef29eaSKashyap Desai }; 95113ef29eaSKashyap Desai 95213ef29eaSKashyap Desai #define MPI3_IOUNIT3_PAGEVERSION (0x00) 95313ef29eaSKashyap Desai struct mpi3_io_unit4_sensor { 95413ef29eaSKashyap Desai __le16 current_temperature; 95513ef29eaSKashyap Desai __le16 reserved02; 95613ef29eaSKashyap Desai u8 flags; 95713ef29eaSKashyap Desai u8 reserved05[3]; 958d00ff7c3SSreekanth Reddy __le16 istwi_index; 959d00ff7c3SSreekanth Reddy u8 channel; 960d00ff7c3SSreekanth Reddy u8 reserved0b; 96113ef29eaSKashyap Desai __le32 reserved0c; 96213ef29eaSKashyap Desai }; 96313ef29eaSKashyap Desai 964d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT4_SENSOR_FLAGS_LOC_MASK (0xe0) 965d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT4_SENSOR_FLAGS_LOC_SHIFT (5) 96613ef29eaSKashyap Desai #define MPI3_IOUNIT4_SENSOR_FLAGS_TEMP_VALID (0x01) 967d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT4_SENSOR_ISTWI_INDEX_INTERNAL (0xffff) 968d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT4_SENSOR_CHANNEL_RESERVED (0xff) 96913ef29eaSKashyap Desai #ifndef MPI3_IO_UNIT4_SENSOR_MAX 97013ef29eaSKashyap Desai #define MPI3_IO_UNIT4_SENSOR_MAX (1) 97113ef29eaSKashyap Desai #endif 97213ef29eaSKashyap Desai struct mpi3_io_unit_page4 { 97313ef29eaSKashyap Desai struct mpi3_config_page_header header; 97413ef29eaSKashyap Desai __le32 reserved08; 97513ef29eaSKashyap Desai u8 num_sensors; 97613ef29eaSKashyap Desai u8 reserved0d[3]; 97713ef29eaSKashyap Desai struct mpi3_io_unit4_sensor sensor[MPI3_IO_UNIT4_SENSOR_MAX]; 97813ef29eaSKashyap Desai }; 97913ef29eaSKashyap Desai 98013ef29eaSKashyap Desai #define MPI3_IOUNIT4_PAGEVERSION (0x00) 98113ef29eaSKashyap Desai struct mpi3_io_unit5_spinup_group { 98213ef29eaSKashyap Desai u8 max_target_spinup; 98313ef29eaSKashyap Desai u8 spinup_delay; 98413ef29eaSKashyap Desai u8 spinup_flags; 98513ef29eaSKashyap Desai u8 reserved03; 98613ef29eaSKashyap Desai }; 98713ef29eaSKashyap Desai 98813ef29eaSKashyap Desai #define MPI3_IOUNIT5_SPINUP_FLAGS_DISABLE (0x01) 98913ef29eaSKashyap Desai #ifndef MPI3_IO_UNIT5_PHY_MAX 99013ef29eaSKashyap Desai #define MPI3_IO_UNIT5_PHY_MAX (4) 99113ef29eaSKashyap Desai #endif 99213ef29eaSKashyap Desai struct mpi3_io_unit_page5 { 99313ef29eaSKashyap Desai struct mpi3_config_page_header header; 99413ef29eaSKashyap Desai struct mpi3_io_unit5_spinup_group spinup_group_parameters[4]; 99513ef29eaSKashyap Desai __le32 reserved18; 99613ef29eaSKashyap Desai __le32 reserved1c; 997d00ff7c3SSreekanth Reddy __le16 device_shutdown; 998d00ff7c3SSreekanth Reddy __le16 reserved22; 999d00ff7c3SSreekanth Reddy u8 pcie_device_wait_time; 100013ef29eaSKashyap Desai u8 sata_device_wait_time; 100113ef29eaSKashyap Desai u8 spinup_encl_drive_count; 100213ef29eaSKashyap Desai u8 spinup_encl_delay; 100313ef29eaSKashyap Desai u8 num_phys; 100413ef29eaSKashyap Desai u8 pe_initial_spinup_delay; 100513ef29eaSKashyap Desai u8 topology_stable_time; 100613ef29eaSKashyap Desai u8 flags; 100713ef29eaSKashyap Desai u8 phy[MPI3_IO_UNIT5_PHY_MAX]; 100813ef29eaSKashyap Desai }; 100913ef29eaSKashyap Desai 101013ef29eaSKashyap Desai #define MPI3_IOUNIT5_PAGEVERSION (0x00) 1011d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_NO_ACTION (0x00) 1012d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_DIRECT_ATTACHED (0x01) 1013d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_EXPANDER_ATTACHED (0x02) 1014d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SWITCH_ATTACHED (0x02) 1015d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_DIRECT_AND_EXPANDER (0x03) 1016d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_DIRECT_AND_SWITCH (0x03) 1017d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SATA_HDD_MASK (0x0300) 1018d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SATA_HDD_SHIFT (8) 1019d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SAS_HDD_MASK (0x00c0) 1020d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SAS_HDD_SHIFT (6) 1021d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_NVME_SSD_MASK (0x0030) 1022d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_NVME_SSD_SHIFT (4) 1023d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SATA_SSD_MASK (0x000c) 1024d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SATA_SSD_SHIFT (2) 1025d00ff7c3SSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SAS_SSD_MASK (0x0003) 1026ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_DEVICE_SHUTDOWN_SAS_SSD_SHIFT (0) 1027ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_FLAGS_SATAPUIS_MASK (0x0c) 1028ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_FLAGS_SATAPUIS_NOT_SUPPORTED (0x00) 1029ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_FLAGS_SATAPUIS_OS_CONTROLLED (0x04) 1030ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_FLAGS_SATAPUIS_APP_CONTROLLED (0x08) 1031ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT5_FLAGS_SATAPUIS_BLOCKED (0x0c) 103213ef29eaSKashyap Desai #define MPI3_IOUNIT5_FLAGS_POWER_CAPABLE_SPINUP (0x02) 103313ef29eaSKashyap Desai #define MPI3_IOUNIT5_FLAGS_AUTO_PORT_ENABLE (0x01) 103413ef29eaSKashyap Desai #define MPI3_IOUNIT5_PHY_SPINUP_GROUP_MASK (0x03) 103513ef29eaSKashyap Desai struct mpi3_io_unit_page6 { 103613ef29eaSKashyap Desai struct mpi3_config_page_header header; 103713ef29eaSKashyap Desai __le32 board_power_requirement; 103813ef29eaSKashyap Desai __le32 pci_slot_power_allocation; 103913ef29eaSKashyap Desai u8 flags; 104013ef29eaSKashyap Desai u8 reserved11[3]; 104113ef29eaSKashyap Desai }; 104213ef29eaSKashyap Desai 104313ef29eaSKashyap Desai #define MPI3_IOUNIT6_PAGEVERSION (0x00) 104413ef29eaSKashyap Desai #define MPI3_IOUNIT6_FLAGS_ACT_CABLE_PWR_EXC (0x01) 104513ef29eaSKashyap Desai #ifndef MPI3_IOUNIT8_DIGEST_MAX 104613ef29eaSKashyap Desai #define MPI3_IOUNIT8_DIGEST_MAX (1) 104713ef29eaSKashyap Desai #endif 104813ef29eaSKashyap Desai union mpi3_iounit8_digest { 104913ef29eaSKashyap Desai __le32 dword[16]; 105013ef29eaSKashyap Desai __le16 word[32]; 105113ef29eaSKashyap Desai u8 byte[64]; 105213ef29eaSKashyap Desai }; 105313ef29eaSKashyap Desai 105413ef29eaSKashyap Desai struct mpi3_io_unit_page8 { 105513ef29eaSKashyap Desai struct mpi3_config_page_header header; 105613ef29eaSKashyap Desai u8 sb_mode; 105713ef29eaSKashyap Desai u8 sb_state; 105813ef29eaSKashyap Desai __le16 reserved0a; 105913ef29eaSKashyap Desai u8 num_slots; 106013ef29eaSKashyap Desai u8 slots_available; 106113ef29eaSKashyap Desai u8 current_key_encryption_algo; 106213ef29eaSKashyap Desai u8 key_digest_hash_algo; 1063ee6f2d6bSSreekanth Reddy union mpi3_version_union current_svn; 1064ee6f2d6bSSreekanth Reddy __le32 reserved14; 106513ef29eaSKashyap Desai __le32 current_key[128]; 106613ef29eaSKashyap Desai union mpi3_iounit8_digest digest[MPI3_IOUNIT8_DIGEST_MAX]; 106713ef29eaSKashyap Desai }; 106813ef29eaSKashyap Desai 106913ef29eaSKashyap Desai #define MPI3_IOUNIT8_PAGEVERSION (0x00) 107013ef29eaSKashyap Desai #define MPI3_IOUNIT8_SBMODE_SECURE_DEBUG (0x04) 107113ef29eaSKashyap Desai #define MPI3_IOUNIT8_SBMODE_HARD_SECURE (0x02) 107213ef29eaSKashyap Desai #define MPI3_IOUNIT8_SBMODE_CONFIG_SECURE (0x01) 1073ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING (0x04) 107413ef29eaSKashyap Desai #define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING (0x02) 107513ef29eaSKashyap Desai #define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED (0x01) 107613ef29eaSKashyap Desai struct mpi3_io_unit_page9 { 107713ef29eaSKashyap Desai struct mpi3_config_page_header header; 107813ef29eaSKashyap Desai __le32 flags; 107913ef29eaSKashyap Desai __le16 first_device; 108013ef29eaSKashyap Desai __le16 reserved0e; 108113ef29eaSKashyap Desai }; 108213ef29eaSKashyap Desai 108313ef29eaSKashyap Desai #define MPI3_IOUNIT9_PAGEVERSION (0x00) 1084ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_MASK (0x00000006) 1085ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_SHIFT (1) 1086ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_NONE (0x00000000) 1087ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_RECEPTACLE (0x00000002) 1088ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_UBM_ENCLOSURE_ORDER_BACKPLANE_TYPE (0x00000004) 1089ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT9_FLAGS_VDFIRST_ENABLED (0x00000001) 109013ef29eaSKashyap Desai #define MPI3_IOUNIT9_FIRSTDEVICE_UNKNOWN (0xffff) 109104b27e53SSreekanth Reddy struct mpi3_io_unit_page10 { 109204b27e53SSreekanth Reddy struct mpi3_config_page_header header; 109304b27e53SSreekanth Reddy u8 flags; 109404b27e53SSreekanth Reddy u8 reserved09[3]; 109504b27e53SSreekanth Reddy __le32 silicon_id; 109604b27e53SSreekanth Reddy u8 fw_version_minor; 109704b27e53SSreekanth Reddy u8 fw_version_major; 109804b27e53SSreekanth Reddy u8 hw_version_minor; 109904b27e53SSreekanth Reddy u8 hw_version_major; 110004b27e53SSreekanth Reddy u8 part_number[16]; 110104b27e53SSreekanth Reddy }; 110204b27e53SSreekanth Reddy #define MPI3_IOUNIT10_PAGEVERSION (0x00) 110304b27e53SSreekanth Reddy #define MPI3_IOUNIT10_FLAGS_VALID (0x01) 110404b27e53SSreekanth Reddy #define MPI3_IOUNIT10_FLAGS_ACTIVEID_MASK (0x02) 110504b27e53SSreekanth Reddy #define MPI3_IOUNIT10_FLAGS_ACTIVEID_FIRST_REGION (0x00) 110604b27e53SSreekanth Reddy #define MPI3_IOUNIT10_FLAGS_ACTIVEID_SECOND_REGION (0x02) 110704b27e53SSreekanth Reddy #define MPI3_IOUNIT10_FLAGS_PBLP_EXPECTED (0x80) 110804b27e53SSreekanth Reddy #ifndef MPI3_IOUNIT11_PROFILE_MAX 110904b27e53SSreekanth Reddy #define MPI3_IOUNIT11_PROFILE_MAX (1) 111004b27e53SSreekanth Reddy #endif 111104b27e53SSreekanth Reddy struct mpi3_iounit11_profile { 111204b27e53SSreekanth Reddy u8 profile_identifier; 111304b27e53SSreekanth Reddy u8 reserved01[3]; 111404b27e53SSreekanth Reddy __le16 max_vds; 111504b27e53SSreekanth Reddy __le16 max_host_pds; 111604b27e53SSreekanth Reddy __le16 max_adv_host_pds; 111704b27e53SSreekanth Reddy __le16 max_raid_pds; 111804b27e53SSreekanth Reddy __le16 max_nvme; 111904b27e53SSreekanth Reddy __le16 max_outstanding_requests; 112004b27e53SSreekanth Reddy __le16 subsystem_id; 112104b27e53SSreekanth Reddy __le16 reserved12; 112204b27e53SSreekanth Reddy __le32 reserved14[2]; 112304b27e53SSreekanth Reddy }; 112404b27e53SSreekanth Reddy struct mpi3_io_unit_page11 { 112504b27e53SSreekanth Reddy struct mpi3_config_page_header header; 112604b27e53SSreekanth Reddy __le32 reserved08; 112704b27e53SSreekanth Reddy u8 num_profiles; 112804b27e53SSreekanth Reddy u8 current_profile_identifier; 112904b27e53SSreekanth Reddy __le16 reserved0e; 113004b27e53SSreekanth Reddy struct mpi3_iounit11_profile profile[MPI3_IOUNIT11_PROFILE_MAX]; 113104b27e53SSreekanth Reddy }; 113204b27e53SSreekanth Reddy #define MPI3_IOUNIT11_PAGEVERSION (0x00) 1133ee6f2d6bSSreekanth Reddy #ifndef MPI3_IOUNIT12_BUCKET_MAX 1134ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_BUCKET_MAX (1) 1135ee6f2d6bSSreekanth Reddy #endif 1136ee6f2d6bSSreekanth Reddy struct mpi3_iounit12_bucket { 1137ee6f2d6bSSreekanth Reddy u8 coalescing_depth; 1138ee6f2d6bSSreekanth Reddy u8 coalescing_timeout; 1139ee6f2d6bSSreekanth Reddy __le16 io_count_low_boundary; 1140ee6f2d6bSSreekanth Reddy __le32 reserved04; 1141ee6f2d6bSSreekanth Reddy }; 1142ee6f2d6bSSreekanth Reddy struct mpi3_io_unit_page12 { 1143ee6f2d6bSSreekanth Reddy struct mpi3_config_page_header header; 1144ee6f2d6bSSreekanth Reddy __le32 flags; 1145ee6f2d6bSSreekanth Reddy __le32 reserved0c[4]; 1146ee6f2d6bSSreekanth Reddy u8 num_buckets; 1147ee6f2d6bSSreekanth Reddy u8 reserved1d[3]; 1148ee6f2d6bSSreekanth Reddy struct mpi3_iounit12_bucket bucket[MPI3_IOUNIT12_BUCKET_MAX]; 1149ee6f2d6bSSreekanth Reddy }; 1150ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_PAGEVERSION (0x00) 1151ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_MASK (0x00000300) 1152ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_SHIFT (8) 1153ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_8 (0x00000000) 1154ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_16 (0x00000100) 1155ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_32 (0x00000200) 1156ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_NUMPASSES_64 (0x00000300) 1157ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_PASSPERIOD_MASK (0x00000003) 1158ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_PASSPERIOD_DISABLED (0x00000000) 1159ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_PASSPERIOD_500US (0x00000001) 1160ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_PASSPERIOD_1MS (0x00000002) 1161ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT12_FLAGS_PASSPERIOD_2MS (0x00000003) 1162ee6f2d6bSSreekanth Reddy #ifndef MPI3_IOUNIT13_FUNC_MAX 1163ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FUNC_MAX (1) 1164ee6f2d6bSSreekanth Reddy #endif 1165ee6f2d6bSSreekanth Reddy struct mpi3_iounit13_allowed_function { 1166ee6f2d6bSSreekanth Reddy __le16 sub_function; 1167ee6f2d6bSSreekanth Reddy u8 function_code; 1168e5f596bcSRanjan Kumar u8 function_flags; 1169ee6f2d6bSSreekanth Reddy }; 1170ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FUNCTION_FLAGS_ADMIN_BLOCKED (0x04) 1171ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FUNCTION_FLAGS_OOB_BLOCKED (0x02) 1172ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FUNCTION_FLAGS_CHECK_SUBFUNCTION_ENABLED (0x01) 1173ee6f2d6bSSreekanth Reddy struct mpi3_io_unit_page13 { 1174ee6f2d6bSSreekanth Reddy struct mpi3_config_page_header header; 1175ee6f2d6bSSreekanth Reddy __le16 flags; 1176ee6f2d6bSSreekanth Reddy __le16 reserved0a; 1177ee6f2d6bSSreekanth Reddy u8 num_allowed_functions; 1178ee6f2d6bSSreekanth Reddy u8 reserved0d[3]; 1179ee6f2d6bSSreekanth Reddy struct mpi3_iounit13_allowed_function allowed_function[MPI3_IOUNIT13_FUNC_MAX]; 1180ee6f2d6bSSreekanth Reddy }; 1181ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_PAGEVERSION (0x00) 1182ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FLAGS_ADMIN_BLOCKED (0x0002) 1183ee6f2d6bSSreekanth Reddy #define MPI3_IOUNIT13_FLAGS_OOB_BLOCKED (0x0001) 1184e5f596bcSRanjan Kumar #ifndef MPI3_IOUNIT14_MD_MAX 1185e5f596bcSRanjan Kumar #define MPI3_IOUNIT14_MD_MAX (1) 1186e5f596bcSRanjan Kumar #endif 1187e5f596bcSRanjan Kumar struct mpi3_iounit14_pagemetadata { 1188e5f596bcSRanjan Kumar u8 page_type; 1189e5f596bcSRanjan Kumar u8 page_number; 1190e5f596bcSRanjan Kumar u8 reserved02; 1191e5f596bcSRanjan Kumar u8 page_flags; 1192e5f596bcSRanjan Kumar }; 1193e5f596bcSRanjan Kumar #define MPI3_IOUNIT14_PAGEMETADATA_PAGEFLAGS_OOBWRITE_ALLOWED (0x02) 1194e5f596bcSRanjan Kumar #define MPI3_IOUNIT14_PAGEMETADATA_PAGEFLAGS_HOSTWRITE_ALLOWED (0x01) 1195e5f596bcSRanjan Kumar struct mpi3_io_unit_page14 { 1196e5f596bcSRanjan Kumar struct mpi3_config_page_header header; 1197e5f596bcSRanjan Kumar u8 flags; 1198e5f596bcSRanjan Kumar u8 reserved09[3]; 1199e5f596bcSRanjan Kumar u8 num_pages; 1200e5f596bcSRanjan Kumar u8 reserved0d[3]; 1201e5f596bcSRanjan Kumar struct mpi3_iounit14_pagemetadata page_metadata[MPI3_IOUNIT14_MD_MAX]; 1202e5f596bcSRanjan Kumar }; 1203e5f596bcSRanjan Kumar #define MPI3_IOUNIT14_PAGEVERSION (0x00) 1204e5f596bcSRanjan Kumar #define MPI3_IOUNIT14_FLAGS_READONLY (0x01) 1205e5f596bcSRanjan Kumar #ifndef MPI3_IOUNIT15_PBD_MAX 1206e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_PBD_MAX (1) 1207e5f596bcSRanjan Kumar #endif 1208e5f596bcSRanjan Kumar struct mpi3_io_unit_page15 { 1209e5f596bcSRanjan Kumar struct mpi3_config_page_header header; 1210e5f596bcSRanjan Kumar u8 flags; 1211e5f596bcSRanjan Kumar u8 reserved09[3]; 1212e5f596bcSRanjan Kumar __le32 reserved0c; 1213e5f596bcSRanjan Kumar u8 power_budgeting_capability; 1214e5f596bcSRanjan Kumar u8 reserved11[3]; 1215e5f596bcSRanjan Kumar u8 num_power_budget_data; 1216e5f596bcSRanjan Kumar u8 reserved15[3]; 1217e5f596bcSRanjan Kumar __le32 power_budget_data[MPI3_IOUNIT15_PBD_MAX]; 1218e5f596bcSRanjan Kumar }; 1219e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_PAGEVERSION (0x00) 1220e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_FLAGS_EPRINIT_INITREQUIRED (0x04) 1221e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_MASK (0x03) 1222e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_NOT_SUPPORTED (0x00) 1223e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITHOUT_POWER_BRAKE_GPIO (0x01) 1224e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_FLAGS_EPRSUPPORT_WITH_POWER_BRAKE_GPIO (0x02) 1225e5f596bcSRanjan Kumar #define MPI3_IOUNIT15_NUMPOWERBUDGETDATA_POWER_BUDGETING_DISABLED (0x00) 122613ef29eaSKashyap Desai struct mpi3_ioc_page0 { 122713ef29eaSKashyap Desai struct mpi3_config_page_header header; 122813ef29eaSKashyap Desai __le32 reserved08; 122913ef29eaSKashyap Desai __le16 vendor_id; 123013ef29eaSKashyap Desai __le16 device_id; 123113ef29eaSKashyap Desai u8 revision_id; 123213ef29eaSKashyap Desai u8 reserved11[3]; 123313ef29eaSKashyap Desai __le32 class_code; 123413ef29eaSKashyap Desai __le16 subsystem_vendor_id; 123513ef29eaSKashyap Desai __le16 subsystem_id; 123613ef29eaSKashyap Desai }; 123713ef29eaSKashyap Desai 123813ef29eaSKashyap Desai #define MPI3_IOC0_PAGEVERSION (0x00) 123913ef29eaSKashyap Desai struct mpi3_ioc_page1 { 124013ef29eaSKashyap Desai struct mpi3_config_page_header header; 124113ef29eaSKashyap Desai __le32 coalescing_timeout; 124213ef29eaSKashyap Desai u8 coalescing_depth; 124304b27e53SSreekanth Reddy u8 obsolete; 124413ef29eaSKashyap Desai __le16 reserved0e; 124513ef29eaSKashyap Desai }; 124613ef29eaSKashyap Desai #define MPI3_IOC1_PAGEVERSION (0x00) 124713ef29eaSKashyap Desai #ifndef MPI3_IOC2_EVENTMASK_WORDS 124813ef29eaSKashyap Desai #define MPI3_IOC2_EVENTMASK_WORDS (4) 124913ef29eaSKashyap Desai #endif 125013ef29eaSKashyap Desai struct mpi3_ioc_page2 { 125113ef29eaSKashyap Desai struct mpi3_config_page_header header; 125213ef29eaSKashyap Desai __le32 reserved08; 125313ef29eaSKashyap Desai __le16 sas_broadcast_primitive_masks; 125413ef29eaSKashyap Desai __le16 sas_notify_primitive_masks; 125513ef29eaSKashyap Desai __le32 event_masks[MPI3_IOC2_EVENTMASK_WORDS]; 125613ef29eaSKashyap Desai }; 125713ef29eaSKashyap Desai 125813ef29eaSKashyap Desai #define MPI3_IOC2_PAGEVERSION (0x00) 1259d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_FLAGS_ADMINRAIDPD_BLOCKED (0x0010) 1260d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_FLAGS_OOBRAIDPD_BLOCKED (0x0008) 1261d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_FLAGS_OOBRAIDVD_BLOCKED (0x0004) 1262d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_FLAGS_OOBADVHOSTPD_BLOCKED (0x0002) 1263d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_FLAGS_OOBHOSTPD_BLOCKED (0x0001) 1264d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_scsi { 1265d00ff7c3SSreekanth Reddy __le16 service_action; 1266d00ff7c3SSreekanth Reddy u8 operation_code; 1267d00ff7c3SSreekanth Reddy u8 command_flags; 1268d00ff7c3SSreekanth Reddy }; 1269d00ff7c3SSreekanth Reddy 1270d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_ata { 1271d00ff7c3SSreekanth Reddy u8 subcommand; 1272d00ff7c3SSreekanth Reddy u8 reserved01; 1273d00ff7c3SSreekanth Reddy u8 command; 1274d00ff7c3SSreekanth Reddy u8 command_flags; 1275d00ff7c3SSreekanth Reddy }; 1276d00ff7c3SSreekanth Reddy 1277d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_nvme { 1278d00ff7c3SSreekanth Reddy u8 reserved00; 1279d00ff7c3SSreekanth Reddy u8 nvme_cmd_flags; 1280d00ff7c3SSreekanth Reddy u8 op_code; 1281d00ff7c3SSreekanth Reddy u8 command_flags; 1282d00ff7c3SSreekanth Reddy }; 1283d00ff7c3SSreekanth Reddy 1284d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_MASK (0x80) 1285d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_IO (0x00) 1286d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_ADMIN (0x80) 1287d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_CMDSET_MASK (0x3f) 1288d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_CMDSET_NVM (0x00) 1289d00ff7c3SSreekanth Reddy union mpi3_allowed_cmd { 1290d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_scsi scsi; 1291d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_ata ata; 1292d00ff7c3SSreekanth Reddy struct mpi3_allowed_cmd_nvme nvme; 1293d00ff7c3SSreekanth Reddy }; 1294d00ff7c3SSreekanth Reddy 1295d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_ADMINRAIDPD_BLOCKED (0x20) 1296d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_OOBRAIDPD_BLOCKED (0x10) 1297d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_OOBRAIDVD_BLOCKED (0x08) 1298d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_OOBADVHOSTPD_BLOCKED (0x04) 1299d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_OOBHOSTPD_BLOCKED (0x02) 1300d00ff7c3SSreekanth Reddy #define MPI3_DRIVER_ALLOWEDCMD_CMDFLAGS_CHECKSUBCMD_ENABLED (0x01) 1301d00ff7c3SSreekanth Reddy #ifndef MPI3_ALLOWED_CMDS_MAX 1302d00ff7c3SSreekanth Reddy #define MPI3_ALLOWED_CMDS_MAX (1) 1303d00ff7c3SSreekanth Reddy #endif 1304d00ff7c3SSreekanth Reddy struct mpi3_driver_page0 { 130513ef29eaSKashyap Desai struct mpi3_config_page_header header; 130613ef29eaSKashyap Desai __le32 bsd_options; 130713ef29eaSKashyap Desai u8 ssu_timeout; 130813ef29eaSKashyap Desai u8 io_timeout; 130913ef29eaSKashyap Desai u8 tur_retries; 131013ef29eaSKashyap Desai u8 tur_interval; 131113ef29eaSKashyap Desai u8 reserved10; 131213ef29eaSKashyap Desai u8 security_key_timeout; 131313ef29eaSKashyap Desai __le16 reserved12; 131413ef29eaSKashyap Desai __le32 reserved14; 131513ef29eaSKashyap Desai __le32 reserved18; 131613ef29eaSKashyap Desai }; 1317d00ff7c3SSreekanth Reddy #define MPI3_DRIVER0_PAGEVERSION (0x00) 1318ee6f2d6bSSreekanth Reddy #define MPI3_DRIVER0_BSDOPTS_HEADLESS_MODE_ENABLE (0x00000008) 131904b27e53SSreekanth Reddy #define MPI3_DRIVER0_BSDOPTS_DIS_HII_CONFIG_UTIL (0x00000004) 1320d00ff7c3SSreekanth Reddy #define MPI3_DRIVER0_BSDOPTS_REGISTRATION_MASK (0x00000003) 1321d00ff7c3SSreekanth Reddy #define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_DEVS (0x00000000) 1322d00ff7c3SSreekanth Reddy #define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_ONLY (0x00000001) 1323e5f596bcSRanjan Kumar #define MPI3_DRIVER0_BSDOPTS_REGISTRATION_IOC_AND_INTERNAL_DEVS (0x00000002) 1324d00ff7c3SSreekanth Reddy struct mpi3_driver_page1 { 1325d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1326d00ff7c3SSreekanth Reddy __le32 flags; 1327d00ff7c3SSreekanth Reddy __le32 reserved0c; 1328d00ff7c3SSreekanth Reddy __le16 host_diag_trace_max_size; 1329d00ff7c3SSreekanth Reddy __le16 host_diag_trace_min_size; 1330d00ff7c3SSreekanth Reddy __le16 host_diag_trace_decrement_size; 1331d00ff7c3SSreekanth Reddy __le16 reserved16; 1332d00ff7c3SSreekanth Reddy __le16 host_diag_fw_max_size; 1333d00ff7c3SSreekanth Reddy __le16 host_diag_fw_min_size; 1334d00ff7c3SSreekanth Reddy __le16 host_diag_fw_decrement_size; 1335d00ff7c3SSreekanth Reddy __le16 reserved1e; 1336d00ff7c3SSreekanth Reddy __le16 host_diag_driver_max_size; 1337d00ff7c3SSreekanth Reddy __le16 host_diag_driver_min_size; 1338d00ff7c3SSreekanth Reddy __le16 host_diag_driver_decrement_size; 1339d00ff7c3SSreekanth Reddy __le16 reserved26; 1340d00ff7c3SSreekanth Reddy }; 1341d00ff7c3SSreekanth Reddy 1342d00ff7c3SSreekanth Reddy #define MPI3_DRIVER1_PAGEVERSION (0x00) 1343d00ff7c3SSreekanth Reddy #ifndef MPI3_DRIVER2_TRIGGER_MAX 1344d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_MAX (1) 1345d00ff7c3SSreekanth Reddy #endif 1346d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_event { 1347d00ff7c3SSreekanth Reddy u8 type; 1348d00ff7c3SSreekanth Reddy u8 flags; 1349d00ff7c3SSreekanth Reddy u8 reserved02; 1350d00ff7c3SSreekanth Reddy u8 event; 1351d00ff7c3SSreekanth Reddy __le32 reserved04[3]; 1352d00ff7c3SSreekanth Reddy }; 1353d00ff7c3SSreekanth Reddy 1354d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_scsi_sense { 1355d00ff7c3SSreekanth Reddy u8 type; 1356d00ff7c3SSreekanth Reddy u8 flags; 1357d00ff7c3SSreekanth Reddy __le16 reserved02; 1358d00ff7c3SSreekanth Reddy u8 ascq; 1359d00ff7c3SSreekanth Reddy u8 asc; 1360d00ff7c3SSreekanth Reddy u8 sense_key; 1361d00ff7c3SSreekanth Reddy u8 reserved07; 1362d00ff7c3SSreekanth Reddy __le32 reserved08[2]; 1363d00ff7c3SSreekanth Reddy }; 1364d00ff7c3SSreekanth Reddy 1365d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_SCSI_SENSE_ASCQ_MATCH_ALL (0xff) 1366d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_SCSI_SENSE_ASC_MATCH_ALL (0xff) 1367d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_SCSI_SENSE_SENSE_KEY_MATCH_ALL (0xff) 1368d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_reply { 1369d00ff7c3SSreekanth Reddy u8 type; 1370d00ff7c3SSreekanth Reddy u8 flags; 1371d00ff7c3SSreekanth Reddy __le16 ioc_status; 1372d00ff7c3SSreekanth Reddy __le32 ioc_log_info; 1373d00ff7c3SSreekanth Reddy __le32 ioc_log_info_mask; 1374d00ff7c3SSreekanth Reddy __le32 reserved0c; 1375d00ff7c3SSreekanth Reddy }; 1376d00ff7c3SSreekanth Reddy 1377d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_REPLY_IOCSTATUS_MATCH_ALL (0xffff) 1378d00ff7c3SSreekanth Reddy union mpi3_driver2_trigger_element { 1379d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_event event; 1380d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_scsi_sense scsi_sense; 1381d00ff7c3SSreekanth Reddy struct mpi3_driver2_trigger_reply reply; 1382d00ff7c3SSreekanth Reddy }; 1383d00ff7c3SSreekanth Reddy 1384d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_TYPE_EVENT (0x00) 1385d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_TYPE_SCSI_SENSE (0x01) 1386d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_TYPE_REPLY (0x02) 1387d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_FLAGS_DIAG_TRACE_RELEASE (0x02) 1388d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_TRIGGER_FLAGS_DIAG_FW_RELEASE (0x01) 1389d00ff7c3SSreekanth Reddy struct mpi3_driver_page2 { 1390d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1391e5f596bcSRanjan Kumar __le64 global_trigger; 1392d00ff7c3SSreekanth Reddy __le32 reserved10[3]; 1393d00ff7c3SSreekanth Reddy u8 num_triggers; 1394d00ff7c3SSreekanth Reddy u8 reserved1d[3]; 1395d00ff7c3SSreekanth Reddy union mpi3_driver2_trigger_element trigger[MPI3_DRIVER2_TRIGGER_MAX]; 1396d00ff7c3SSreekanth Reddy }; 1397d00ff7c3SSreekanth Reddy 1398d00ff7c3SSreekanth Reddy #define MPI3_DRIVER2_PAGEVERSION (0x00) 1399e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_DIAG_TRACE_RELEASE (0x8000000000000000ULL) 1400e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_DIAG_FW_RELEASE (0x4000000000000000ULL) 1401e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_SNAPDUMP_ENABLED (0x2000000000000000ULL) 1402e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_POST_DIAG_TRACE_DISABLED (0x1000000000000000ULL) 1403e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_POST_DIAG_FW_DISABLED (0x0800000000000000ULL) 1404e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_DEVICE_REMOVAL_ENABLED (0x0000000000000004ULL) 1405e5f596bcSRanjan Kumar #define MPI3_DRIVER2_GLOBALTRIGGER_TASK_MANAGEMENT_ENABLED (0x0000000000000002ULL) 1406d00ff7c3SSreekanth Reddy struct mpi3_driver_page10 { 1407d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1408d00ff7c3SSreekanth Reddy __le16 flags; 1409d00ff7c3SSreekanth Reddy __le16 reserved0a; 1410d00ff7c3SSreekanth Reddy u8 num_allowed_commands; 1411d00ff7c3SSreekanth Reddy u8 reserved0d[3]; 1412d00ff7c3SSreekanth Reddy union mpi3_allowed_cmd allowed_command[MPI3_ALLOWED_CMDS_MAX]; 1413d00ff7c3SSreekanth Reddy }; 1414d00ff7c3SSreekanth Reddy 1415d00ff7c3SSreekanth Reddy #define MPI3_DRIVER10_PAGEVERSION (0x00) 1416d00ff7c3SSreekanth Reddy struct mpi3_driver_page20 { 1417d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1418d00ff7c3SSreekanth Reddy __le16 flags; 1419d00ff7c3SSreekanth Reddy __le16 reserved0a; 1420d00ff7c3SSreekanth Reddy u8 num_allowed_commands; 1421d00ff7c3SSreekanth Reddy u8 reserved0d[3]; 1422d00ff7c3SSreekanth Reddy union mpi3_allowed_cmd allowed_command[MPI3_ALLOWED_CMDS_MAX]; 1423d00ff7c3SSreekanth Reddy }; 1424d00ff7c3SSreekanth Reddy 1425d00ff7c3SSreekanth Reddy #define MPI3_DRIVER20_PAGEVERSION (0x00) 1426d00ff7c3SSreekanth Reddy struct mpi3_driver_page30 { 1427d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1428d00ff7c3SSreekanth Reddy __le16 flags; 1429d00ff7c3SSreekanth Reddy __le16 reserved0a; 1430d00ff7c3SSreekanth Reddy u8 num_allowed_commands; 1431d00ff7c3SSreekanth Reddy u8 reserved0d[3]; 1432d00ff7c3SSreekanth Reddy union mpi3_allowed_cmd allowed_command[MPI3_ALLOWED_CMDS_MAX]; 1433d00ff7c3SSreekanth Reddy }; 1434d00ff7c3SSreekanth Reddy 1435d00ff7c3SSreekanth Reddy #define MPI3_DRIVER30_PAGEVERSION (0x00) 143613ef29eaSKashyap Desai union mpi3_security_mac { 143713ef29eaSKashyap Desai __le32 dword[16]; 143813ef29eaSKashyap Desai __le16 word[32]; 143913ef29eaSKashyap Desai u8 byte[64]; 144013ef29eaSKashyap Desai }; 144113ef29eaSKashyap Desai 144213ef29eaSKashyap Desai union mpi3_security_nonce { 144313ef29eaSKashyap Desai __le32 dword[16]; 144413ef29eaSKashyap Desai __le16 word[32]; 144513ef29eaSKashyap Desai u8 byte[64]; 144613ef29eaSKashyap Desai }; 144713ef29eaSKashyap Desai 1448e5f596bcSRanjan Kumar union mpi3_security_root_digest { 1449e5f596bcSRanjan Kumar __le32 dword[16]; 1450e5f596bcSRanjan Kumar __le16 word[32]; 1451e5f596bcSRanjan Kumar u8 byte[64]; 1452e5f596bcSRanjan Kumar }; 1453e5f596bcSRanjan Kumar 145413ef29eaSKashyap Desai union mpi3_security0_cert_chain { 145513ef29eaSKashyap Desai __le32 dword[1024]; 145613ef29eaSKashyap Desai __le16 word[2048]; 145713ef29eaSKashyap Desai u8 byte[4096]; 145813ef29eaSKashyap Desai }; 145913ef29eaSKashyap Desai 146013ef29eaSKashyap Desai struct mpi3_security_page0 { 146113ef29eaSKashyap Desai struct mpi3_config_page_header header; 146213ef29eaSKashyap Desai u8 slot_num_group; 146313ef29eaSKashyap Desai u8 slot_num; 146413ef29eaSKashyap Desai __le16 cert_chain_length; 146513ef29eaSKashyap Desai u8 cert_chain_flags; 146613ef29eaSKashyap Desai u8 reserved0d[3]; 146713ef29eaSKashyap Desai __le32 base_asym_algo; 146813ef29eaSKashyap Desai __le32 base_hash_algo; 146913ef29eaSKashyap Desai __le32 reserved18[4]; 147013ef29eaSKashyap Desai union mpi3_security_mac mac; 147113ef29eaSKashyap Desai union mpi3_security_nonce nonce; 147213ef29eaSKashyap Desai union mpi3_security0_cert_chain certificate_chain; 147313ef29eaSKashyap Desai }; 147413ef29eaSKashyap Desai 147513ef29eaSKashyap Desai #define MPI3_SECURITY0_PAGEVERSION (0x00) 147613ef29eaSKashyap Desai #define MPI3_SECURITY0_CERTCHAIN_FLAGS_AUTH_API_MASK (0x0e) 147713ef29eaSKashyap Desai #define MPI3_SECURITY0_CERTCHAIN_FLAGS_AUTH_API_UNUSED (0x00) 147813ef29eaSKashyap Desai #define MPI3_SECURITY0_CERTCHAIN_FLAGS_AUTH_API_CERBERUS (0x02) 147913ef29eaSKashyap Desai #define MPI3_SECURITY0_CERTCHAIN_FLAGS_AUTH_API_SPDM (0x04) 148013ef29eaSKashyap Desai #define MPI3_SECURITY0_CERTCHAIN_FLAGS_SEALED (0x01) 148113ef29eaSKashyap Desai #ifndef MPI3_SECURITY1_KEY_RECORD_MAX 148213ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_MAX 1 148313ef29eaSKashyap Desai #endif 148413ef29eaSKashyap Desai #ifndef MPI3_SECURITY1_PAD_MAX 1485*6f81b1cfSRanjan Kumar #define MPI3_SECURITY1_PAD_MAX 4 148613ef29eaSKashyap Desai #endif 148713ef29eaSKashyap Desai union mpi3_security1_key_data { 148813ef29eaSKashyap Desai __le32 dword[128]; 148913ef29eaSKashyap Desai __le16 word[256]; 149013ef29eaSKashyap Desai u8 byte[512]; 149113ef29eaSKashyap Desai }; 149213ef29eaSKashyap Desai 149313ef29eaSKashyap Desai struct mpi3_security1_key_record { 149413ef29eaSKashyap Desai u8 flags; 149513ef29eaSKashyap Desai u8 consumer; 149613ef29eaSKashyap Desai __le16 key_data_size; 149713ef29eaSKashyap Desai __le32 additional_key_data; 149813ef29eaSKashyap Desai __le32 reserved08[2]; 149913ef29eaSKashyap Desai union mpi3_security1_key_data key_data; 150013ef29eaSKashyap Desai }; 150113ef29eaSKashyap Desai 150213ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_MASK (0x1f) 150313ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_NOT_VALID (0x00) 150413ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_HMAC (0x01) 150513ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_AES (0x02) 150613ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_ECDSA_PRIVATE (0x03) 150713ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_FLAGS_TYPE_ECDSA_PUBLIC (0x04) 150813ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_CONSUMER_NOT_VALID (0x00) 150913ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_CONSUMER_SAFESTORE (0x01) 151013ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_CONSUMER_CERT_CHAIN (0x02) 1511d00ff7c3SSreekanth Reddy #define MPI3_SECURITY1_KEY_RECORD_CONSUMER_DEVICE_KEY (0x03) 151213ef29eaSKashyap Desai #define MPI3_SECURITY1_KEY_RECORD_CONSUMER_CACHE_OFFLOAD (0x04) 151313ef29eaSKashyap Desai struct mpi3_security_page1 { 151413ef29eaSKashyap Desai struct mpi3_config_page_header header; 151513ef29eaSKashyap Desai __le32 reserved08[2]; 151613ef29eaSKashyap Desai union mpi3_security_mac mac; 151713ef29eaSKashyap Desai union mpi3_security_nonce nonce; 151813ef29eaSKashyap Desai u8 num_keys; 151913ef29eaSKashyap Desai u8 reserved91[3]; 152013ef29eaSKashyap Desai __le32 reserved94[3]; 152113ef29eaSKashyap Desai struct mpi3_security1_key_record key_record[MPI3_SECURITY1_KEY_RECORD_MAX]; 152213ef29eaSKashyap Desai u8 pad[MPI3_SECURITY1_PAD_MAX]; 152313ef29eaSKashyap Desai }; 152413ef29eaSKashyap Desai 152513ef29eaSKashyap Desai #define MPI3_SECURITY1_PAGEVERSION (0x00) 1526e5f596bcSRanjan Kumar #ifndef MPI3_SECURITY2_TRUSTED_ROOT_MAX 1527e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTED_ROOT_MAX 1 1528e5f596bcSRanjan Kumar #endif 1529e5f596bcSRanjan Kumar struct mpi3_security2_trusted_root { 1530e5f596bcSRanjan Kumar u8 level; 1531e5f596bcSRanjan Kumar u8 hash_algorithm; 1532e5f596bcSRanjan Kumar __le16 trusted_root_flags; 1533e5f596bcSRanjan Kumar __le32 reserved04[3]; 1534e5f596bcSRanjan Kumar union mpi3_security_root_digest root_digest; 1535e5f596bcSRanjan Kumar }; 1536e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_MASK (0x0006) 1537e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_SHIFT (1) 1538e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_HA_FIELD (0x0000) 1539e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_AKI (0x0002) 1540e5f596bcSRanjan Kumar #define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_USERPROVISIONED_YES (0x0001) 1541e5f596bcSRanjan Kumar struct mpi3_security_page2 { 1542e5f596bcSRanjan Kumar struct mpi3_config_page_header header; 1543e5f596bcSRanjan Kumar __le32 reserved08[2]; 1544e5f596bcSRanjan Kumar union mpi3_security_mac mac; 1545e5f596bcSRanjan Kumar union mpi3_security_nonce nonce; 1546e5f596bcSRanjan Kumar __le32 reserved90[3]; 1547e5f596bcSRanjan Kumar u8 num_roots; 1548e5f596bcSRanjan Kumar u8 reserved9d[3]; 1549e5f596bcSRanjan Kumar struct mpi3_security2_trusted_root trusted_root[MPI3_SECURITY2_TRUSTED_ROOT_MAX]; 1550e5f596bcSRanjan Kumar }; 1551e5f596bcSRanjan Kumar #define MPI3_SECURITY2_PAGEVERSION (0x00) 155213ef29eaSKashyap Desai struct mpi3_sas_io_unit0_phy_data { 155313ef29eaSKashyap Desai u8 io_unit_port; 155413ef29eaSKashyap Desai u8 port_flags; 155513ef29eaSKashyap Desai u8 phy_flags; 155613ef29eaSKashyap Desai u8 negotiated_link_rate; 155713ef29eaSKashyap Desai __le16 controller_phy_device_info; 155813ef29eaSKashyap Desai __le16 reserved06; 155913ef29eaSKashyap Desai __le16 attached_dev_handle; 156013ef29eaSKashyap Desai __le16 controller_dev_handle; 156113ef29eaSKashyap Desai __le32 discovery_status; 156213ef29eaSKashyap Desai __le32 reserved10; 156313ef29eaSKashyap Desai }; 156413ef29eaSKashyap Desai 156513ef29eaSKashyap Desai #ifndef MPI3_SAS_IO_UNIT0_PHY_MAX 156613ef29eaSKashyap Desai #define MPI3_SAS_IO_UNIT0_PHY_MAX (1) 156713ef29eaSKashyap Desai #endif 156813ef29eaSKashyap Desai struct mpi3_sas_io_unit_page0 { 156913ef29eaSKashyap Desai struct mpi3_config_page_header header; 157013ef29eaSKashyap Desai __le32 reserved08; 157113ef29eaSKashyap Desai u8 num_phys; 1572d00ff7c3SSreekanth Reddy u8 init_status; 1573d00ff7c3SSreekanth Reddy __le16 reserved0e; 157413ef29eaSKashyap Desai struct mpi3_sas_io_unit0_phy_data phy_data[MPI3_SAS_IO_UNIT0_PHY_MAX]; 157513ef29eaSKashyap Desai }; 157613ef29eaSKashyap Desai 157713ef29eaSKashyap Desai #define MPI3_SASIOUNIT0_PAGEVERSION (0x00) 1578d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_NO_ERRORS (0x00) 1579d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_NEEDS_INITIALIZATION (0x01) 1580d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_NO_TARGETS_ALLOCATED (0x02) 1581d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_BAD_NUM_PHYS (0x04) 1582d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_UNSUPPORTED_CONFIG (0x05) 1583d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_HOST_PHYS_ENABLED (0x06) 1584d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_PRODUCT_SPECIFIC_MIN (0xf0) 1585d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_INITSTATUS_PRODUCT_SPECIFIC_MAX (0xff) 158613ef29eaSKashyap Desai #define MPI3_SASIOUNIT0_PORTFLAGS_DISC_IN_PROGRESS (0x08) 1587d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG_MASK (0x03) 1588d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG_IOUNIT1 (0x00) 1589d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG_DYNAMIC (0x01) 1590d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG_BACKPLANE (0x02) 159113ef29eaSKashyap Desai #define MPI3_SASIOUNIT0_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 159213ef29eaSKashyap Desai #define MPI3_SASIOUNIT0_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 159313ef29eaSKashyap Desai #define MPI3_SASIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 1594d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PHYFLAGS_VIRTUAL_PHY (0x02) 1595d00ff7c3SSreekanth Reddy #define MPI3_SASIOUNIT0_PHYFLAGS_HOST_PHY (0x01) 159613ef29eaSKashyap Desai struct mpi3_sas_io_unit1_phy_data { 159713ef29eaSKashyap Desai u8 io_unit_port; 159813ef29eaSKashyap Desai u8 port_flags; 159913ef29eaSKashyap Desai u8 phy_flags; 160013ef29eaSKashyap Desai u8 max_min_link_rate; 160113ef29eaSKashyap Desai __le16 controller_phy_device_info; 160213ef29eaSKashyap Desai __le16 max_target_port_connect_time; 160313ef29eaSKashyap Desai __le32 reserved08; 160413ef29eaSKashyap Desai }; 160513ef29eaSKashyap Desai 160613ef29eaSKashyap Desai #ifndef MPI3_SAS_IO_UNIT1_PHY_MAX 160713ef29eaSKashyap Desai #define MPI3_SAS_IO_UNIT1_PHY_MAX (1) 160813ef29eaSKashyap Desai #endif 160913ef29eaSKashyap Desai struct mpi3_sas_io_unit_page1 { 161013ef29eaSKashyap Desai struct mpi3_config_page_header header; 161113ef29eaSKashyap Desai __le16 control_flags; 161213ef29eaSKashyap Desai __le16 sas_narrow_max_queue_depth; 161313ef29eaSKashyap Desai __le16 additional_control_flags; 161413ef29eaSKashyap Desai __le16 sas_wide_max_queue_depth; 161513ef29eaSKashyap Desai u8 num_phys; 161613ef29eaSKashyap Desai u8 sata_max_q_depth; 161713ef29eaSKashyap Desai __le16 reserved12; 161813ef29eaSKashyap Desai struct mpi3_sas_io_unit1_phy_data phy_data[MPI3_SAS_IO_UNIT1_PHY_MAX]; 161913ef29eaSKashyap Desai }; 162013ef29eaSKashyap Desai 162113ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_PAGEVERSION (0x00) 162213ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_CONTROLLER_DEVICE_SELF_TEST (0x8000) 162313ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SATA_SW_PRESERVE (0x1000) 162413ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080) 162513ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SATA_SMART_REQUIRED (0x0040) 162613ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SATA_NCQ_REQUIRED (0x0020) 162713ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SATA_FUA_REQUIRED (0x0010) 162813ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_TABLE_SUBTRACTIVE_ILLEGAL (0x0008) 162913ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_SUBTRACTIVE_ILLEGAL (0x0004) 163013ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_FIRST_LVL_DISC_ONLY (0x0002) 163113ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_HARD_RESET_MASK (0x0001) 163213ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_HARD_RESET_DEVICE_NAME (0x0000) 163313ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_CONTROL_HARD_RESET_SAS_ADDRESS (0x0001) 163413ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_DA_PERSIST_CONNECT (0x0100) 163513ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_MULTI_PORT_DOMAIN_ILLEGAL (0x0080) 163613ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_SATA_ASYNCHROUNOUS_NOTIFICATION (0x0040) 163713ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_INVALID_TOPOLOGY_CORRECTION (0x0020) 163813ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_PORT_ENABLE_ONLY_SATA_LINK_RESET (0x0010) 163913ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_OTHER_AFFILIATION_SATA_LINK_RESET (0x0008) 164013ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_SELF_AFFILIATION_SATA_LINK_RESET (0x0004) 164113ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_NO_AFFILIATION_SATA_LINK_RESET (0x0002) 164213ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_ACONTROL_ALLOW_TABLE_TO_TABLE (0x0001) 164313ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_PORT_FLAGS_AUTO_PORT_CONFIG (0x01) 164413ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_PHYFLAGS_INIT_PERSIST_CONNECT (0x40) 164513ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_PHYFLAGS_TARG_PERSIST_CONNECT (0x20) 164613ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 164713ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MAX_RATE_MASK (0xf0) 164813ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MAX_RATE_SHIFT (4) 164913ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MAX_RATE_6_0 (0xa0) 165013ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MAX_RATE_12_0 (0xb0) 165113ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MAX_RATE_22_5 (0xc0) 165213ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MIN_RATE_MASK (0x0f) 165313ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MIN_RATE_6_0 (0x0a) 165413ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MIN_RATE_12_0 (0x0b) 165513ef29eaSKashyap Desai #define MPI3_SASIOUNIT1_MMLR_MIN_RATE_22_5 (0x0c) 165613ef29eaSKashyap Desai struct mpi3_sas_io_unit2_phy_pm_settings { 165713ef29eaSKashyap Desai u8 control_flags; 165813ef29eaSKashyap Desai u8 reserved01; 165913ef29eaSKashyap Desai __le16 inactivity_timer_exponent; 166013ef29eaSKashyap Desai u8 sata_partial_timeout; 166113ef29eaSKashyap Desai u8 reserved05; 166213ef29eaSKashyap Desai u8 sata_slumber_timeout; 166313ef29eaSKashyap Desai u8 reserved07; 166413ef29eaSKashyap Desai u8 sas_partial_timeout; 166513ef29eaSKashyap Desai u8 reserved09; 166613ef29eaSKashyap Desai u8 sas_slumber_timeout; 166713ef29eaSKashyap Desai u8 reserved0b; 166813ef29eaSKashyap Desai }; 166913ef29eaSKashyap Desai 167013ef29eaSKashyap Desai #ifndef MPI3_SAS_IO_UNIT2_PHY_MAX 167113ef29eaSKashyap Desai #define MPI3_SAS_IO_UNIT2_PHY_MAX (1) 167213ef29eaSKashyap Desai #endif 167313ef29eaSKashyap Desai struct mpi3_sas_io_unit_page2 { 167413ef29eaSKashyap Desai struct mpi3_config_page_header header; 167513ef29eaSKashyap Desai u8 num_phys; 167613ef29eaSKashyap Desai u8 reserved09[3]; 167713ef29eaSKashyap Desai __le32 reserved0c; 167813ef29eaSKashyap Desai struct mpi3_sas_io_unit2_phy_pm_settings sas_phy_power_management_settings[MPI3_SAS_IO_UNIT2_PHY_MAX]; 167913ef29eaSKashyap Desai }; 168013ef29eaSKashyap Desai 168113ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_PAGEVERSION (0x00) 168213ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_CONTROL_SAS_SLUMBER_ENABLE (0x08) 168313ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_CONTROL_SAS_PARTIAL_ENABLE (0x04) 168413ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_CONTROL_SATA_SLUMBER_ENABLE (0x02) 168513ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_CONTROL_SATA_PARTIAL_ENABLE (0x01) 168613ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SAS_SLUMBER_MASK (0x7000) 168713ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SAS_SLUMBER_SHIFT (12) 168813ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SAS_PARTIAL_MASK (0x0700) 168913ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SAS_PARTIAL_SHIFT (8) 169013ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SATA_SLUMBER_MASK (0x0070) 169113ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SATA_SLUMBER_SHIFT (4) 169213ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SATA_PARTIAL_MASK (0x0007) 169313ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_SATA_PARTIAL_SHIFT (0) 169413ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_TEN_SECONDS (7) 169513ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_ONE_SECOND (6) 169613ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_HUNDRED_MILLISECONDS (5) 169713ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_TEN_MILLISECONDS (4) 169813ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_ONE_MILLISECOND (3) 169913ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_HUNDRED_MICROSECONDS (2) 170013ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_TEN_MICROSECONDS (1) 170113ef29eaSKashyap Desai #define MPI3_SASIOUNIT2_ITE_EXP_ONE_MICROSECOND (0) 170213ef29eaSKashyap Desai struct mpi3_sas_io_unit_page3 { 170313ef29eaSKashyap Desai struct mpi3_config_page_header header; 170413ef29eaSKashyap Desai __le32 reserved08; 170513ef29eaSKashyap Desai __le32 power_management_capabilities; 170613ef29eaSKashyap Desai }; 170713ef29eaSKashyap Desai 170813ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PAGEVERSION (0x00) 170913ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_HOST_SAS_SLUMBER_MODE (0x00000800) 171013ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_HOST_SAS_PARTIAL_MODE (0x00000400) 171113ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_HOST_SATA_SLUMBER_MODE (0x00000200) 171213ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_HOST_SATA_PARTIAL_MODE (0x00000100) 171313ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_IOUNIT_SAS_SLUMBER_MODE (0x00000008) 171413ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_IOUNIT_SAS_PARTIAL_MODE (0x00000004) 171513ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_IOUNIT_SATA_SLUMBER_MODE (0x00000002) 171613ef29eaSKashyap Desai #define MPI3_SASIOUNIT3_PM_IOUNIT_SATA_PARTIAL_MODE (0x00000001) 171713ef29eaSKashyap Desai struct mpi3_sas_expander_page0 { 171813ef29eaSKashyap Desai struct mpi3_config_page_header header; 171913ef29eaSKashyap Desai u8 io_unit_port; 172013ef29eaSKashyap Desai u8 report_gen_length; 172113ef29eaSKashyap Desai __le16 enclosure_handle; 172213ef29eaSKashyap Desai __le32 reserved0c; 172313ef29eaSKashyap Desai __le64 sas_address; 172413ef29eaSKashyap Desai __le32 discovery_status; 172513ef29eaSKashyap Desai __le16 dev_handle; 172613ef29eaSKashyap Desai __le16 parent_dev_handle; 172713ef29eaSKashyap Desai __le16 expander_change_count; 172813ef29eaSKashyap Desai __le16 expander_route_indexes; 172913ef29eaSKashyap Desai u8 num_phys; 173013ef29eaSKashyap Desai u8 sas_level; 173113ef29eaSKashyap Desai __le16 flags; 173213ef29eaSKashyap Desai __le16 stp_bus_inactivity_time_limit; 173313ef29eaSKashyap Desai __le16 stp_max_connect_time_limit; 173413ef29eaSKashyap Desai __le16 stp_smp_nexus_loss_time; 173513ef29eaSKashyap Desai __le16 max_num_routed_sas_addresses; 173613ef29eaSKashyap Desai __le64 active_zone_manager_sas_address; 173713ef29eaSKashyap Desai __le16 zone_lock_inactivity_limit; 173813ef29eaSKashyap Desai __le16 reserved3a; 173913ef29eaSKashyap Desai u8 time_to_reduced_func; 174013ef29eaSKashyap Desai u8 initial_time_to_reduced_func; 174113ef29eaSKashyap Desai u8 max_reduced_func_time; 174213ef29eaSKashyap Desai u8 exp_status; 174313ef29eaSKashyap Desai }; 174413ef29eaSKashyap Desai 174513ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_PAGEVERSION (0x00) 174613ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_REDUCED_FUNCTIONALITY (0x2000) 174713ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_ZONE_LOCKED (0x1000) 174813ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_SUPPORTED_PHYSICAL_PRES (0x0800) 174913ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_ASSERTED_PHYSICAL_PRES (0x0400) 175013ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_ZONING_SUPPORT (0x0200) 175113ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_ENABLED_ZONING (0x0100) 175213ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_TABLE_TO_TABLE_SUPPORT (0x0080) 175313ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_CONNECTOR_END_DEVICE (0x0010) 175413ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_OTHERS_CONFIG (0x0004) 175513ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_CONFIG_IN_PROGRESS (0x0002) 175613ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_FLAGS_ROUTE_TABLE_CONFIG (0x0001) 175713ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_ES_NOT_RESPONDING (0x02) 175813ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_ES_RESPONDING (0x03) 175913ef29eaSKashyap Desai #define MPI3_SASEXPANDER0_ES_DELAY_NOT_RESPONDING (0x04) 176013ef29eaSKashyap Desai struct mpi3_sas_expander_page1 { 176113ef29eaSKashyap Desai struct mpi3_config_page_header header; 176213ef29eaSKashyap Desai u8 io_unit_port; 176313ef29eaSKashyap Desai u8 reserved09[3]; 176413ef29eaSKashyap Desai u8 num_phys; 176513ef29eaSKashyap Desai u8 phy; 176613ef29eaSKashyap Desai __le16 num_table_entries_programmed; 176713ef29eaSKashyap Desai u8 programmed_link_rate; 176813ef29eaSKashyap Desai u8 hw_link_rate; 176913ef29eaSKashyap Desai __le16 attached_dev_handle; 177013ef29eaSKashyap Desai __le32 phy_info; 177113ef29eaSKashyap Desai __le16 attached_device_info; 177213ef29eaSKashyap Desai __le16 reserved1a; 177313ef29eaSKashyap Desai __le16 expander_dev_handle; 177413ef29eaSKashyap Desai u8 change_count; 177513ef29eaSKashyap Desai u8 negotiated_link_rate; 177613ef29eaSKashyap Desai u8 phy_identifier; 177713ef29eaSKashyap Desai u8 attached_phy_identifier; 177813ef29eaSKashyap Desai u8 reserved22; 177913ef29eaSKashyap Desai u8 discovery_info; 178013ef29eaSKashyap Desai __le32 attached_phy_info; 178113ef29eaSKashyap Desai u8 zone_group; 178213ef29eaSKashyap Desai u8 self_config_status; 178313ef29eaSKashyap Desai __le16 reserved2a; 178413ef29eaSKashyap Desai __le16 slot; 178513ef29eaSKashyap Desai __le16 slot_index; 178613ef29eaSKashyap Desai }; 178713ef29eaSKashyap Desai 178813ef29eaSKashyap Desai #define MPI3_SASEXPANDER1_PAGEVERSION (0x00) 178913ef29eaSKashyap Desai #define MPI3_SASEXPANDER1_DISCINFO_BAD_PHY_DISABLED (0x04) 179013ef29eaSKashyap Desai #define MPI3_SASEXPANDER1_DISCINFO_LINK_STATUS_CHANGE (0x02) 179113ef29eaSKashyap Desai #define MPI3_SASEXPANDER1_DISCINFO_NO_ROUTING_ENTRIES (0x01) 1792d00ff7c3SSreekanth Reddy #ifndef MPI3_SASEXPANDER2_MAX_NUM_PHYS 1793d00ff7c3SSreekanth Reddy #define MPI3_SASEXPANDER2_MAX_NUM_PHYS (1) 1794d00ff7c3SSreekanth Reddy #endif 1795d00ff7c3SSreekanth Reddy struct mpi3_sasexpander2_phy_element { 1796d00ff7c3SSreekanth Reddy u8 link_change_count; 1797d00ff7c3SSreekanth Reddy u8 reserved01; 1798d00ff7c3SSreekanth Reddy __le16 rate_change_count; 1799d00ff7c3SSreekanth Reddy __le32 reserved04; 1800d00ff7c3SSreekanth Reddy }; 1801d00ff7c3SSreekanth Reddy 1802d00ff7c3SSreekanth Reddy struct mpi3_sas_expander_page2 { 1803d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 1804d00ff7c3SSreekanth Reddy u8 num_phys; 1805d00ff7c3SSreekanth Reddy u8 reserved09; 1806d00ff7c3SSreekanth Reddy __le16 dev_handle; 1807d00ff7c3SSreekanth Reddy __le32 reserved0c; 1808d00ff7c3SSreekanth Reddy struct mpi3_sasexpander2_phy_element phy[MPI3_SASEXPANDER2_MAX_NUM_PHYS]; 1809d00ff7c3SSreekanth Reddy }; 1810d00ff7c3SSreekanth Reddy 1811d00ff7c3SSreekanth Reddy #define MPI3_SASEXPANDER2_PAGEVERSION (0x00) 181213ef29eaSKashyap Desai struct mpi3_sas_port_page0 { 181313ef29eaSKashyap Desai struct mpi3_config_page_header header; 181413ef29eaSKashyap Desai u8 port_number; 181513ef29eaSKashyap Desai u8 reserved09; 181613ef29eaSKashyap Desai u8 port_width; 181713ef29eaSKashyap Desai u8 reserved0b; 181813ef29eaSKashyap Desai u8 zone_group; 181913ef29eaSKashyap Desai u8 reserved0d[3]; 182013ef29eaSKashyap Desai __le64 sas_address; 182113ef29eaSKashyap Desai __le16 device_info; 182213ef29eaSKashyap Desai __le16 reserved1a; 182313ef29eaSKashyap Desai __le32 reserved1c; 182413ef29eaSKashyap Desai }; 182513ef29eaSKashyap Desai 182613ef29eaSKashyap Desai #define MPI3_SASPORT0_PAGEVERSION (0x00) 182713ef29eaSKashyap Desai struct mpi3_sas_phy_page0 { 182813ef29eaSKashyap Desai struct mpi3_config_page_header header; 182913ef29eaSKashyap Desai __le16 owner_dev_handle; 183013ef29eaSKashyap Desai __le16 reserved0a; 183113ef29eaSKashyap Desai __le16 attached_dev_handle; 183213ef29eaSKashyap Desai u8 attached_phy_identifier; 183313ef29eaSKashyap Desai u8 reserved0f; 183413ef29eaSKashyap Desai __le32 attached_phy_info; 183513ef29eaSKashyap Desai u8 programmed_link_rate; 183613ef29eaSKashyap Desai u8 hw_link_rate; 183713ef29eaSKashyap Desai u8 change_count; 183813ef29eaSKashyap Desai u8 flags; 183913ef29eaSKashyap Desai __le32 phy_info; 184013ef29eaSKashyap Desai u8 negotiated_link_rate; 184113ef29eaSKashyap Desai u8 reserved1d[3]; 184213ef29eaSKashyap Desai __le16 slot; 184313ef29eaSKashyap Desai __le16 slot_index; 184413ef29eaSKashyap Desai }; 184513ef29eaSKashyap Desai 184613ef29eaSKashyap Desai #define MPI3_SASPHY0_PAGEVERSION (0x00) 184713ef29eaSKashyap Desai #define MPI3_SASPHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC (0x01) 184813ef29eaSKashyap Desai struct mpi3_sas_phy_page1 { 184913ef29eaSKashyap Desai struct mpi3_config_page_header header; 185013ef29eaSKashyap Desai __le32 reserved08; 185113ef29eaSKashyap Desai __le32 invalid_dword_count; 185213ef29eaSKashyap Desai __le32 running_disparity_error_count; 185313ef29eaSKashyap Desai __le32 loss_dword_synch_count; 185413ef29eaSKashyap Desai __le32 phy_reset_problem_count; 185513ef29eaSKashyap Desai }; 185613ef29eaSKashyap Desai 185713ef29eaSKashyap Desai #define MPI3_SASPHY1_PAGEVERSION (0x00) 185813ef29eaSKashyap Desai struct mpi3_sas_phy2_phy_event { 185913ef29eaSKashyap Desai u8 phy_event_code; 186013ef29eaSKashyap Desai u8 reserved01[3]; 186113ef29eaSKashyap Desai __le32 phy_event_info; 186213ef29eaSKashyap Desai }; 186313ef29eaSKashyap Desai 186413ef29eaSKashyap Desai #ifndef MPI3_SAS_PHY2_PHY_EVENT_MAX 186513ef29eaSKashyap Desai #define MPI3_SAS_PHY2_PHY_EVENT_MAX (1) 186613ef29eaSKashyap Desai #endif 186713ef29eaSKashyap Desai struct mpi3_sas_phy_page2 { 186813ef29eaSKashyap Desai struct mpi3_config_page_header header; 186913ef29eaSKashyap Desai __le32 reserved08; 187013ef29eaSKashyap Desai u8 num_phy_events; 187113ef29eaSKashyap Desai u8 reserved0d[3]; 187213ef29eaSKashyap Desai struct mpi3_sas_phy2_phy_event phy_event[MPI3_SAS_PHY2_PHY_EVENT_MAX]; 187313ef29eaSKashyap Desai }; 187413ef29eaSKashyap Desai 187513ef29eaSKashyap Desai #define MPI3_SASPHY2_PAGEVERSION (0x00) 187613ef29eaSKashyap Desai struct mpi3_sas_phy3_phy_event_config { 187713ef29eaSKashyap Desai u8 phy_event_code; 187813ef29eaSKashyap Desai u8 reserved01[3]; 187913ef29eaSKashyap Desai u8 counter_type; 188013ef29eaSKashyap Desai u8 threshold_window; 188113ef29eaSKashyap Desai u8 time_units; 188213ef29eaSKashyap Desai u8 reserved07; 188313ef29eaSKashyap Desai __le32 event_threshold; 188413ef29eaSKashyap Desai __le16 threshold_flags; 188513ef29eaSKashyap Desai __le16 reserved0e; 188613ef29eaSKashyap Desai }; 188713ef29eaSKashyap Desai 188813ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_NO_EVENT (0x00) 188913ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_INVALID_DWORD (0x01) 189013ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RUNNING_DISPARITY_ERROR (0x02) 189113ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_LOSS_DWORD_SYNC (0x03) 189213ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PHY_RESET_PROBLEM (0x04) 189313ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_ELASTICITY_BUF_OVERFLOW (0x05) 189413ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_ERROR (0x06) 189513ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_INV_SPL_PACKETS (0x07) 189613ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_LOSS_SPL_PACKET_SYNC (0x08) 189713ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_ADDR_FRAME_ERROR (0x20) 189813ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_AC_OPEN_REJECT (0x21) 189913ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_AC_OPEN_REJECT (0x22) 190013ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_RC_OPEN_REJECT (0x23) 190113ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_RC_OPEN_REJECT (0x24) 190213ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_AIP_PARTIAL_WAITING_ON (0x25) 190313ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_AIP_CONNECT_WAITING_ON (0x26) 190413ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_BREAK (0x27) 190513ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_BREAK (0x28) 190613ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_BREAK_TIMEOUT (0x29) 190713ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_CONNECTION (0x2a) 190813ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PEAKTX_PATHWAY_BLOCKED (0x2b) 190913ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PEAKTX_ARB_WAIT_TIME (0x2c) 191013ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PEAK_ARB_WAIT_TIME (0x2d) 191113ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PEAK_CONNECT_TIME (0x2e) 191213ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_PERSIST_CONN (0x2f) 191313ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_SSP_FRAMES (0x40) 191413ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_SSP_FRAMES (0x41) 191513ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_SSP_ERROR_FRAMES (0x42) 191613ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_SSP_ERROR_FRAMES (0x43) 191713ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_CREDIT_BLOCKED (0x44) 191813ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_CREDIT_BLOCKED (0x45) 191913ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_SATA_FRAMES (0x50) 192013ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_SATA_FRAMES (0x51) 192113ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SATA_OVERFLOW (0x52) 192213ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_SMP_FRAMES (0x60) 192313ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_SMP_FRAMES (0x61) 192413ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_SMP_ERROR_FRAMES (0x63) 192513ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_HOTPLUG_TIMEOUT (0xd0) 192613ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_MISALIGNED_MUX_PRIMITIVE (0xd1) 192713ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RX_AIP (0xd2) 192813ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_LCARB_WAIT_TIME (0xd3) 192913ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_RCVD_CONN_RESP_WAIT_TIME (0xd4) 193013ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_LCCONN_TIME (0xd5) 193113ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SSP_TX_START_TRANSMIT (0xd6) 193213ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SATA_TX_START (0xd7) 193313ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SMP_TX_START_TRANSMT (0xd8) 193413ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_TX_SMP_BREAK_CONN (0xd9) 193513ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SSP_RX_START_RECEIVE (0xda) 193613ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SATA_RX_START_RECEIVE (0xdb) 193713ef29eaSKashyap Desai #define MPI3_SASPHY3_EVENT_CODE_SMP_RX_START_RECEIVE (0xdc) 193813ef29eaSKashyap Desai #define MPI3_SASPHY3_COUNTER_TYPE_WRAPPING (0x00) 193913ef29eaSKashyap Desai #define MPI3_SASPHY3_COUNTER_TYPE_SATURATING (0x01) 194013ef29eaSKashyap Desai #define MPI3_SASPHY3_COUNTER_TYPE_PEAK_VALUE (0x02) 194113ef29eaSKashyap Desai #define MPI3_SASPHY3_TIME_UNITS_10_MICROSECONDS (0x00) 194213ef29eaSKashyap Desai #define MPI3_SASPHY3_TIME_UNITS_100_MICROSECONDS (0x01) 194313ef29eaSKashyap Desai #define MPI3_SASPHY3_TIME_UNITS_1_MILLISECOND (0x02) 194413ef29eaSKashyap Desai #define MPI3_SASPHY3_TIME_UNITS_10_MILLISECONDS (0x03) 194513ef29eaSKashyap Desai #define MPI3_SASPHY3_TFLAGS_PHY_RESET (0x0002) 194613ef29eaSKashyap Desai #define MPI3_SASPHY3_TFLAGS_EVENT_NOTIFY (0x0001) 194713ef29eaSKashyap Desai #ifndef MPI3_SAS_PHY3_PHY_EVENT_MAX 194813ef29eaSKashyap Desai #define MPI3_SAS_PHY3_PHY_EVENT_MAX (1) 194913ef29eaSKashyap Desai #endif 195013ef29eaSKashyap Desai struct mpi3_sas_phy_page3 { 195113ef29eaSKashyap Desai struct mpi3_config_page_header header; 195213ef29eaSKashyap Desai __le32 reserved08; 195313ef29eaSKashyap Desai u8 num_phy_events; 195413ef29eaSKashyap Desai u8 reserved0d[3]; 195513ef29eaSKashyap Desai struct mpi3_sas_phy3_phy_event_config phy_event_config[MPI3_SAS_PHY3_PHY_EVENT_MAX]; 195613ef29eaSKashyap Desai }; 195713ef29eaSKashyap Desai 195813ef29eaSKashyap Desai #define MPI3_SASPHY3_PAGEVERSION (0x00) 195913ef29eaSKashyap Desai struct mpi3_sas_phy_page4 { 196013ef29eaSKashyap Desai struct mpi3_config_page_header header; 196113ef29eaSKashyap Desai u8 reserved08[3]; 196213ef29eaSKashyap Desai u8 flags; 196313ef29eaSKashyap Desai u8 initial_frame[28]; 196413ef29eaSKashyap Desai }; 196513ef29eaSKashyap Desai 196613ef29eaSKashyap Desai #define MPI3_SASPHY4_PAGEVERSION (0x00) 196713ef29eaSKashyap Desai #define MPI3_SASPHY4_FLAGS_FRAME_VALID (0x02) 196813ef29eaSKashyap Desai #define MPI3_SASPHY4_FLAGS_SATA_FRAME (0x01) 196913ef29eaSKashyap Desai #define MPI3_PCIE_LINK_RETIMERS_MASK (0x30) 197013ef29eaSKashyap Desai #define MPI3_PCIE_LINK_RETIMERS_SHIFT (4) 197113ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_MASK (0x0f) 197213ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_UNKNOWN (0x00) 197313ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_PHY_DISABLED (0x01) 197413ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_2_5 (0x02) 197513ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_5_0 (0x03) 197613ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_8_0 (0x04) 197713ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_16_0 (0x05) 197813ef29eaSKashyap Desai #define MPI3_PCIE_NEG_LINK_RATE_32_0 (0x06) 1979d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_ENABLE_NONE (0x0) 1980d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_ENABLE_L0S (0x1) 1981d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_ENABLE_L1 (0x2) 1982d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_ENABLE_L0S_L1 (0x3) 1983d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_SUPPORT_NONE (0x0) 1984d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_SUPPORT_L0S (0x1) 1985d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_SUPPORT_L1 (0x2) 1986d00ff7c3SSreekanth Reddy #define MPI3_PCIE_ASPM_SUPPORT_L0S_L1 (0x3) 198713ef29eaSKashyap Desai struct mpi3_pcie_io_unit0_phy_data { 198813ef29eaSKashyap Desai u8 link; 198913ef29eaSKashyap Desai u8 link_flags; 199013ef29eaSKashyap Desai u8 phy_flags; 199113ef29eaSKashyap Desai u8 negotiated_link_rate; 199213ef29eaSKashyap Desai __le16 attached_dev_handle; 199313ef29eaSKashyap Desai __le16 controller_dev_handle; 199413ef29eaSKashyap Desai __le32 enumeration_status; 199513ef29eaSKashyap Desai u8 io_unit_port; 199613ef29eaSKashyap Desai u8 reserved0d[3]; 199713ef29eaSKashyap Desai }; 199813ef29eaSKashyap Desai 199913ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_LINKFLAGS_CONFIG_SOURCE_MASK (0x10) 200013ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_LINKFLAGS_CONFIG_SOURCE_IOUNIT1 (0x00) 200113ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_LINKFLAGS_CONFIG_SOURCE_BKPLANE (0x10) 200213ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_LINKFLAGS_ENUM_IN_PROGRESS (0x08) 200313ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_PHYFLAGS_PHY_DISABLED (0x08) 200413ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_PHYFLAGS_HOST_PHY (0x01) 200513ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_ES_MAX_SWITCH_DEPTH_EXCEEDED (0x80000000) 200613ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_ES_MAX_SWITCHES_EXCEEDED (0x40000000) 200713ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_ES_MAX_ENDPOINTS_EXCEEDED (0x20000000) 200813ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_ES_INSUFFICIENT_RESOURCES (0x10000000) 200913ef29eaSKashyap Desai #ifndef MPI3_PCIE_IO_UNIT0_PHY_MAX 201013ef29eaSKashyap Desai #define MPI3_PCIE_IO_UNIT0_PHY_MAX (1) 201113ef29eaSKashyap Desai #endif 201213ef29eaSKashyap Desai struct mpi3_pcie_io_unit_page0 { 201313ef29eaSKashyap Desai struct mpi3_config_page_header header; 201413ef29eaSKashyap Desai __le32 reserved08; 201513ef29eaSKashyap Desai u8 num_phys; 201613ef29eaSKashyap Desai u8 init_status; 2017d00ff7c3SSreekanth Reddy u8 aspm; 2018d00ff7c3SSreekanth Reddy u8 reserved0f; 201913ef29eaSKashyap Desai struct mpi3_pcie_io_unit0_phy_data phy_data[MPI3_PCIE_IO_UNIT0_PHY_MAX]; 202013ef29eaSKashyap Desai }; 202113ef29eaSKashyap Desai 202213ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_PAGEVERSION (0x00) 202313ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_NO_ERRORS (0x00) 202413ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_NEEDS_INITIALIZATION (0x01) 202513ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_NO_TARGETS_ALLOCATED (0x02) 202613ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_RESOURCE_ALLOC_FAILED (0x03) 202713ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_BAD_NUM_PHYS (0x04) 202813ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_UNSUPPORTED_CONFIG (0x05) 202913ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_HOST_PORT_MISMATCH (0x06) 203013ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_PHYS_NOT_CONSECUTIVE (0x07) 203113ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_BAD_CLOCKING_MODE (0x08) 203213ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_PROD_SPEC_START (0xf0) 203313ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT0_INITSTATUS_PROD_SPEC_END (0xff) 2034d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_SWITCH_STATES_MASK (0xc0) 2035d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_SWITCH_STATES_SHIFT (6) 2036d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_DIRECT_STATES_MASK (0x30) 2037d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_DIRECT_STATES_SHIFT (4) 2038d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_SWITCH_SUPPORT_MASK (0x0c) 2039d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_SWITCH_SUPPORT_SHIFT (2) 2040d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_DIRECT_SUPPORT_MASK (0x03) 2041d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT0_ASPM_DIRECT_SUPPORT_SHIFT (0) 204213ef29eaSKashyap Desai struct mpi3_pcie_io_unit1_phy_data { 204313ef29eaSKashyap Desai u8 link; 204413ef29eaSKashyap Desai u8 link_flags; 204513ef29eaSKashyap Desai u8 phy_flags; 204613ef29eaSKashyap Desai u8 max_min_link_rate; 204713ef29eaSKashyap Desai __le32 reserved04; 204813ef29eaSKashyap Desai __le32 reserved08; 204913ef29eaSKashyap Desai }; 205013ef29eaSKashyap Desai 205113ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_LINKFLAGS_PCIE_CLK_MODE_MASK (0x03) 205213ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_LINKFLAGS_PCIE_CLK_MODE_DIS_SEPARATE_REFCLK (0x00) 205313ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_LINKFLAGS_PCIE_CLK_MODE_EN_SRIS (0x01) 205413ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_LINKFLAGS_PCIE_CLK_MODE_EN_SRNS (0x02) 205513ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_PHYFLAGS_PHY_DISABLE (0x08) 205613ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_MASK (0xf0) 205713ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_SHIFT (4) 205813ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_2_5 (0x20) 205913ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_5_0 (0x30) 206013ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_8_0 (0x40) 206113ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_16_0 (0x50) 206213ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_MMLR_MAX_RATE_32_0 (0x60) 206313ef29eaSKashyap Desai #ifndef MPI3_PCIE_IO_UNIT1_PHY_MAX 206413ef29eaSKashyap Desai #define MPI3_PCIE_IO_UNIT1_PHY_MAX (1) 206513ef29eaSKashyap Desai #endif 206613ef29eaSKashyap Desai struct mpi3_pcie_io_unit_page1 { 206713ef29eaSKashyap Desai struct mpi3_config_page_header header; 206813ef29eaSKashyap Desai __le32 control_flags; 206913ef29eaSKashyap Desai __le32 reserved0c; 207013ef29eaSKashyap Desai u8 num_phys; 207113ef29eaSKashyap Desai u8 reserved11; 2072d00ff7c3SSreekanth Reddy u8 aspm; 2073d00ff7c3SSreekanth Reddy u8 reserved13; 207413ef29eaSKashyap Desai struct mpi3_pcie_io_unit1_phy_data phy_data[MPI3_PCIE_IO_UNIT1_PHY_MAX]; 207513ef29eaSKashyap Desai }; 207613ef29eaSKashyap Desai 207713ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT1_PAGEVERSION (0x00) 2078ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_MASK (0xe0000000) 2079ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_NONE (0x00000000) 2080ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_DEASSERT (0x20000000) 2081ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_ASSERT (0x40000000) 2082ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_BACKPLANE_ERROR (0x60000000) 2083ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_MASK (0x1c000000) 2084ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_NONE (0x00000000) 2085ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_DEASSERT (0x04000000) 2086ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_ASSERT (0x08000000) 2087ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_BACKPLANE_ERROR (0x0c000000) 2088ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_OVERRIDE_DISABLE (0x00000080) 2089ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_DISABLE (0x00000040) 2090ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_MODE_MASK (0x00000030) 2091d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_MODE_SHIFT (4) 2092ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_MODE_SRIS_SRNS_DISABLED (0x00000000) 2093ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_MODE_SRIS_ENABLED (0x00000010) 2094ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_CLOCK_OVERRIDE_MODE_SRNS_ENABLED (0x00000020) 2095ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MASK (0x0000000f) 2096ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_USE_BACKPLANE (0x00000000) 2097ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MAX_2_5 (0x00000002) 2098ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MAX_5_0 (0x00000003) 2099ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MAX_8_0 (0x00000004) 2100ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MAX_16_0 (0x00000005) 2101ee6f2d6bSSreekanth Reddy #define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_RATE_OVERRIDE_MAX_32_0 (0x00000006) 2102d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT1_ASPM_SWITCH_MASK (0x0c) 2103d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT1_ASPM_SWITCH_SHIFT (2) 2104d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT1_ASPM_DIRECT_MASK (0x03) 2105d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT1_ASPM_DIRECT_SHIFT (0) 210613ef29eaSKashyap Desai struct mpi3_pcie_io_unit_page2 { 210713ef29eaSKashyap Desai struct mpi3_config_page_header header; 2108d00ff7c3SSreekanth Reddy __le16 nvme_max_q_dx1; 2109d00ff7c3SSreekanth Reddy __le16 nvme_max_q_dx2; 2110d00ff7c3SSreekanth Reddy u8 nvme_abort_to; 211113ef29eaSKashyap Desai u8 reserved0d; 2112d00ff7c3SSreekanth Reddy __le16 nvme_max_q_dx4; 211313ef29eaSKashyap Desai }; 211413ef29eaSKashyap Desai 211513ef29eaSKashyap Desai #define MPI3_PCIEIOUNIT2_PAGEVERSION (0x00) 2116d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ERROR_RECEIVER_ERROR (0) 2117d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ERROR_RECOVERY (1) 2118d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ERROR_CORRECTABLE_ERROR_MSG (2) 2119d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ERROR_BAD_DLLP (3) 2120d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ERROR_BAD_TLP (4) 2121d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_NUM_ERROR_INDEX (5) 2122d00ff7c3SSreekanth Reddy struct mpi3_pcie_io_unit3_error { 2123d00ff7c3SSreekanth Reddy __le16 threshold_count; 2124d00ff7c3SSreekanth Reddy __le16 reserved02; 2125d00ff7c3SSreekanth Reddy }; 2126d00ff7c3SSreekanth Reddy 2127d00ff7c3SSreekanth Reddy struct mpi3_pcie_io_unit_page3 { 2128d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 2129d00ff7c3SSreekanth Reddy u8 threshold_window; 2130d00ff7c3SSreekanth Reddy u8 threshold_action; 2131d00ff7c3SSreekanth Reddy u8 escalation_count; 2132d00ff7c3SSreekanth Reddy u8 escalation_action; 2133d00ff7c3SSreekanth Reddy u8 num_errors; 2134d00ff7c3SSreekanth Reddy u8 reserved0d[3]; 2135d00ff7c3SSreekanth Reddy struct mpi3_pcie_io_unit3_error error[MPI3_PCIEIOUNIT3_NUM_ERROR_INDEX]; 2136d00ff7c3SSreekanth Reddy }; 2137d00ff7c3SSreekanth Reddy 2138d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_PAGEVERSION (0x00) 2139d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ACTION_NO_ACTION (0x00) 2140d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ACTION_HOT_RESET (0x01) 2141d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ACTION_REDUCE_LINK_RATE_ONLY (0x02) 2142d00ff7c3SSreekanth Reddy #define MPI3_PCIEIOUNIT3_ACTION_REDUCE_LINK_RATE_NO_ACCESS (0x03) 214313ef29eaSKashyap Desai struct mpi3_pcie_switch_page0 { 214413ef29eaSKashyap Desai struct mpi3_config_page_header header; 214513ef29eaSKashyap Desai u8 io_unit_port; 214613ef29eaSKashyap Desai u8 switch_status; 214713ef29eaSKashyap Desai u8 reserved0a[2]; 214813ef29eaSKashyap Desai __le16 dev_handle; 214913ef29eaSKashyap Desai __le16 parent_dev_handle; 215013ef29eaSKashyap Desai u8 num_ports; 2151d00ff7c3SSreekanth Reddy u8 pcie_level; 215213ef29eaSKashyap Desai __le16 reserved12; 215313ef29eaSKashyap Desai __le32 reserved14; 215413ef29eaSKashyap Desai __le32 reserved18; 215513ef29eaSKashyap Desai __le32 reserved1c; 215613ef29eaSKashyap Desai }; 215713ef29eaSKashyap Desai 215813ef29eaSKashyap Desai #define MPI3_PCIESWITCH0_PAGEVERSION (0x00) 215913ef29eaSKashyap Desai #define MPI3_PCIESWITCH0_SS_NOT_RESPONDING (0x02) 216013ef29eaSKashyap Desai #define MPI3_PCIESWITCH0_SS_RESPONDING (0x03) 216113ef29eaSKashyap Desai #define MPI3_PCIESWITCH0_SS_DELAY_NOT_RESPONDING (0x04) 216213ef29eaSKashyap Desai struct mpi3_pcie_switch_page1 { 216313ef29eaSKashyap Desai struct mpi3_config_page_header header; 216413ef29eaSKashyap Desai u8 io_unit_port; 2165d00ff7c3SSreekanth Reddy u8 flags; 2166d00ff7c3SSreekanth Reddy __le16 reserved0a; 216713ef29eaSKashyap Desai u8 num_ports; 216813ef29eaSKashyap Desai u8 port_num; 216913ef29eaSKashyap Desai __le16 attached_dev_handle; 217013ef29eaSKashyap Desai __le16 switch_dev_handle; 217113ef29eaSKashyap Desai u8 negotiated_port_width; 217213ef29eaSKashyap Desai u8 negotiated_link_rate; 217313ef29eaSKashyap Desai __le16 slot; 217413ef29eaSKashyap Desai __le16 slot_index; 217513ef29eaSKashyap Desai __le32 reserved18; 217613ef29eaSKashyap Desai }; 217713ef29eaSKashyap Desai 217813ef29eaSKashyap Desai #define MPI3_PCIESWITCH1_PAGEVERSION (0x00) 2179d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_MASK (0x0c) 2180d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_SHIFT (2) 2181d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_MASK (0x03) 2182d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_SHIFT (0) 2183d00ff7c3SSreekanth Reddy #ifndef MPI3_PCIESWITCH2_MAX_NUM_PORTS 2184d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH2_MAX_NUM_PORTS (1) 2185d00ff7c3SSreekanth Reddy #endif 2186d00ff7c3SSreekanth Reddy struct mpi3_pcieswitch2_port_element { 2187d00ff7c3SSreekanth Reddy __le16 link_change_count; 2188d00ff7c3SSreekanth Reddy __le16 rate_change_count; 2189d00ff7c3SSreekanth Reddy __le32 reserved04; 2190d00ff7c3SSreekanth Reddy }; 2191d00ff7c3SSreekanth Reddy 2192d00ff7c3SSreekanth Reddy struct mpi3_pcie_switch_page2 { 2193d00ff7c3SSreekanth Reddy struct mpi3_config_page_header header; 2194d00ff7c3SSreekanth Reddy u8 num_ports; 2195d00ff7c3SSreekanth Reddy u8 reserved09; 2196d00ff7c3SSreekanth Reddy __le16 dev_handle; 2197d00ff7c3SSreekanth Reddy __le32 reserved0c; 2198d00ff7c3SSreekanth Reddy struct mpi3_pcieswitch2_port_element port[MPI3_PCIESWITCH2_MAX_NUM_PORTS]; 2199d00ff7c3SSreekanth Reddy }; 2200d00ff7c3SSreekanth Reddy 2201d00ff7c3SSreekanth Reddy #define MPI3_PCIESWITCH2_PAGEVERSION (0x00) 220213ef29eaSKashyap Desai struct mpi3_pcie_link_page0 { 220313ef29eaSKashyap Desai struct mpi3_config_page_header header; 220413ef29eaSKashyap Desai u8 link; 220513ef29eaSKashyap Desai u8 reserved09[3]; 2206d00ff7c3SSreekanth Reddy __le32 reserved0c; 2207d00ff7c3SSreekanth Reddy __le32 receiver_error_count; 2208d00ff7c3SSreekanth Reddy __le32 recovery_count; 2209d00ff7c3SSreekanth Reddy __le32 corr_error_msg_count; 2210d00ff7c3SSreekanth Reddy __le32 non_fatal_error_msg_count; 2211d00ff7c3SSreekanth Reddy __le32 fatal_error_msg_count; 2212d00ff7c3SSreekanth Reddy __le32 non_fatal_error_count; 2213d00ff7c3SSreekanth Reddy __le32 fatal_error_count; 2214d00ff7c3SSreekanth Reddy __le32 bad_dllp_count; 2215d00ff7c3SSreekanth Reddy __le32 bad_tlp_count; 221613ef29eaSKashyap Desai }; 221713ef29eaSKashyap Desai 221813ef29eaSKashyap Desai #define MPI3_PCIELINK0_PAGEVERSION (0x00) 221913ef29eaSKashyap Desai struct mpi3_enclosure_page0 { 222013ef29eaSKashyap Desai struct mpi3_config_page_header header; 222113ef29eaSKashyap Desai __le64 enclosure_logical_id; 222213ef29eaSKashyap Desai __le16 flags; 222313ef29eaSKashyap Desai __le16 enclosure_handle; 222413ef29eaSKashyap Desai __le16 num_slots; 2225d00ff7c3SSreekanth Reddy __le16 reserved16; 222613ef29eaSKashyap Desai u8 io_unit_port; 222713ef29eaSKashyap Desai u8 enclosure_level; 222813ef29eaSKashyap Desai __le16 sep_dev_handle; 2229d00ff7c3SSreekanth Reddy u8 chassis_slot; 2230d00ff7c3SSreekanth Reddy u8 reserved1d[3]; 223113ef29eaSKashyap Desai }; 223213ef29eaSKashyap Desai 223313ef29eaSKashyap Desai #define MPI3_ENCLOSURE0_PAGEVERSION (0x00) 223413ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_TYPE_MASK (0xc000) 223513ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_TYPE_VIRTUAL (0x0000) 223613ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_TYPE_SAS (0x4000) 223713ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_TYPE_PCIE (0x8000) 2238d00ff7c3SSreekanth Reddy #define MPI3_ENCLS0_FLAGS_CHASSIS_SLOT_VALID (0x0020) 223913ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_DEV_PRESENT_MASK (0x0010) 224013ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_DEV_NOT_FOUND (0x0000) 224113ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_ENCL_DEV_PRESENT (0x0010) 224213ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_MNG_MASK (0x000f) 224313ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_MNG_UNKNOWN (0x0000) 224413ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_MNG_IOC_SES (0x0001) 224513ef29eaSKashyap Desai #define MPI3_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0002) 224613ef29eaSKashyap Desai #define MPI3_DEVICE_DEVFORM_SAS_SATA (0x00) 224713ef29eaSKashyap Desai #define MPI3_DEVICE_DEVFORM_PCIE (0x01) 224813ef29eaSKashyap Desai #define MPI3_DEVICE_DEVFORM_VD (0x02) 224913ef29eaSKashyap Desai struct mpi3_device0_sas_sata_format { 225013ef29eaSKashyap Desai __le64 sas_address; 225113ef29eaSKashyap Desai __le16 flags; 225213ef29eaSKashyap Desai __le16 device_info; 225313ef29eaSKashyap Desai u8 phy_num; 225413ef29eaSKashyap Desai u8 attached_phy_identifier; 225513ef29eaSKashyap Desai u8 max_port_connections; 225613ef29eaSKashyap Desai u8 zone_group; 225713ef29eaSKashyap Desai }; 225813ef29eaSKashyap Desai 2259d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_SASSATA_FLAGS_WRITE_SAME_UNMAP_NCQ (0x0400) 226013ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_SLUMBER_CAP (0x0200) 226113ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_PARTIAL_CAP (0x0100) 226213ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_ASYNC_NOTIFY (0x0080) 226313ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_SW_PRESERVE (0x0040) 226413ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_UNSUPP_DEV (0x0020) 226513ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_48BIT_LBA (0x0010) 226613ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_SMART_SUPP (0x0008) 226713ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_NCQ_SUPP (0x0004) 226813ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_FUA_SUPP (0x0002) 226913ef29eaSKashyap Desai #define MPI3_DEVICE0_SASSATA_FLAGS_PERSIST_CAP (0x0001) 227013ef29eaSKashyap Desai struct mpi3_device0_pcie_format { 227113ef29eaSKashyap Desai u8 supported_link_rates; 227213ef29eaSKashyap Desai u8 max_port_width; 227313ef29eaSKashyap Desai u8 negotiated_port_width; 227413ef29eaSKashyap Desai u8 negotiated_link_rate; 227513ef29eaSKashyap Desai u8 port_num; 227613ef29eaSKashyap Desai u8 controller_reset_to; 227713ef29eaSKashyap Desai __le16 device_info; 227813ef29eaSKashyap Desai __le32 maximum_data_transfer_size; 227913ef29eaSKashyap Desai __le32 capabilities; 228013ef29eaSKashyap Desai __le16 noiob; 2281d00ff7c3SSreekanth Reddy u8 nvme_abort_to; 228213ef29eaSKashyap Desai u8 page_size; 228313ef29eaSKashyap Desai __le16 shutdown_latency; 2284d00ff7c3SSreekanth Reddy u8 recovery_info; 2285d00ff7c3SSreekanth Reddy u8 reserved17; 228613ef29eaSKashyap Desai }; 228713ef29eaSKashyap Desai 228813ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_LINK_RATE_32_0_SUPP (0x10) 228913ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_LINK_RATE_16_0_SUPP (0x08) 229013ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_LINK_RATE_8_0_SUPP (0x04) 229113ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_LINK_RATE_5_0_SUPP (0x02) 229213ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_LINK_RATE_2_5_SUPP (0x01) 2293d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_TYPE_MASK (0x0007) 229413ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_DEVICE_INFO_TYPE_NO_DEVICE (0x0000) 229513ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_DEVICE_INFO_TYPE_NVME_DEVICE (0x0001) 229613ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_DEVICE_INFO_TYPE_SWITCH_DEVICE (0x0002) 229713ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_DEVICE_INFO_TYPE_SCSI_DEVICE (0x0003) 2298d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_ASPM_MASK (0x0030) 2299d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_ASPM_SHIFT (4) 2300d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_MASK (0x00c0) 2301d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_SHIFT (6) 2302d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_0 (0x0000) 2303d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_1 (0x0040) 2304d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_2 (0x0080) 2305d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_DEVICE_INFO_PITYPE_3 (0x00c0) 2306d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_CAP_SGL_EXTRA_LENGTH_SUPPORTED (0x00000020) 230713ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_CAP_METADATA_SEPARATED (0x00000010) 230813ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_CAP_SGL_DWORD_ALIGN_REQUIRED (0x00000008) 2309d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_CAP_SGL_FORMAT_SGL (0x00000004) 2310d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_CAP_SGL_FORMAT_PRP (0x00000000) 231113ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_CAP_BIT_BUCKET_SGL_SUPP (0x00000002) 231213ef29eaSKashyap Desai #define MPI3_DEVICE0_PCIE_CAP_SGL_SUPP (0x00000001) 2313d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_CAP_ASPM_MASK (0x000000c0) 2314d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_CAP_ASPM_SHIFT (6) 2315d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_MASK (0xe0) 2316d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_NS_MGMT (0x00) 2317d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_METHOD_FORMAT (0x20) 2318d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_MASK (0x1f) 2319d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_NO_NS (0x00) 2320d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_NO_NSID_1 (0x01) 2321d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_TOO_MANY_NS (0x02) 2322d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_PROTECTION (0x03) 2323d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_METADATA_SZ (0x04) 2324d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PCIE_RECOVER_REASON_LBA_DATA_SZ (0x05) 232513ef29eaSKashyap Desai struct mpi3_device0_vd_format { 232613ef29eaSKashyap Desai u8 vd_state; 232713ef29eaSKashyap Desai u8 raid_level; 232813ef29eaSKashyap Desai __le16 device_info; 232913ef29eaSKashyap Desai __le16 flags; 233004b27e53SSreekanth Reddy __le16 io_throttle_group; 233104b27e53SSreekanth Reddy __le16 io_throttle_group_low; 233204b27e53SSreekanth Reddy __le16 io_throttle_group_high; 233304b27e53SSreekanth Reddy __le32 reserved0c; 233413ef29eaSKashyap Desai }; 233513ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_STATE_OFFLINE (0x00) 233613ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_STATE_PARTIALLY_DEGRADED (0x01) 233713ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_STATE_DEGRADED (0x02) 233813ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_STATE_OPTIMAL (0x03) 233913ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_0 (0) 234013ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_1 (1) 234113ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_5 (5) 234213ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_6 (6) 234313ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_10 (10) 234413ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_50 (50) 234513ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_RAIDLEVEL_RAID_60 (60) 234613ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_DEVICE_INFO_HDD (0x0010) 234713ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_DEVICE_INFO_SSD (0x0008) 234813ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_DEVICE_INFO_NVME (0x0004) 234913ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_DEVICE_INFO_SATA (0x0002) 235013ef29eaSKashyap Desai #define MPI3_DEVICE0_VD_DEVICE_INFO_SAS (0x0001) 235104b27e53SSreekanth Reddy #define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_MASK (0xf000) 2352ee6f2d6bSSreekanth Reddy #define MPI3_DEVICE0_VD_FLAGS_IO_THROTTLE_GROUP_QD_SHIFT (12) 235313ef29eaSKashyap Desai union mpi3_device0_dev_spec_format { 235413ef29eaSKashyap Desai struct mpi3_device0_sas_sata_format sas_sata_format; 235513ef29eaSKashyap Desai struct mpi3_device0_pcie_format pcie_format; 235613ef29eaSKashyap Desai struct mpi3_device0_vd_format vd_format; 235713ef29eaSKashyap Desai }; 235813ef29eaSKashyap Desai 235913ef29eaSKashyap Desai struct mpi3_device_page0 { 236013ef29eaSKashyap Desai struct mpi3_config_page_header header; 236113ef29eaSKashyap Desai __le16 dev_handle; 236213ef29eaSKashyap Desai __le16 parent_dev_handle; 236313ef29eaSKashyap Desai __le16 slot; 236413ef29eaSKashyap Desai __le16 enclosure_handle; 236513ef29eaSKashyap Desai __le64 wwid; 236613ef29eaSKashyap Desai __le16 persistent_id; 236713ef29eaSKashyap Desai u8 io_unit_port; 236813ef29eaSKashyap Desai u8 access_status; 236913ef29eaSKashyap Desai __le16 flags; 237013ef29eaSKashyap Desai __le16 reserved1e; 237113ef29eaSKashyap Desai __le16 slot_index; 237213ef29eaSKashyap Desai __le16 queue_depth; 237313ef29eaSKashyap Desai u8 reserved24[3]; 237413ef29eaSKashyap Desai u8 device_form; 237513ef29eaSKashyap Desai union mpi3_device0_dev_spec_format device_specific; 237613ef29eaSKashyap Desai }; 237713ef29eaSKashyap Desai 237813ef29eaSKashyap Desai #define MPI3_DEVICE0_PAGEVERSION (0x00) 2379d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_PARENT_INVALID (0xffff) 2380d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ENCLOSURE_HANDLE_NO_ENCLOSURE (0x0000) 238113ef29eaSKashyap Desai #define MPI3_DEVICE0_WWID_INVALID (0xffffffffffffffff) 238213ef29eaSKashyap Desai #define MPI3_DEVICE0_PERSISTENTID_INVALID (0xffff) 238313ef29eaSKashyap Desai #define MPI3_DEVICE0_IOUNITPORT_INVALID (0xff) 238413ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NO_ERRORS (0x00) 238513ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NEEDS_INITIALIZATION (0x01) 238613ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_CAP_UNSUPPORTED (0x02) 238713ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_DEVICE_BLOCKED (0x03) 238813ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_UNAUTHORIZED (0x04) 238913ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_DEVICE_MISSING_DELAY (0x05) 2390d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_PREPARE (0x06) 2391d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_SAFE_MODE (0x07) 2392d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_GENERIC_MAX (0x0f) 239313ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SAS_UNKNOWN (0x10) 239413ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_ROUTE_NOT_ADDRESSABLE (0x11) 239513ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SMP_ERROR_NOT_ADDRESSABLE (0x12) 2396d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_SAS_MAX (0x1f) 239713ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_UNKNOWN (0x20) 239813ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_AFFILIATION_CONFLICT (0x21) 239913ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_DIAG (0x22) 240013ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_IDENTIFICATION (0x23) 240113ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_CHECK_POWER (0x24) 240213ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_PIO_SN (0x25) 240313ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_MDMA_SN (0x26) 240413ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_UDMA_SN (0x27) 240513ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_ZONING_VIOLATION (0x28) 240613ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_NOT_ADDRESSABLE (0x29) 240713ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_SIF_MAX (0x2f) 240813ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_PCIE_UNKNOWN (0x30) 240913ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_PCIE_MEM_SPACE_ACCESS (0x31) 241013ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_PCIE_UNSUPPORTED (0x32) 241113ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_PCIE_MSIX_REQUIRED (0x33) 2412d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_PCIE_ECRC_REQUIRED (0x34) 2413d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_PCIE_MAX (0x3f) 241413ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_UNKNOWN (0x40) 241513ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_READY_TIMEOUT (0x41) 241613ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_DEVCFG_UNSUPPORTED (0x42) 241713ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_IDENTIFY_FAILED (0x43) 241813ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_QCONFIG_FAILED (0x44) 241913ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_QCREATION_FAILED (0x45) 242013ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_EVENTCFG_FAILED (0x46) 242113ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_GET_FEATURE_STAT_FAILED (0x47) 242213ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_IDLE_TIMEOUT (0x48) 242313ef29eaSKashyap Desai #define MPI3_DEVICE0_ASTATUS_NVME_CTRL_FAILURE_STATUS (0x49) 2424d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_INSUFFICIENT_POWER (0x4a) 2425d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_DOORBELL_STRIDE (0x4b) 2426d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_MEM_PAGE_MIN_SIZE (0x4c) 2427d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_MEMORY_ALLOCATION (0x4d) 2428d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_COMPLETION_TIME (0x4e) 2429d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_BAR (0x4f) 2430d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_NS_DESCRIPTOR (0x50) 2431d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_INCOMPATIBLE_SETTINGS (0x51) 243204b27e53SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_TOO_MANY_ERRORS (0x52) 2433d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_NVME_MAX (0x5f) 2434d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_VD_UNKNOWN (0x80) 2435d00ff7c3SSreekanth Reddy #define MPI3_DEVICE0_ASTATUS_VD_MAX (0x8f) 2436e5f596bcSRanjan Kumar #define MPI3_DEVICE0_FLAGS_MAX_WRITE_SAME_MASK (0xe000) 2437e5f596bcSRanjan Kumar #define MPI3_DEVICE0_FLAGS_MAX_WRITE_SAME_NO_LIMIT (0x0000) 2438e5f596bcSRanjan Kumar #define MPI3_DEVICE0_FLAGS_MAX_WRITE_SAME_256_LB (0x2000) 2439e5f596bcSRanjan Kumar #define MPI3_DEVICE0_FLAGS_MAX_WRITE_SAME_2048_LB (0x4000) 244013ef29eaSKashyap Desai #define MPI3_DEVICE0_FLAGS_CONTROLLER_DEV_HANDLE (0x0080) 244104b27e53SSreekanth Reddy #define MPI3_DEVICE0_FLAGS_IO_THROTTLING_REQUIRED (0x0010) 244213ef29eaSKashyap Desai #define MPI3_DEVICE0_FLAGS_HIDDEN (0x0008) 244313ef29eaSKashyap Desai #define MPI3_DEVICE0_FLAGS_ATT_METHOD_VIRTUAL (0x0004) 244404b27e53SSreekanth Reddy #define MPI3_DEVICE0_FLAGS_ATT_METHOD_DIR_ATTACHED (0x0002) 244513ef29eaSKashyap Desai #define MPI3_DEVICE0_FLAGS_DEVICE_PRESENT (0x0001) 244613ef29eaSKashyap Desai #define MPI3_DEVICE0_QUEUE_DEPTH_NOT_APPLICABLE (0x0000) 244713ef29eaSKashyap Desai struct mpi3_device1_sas_sata_format { 244813ef29eaSKashyap Desai __le32 reserved00; 244913ef29eaSKashyap Desai }; 245013ef29eaSKashyap Desai struct mpi3_device1_pcie_format { 245113ef29eaSKashyap Desai __le16 vendor_id; 245213ef29eaSKashyap Desai __le16 device_id; 245313ef29eaSKashyap Desai __le16 subsystem_vendor_id; 245413ef29eaSKashyap Desai __le16 subsystem_id; 245513ef29eaSKashyap Desai __le32 reserved08; 245613ef29eaSKashyap Desai u8 revision_id; 245713ef29eaSKashyap Desai u8 reserved0d; 245813ef29eaSKashyap Desai __le16 pci_parameters; 245913ef29eaSKashyap Desai }; 246013ef29eaSKashyap Desai 246113ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_128B (0x0) 246213ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_256B (0x1) 246313ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_512B (0x2) 246413ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_1024B (0x3) 246513ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_2048B (0x4) 246613ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_DATA_SIZE_4096B (0x5) 246713ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_MAX_READ_REQ_MASK (0x01c0) 246813ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_MAX_READ_REQ_SHIFT (6) 246913ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_CURR_MAX_PAYLOAD_MASK (0x0038) 247013ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_CURR_MAX_PAYLOAD_SHIFT (3) 247113ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_SUPP_MAX_PAYLOAD_MASK (0x0007) 247213ef29eaSKashyap Desai #define MPI3_DEVICE1_PCIE_PARAMS_SUPP_MAX_PAYLOAD_SHIFT (0) 247313ef29eaSKashyap Desai struct mpi3_device1_vd_format { 247413ef29eaSKashyap Desai __le32 reserved00; 247513ef29eaSKashyap Desai }; 247613ef29eaSKashyap Desai 247713ef29eaSKashyap Desai union mpi3_device1_dev_spec_format { 247813ef29eaSKashyap Desai struct mpi3_device1_sas_sata_format sas_sata_format; 247913ef29eaSKashyap Desai struct mpi3_device1_pcie_format pcie_format; 248013ef29eaSKashyap Desai struct mpi3_device1_vd_format vd_format; 248113ef29eaSKashyap Desai }; 248213ef29eaSKashyap Desai 248313ef29eaSKashyap Desai struct mpi3_device_page1 { 248413ef29eaSKashyap Desai struct mpi3_config_page_header header; 248513ef29eaSKashyap Desai __le16 dev_handle; 248613ef29eaSKashyap Desai __le16 reserved0a; 2487d00ff7c3SSreekanth Reddy __le16 link_change_count; 2488d00ff7c3SSreekanth Reddy __le16 rate_change_count; 2489d00ff7c3SSreekanth Reddy __le16 tm_count; 2490d00ff7c3SSreekanth Reddy __le16 reserved12; 2491d00ff7c3SSreekanth Reddy __le32 reserved14[10]; 249213ef29eaSKashyap Desai u8 reserved3c[3]; 249313ef29eaSKashyap Desai u8 device_form; 249413ef29eaSKashyap Desai union mpi3_device1_dev_spec_format device_specific; 249513ef29eaSKashyap Desai }; 249613ef29eaSKashyap Desai 249713ef29eaSKashyap Desai #define MPI3_DEVICE1_PAGEVERSION (0x00) 2498d00ff7c3SSreekanth Reddy #define MPI3_DEVICE1_COUNTER_MAX (0xfffe) 2499d00ff7c3SSreekanth Reddy #define MPI3_DEVICE1_COUNTER_INVALID (0xffff) 250013ef29eaSKashyap Desai #endif 2501