/*Manufacturing Page 2 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check Header.PageLength at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check Header.PageLength at
+ *runtime before using HwSettings[].
  */
-#ifndef MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS
-#define MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS   (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_MAN_2 {
        MPI2_CONFIG_PAGE_HEADER Header;                     /*0x00 */
        MPI2_CHIP_REVISION_ID   ChipId;                     /*0x04 */
-       U32
-               HwSettings[MPI2_MAN_PAGE_2_HW_SETTINGS_WORDS];/*0x08 */
+       U32                     HwSettings[];               /*0x08 */
 } MPI2_CONFIG_PAGE_MAN_2,
        *PTR_MPI2_CONFIG_PAGE_MAN_2,
        Mpi2ManufacturingPage2_t,
 /*Manufacturing Page 3 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check Header.PageLength at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check Header.PageLength at
+ *runtime before using Info[].
  */
-#ifndef MPI2_MAN_PAGE_3_INFO_WORDS
-#define MPI2_MAN_PAGE_3_INFO_WORDS          (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_MAN_3 {
        MPI2_CONFIG_PAGE_HEADER             Header;         /*0x00 */
        MPI2_CHIP_REVISION_ID               ChipId;         /*0x04 */
-       U32
-               Info[MPI2_MAN_PAGE_3_INFO_WORDS];/*0x08 */
+       U32                                 Info[];         /*0x08 */
 } MPI2_CONFIG_PAGE_MAN_3,
        *PTR_MPI2_CONFIG_PAGE_MAN_3,
        Mpi2ManufacturingPage3_t,
 /*Manufacturing Page 5 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhys at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhys at runtime before using Phy[].
  */
-#ifndef MPI2_MAN_PAGE_5_PHY_ENTRIES
-#define MPI2_MAN_PAGE_5_PHY_ENTRIES         (1)
-#endif
 
 typedef struct _MPI2_MANUFACTURING5_ENTRY {
        U64                                 WWID;           /*0x00 */
        U16                                 Reserved2;      /*0x06 */
        U32                                 Reserved3;      /*0x08 */
        U32                                 Reserved4;      /*0x0C */
-       MPI2_MANUFACTURING5_ENTRY
-               Phy[MPI2_MAN_PAGE_5_PHY_ENTRIES];/*0x08 */
+       MPI2_MANUFACTURING5_ENTRY           Phy[];          /*0x10 */
 } MPI2_CONFIG_PAGE_MAN_5,
        *PTR_MPI2_CONFIG_PAGE_MAN_5,
        Mpi2ManufacturingPage5_t,
 #define MPI2_MANPAGE7_SLOT_UNKNOWN                      (0xFFFF)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhys at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhys at runtime before using ConnectorInfo[].
  */
-#ifndef MPI2_MANPAGE7_CONNECTOR_INFO_MAX
-#define MPI2_MANPAGE7_CONNECTOR_INFO_MAX  (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_MAN_7 {
        MPI2_CONFIG_PAGE_HEADER         Header;             /*0x00 */
        U8                              NumPhys;            /*0x20 */
        U8                              Reserved3;          /*0x21 */
        U16                             Reserved4;          /*0x22 */
-       MPI2_MANPAGE7_CONNECTOR_INFO
-       ConnectorInfo[MPI2_MANPAGE7_CONNECTOR_INFO_MAX]; /*0x24 */
+       MPI2_MANPAGE7_CONNECTOR_INFO    ConnectorInfo[];    /*0x24 */
 } MPI2_CONFIG_PAGE_MAN_7,
        *PTR_MPI2_CONFIG_PAGE_MAN_7,
        Mpi2ManufacturingPage7_t,
 /*IO Unit Page 5 */
 
 /*
- *Upper layer code (drivers, utilities, etc.) should leave this define set to
- *one and check the value returned for NumDmaEngines at runtime.
+ *Upper layer code (drivers, utilities, etc.) should check the value returned
+ *for NumDmaEngines at runtime before using DmaEngineCapabilities[].
  */
-#ifndef MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES
-#define MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_5 {
        MPI2_CONFIG_PAGE_HEADER Header;                     /*0x00 */
        U32                     Reserved2;                  /*0x24 */
        U32                     Reserved3;                  /*0x28 */
        U32
-       DmaEngineCapabilities[MPI2_IOUNITPAGE5_DMAENGINE_ENTRIES]; /*0x2C */
+               DmaEngineCapabilities[];                    /*0x2C */
 } MPI2_CONFIG_PAGE_IO_UNIT_5,
        *PTR_MPI2_CONFIG_PAGE_IO_UNIT_5,
        Mpi2IOUnitPage5_t, *pMpi2IOUnitPage5_t;
 #define MPI2_IOUNIT9_SENSOR_FLAGS_TEMP_VALID        (0x01)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumSensors at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumSensors at runtime before using Sensor[].
  */
