MLX5_REG_MRTCQ           = 0x9182,
        MLX5_REG_SBCAM           = 0xB01F,
        MLX5_REG_RESOURCE_DUMP   = 0xC000,
+       MLX5_REG_NIC_CAP         = 0xC00D,
        MLX5_REG_DTOR            = 0xC00E,
+       MLX5_REG_VHCA_ICM_CTRL   = 0xC010,
 };
 
 enum mlx5_qpts_trust_state {
 
        u8         regexp_params[0x1];
        u8         uar_sz[0x6];
        u8         port_selection_cap[0x1];
-       u8         reserved_at_251[0x1];
+       u8         nic_cap_reg[0x1];
        u8         umem_uid_0[0x1];
        u8         reserved_at_253[0x5];
        u8         log_pg_sz[0x8];
        u8         reserved_at_0[0xe0];
 };
 
+struct mlx5_ifc_nic_cap_reg_bits {
+       u8         reserved_at_0[0x1a];
+       u8         vhca_icm_ctrl[0x1];
+       u8         reserved_at_1b[0x5];
+
+       u8         reserved_at_20[0x60];
+};
+
 struct mlx5_ifc_default_timeout_bits {
        u8         to_multiplier[0x3];
        u8         reserved_at_3[0x9];
        u8         reserved_at_1c0[0x20];
 };
 
+struct mlx5_ifc_vhca_icm_ctrl_reg_bits {
+       u8         vhca_id_valid[0x1];
+       u8         reserved_at_1[0xf];
+       u8         vhca_id[0x10];
+
+       u8         reserved_at_20[0xa0];
+
+       u8         cur_alloc_icm[0x20];
+
+       u8         reserved_at_e0[0x120];
+};
+
 enum {
        MLX5_CQ_ERROR_SYNDROME_CQ_OVERRUN                 = 0x1,
        MLX5_CQ_ERROR_SYNDROME_CQ_ACCESS_VIOLATION_ERROR  = 0x2,