aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChandrakanth patil <chandrakanth.patil@broadcom.com>2024-03-19 07:23:07 +0000
committerSumit Saxena <ssaxena@FreeBSD.org>2024-06-06 10:39:15 +0000
commitbaabb919345f05e9892c4048a1521e5da1403060 (patch)
treeb150f9cbcdbaaa64f203851e43c57c9313be0227
parent3012fa8faef262c615672fc90319c777b4e3dffc (diff)
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_api.h4
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_cnfg.h170
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_image.h49
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_init.h11
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_ioc.h80
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_pci.h5
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_raid.h5
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_sas.h5
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_targ.h10
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_tool.h8
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_transport.h29
-rw-r--r--sys/dev/mpi3mr/mpi/mpi30_type.h5
-rw-r--r--sys/dev/mpi3mr/mpi3mr.c26
-rw-r--r--sys/dev/mpi3mr/mpi3mr_cam.c4
14 files changed, 251 insertions, 160 deletions
diff --git a/sys/dev/mpi3mr/mpi/mpi30_api.h b/sys/dev/mpi3mr/mpi/mpi30_api.h
index aa7b54ec470e..0c070672a16b 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_api.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_api.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
diff --git a/sys/dev/mpi3mr/mpi/mpi30_cnfg.h b/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
index d1ae2ebfa372..410ed0471f78 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_cnfg.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -185,7 +185,7 @@ typedef struct _MPI3_CONFIG_PAGE_HEADER
* Common definitions used by Configuration Pages *
****************************************************************************/
-/**** Defines for Negotiated Link Rates ****/
+/**** Defines for NegotiatedLinkRates ****/
#define MPI3_SAS_NEG_LINK_RATE_LOGICAL_MASK (0xF0)
#define MPI3_SAS_NEG_LINK_RATE_LOGICAL_SHIFT (4)
#define MPI3_SAS_NEG_LINK_RATE_PHYSICAL_MASK (0x0F)
@@ -486,6 +486,7 @@ typedef struct _MPI3_MAN6_GPIO_ENTRY
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_GENERIC (0x00)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_CABLE_MGMT (0x10)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_SOURCE_ACTIVE_CABLE_OVERCURRENT (0x20)
+#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_ACK_REQUIRED (0x02)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_MASK (0x01)
#define MPI3_MAN6_GPIO_EXTINT_PARAM1_FLAGS_TRIGGER_EDGE (0x00)
@@ -1073,7 +1074,7 @@ typedef struct _MPI3_MAN_PAGE12
#define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_PUSH_PULL (0x0000)
#define MPI3_MAN12_FLAGS_SDATAOUT_TYPE_OPEN_DRAIN (0x0001)
-/**** Defines for the SioClkFreq field ****/
+/**** Defines for the SClockFreq field ****/
#define MPI3_MAN12_SIO_CLK_FREQ_MIN (32) /* 32 Hz min SIO Clk Freq */
#define MPI3_MAN12_SIO_CLK_FREQ_MAX (100000) /* 100 KHz max SIO Clk Freq */
@@ -1306,7 +1307,7 @@ typedef struct _MPI3_MAN_PAGE20
#define MPI3_MAN20_ALLOWEDPERSON_EHBA_ALLOWED (0x01)
#define MPI3_MAN20_ALLOWEDPERSON_EHBA_NOT_ALLOWED (0x00)
-/**** Defines for the NonpremuimFeatures field ****/
+/**** Defines for the NonpremiumFeatures field ****/
#define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_MASK (0x01)
#define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_ENABLED (0x00)
#define MPI3_MAN20_NONPREMUIM_DISABLE_PD_DEGRADED_DISABLED (0x01)
@@ -1339,6 +1340,23 @@ typedef struct _MPI3_MAN_PAGE21
#define MPI3_MAN21_FLAGS_SES_VPD_ASSOC_OEM_SPECIFIC (0x00000001)
/*****************************************************************************
+ * Manufacturing Page 22 *
+ ****************************************************************************/
+
+typedef struct _MPI3_MAN_PAGE22
+{
+ MPI3_CONFIG_PAGE_HEADER Header; /* 0x00 */
+ U32 Reserved08; /* 0x08 */
+ U16 NumEUI64; /* 0x0C */
+ U16 Reserved0E; /* 0x0E */
+ U64 BaseEUI64; /* 0x10 */
+} MPI3_MAN_PAGE22, MPI3_POINTER PTR_MPI3_MAN_PAGE22,
+ Mpi3ManPage22_t, MPI3_POINTER pMpi3ManPage22_t;
+
+/**** Defines for the PageVersion field ****/
+#define MPI3_MAN22_PAGEVERSION (0x00)
+
+/*****************************************************************************
* Manufacturing Pages 32-63 (ProductSpecific) *
****************************************************************************/
#ifndef MPI3_MAN_PROD_SPECIFIC_MAX
@@ -1434,13 +1452,21 @@ typedef struct _MPI3_IO_UNIT_PAGE2
* IO Unit Page 3 *
****************************************************************************/
+typedef enum _MPI3_IOUNIT3_THRESHOLD
+{
+ MPI3_IOUNIT3_THRESHOLD_WARNING = 0,
+ MPI3_IOUNIT3_THRESHOLD_CRITICAL = 1,
+ MPI3_IOUNIT3_THRESHOLD_FATAL = 2,
+ MPI3_IOUNIT3_THRESHOLD_LOW = 3,
+ MPI3_IOUNIT3_NUM_THRESHOLDS
+} MPI3_IOUNIT3_THRESHOLD;
+
typedef struct _MPI3_IO_UNIT3_SENSOR
{
U16 Flags; /* 0x00 */
U8 ThresholdMargin; /* 0x02 */
U8 Reserved03; /* 0x03 */
- U16 Threshold[3]; /* 0x04 */
- U16 Reserved0A; /* 0x0A */
+ U16 Threshold[MPI3_IOUNIT3_NUM_THRESHOLDS]; /* 0x04 */
U32 Reserved0C; /* 0x0C */
U32 Reserved10; /* 0x10 */
U32 Reserved14; /* 0x14 */
@@ -1448,6 +1474,7 @@ typedef struct _MPI3_IO_UNIT3_SENSOR
Mpi3IOUnit3Sensor_t, MPI3_POINTER pMpi3IOUnit3Sensor_t;
/**** Defines for the Flags field ****/
+#define MPI3_IOUNIT3_SENSOR_FLAGS_LOW_THRESHOLD_VALID (0x0020)
#define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_EVENT_ENABLED (0x0010)
#define MPI3_IOUNIT3_SENSOR_FLAGS_FATAL_ACTION_ENABLED (0x0008)
#define MPI3_IOUNIT3_SENSOR_FLAGS_CRITICAL_EVENT_ENABLED (0x0004)
@@ -1591,7 +1618,7 @@ typedef struct _MPI3_IO_UNIT_PAGE5
#define MPI3_IOUNIT5_FLAGS_POWER_CAPABLE_SPINUP (0x02)
#define MPI3_IOUNIT5_FLAGS_AUTO_PORT_ENABLE (0x01)
-/**** Defines for the PHY field ****/
+/**** Defines for the Phy field ****/
#define MPI3_IOUNIT5_PHY_SPINUP_GROUP_MASK (0x03)
/*****************************************************************************
@@ -1621,11 +1648,33 @@ typedef struct _MPI3_IO_UNIT_PAGE6
#define MPI3_IOUNIT8_DIGEST_MAX (1)
#endif /* MPI3_IOUNIT8_DIGEST_MAX */
-typedef union _MPI3_IOUNIT8_DIGEST
+typedef union _MPI3_IOUNIT8_RAW_DIGEST
{
U32 Dword[16];
U16 Word[32];
U8 Byte[64];
+} MPI3_IOUNIT8_RAW_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_RAW_DIGEST,
+ Mpi3IOUnit8RawDigest_t, MPI3_POINTER pMpi3IOUnit8RawDigest_t;
+
+typedef struct _MPI3_IOUNIT8_METADATA_DIGEST
+{
+ U8 SlotStatus; /* 0x00 */
+ U8 Reserved01[3]; /* 0x01 */
+ U32 Reserved04[3]; /* 0x04 */
+ MPI3_IOUNIT8_RAW_DIGEST DigestData; /* 0x10 */
+} MPI3_IOUNIT8_METADATA_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_METADATA_DIGEST,
+ Mpi3IOUnit8MetadataDigest_t, MPI3_POINTER pMpi3IOUnit8MetadataDigest_t;
+
+/**** Defines for the SlotStatus field ****/
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_UNUSED (0x00)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_UPDATE_PENDING (0x01)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_VALID (0x03)
+#define MPI3_IOUNIT8_METADATA_DIGEST_SLOTSTATUS_INVALID (0x07)
+
+typedef union _MPI3_IOUNIT8_DIGEST
+{
+ MPI3_IOUNIT8_RAW_DIGEST RawDigest[MPI3_IOUNIT8_DIGEST_MAX];
+ MPI3_IOUNIT8_METADATA_DIGEST MetadataDigest[MPI3_IOUNIT8_DIGEST_MAX];
} MPI3_IOUNIT8_DIGEST, MPI3_POINTER PTR_MPI3_IOUNIT8_DIGEST,
Mpi3IOUnit8Digest_t, MPI3_POINTER pMpi3IOUnit8Digest_t;
@@ -1633,8 +1682,9 @@ typedef struct _MPI3_IO_UNIT_PAGE8
{
MPI3_CONFIG_PAGE_HEADER Header; /* 0x00 */
U8 SBMode; /* 0x08 */
- U8 SbState; /* 0x09 */
- U16 Reserved0A; /* 0x0A */
+ U8 SBState; /* 0x09 */
+ U8 Flags; /* 0x0A */
+ U8 Reserved0A; /* 0x0B */
U8 NumSlots; /* 0x0C */
U8 SlotsAvailable; /* 0x0D */
U8 CurrentKeyEncryptionAlgo; /* 0x0E */
@@ -1642,22 +1692,27 @@ typedef struct _MPI3_IO_UNIT_PAGE8
MPI3_VERSION_UNION CurrentSvn; /* 0x10 */
U32 Reserved14; /* 0x14 */
U32 CurrentKey[128]; /* 0x18 */
- MPI3_IOUNIT8_DIGEST Digest[MPI3_IOUNIT8_DIGEST_MAX]; /* 0x218 */ /* variable length */
+ MPI3_IOUNIT8_DIGEST Digest; /* 0x218 */ /* variable length */
} MPI3_IO_UNIT_PAGE8, MPI3_POINTER PTR_MPI3_IO_UNIT_PAGE8,
Mpi3IOUnitPage8_t, MPI3_POINTER pMpi3IOUnitPage8_t;
/**** Defines for the PageVersion field ****/
-#define MPI3_IOUNIT8_PAGEVERSION (0x00)
+#define MPI3_IOUNIT8_PAGEVERSION (0x00)
/**** Defines for the SBMode field ****/
-#define MPI3_IOUNIT8_SBMODE_SECURE_DEBUG (0x04)
-#define MPI3_IOUNIT8_SBMODE_HARD_SECURE (0x02)
-#define MPI3_IOUNIT8_SBMODE_CONFIG_SECURE (0x01)
+#define MPI3_IOUNIT8_SBMODE_SECURE_DEBUG (0x04)
+#define MPI3_IOUNIT8_SBMODE_HARD_SECURE (0x02)
+#define MPI3_IOUNIT8_SBMODE_CONFIG_SECURE (0x01)
/**** Defines for the SBState field ****/
-#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING (0x04)
-#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING (0x02)
-#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED (0x01)
+#define MPI3_IOUNIT8_SBSTATE_SVN_UPDATE_PENDING (0x04)
+#define MPI3_IOUNIT8_SBSTATE_KEY_UPDATE_PENDING (0x02)
+#define MPI3_IOUNIT8_SBSTATE_SECURE_BOOT_ENABLED (0x01)
+
+/**** Defines for the Flags field ****/
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_MASK (0x07)
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_RAW (0x00)
+#define MPI3_IOUNIT8_FLAGS_DIGESTFORM_DIGEST_WITH_METADATA (0x01)
/*****************************************************************************
* IO Unit Page 9 *
@@ -1909,6 +1964,38 @@ typedef struct _MPI3_IO_UNIT_PAGE15
#define MPI3_IOUNIT15_NUMPOWERBUDGETDATA_POWER_BUDGETING_DISABLED (0x00)
/*****************************************************************************
+ * IO Unit Page 16 *
+ ****************************************************************************/
+
+#ifndef MPI3_IOUNIT16_ERROR_MAX
+#define MPI3_IOUNIT16_ERROR_MAX (1)
+#endif /* MPI3_IOUNIT16_ERROR_MAX */
+
+typedef struct _MPI3_IOUNIT16_ERROR
+{
+ U32 Offset; /* 0x00 */
+ U32 Reserved04; /* 0x04 */
+ U64 Count; /* 0x08 */
+ U64 Timestamp; /* 0x10 */
+} MPI3_IOUNIT16_ERROR, MPI3_POINTER PTR_MPI3_IOUNIT16_ERROR,
+ Mpi3IOUnit16Error_t, MPI3_POINTER pMpi3IOUnit16Error_t;
+
+typedef struct _MPI3_IO_UNIT_PAGE16
+{
+ MPI3_CONFIG_PAGE_HEADER Header; /* 0x00 */
+ U64 TotalErrorCount; /* 0x08 */
+ U32 Reserved10[3]; /* 0x10 */
+ U8 NumErrors; /* 0x1C */
+ U8 MaxErrorsTracked; /* 0x1D */
+ U16 Reserved1E; /* 0x1E */
+ MPI3_IOUNIT16_ERROR Error[MPI3_IOUNIT16_ERROR_MAX]; /* 0x20 */ /* variable length */
+} MPI3_IO_UNIT_PAGE16, MPI3_POINTER PTR_MPI3_IO_UNIT_PAGE16,
+ Mpi3IOUnitPage16_t, MPI3_POINTER pMpi3IOUnitPage16_t;
+
+/**** Defines for the PageVersion field ****/
+#define MPI3_IOUNIT16_PAGEVERSION (0x00)
+
+/*****************************************************************************
* IOC Configuration Pages *
****************************************************************************/
@@ -1973,7 +2060,8 @@ typedef struct _MPI3_IOC_PAGE2
* Driver Configuration Pages *
****************************************************************************/
-/**** Defines for the Flags field ****/
+/**** Defines for the Flags field in Driver Pages 10, 20, and 30 ****/
+/**** NOT used in Driver Page 1 Flags field ****/
#define MPI3_DRIVER_FLAGS_ADMINRAIDPD_BLOCKED (0x0010)
#define MPI3_DRIVER_FLAGS_OOBRAIDPD_BLOCKED (0x0008)
#define MPI3_DRIVER_FLAGS_OOBRAIDVD_BLOCKED (0x0004)
@@ -2006,7 +2094,7 @@ typedef struct _MPI3_ALLOWED_CMD_NVME
} MPI3_ALLOWED_CMD_NVME, MPI3_POINTER PTR_MPI3_ALLOWED_CMD_NVME,
Mpi3AllowedCmdNvme_t, MPI3_POINTER pMpi3AllowedCmdNvme_t;
-/**** Defines for the CommandFlags field ****/
+/**** Defines for the NVMeCmdFlags field ****/
#define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_MASK (0x80)
#define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_IO (0x00)
#define MPI3_DRIVER_ALLOWEDCMD_NVMECMDFLAGS_SUBQ_TYPE_ADMIN (0x80)
@@ -2057,6 +2145,8 @@ typedef struct _MPI3_DRIVER_PAGE0
#define MPI3_DRIVER0_PAGEVERSION (0x00)
/**** Defines for the BSDOptions field ****/
+#define MPI3_DRIVER0_BSDOPTS_DEVICEEXPOSURE_DISABLE (0x00000020)
+#define MPI3_DRIVER0_BSDOPTS_WRITECACHE_DISABLE (0x00000010)
#define MPI3_DRIVER0_BSDOPTS_HEADLESS_MODE_ENABLE (0x00000008)
#define MPI3_DRIVER0_BSDOPTS_DIS_HII_CONFIG_UTIL (0x00000004)
#define MPI3_DRIVER0_BSDOPTS_REGISTRATION_MASK (0x00000003)
@@ -2263,14 +2353,6 @@ typedef union _MPI3_SECURITY_NONCE
} MPI3_SECURITY_NONCE, MPI3_POINTER PTR_MPI3_SECURITY_NONCE,
Mpi3SecurityNonce_t, MPI3_POINTER pMpi3SecurityNonce_t;
-typedef union _MPI3_SECURITY_ROOT_DIGEST
-{
- U32 Dword[16];
- U16 Word[32];
- U8 Byte[64];
-} MPI3_SECURITY_ROOT_DIGEST, MPI3_POINTER PTR_MPI3_SECURITY_ROOT_DIGEST,
- Mpi3SecurityRootDigest_t, MPI3_POINTER pMpi3SecurityRootDigest_t;
-
/*****************************************************************************
* Security Page 0 *
****************************************************************************/
@@ -2382,17 +2464,25 @@ typedef struct _MPI3_SECURITY_PAGE1
#define MPI3_SECURITY2_TRUSTED_ROOT_MAX 1
#endif /* MPI3_SECURITY2_TRUSTED_ROOT_MAX */
+#ifndef MPI3_SECURITY2_ROOT_LEN
+#define MPI3_SECURITY2_ROOT_LEN 4
+#endif /* MPI3_SECURITY2_ROOT_LEN */
+
typedef struct _MPI3_SECURITY2_TRUSTED_ROOT
{
U8 Level; /* 0x00 */
U8 HashAlgorithm; /* 0x01 */
U16 TrustedRootFlags; /* 0x02 */
U32 Reserved04[3]; /* 0x04 */
- MPI3_SECURITY_ROOT_DIGEST RootDigest; /* 0x10 */
+ U8 Root[MPI3_SECURITY2_ROOT_LEN]; /* 0x10 */ /* variable length */
} MPI3_SECURITY2_TRUSTED_ROOT, MPI3_POINTER PTR_MPI3_SECURITY2_TRUSTED_ROOT,
Mpi3Security2TrustedRoot_t, MPI3_POINTER pMpi3Security2TrustedRoot_t;
/**** Defines for the TrustedRootFlags field ****/
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_MASK (0xF000)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_SHIFT (12)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_DIGEST (0x0000)
+#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_ROOTFORM_DERCERT (0x1000)
#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_MASK (0x0006)
#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_SHIFT (1)
#define MPI3_SECURITY2_TRUSTEDROOT_TRUSTEDROOTFLAGS_HASHALGOSOURCE_HA_FIELD (0x0000)
@@ -2407,7 +2497,8 @@ typedef struct _MPI3_SECURITY_PAGE2
MPI3_SECURITY_NONCE Nonce; /* 0x50 */
U32 Reserved90[3]; /* 0x90 */
U8 NumRoots; /* 0x9C */
- U8 Reserved9D[3]; /* 0x9D */
+ U8 Reserved9D; /* 0x9D */
+ U16 RootElementSize; /* 0x9E */
MPI3_SECURITY2_TRUSTED_ROOT TrustedRoot[MPI3_SECURITY2_TRUSTED_ROOT_MAX]; /* 0xA0 */ /* variable length */
} MPI3_SECURITY_PAGE2, MPI3_POINTER PTR_MPI3_SECURITY_PAGE2,
Mpi3SecurityPage2_t, MPI3_POINTER pMpi3SecurityPage2_t;
@@ -3052,7 +3143,7 @@ typedef struct _MPI3_SAS_PHY_PAGE4
* Common definitions used by PCIe Configuration Pages *
****************************************************************************/
-/**** Defines for Negotiated Link Rates ****/
+/**** Defines for NegotiatedLinkRates ****/
#define MPI3_PCIE_LINK_RETIMERS_MASK (0x30)
#define MPI3_PCIE_LINK_RETIMERS_SHIFT (4)
#define MPI3_PCIE_NEG_LINK_RATE_MASK (0x0F)
@@ -3219,8 +3310,8 @@ typedef struct _MPI3_PCIE_IO_UNIT_PAGE1
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PERST_OVERRIDE_BACKPLANE_ERROR (0x60000000)
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_MASK (0x1C000000)
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_NONE (0x00000000)
-#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_DEASSERT (0x04000000)
-#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_ASSERT (0x08000000)
+#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_ENABLE (0x04000000)
+#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_DISABLE (0x08000000)
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_REFCLK_OVERRIDE_BACKPLANE_ERROR (0x0C000000)
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_PARTIAL_CAPACITY_ENABLE (0x00000100)
#define MPI3_PCIEIOUNIT1_CONTROL_FLAGS_LINK_OVERRIDE_DISABLE (0x00000080)
@@ -3362,12 +3453,14 @@ typedef struct _MPI3_PCIE_SWITCH_PAGE1
/**** Defines for the PageVersion field ****/
#define MPI3_PCIESWITCH1_PAGEVERSION (0x00)
-/**** Defines for the FLAGS field ****/
+/**** Defines for the Flags field ****/
#define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_MASK (0x0C)
#define MPI3_PCIESWITCH1_FLAGS_ASPMSTATE_SHIFT (2)
+
/*** use MPI3_PCIE_ASPM_ENABLE_ defines for ASPMState field values ***/
#define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_MASK (0x03)
#define MPI3_PCIESWITCH1_FLAGS_ASPMSUPPORT_SHIFT (0)
+
/*** use MPI3_PCIE_ASPM_SUPPORT_ defines for ASPMSupport field values ***/
/**** Defines for the NegotiatedLinkRate field - use MPI3_PCIE_NEG_LINK_RATE_ defines ****/
@@ -3454,6 +3547,8 @@ typedef struct _MPI3_ENCLOSURE_PAGE0
U16 SEPDevHandle; /* 0x1A */
U8 ChassisSlot; /* 0x1C */
U8 Reserved1D[3]; /* 0x1D */
+ U32 ReceptacleIDs; /* 0x20 */
+ U32 Reserved24; /* 0x24 */
} MPI3_ENCLOSURE_PAGE0, MPI3_POINTER PTR_MPI3_ENCLOSURE_PAGE0,
Mpi3EnclosurePage0_t, MPI3_POINTER pMpi3EnclosurePage0_t;
@@ -3474,7 +3569,8 @@ typedef struct _MPI3_ENCLOSURE_PAGE0
#define MPI3_ENCLS0_FLAGS_MNG_IOC_SES (0x0001)
#define MPI3_ENCLS0_FLAGS_MNG_SES_ENCLOSURE (0x0002)
-/**** Defines for the PhysicalPort field - use MPI3_DEVICE0_PHYPORT_ defines ****/
+/**** Defines for the ReceptacleIDs field ****/
+#define MPI3_ENCLS0_RECEPTACLEIDS_NOT_REPORTED (0x00000000)
/*****************************************************************************
* Device Configuration Pages *
@@ -3577,7 +3673,7 @@ typedef struct _MPI3_DEVICE0_PCIE_FORMAT
#define MPI3_DEVICE0_PCIE_CAP_ASPM_SHIFT (6)
/*** use MPI3_PCIE_ASPM_SUPPORT_ defines for ASPM field values ***/
-/**** Defines for the RecoverMethod field ****/
+/**** Defines for the RecoveryInfo field ****/
#define MPI3_DEVICE0_PCIE_RECOVER_METHOD_MASK (0xE0)
#define MPI3_DEVICE0_PCIE_RECOVER_METHOD_NS_MGMT (0x00)
#define MPI3_DEVICE0_PCIE_RECOVER_METHOD_FORMAT (0x20)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_image.h b/sys/dev/mpi3mr/mpi/mpi30_image.h
index 7b953cb3b1a6..917763b3e921 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_image.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_image.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_IMAGE_H
#define MPI30_IMAGE_H 1
@@ -119,12 +118,19 @@ typedef struct _MPI3_COMPONENT_IMAGE_HEADER
#define MPI3_IMAGE_HEADER_SIGNATURE1_RMC (0x20434D52) /* string "RMC " */
#define MPI3_IMAGE_HEADER_SIGNATURE1_SMM (0x204D4D53) /* string "SMM " */
#define MPI3_IMAGE_HEADER_SIGNATURE1_PSW (0x20575350) /* string "PSW " */
-
+#define MPI3_IMAGE_HEADER_SIGNATURE1_CSW (0x20575343) /* string "CSW " */
/**** Definitions for Signature2 field ****/
#define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE (0x50584546)
/**** Definitions for Flags field ****/
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MASK (0x00000300)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_UNSPECIFIED (0x00000000)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_NOT_SIGNED (0x00000100)
+#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MICROSOFT_SIGNED (0x00000200)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_MASK (0x000000C0)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_DEVICE_CERT (0x00000000)
+#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_ALIAS_CERT (0x00000040)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK (0x00000030)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI (0x00000000)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI (0x00000010)
@@ -216,12 +222,14 @@ typedef struct _MPI3_CI_MANIFEST_MPI
/* defines for the ReleaseLevel field */
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV (0x00)
+#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PRE_PRODUCTION (0x08)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA (0x10)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA (0x20)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA (0x30)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC (0x40)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA (0x50)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT (0x60)
+#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DIAG (0xF0)
/* defines for the Flags field */
#define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION (0x01)
@@ -314,9 +322,9 @@ typedef struct _MPI3_SUPPORTED_DEVICES_DATA
} MPI3_SUPPORTED_DEVICES_DATA, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICES_DATA,
Mpi3SupportedDevicesData_t, MPI3_POINTER pMpi3SupportedDevicesData_t;
-#ifndef MPI3_ENCRYPTED_HASH_MAX
-#define MPI3_ENCRYPTED_HASH_MAX (1)
-#endif /* MPI3_ENCRYPTED_HASH_MAX */
+#ifndef MPI3_PUBLIC_KEY_MAX
+#define MPI3_PUBLIC_KEY_MAX (1)
+#endif /* MPI3_PUBLIC_KEY_MAX */
/* Encrypted Hash Entry Format */
typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
@@ -325,8 +333,10 @@ typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
U8 HashAlgorithm; /* 0x01 */
U8 EncryptionAlgorithm; /* 0x02 */
U8 Reserved03; /* 0x03 */
- U32 Reserved04; /* 0x04 */
- U32 EncryptedHash[MPI3_ENCRYPTED_HASH_MAX]; /* 0x08 */ /* variable length */
+ U16 PublicKeySize; /* 0x04 */
+ U16 SignatureSize; /* 0x06 */
+ U32 PublicKey[MPI3_PUBLIC_KEY_MAX]; /* 0x08 */ /* variable length */
+ /* Signature - offset of this field must be calculated */ /* variable length */
} MPI3_ENCRYPTED_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_ENTRY,
Mpi3EncryptedHashEntry_t, MPI3_POINTER pMpi3EncryptedHashEntry_t;
@@ -358,24 +368,9 @@ typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P256 (0x07) /* NIST secp256r1 curve */
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P384 (0x08) /* NIST secp384r1 curve */
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P521 (0x09) /* NIST secp521r1 curve */
-
-
-#ifndef MPI3_PUBLIC_KEY_MAX
-#define MPI3_PUBLIC_KEY_MAX (1)
-#endif /* MPI3_PUBLIC_KEY_MAX */
-
-/* Encrypted Key with Hash Entry Format */
-typedef struct _MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY
-{
- U8 HashImageType; /* 0x00 */
- U8 HashAlgorithm; /* 0x01 */
- U8 EncryptionAlgorithm; /* 0x02 */
- U8 Reserved03; /* 0x03 */
- U32 Reserved04; /* 0x04 */
- U32 PublicKey[MPI3_PUBLIC_KEY_MAX]; /* 0x08 */ /* variable length */
- /* EncryptedHash - offset of this field must be calculated */ /* variable length */
-} MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_KEY_WITH_HASH_ENTRY,
- Mpi3EncryptedKeyWithHashEntry_t, MPI3_POINTER pMpi3EncryptedKeyWithHashEntry_t;
+#define MPI3_ENCRYPTION_ALGORITHM_LMS_HSS (0x0A) /* Leighton-Micali Signature (LMS) -
+ * Hierarchical Signature System (HSS)
+ */
#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_init.h b/sys/dev/mpi3mr/mpi/mpi30_init.h
index c0ba14909ac1..361fb690fbe6 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_init.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_init.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_INIT_H
#define MPI30_INIT_H 1
@@ -78,7 +77,7 @@ typedef struct _MPI3_SCSI_IO_REQUEST
U16 ChangeCount; /* 0x08 */
U16 DevHandle; /* 0x0A */
U32 Flags; /* 0x0C */
- U32 SkipCount; /* 0x10 */
+ U32 IOCUseOnly10; /* 0x10 */
U32 DataLength; /* 0x14 */
U8 LUN[8]; /* 0x18 */
MPI3_SCSI_IO_CDB_UNION CDB; /* 0x20 */
@@ -91,10 +90,12 @@ typedef struct _MPI3_SCSI_IO_REQUEST
#define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE (0x40)
/**** Defines for the Flags field ****/
-#define MPI3_SCSIIO_FLAGS_LARGE_CDB (0x60000000)
+#define MPI3_SCSIIO_FLAGS_LARGE_CDB_MASK (0x60000000)
#define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS (0x00000000)
#define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16 (0x20000000)
#define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER (0x40000000)
+#define MPI3_SCSIIO_FLAGS_CDB_PRODUCT_SPECIFIC (0x60000000)
+#define MPI3_SCSIIO_FLAGS_IOC_USE_ONLY_27_MASK (0x18000000)
#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK (0x07000000)
#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ (0x00000000)
#define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ (0x01000000)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_ioc.h b/sys/dev/mpi3mr/mpi/mpi30_ioc.h
index 77f6be5b2694..2d45a55b89e8 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_ioc.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_ioc.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_IOC_H
#define MPI30_IOC_H 1
@@ -76,17 +75,19 @@ typedef struct _MPI3_IOC_INIT_REQUEST
Mpi3IOCInitRequest_t, MPI3_POINTER pMpi3IOCInitRequest_t;
/**** Defines for the MsgFlags field ****/
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK (0x03)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED (0x00)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_SEPARATED (0x01)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_INLINE (0x02)
-#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_BOTH (0x03)
+#define MPI3_IOCINIT_MSGFLAGS_WRITESAMEDIVERT_SUPPORTED (0x08)
+#define MPI3_IOCINIT_MSGFLAGS_SCSIIOSTATUSREPLY_SUPPORTED (0x04)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_MASK (0x03)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_NOT_USED (0x00)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_SEPARATED (0x01)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_INLINE (0x02)
+#define MPI3_IOCINIT_MSGFLAGS_HOSTMETADATA_BOTH (0x03)
/**** Defines for the WhoInit field ****/
-#define MPI3_WHOINIT_NOT_INITIALIZED (0x00)
-#define MPI3_WHOINIT_ROM_BIOS (0x02)
-#define MPI3_WHOINIT_HOST_DRIVER (0x03)
-#define MPI3_WHOINIT_MANUFACTURER (0x04)
+#define MPI3_WHOINIT_NOT_INITIALIZED (0x00)
+#define MPI3_WHOINIT_ROM_BIOS (0x02)
+#define MPI3_WHOINIT_HOST_DRIVER (0x03)
+#define MPI3_WHOINIT_MANUFACTURER (0x04)
/**** Defines for the DriverInformationAddress field */
typedef struct _MPI3_DRIVER_INFO_LAYOUT
@@ -173,6 +174,8 @@ typedef struct _MPI3_IOC_FACTS_DATA
U16 MaxIOThrottleGroup; /* 0x62 */
U16 IOThrottleLow; /* 0x64 */
U16 IOThrottleHigh; /* 0x66 */
+ U32 DiagFdlSize; /* 0x68 */
+ U32 DiagTtySize; /* 0x6C */
} MPI3_IOC_FACTS_DATA, MPI3_POINTER PTR_MPI3_IOC_FACTS_DATA,
Mpi3IOCFactsData_t, MPI3_POINTER pMpi3IOCFactsData_t;
@@ -183,13 +186,13 @@ typedef struct _MPI3_IOC_FACTS_DATA
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_MASK (0x00000600)
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_FIXED_THRESHOLD (0x00000000)
#define MPI3_IOCFACTS_CAPABILITY_INT_COALESCE_OUTSTANDING_IO (0x00000200)
-#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_CAPABLE (0x00000100)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_ENABLED (0x00000080)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_ENABLED (0x00000040)
-#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_ENABLED (0x00000020)
-#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_ENABLED (0x00000010)
-#define MPI3_IOCFACTS_CAPABILITY_RAID_CAPABLE (0x00000008)
-#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_ENABLED (0x00000002)
+#define MPI3_IOCFACTS_CAPABILITY_COMPLETE_RESET_SUPPORTED (0x00000100)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_TRACE_SUPPORTED (0x00000080)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_FW_SUPPORTED (0x00000040)
+#define MPI3_IOCFACTS_CAPABILITY_SEG_DIAG_DRIVER_SUPPORTED (0x00000020)
+#define MPI3_IOCFACTS_CAPABILITY_ADVANCED_HOST_PD_SUPPORTED (0x00000010)
+#define MPI3_IOCFACTS_CAPABILITY_RAID_SUPPORTED (0x00000008)
+#define MPI3_IOCFACTS_CAPABILITY_MULTIPATH_SUPPORTED (0x00000002)
#define MPI3_IOCFACTS_CAPABILITY_COALESCE_CTRL_SUPPORTED (0x00000001)
/**** WhoInit values are defined under IOCInit Request Message definition ****/
@@ -234,22 +237,29 @@ typedef struct _MPI3_IOC_FACTS_DATA
#define MPI3_IOCFACTS_MAX_DATA_LENGTH_NOT_REPORTED (0x0000)
/**** Defines for the Flags field ****/
-#define MPI3_IOCFACTS_FLAGS_SIGNED_NVDATA_REQUIRED (0x00010000)
-#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_MASK (0x0000FF00)
-#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_SHIFT (8)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_MASK (0x00000030)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_NOT_STARTED (0x00000000)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_IN_PROGRESS (0x00000010)
-#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_COMPLETE (0x00000020)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_MASK (0x0000000F)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_EHBA (0x00000000)
-#define MPI3_IOCFACTS_FLAGS_PERSONALITY_RAID_DDR (0x00000002)
+#define MPI3_IOCFACTS_FLAGS_SIGNED_NVDATA_REQUIRED (0x00010000)
+#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_MASK (0x0000FF00)
+#define MPI3_IOCFACTS_FLAGS_DMA_ADDRESS_WIDTH_SHIFT (8)
+#define MPI3_IOCFACTS_FLAGS_MAX_REQ_PER_REPLY_QUEUE_LIMIT (0x00000040)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_MASK (0x00000030)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_NOT_STARTED (0x00000000)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_IN_PROGRESS (0x00000010)
+#define MPI3_IOCFACTS_FLAGS_INITIAL_PORT_ENABLE_COMPLETE (0x00000020)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_MASK (0x0000000F)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_EHBA (0x00000000)
+#define MPI3_IOCFACTS_FLAGS_PERSONALITY_RAID_DDR (0x00000002)
/**** Defines for the IOThrottleDataLength field ****/
-#define MPI3_IOCFACTS_IO_THROTTLE_DATA_LENGTH_NOT_REQUIRED (0x0000)
+#define MPI3_IOCFACTS_IO_THROTTLE_DATA_LENGTH_NOT_REQUIRED (0x0000)
-/**** Defines for the IOThrottleDataLength field ****/
-#define MPI3_IOCFACTS_MAX_IO_THROTTLE_GROUP_NOT_REQUIRED (0x0000)
+/**** Defines for the MaxIOThrottleGroup field ****/
+#define MPI3_IOCFACTS_MAX_IO_THROTTLE_GROUP_NOT_REQUIRED (0x0000)
+
+/**** Defines for the DiagFdlSize field ****/
+#define MPI3_IOCFACTS_DIAGFDLSIZE_NOT_SUPPORTED (0x00000000)
+
+/**** Defines for the DiagTtySize field ****/
+#define MPI3_IOCFACTS_DIAGTTYSIZE_NOT_SUPPORTED (0x00000000)
/*****************************************************************************
* Management Passthrough Request Message *
@@ -440,9 +450,9 @@ typedef struct _MPI3_EVENT_NOTIFICATION_REQUEST
} MPI3_EVENT_NOTIFICATION_REQUEST, MPI3_POINTER PTR_MPI3_EVENT_NOTIFICATION_REQUEST,
Mpi3EventNotificationRequest_t, MPI3_POINTER pMpi3EventNotificationRequest_t;
-/**** Defines for the SASBroadcastPrimitiveMasks field - use MPI3_EVENT_PRIMITIVE_ values ****/
+/**** Defines for the SASBroadcastPrimitiveMasks field - use MPI3_EVENT_BROADCAST_PRIMITIVE_ values ****/
-/**** Defines for the SASNotifyPrimitiveMasks field - use MPI3_EVENT_NOTIFY_ values ****/
+/**** Defines for the SASNotifyPrimitiveMasks field - use MPI3_EVENT_NOTIFY_PRIMITIVE_ values ****/
/**** Defines for the EventMasks field - use MPI3_EVENT_ values ****/
@@ -716,7 +726,7 @@ typedef struct _MPI3_EVENT_SAS_TOPO_PHY_ENTRY
{
U16 AttachedDevHandle; /* 0x00 */
U8 LinkRate; /* 0x02 */
- U8 Status; /* 0x03 */
+ U8 PhyStatus; /* 0x03 */
} MPI3_EVENT_SAS_TOPO_PHY_ENTRY, MPI3_POINTER PTR_MPI3_EVENT_SAS_TOPO_PHY_ENTRY,
Mpi3EventSasTopoPhyEntry_t, MPI3_POINTER pMpi3EventSasTopoPhyEntry_t;
diff --git a/sys/dev/mpi3mr/mpi/mpi30_pci.h b/sys/dev/mpi3mr/mpi/mpi30_pci.h
index f15dab2a5a9c..008ec7059b76 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_pci.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_pci.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_PCI_H
#define MPI30_PCI_H 1
diff --git a/sys/dev/mpi3mr/mpi/mpi30_raid.h b/sys/dev/mpi3mr/mpi/mpi30_raid.h
index fe2c4baffd3c..85941544e8fe 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_raid.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_raid.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_RAID_H
#define MPI30_RAID_H 1
diff --git a/sys/dev/mpi3mr/mpi/mpi30_sas.h b/sys/dev/mpi3mr/mpi/mpi30_sas.h
index c28de07c9fdd..fc55fba4747f 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_sas.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_sas.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_SAS_H
#define MPI30_SAS_H 1
diff --git a/sys/dev/mpi3mr/mpi/mpi30_targ.h b/sys/dev/mpi3mr/mpi/mpi30_targ.h
index d9aee48a6437..646b5287d502 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_targ.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_targ.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_TARG_H
#define MPI30_TARG_H 1
@@ -191,7 +190,7 @@ typedef struct _MPI3_TARGET_ASSIST_REQUEST
U16 QueueTag; /* 0x12 */
U16 IoIndex; /* 0x14 */
U16 InitiatorConnectionTag; /* 0x16 */
- U32 SkipCount; /* 0x18 */
+ U32 IOCUseOnly18; /* 0x18 */
U32 DataLength; /* 0x1C */
U32 PortTransferLength; /* 0x20 */
U32 PrimaryReferenceTag; /* 0x24 */
@@ -206,6 +205,8 @@ typedef struct _MPI3_TARGET_ASSIST_REQUEST
#define MPI3_TARGET_ASSIST_MSGFLAGS_METASGL_VALID (0x80)
/**** Defines for the Flags field ****/
+#define MPI3_TARGET_ASSIST_FLAGS_IOC_USE_ONLY_23_MASK (0x00800000)
+#define MPI3_TARGET_ASSIST_FLAGS_IOC_USE_ONLY_22_MASK (0x00400000)
#define MPI3_TARGET_ASSIST_FLAGS_REPOST_CMD_BUFFER (0x00200000)
#define MPI3_TARGET_ASSIST_FLAGS_AUTO_STATUS (0x00100000)
#define MPI3_TARGET_ASSIST_FLAGS_DATADIRECTION_MASK (0x000C0000)
@@ -243,6 +244,7 @@ typedef struct _MPI3_TARGET_STATUS_SEND_REQUEST
Mpi3TargetStatusSendRequest_t, MPI3_POINTER pMpi3TargetStatusSendRequest_t;
/**** Defines for the Flags field ****/
+#define MPI3_TSS_FLAGS_IOC_USE_ONLY_6_MASK (0x0040)
#define MPI3_TSS_FLAGS_REPOST_CMD_BUFFER (0x0020)
#define MPI3_TSS_FLAGS_AUTO_SEND_GOOD_STATUS (0x0010)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_tool.h b/sys/dev/mpi3mr/mpi/mpi30_tool.h
index 55fb53601863..e11ddf068555 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_tool.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_tool.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_TOOL_H
#define MPI30_TOOL_H 1
@@ -366,6 +365,7 @@ typedef struct _MPI3_DIAG_BUFFER_POST_REQUEST
#define MPI3_DIAG_BUFFER_TYPE_FW (0x02)
#define MPI3_DIAG_BUFFER_TYPE_DRIVER (0x10)
#define MPI3_DIAG_BUFFER_TYPE_FDL (0x20)
+#define MPI3_DIAG_BUFFER_TYPE_TTY (0x30)
#define MPI3_DIAG_BUFFER_MIN_PRODUCT_SPECIFIC (0xF0)
#define MPI3_DIAG_BUFFER_MAX_PRODUCT_SPECIFIC (0xFF)
@@ -388,7 +388,7 @@ typedef struct _MPI3_DRIVER_BUFFER_HEADER
} MPI3_DRIVER_BUFFER_HEADER, MPI3_POINTER PTR_MPI3_DRIVER_BUFFER_HEADER,
Mpi3DriverBufferHeader_t, MPI3_POINTER pMpi3DriverBufferHeader_t;
-/**** Defines for the Type field ****/
+/**** Defines for the Signature field ****/
#define MPI3_DRIVER_DIAG_BUFFER_HEADER_SIGNATURE_CIRCULAR (0x43495243)
/**** Defines for the Flags field ****/
diff --git a/sys/dev/mpi3mr/mpi/mpi30_transport.h b/sys/dev/mpi3mr/mpi/mpi30_transport.h
index 436496411309..860c27a2dd42 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_transport.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_transport.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -37,10 +37,8 @@
*
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
- */
-
-/*
- * Version History
+ *
+ * Version History
* ---------------
*
* Date Version Description
@@ -72,7 +70,11 @@
* 09-02-22 03.00.27.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 27.
* 10-20-22 03.00.27.01 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 27 - Interim Release 1.
* 12-02-22 03.00.28.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 28.
- * 02-24-22 03.00.29.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 29.
+ * 02-24-23 03.00.29.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 29.
+ * 05-19-23 03.00.30.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 30.
+ * 08-18-23 03.00.30.01 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 30 - Interim Release 1.
+ * 11-17-23 03.00.31.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 31
+ * 02-16-24 03.00.32.00 Corresponds to Fusion-MPT MPI 3.0 Specification Rev 32
*/
#ifndef MPI30_TRANSPORT_H
#define MPI30_TRANSPORT_H 1
@@ -101,7 +103,7 @@ typedef union _MPI3_VERSION_UNION
/****** Version constants for this revision ****/
#define MPI3_VERSION_MAJOR (3)
#define MPI3_VERSION_MINOR (0)
-#define MPI3_VERSION_UNIT (29)
+#define MPI3_VERSION_UNIT (32)
#define MPI3_VERSION_DEV (0)
/****** DevHandle definitions *****/
@@ -425,15 +427,9 @@ typedef struct _MPI3_STATUS_REPLY_DESCRIPTOR
} MPI3_STATUS_REPLY_DESCRIPTOR, MPI3_POINTER PTR_MPI3_STATUS_REPLY_DESCRIPTOR,
Mpi3StatusReplyDescriptor_t, MPI3_POINTER pMpi3StatusReplyDescriptor_t;
-/**** Defines for the IOCStatus field ****/
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL (0x8000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK (0x7FFF)
+/**** Use MPI3_IOCSTATUS_ defines for the IOCStatus field ****/
-/**** Defines for the IOCLogInfo field ****/
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_MASK (0xF0000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_NO_INFO (0x00000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_TYPE_SAS (0x30000000)
-#define MPI3_REPLY_DESCRIPT_STATUS_IOCLOGINFO_DATA_MASK (0x0FFFFFFF)
+/**** Use MPI3_IOCLOGINFO_ defines for the IOCLogInfo field ****/
/*****************************************************************************
* Union of Reply Descriptors *
@@ -652,7 +648,6 @@ typedef struct _MPI3_DEFAULT_REPLY
#define MPI3_FUNCTION_MAX_PRODUCT_SPECIFIC (0xFF) /* End of the product-specific range of function codes */
/**** Defines for IOCStatus ****/
-#define MPI3_IOCSTATUS_LOG_INFO_AVAIL_MASK (0x8000)
#define MPI3_IOCSTATUS_LOG_INFO_AVAILABLE (0x8000)
#define MPI3_IOCSTATUS_STATUS_MASK (0x7FFF)
diff --git a/sys/dev/mpi3mr/mpi/mpi30_type.h b/sys/dev/mpi3mr/mpi/mpi30_type.h
index 267ede701762..815becadcf25 100644
--- a/sys/dev/mpi3mr/mpi/mpi30_type.h
+++ b/sys/dev/mpi3mr/mpi/mpi30_type.h
@@ -1,7 +1,7 @@
/*
- * SPDX-License-Identifier: BSD-2-Clause
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
- * Copyright (c) 2016-2023, Broadcom Inc. All rights reserved.
+ * Copyright (c) 2016-2024, Broadcom Inc. All rights reserved.
* Support: <fbsd-storage-driver.pdl@broadcom.com>
*
* Redistribution and use in source and binary forms, with or without
@@ -38,7 +38,6 @@
* Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD
*
*/
-
#ifndef MPI30_TYPE_H
#define MPI30_TYPE_H 1
diff --git a/sys/dev/mpi3mr/mpi3mr.c b/sys/dev/mpi3mr/mpi3mr.c
index c592d5734d38..99a331c9baf0 100644
--- a/sys/dev/mpi3mr/mpi3mr.c
+++ b/sys/dev/mpi3mr/mpi3mr.c
@@ -2268,7 +2268,7 @@ mpi3mr_display_ioc_info(struct mpi3mr_softc *sc)
printf("Capabilities=(");
if (sc->facts.ioc_capabilities &
- MPI3_IOCFACTS_CAPABILITY_RAID_CAPABLE) {
+ MPI3_IOCFACTS_CAPABILITY_RAID_SUPPORTED) {
printf("RAID");
i++;
}
@@ -3888,7 +3888,7 @@ static void mpi3mr_sastopochg_evt_th(struct mpi3mr_softc *sc,
handle = le16toh(topo_evt->PhyEntry[i].AttachedDevHandle);
if (!handle)
continue;
- reason_code = topo_evt->PhyEntry[i].Status &
+ reason_code = topo_evt->PhyEntry[i].PhyStatus &
MPI3_EVENT_SAS_TOPO_PHY_RC_MASK;
tgtdev = mpi3mr_find_target_by_dev_handle(sc->cam_sc, handle);
switch (reason_code) {
@@ -4279,10 +4279,9 @@ static void mpi3mr_process_admin_reply_desc(struct mpi3mr_softc *sc,
status_desc = (Mpi3StatusReplyDescriptor_t *)reply_desc;
host_tag = status_desc->HostTag;
ioc_status = status_desc->IOCStatus;
- if (ioc_status &
- MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL)
+ if (ioc_status & MPI3_IOCSTATUS_STATUS_MASK)
ioc_loginfo = status_desc->IOCLogInfo;
- ioc_status &= MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK;
+ ioc_status &= MPI3_IOCSTATUS_STATUS_MASK;
break;
case MPI3_REPLY_DESCRIPT_FLAGS_TYPE_ADDRESS_REPLY:
addr_desc = (Mpi3AddressReplyDescriptor_t *)reply_desc;
@@ -4292,10 +4291,9 @@ static void mpi3mr_process_admin_reply_desc(struct mpi3mr_softc *sc,
goto out;
host_tag = def_reply->HostTag;
ioc_status = def_reply->IOCStatus;
- if (ioc_status &
- MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL)
+ if (ioc_status & MPI3_IOCSTATUS_STATUS_MASK)
ioc_loginfo = def_reply->IOCLogInfo;
- ioc_status &= MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK;
+ ioc_status &= MPI3_IOCSTATUS_STATUS_MASK;
if (def_reply->Function == MPI3_FUNCTION_SCSI_IO) {
scsi_reply = (Mpi3SCSIIOReply_t *)def_reply;
sense_buf = mpi3mr_get_sensebuf_virt_addr(sc,
@@ -4496,10 +4494,9 @@ void mpi3mr_process_op_reply_desc(struct mpi3mr_softc *sc,
status_desc = (Mpi3StatusReplyDescriptor_t *)reply_desc;
host_tag = status_desc->HostTag;
ioc_status = status_desc->IOCStatus;
- if (ioc_status &
- MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL)
+ if (ioc_status & MPI3_IOCSTATUS_STATUS_MASK)
ioc_loginfo = status_desc->IOCLogInfo;
- ioc_status &= MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK;
+ ioc_status &= MPI3_IOCSTATUS_STATUS_MASK;
break;
case MPI3_REPLY_DESCRIPT_FLAGS_TYPE_ADDRESS_REPLY:
addr_desc = (Mpi3AddressReplyDescriptor_t *)reply_desc;
@@ -4523,10 +4520,9 @@ void mpi3mr_process_op_reply_desc(struct mpi3mr_softc *sc,
resp_data = scsi_reply->ResponseData;
sense_buf = mpi3mr_get_sensebuf_virt_addr(sc,
scsi_reply->SenseDataBufferAddress);
- if (ioc_status &
- MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_LOGINFOAVAIL)
+ if (ioc_status & MPI3_IOCSTATUS_STATUS_MASK)
ioc_loginfo = scsi_reply->IOCLogInfo;
- ioc_status &= MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK;
+ ioc_status &= MPI3_IOCSTATUS_STATUS_MASK;
if (sense_state == MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY)
mpi3mr_dprint(sc, MPI3MR_ERROR, "Ran out of sense buffers\n");
@@ -4728,7 +4724,7 @@ void mpi3mr_process_op_reply_desc(struct mpi3mr_softc *sc,
csio->resid = cm->length - le32toh(xfer_count);
case MPI3_IOCSTATUS_SCSI_RECOVERED_ERROR:
case MPI3_IOCSTATUS_SUCCESS:
- if ((scsi_reply->IOCStatus & MPI3_REPLY_DESCRIPT_STATUS_IOCSTATUS_STATUS_MASK) ==
+ if ((scsi_reply->IOCStatus & MPI3_IOCSTATUS_STATUS_MASK) ==
MPI3_IOCSTATUS_SCSI_RECOVERED_ERROR)
mpi3mr_dprint(sc, MPI3MR_XINFO, "func: %s line: %d recovered error\n", __func__, __LINE__);
diff --git a/sys/dev/mpi3mr/mpi3mr_cam.c b/sys/dev/mpi3mr/mpi3mr_cam.c
index da6342063e87..337ad6cb7336 100644
--- a/sys/dev/mpi3mr/mpi3mr_cam.c
+++ b/sys/dev/mpi3mr/mpi3mr_cam.c
@@ -1560,7 +1560,7 @@ mpi3mr_sastopochg_evt_debug(struct mpi3mr_softc *sc,
if (!handle)
continue;
phy_number = event_data->StartPhyNum + i;
- reason_code = event_data->PhyEntry[i].Status &
+ reason_code = event_data->PhyEntry[i].PhyStatus &
MPI3_EVENT_SAS_TOPO_PHY_RC_MASK;
switch (reason_code) {
case MPI3_EVENT_SAS_TOPO_PHY_RC_TARG_NOT_RESPONDING:
@@ -1613,7 +1613,7 @@ mpi3mr_process_sastopochg_evt(struct mpi3mr_softc *sc, struct mpi3mr_fw_event_wo
continue;
target->link_rate = link_rate;
- reason_code = event_data->PhyEntry[i].Status &
+ reason_code = event_data->PhyEntry[i].PhyStatus &
MPI3_EVENT_SAS_TOPO_PHY_RC_MASK;
switch (reason_code) {