-#ifndef MPI2_IOUNITPAGE9_SENSOR_ENTRIES
-#define MPI2_IOUNITPAGE9_SENSOR_ENTRIES     (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_9 {
        MPI2_CONFIG_PAGE_HEADER Header;                 /*0x00 */
        U8                      NumSensors;             /*0x0C */
        U8                      Reserved4;              /*0x0D */
        U16                     Reserved3;              /*0x0E */
-       MPI2_IOUNIT9_SENSOR
-               Sensor[MPI2_IOUNITPAGE9_SENSOR_ENTRIES];/*0x10 */
+       MPI2_IOUNIT9_SENSOR     Sensor[];               /*0x10 */
 } MPI2_CONFIG_PAGE_IO_UNIT_9,
        *PTR_MPI2_CONFIG_PAGE_IO_UNIT_9,
        Mpi2IOUnitPage9_t, *pMpi2IOUnitPage9_t;
        *pMpi2IOUnit10Function_t;
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumFunctions at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumFunctions at runtime before using Function[].
  */
-#ifndef MPI2_IOUNITPAGE10_FUNCTION_ENTRIES
-#define MPI2_IOUNITPAGE10_FUNCTION_ENTRIES      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_IO_UNIT_10 {
        MPI2_CONFIG_PAGE_HEADER Header;                      /*0x00 */
        U16                     Reserved2;                   /*0x06 */
        U32                     Reserved3;                   /*0x08 */
        U32                     Reserved4;                   /*0x0C */
-       MPI2_IOUNIT10_FUNCTION
-               Function[MPI2_IOUNITPAGE10_FUNCTION_ENTRIES];/*0x10 */
+       MPI2_IOUNIT10_FUNCTION  Function[];                  /*0x10 */
 } MPI2_CONFIG_PAGE_IO_UNIT_10,
        *PTR_MPI2_CONFIG_PAGE_IO_UNIT_10,
        Mpi2IOUnitPage10_t, *pMpi2IOUnitPage10_t;
 /*BIOS Page 4 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhys at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhys at runtime before using Phy[].
  */
-#ifndef MPI2_BIOS_PAGE_4_PHY_ENTRIES
-#define MPI2_BIOS_PAGE_4_PHY_ENTRIES        (1)
-#endif
 
 typedef struct _MPI2_BIOS4_ENTRY {
        U64                     ReassignmentWWID;       /*0x00 */
        U8                      NumPhys;            /*0x04 */
        U8                      Reserved1;          /*0x05 */
        U16                     Reserved2;          /*0x06 */
-       MPI2_BIOS4_ENTRY
-               Phy[MPI2_BIOS_PAGE_4_PHY_ENTRIES];  /*0x08 */
+       MPI2_BIOS4_ENTRY        Phy[];              /*0x08 */
 } MPI2_CONFIG_PAGE_BIOS_4, *PTR_MPI2_CONFIG_PAGE_BIOS_4,
        Mpi2BiosPage4_t, *pMpi2BiosPage4_t;
 
 /*RAID Physical Disk Page 1 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhysDiskPaths at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhysDiskPaths at runtime before using PhysicalDiskPath[].
  */
-#ifndef MPI2_RAID_PHYS_DISK1_PATH_MAX
-#define MPI2_RAID_PHYS_DISK1_PATH_MAX   (1)
-#endif
 
 typedef struct _MPI2_RAIDPHYSDISK1_PATH {
        U16             DevHandle;          /*0x00 */
        U8                              PhysDiskNum;        /*0x05 */
        U16                             Reserved1;          /*0x06 */
        U32                             Reserved2;          /*0x08 */
-       MPI2_RAIDPHYSDISK1_PATH
-               PhysicalDiskPath[MPI2_RAID_PHYS_DISK1_PATH_MAX];/*0x0C */
+       MPI2_RAIDPHYSDISK1_PATH         PhysicalDiskPath[]; /*0x0C */
 } MPI2_CONFIG_PAGE_RD_PDISK_1,
        *PTR_MPI2_CONFIG_PAGE_RD_PDISK_1,
        Mpi2RaidPhysDiskPage1_t,
 #define MPI2_SASIOUNIT5_ITE_ONE_MICROSECOND             (0)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhys at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhys at runtime before using SASPhyPowerManagementSettings[].
  */
-#ifndef MPI2_SAS_IOUNIT5_PHY_MAX
-#define MPI2_SAS_IOUNIT5_PHY_MAX        (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_5 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER    Header;   /*0x00 */
        U16                                 Reserved2;/*0x0A */
        U32                                 Reserved3;/*0x0C */
        MPI2_SAS_IO_UNIT5_PHY_PM_SETTINGS
-       SASPhyPowerManagementSettings[MPI2_SAS_IOUNIT5_PHY_MAX];/*0x10 */
+               SASPhyPowerManagementSettings[];      /*0x10 */
 } MPI2_CONFIG_PAGE_SASIOUNIT_5,
        *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_5,
        Mpi2SasIOUnitPage5_t, *pMpi2SasIOUnitPage5_t;
 #define MPI2_SASIOUNIT6_MODULATION_100_PERCENT                  (0x03)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumGroups at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumGroups at runtime before using PortWidthModulationGroupStatus[].
  */
-#ifndef MPI2_SAS_IOUNIT6_GROUP_MAX
-#define MPI2_SAS_IOUNIT6_GROUP_MAX      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_6 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER    Header;                 /*0x00 */
        U8                                  Reserved3;              /*0x11 */
        U16                                 Reserved4;              /*0x12 */
        MPI2_SAS_IO_UNIT6_PORT_WIDTH_MOD_GROUP_STATUS
-       PortWidthModulationGroupStatus[MPI2_SAS_IOUNIT6_GROUP_MAX]; /*0x14 */
+               PortWidthModulationGroupStatus[];                   /*0x14 */
 } MPI2_CONFIG_PAGE_SASIOUNIT_6,
        *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_6,
        Mpi2SasIOUnitPage6_t, *pMpi2SasIOUnitPage6_t;
 
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumGroups at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumGroups at runtime before using PortWidthModulationGroupSettings[].
  */
-#ifndef MPI2_SAS_IOUNIT7_GROUP_MAX
-#define MPI2_SAS_IOUNIT7_GROUP_MAX      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_SASIOUNIT_7 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER Header;             /*0x00 */
        U8                               Reserved4;          /*0x15 */
        U16                              Reserved5;          /*0x16 */
        MPI2_SAS_IO_UNIT7_PORT_WIDTH_MOD_GROUP_SETTINGS
-       PortWidthModulationGroupSettings[MPI2_SAS_IOUNIT7_GROUP_MAX];/*0x18 */
+               PortWidthModulationGroupSettings[];          /*0x18 */
 } MPI2_CONFIG_PAGE_SASIOUNIT_7,
        *PTR_MPI2_CONFIG_PAGE_SASIOUNIT_7,
        Mpi2SasIOUnitPage7_t, *pMpi2SasIOUnitPage7_t;
 
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhyEvents at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhyEvents at runtime before using PhyEvent[].
  */
-#ifndef MPI2_SASPHY2_PHY_EVENT_MAX
-#define MPI2_SASPHY2_PHY_EVENT_MAX      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_2 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER
        U16
                Reserved3;                  /*0x0E */
        MPI2_SASPHY2_PHY_EVENT
-               PhyEvent[MPI2_SASPHY2_PHY_EVENT_MAX]; /*0x10 */
+               PhyEvent[];                 /*0x10 */
 } MPI2_CONFIG_PAGE_SAS_PHY_2,
        *PTR_MPI2_CONFIG_PAGE_SAS_PHY_2,
        Mpi2SasPhyPage2_t,
 #define MPI2_SASPHY3_TFLAGS_EVENT_NOTIFY                    (0x0001)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhyEvents at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhyEvents at runtime before using PhyEventConfig[].
  */
-#ifndef MPI2_SASPHY3_PHY_EVENT_MAX
-#define MPI2_SASPHY3_PHY_EVENT_MAX      (1)
-#endif
 
 typedef struct _MPI2_CONFIG_PAGE_SAS_PHY_3 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER
        U16
                Reserved3;                  /*0x0E */
        MPI2_SASPHY3_PHY_EVENT_CONFIG
-               PhyEventConfig[MPI2_SASPHY3_PHY_EVENT_MAX]; /*0x10 */
+               PhyEventConfig[];           /*0x10 */
 } MPI2_CONFIG_PAGE_SAS_PHY_3,
        *PTR_MPI2_CONFIG_PAGE_SAS_PHY_3,
        Mpi2SasPhyPage3_t, *pMpi2SasPhyPage3_t;
 /*Log Page 0 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumLogEntries at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumLogEntries at runtime before using LogEntry[].
  */
-#ifndef MPI2_LOG_0_NUM_LOG_ENTRIES
-#define MPI2_LOG_0_NUM_LOG_ENTRIES          (1)
-#endif
 
 #define MPI2_LOG_0_LOG_DATA_LENGTH          (0x1C)
 
        U32                                 Reserved2;    /*0x0C */
        U16                                 NumLogEntries;/*0x10 */
        U16                                 Reserved3;    /*0x12 */
-       MPI2_LOG_0_ENTRY
-               LogEntry[MPI2_LOG_0_NUM_LOG_ENTRIES]; /*0x14 */
+       MPI2_LOG_0_ENTRY                    LogEntry[];   /*0x14 */
 } MPI2_CONFIG_PAGE_LOG_0, *PTR_MPI2_CONFIG_PAGE_LOG_0,
        Mpi2LogPage0_t, *pMpi2LogPage0_t;
 
 /*RAID Page 0 */
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumElements at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumElements at runtime before using ConfigElement[].
  */
-#ifndef MPI2_RAIDCONFIG0_MAX_ELEMENTS
-#define MPI2_RAIDCONFIG0_MAX_ELEMENTS       (1)
-#endif
 
 typedef struct _MPI2_RAIDCONFIG0_CONFIG_ELEMENT {
        U16                     ElementFlags;             /*0x00 */
        U8                                  NumElements;    /*0x2C */
        U8                                  Reserved2;      /*0x2D */
        U16                                 Reserved3;      /*0x2E */
-       MPI2_RAIDCONFIG0_CONFIG_ELEMENT
-               ConfigElement[MPI2_RAIDCONFIG0_MAX_ELEMENTS]; /*0x30 */
+       MPI2_RAIDCONFIG0_CONFIG_ELEMENT     ConfigElement[];/*0x30 */
 } MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0,
        *PTR_MPI2_CONFIG_PAGE_RAID_CONFIGURATION_0,
        Mpi2RaidConfigurationPage0_t,
        Mpi26PCIeIOUnit0PhyData_t, *pMpi26PCIeIOUnit0PhyData_t;
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumPhys at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumPhys at runtime before using PhyData[].
  */
-#ifndef MPI26_PCIE_IOUNIT0_PHY_MAX
-#define MPI26_PCIE_IOUNIT0_PHY_MAX      (1)
-#endif
 
 typedef struct _MPI26_CONFIG_PAGE_PIOUNIT_0 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER        Header; /*0x00 */
        U8      InitStatus;                             /*0x0D */
        U16     Reserved3;                              /*0x0E */
        MPI26_PCIE_IO_UNIT0_PHY_DATA
-               PhyData[MPI26_PCIE_IOUNIT0_PHY_MAX];    /*0x10 */
+               PhyData[];                              /*0x10 */
 } MPI26_CONFIG_PAGE_PIOUNIT_0,
        *PTR_MPI26_CONFIG_PAGE_PIOUNIT_0,
        Mpi26PCIeIOUnitPage0_t, *pMpi26PCIeIOUnitPage0_t;
 
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumLinkEvents at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumLinkEvents at runtime before using LinkEvent[].
  */
-#ifndef MPI26_PCIELINK2_LINK_EVENT_MAX
-#define MPI26_PCIELINK2_LINK_EVENT_MAX      (1)
-#endif
 
 typedef struct _MPI26_CONFIG_PAGE_PCIELINK_2 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER        Header; /*0x00 */
        U8      Reserved3;                  /*0x0D */
        U16     Reserved4;                  /*0x0E */
        MPI26_PCIELINK2_LINK_EVENT
-               LinkEvent[MPI26_PCIELINK2_LINK_EVENT_MAX];      /*0x10 */
+               LinkEvent[];                /*0x10 */
 } MPI26_CONFIG_PAGE_PCIELINK_2, *PTR_MPI26_CONFIG_PAGE_PCIELINK_2,
        Mpi26PcieLinkPage2_t, *pMpi26PcieLinkPage2_t;
 
 #define MPI26_PCIELINK3_TFLAGS_EVENT_NOTIFY                 (0x0001)
 
 /*
- *Host code (drivers, BIOS, utilities, etc.) should leave this define set to
- *one and check the value returned for NumLinkEvents at runtime.
+ *Host code (drivers, BIOS, utilities, etc.) should check the value returned
+ *for NumLinkEvents at runtime before using LinkEventConfig[].
  */
-#ifndef MPI26_PCIELINK3_LINK_EVENT_MAX
-#define MPI26_PCIELINK3_LINK_EVENT_MAX      (1)
-#endif
 
 typedef struct _MPI26_CONFIG_PAGE_PCIELINK_3 {
        MPI2_CONFIG_EXTENDED_PAGE_HEADER        Header; /*0x00 */
        U8      Reserved3;                  /*0x0D */
        U16     Reserved4;                  /*0x0E */
        MPI26_PCIELINK3_LINK_EVENT_CONFIG
-               LinkEventConfig[MPI26_PCIELINK3_LINK_EVENT_MAX]; /*0x10 */
+               LinkEventConfig[];          /*0x10 */
 } MPI26_CONFIG_PAGE_PCIELINK_3, *PTR_MPI26_CONFIG_PAGE_PCIELINK_3,
        Mpi26PcieLinkPage3_t, *pMpi26PcieLinkPage3_t;