@@ -205,6 +205,86 @@ static const char *link_layer_str(uint8_t link_layer)
}
}
+static void print_device_cap_flags(uint32_t dev_cap_flags)
+{
+ uint32_t unknown_flags = ~(IBV_DEVICE_RESIZE_MAX_WR |
+ IBV_DEVICE_BAD_PKEY_CNTR |
+ IBV_DEVICE_BAD_QKEY_CNTR |
+ IBV_DEVICE_RAW_MULTI |
+ IBV_DEVICE_AUTO_PATH_MIG |
+ IBV_DEVICE_CHANGE_PHY_PORT |
+ IBV_DEVICE_UD_AV_PORT_ENFORCE |
+ IBV_DEVICE_CURR_QP_STATE_MOD |
+ IBV_DEVICE_SHUTDOWN_PORT |
+ IBV_DEVICE_INIT_TYPE |
+ IBV_DEVICE_PORT_ACTIVE_EVENT |
+ IBV_DEVICE_SYS_IMAGE_GUID |
+ IBV_DEVICE_RC_RNR_NAK_GEN |
+ IBV_DEVICE_SRQ_RESIZE |
+ IBV_DEVICE_N_NOTIFY_CQ |
+ IBV_DEVICE_MEM_WINDOW |
+ IBV_DEVICE_UD_IP_CSUM |
+ IBV_DEVICE_XRC |
+ IBV_DEVICE_MEM_MGT_EXTENSIONS |
+ IBV_DEVICE_MEM_WINDOW_TYPE_2A |
+ IBV_DEVICE_MEM_WINDOW_TYPE_2B |
+ IBV_DEVICE_RC_IP_CSUM |
+ IBV_DEVICE_RAW_IP_CSUM |
+ IBV_DEVICE_MANAGED_FLOW_STEERING);
+
+ if (dev_cap_flags & IBV_DEVICE_RESIZE_MAX_WR)
+ printf("\t\t\t\t\tRESIZE_MAX_WR\n");
+ if (dev_cap_flags & IBV_DEVICE_BAD_PKEY_CNTR)
+ printf("\t\t\t\t\tBAD_PKEY_CNTR\n");
+ if (dev_cap_flags & IBV_DEVICE_BAD_QKEY_CNTR)
+ printf("\t\t\t\t\tBAD_QKEY_CNTR\n");
+ if (dev_cap_flags & IBV_DEVICE_RAW_MULTI)
+ printf("\t\t\t\t\tRAW_MULTI\n");
+ if (dev_cap_flags & IBV_DEVICE_AUTO_PATH_MIG)
+ printf("\t\t\t\t\tAUTO_PATH_MIG\n");
+ if (dev_cap_flags & IBV_DEVICE_CHANGE_PHY_PORT)
+ printf("\t\t\t\t\tCHANGE_PHY_PORT\n");
+ if (dev_cap_flags & IBV_DEVICE_UD_AV_PORT_ENFORCE)
+ printf("\t\t\t\t\tUD_AV_PORT_ENFORCE\n");
+ if (dev_cap_flags & IBV_DEVICE_CURR_QP_STATE_MOD)
+ printf("\t\t\t\t\tCURR_QP_STATE_MOD\n");
+ if (dev_cap_flags & IBV_DEVICE_SHUTDOWN_PORT)
+ printf("\t\t\t\t\tSHUTDOWN_PORT\n");
+ if (dev_cap_flags & IBV_DEVICE_INIT_TYPE)
+ printf("\t\t\t\t\tINIT_TYPE\n");
+ if (dev_cap_flags & IBV_DEVICE_PORT_ACTIVE_EVENT)
+ printf("\t\t\t\t\tPORT_ACTIVE_EVENT\n");
+ if (dev_cap_flags & IBV_DEVICE_SYS_IMAGE_GUID)
+ printf("\t\t\t\t\tSYS_IMAGE_GUID\n");
+ if (dev_cap_flags & IBV_DEVICE_RC_RNR_NAK_GEN)
+ printf("\t\t\t\t\tRC_RNR_NAK_GEN\n");
+ if (dev_cap_flags & IBV_DEVICE_SRQ_RESIZE)
+ printf("\t\t\t\t\tSRQ_RESIZE\n");
+ if (dev_cap_flags & IBV_DEVICE_N_NOTIFY_CQ)
+ printf("\t\t\t\t\tN_NOTIFY_CQ\n");
+ if (dev_cap_flags & IBV_DEVICE_MEM_WINDOW)
+ printf("\t\t\t\t\tMEM_WINDOW\n");
+ if (dev_cap_flags & IBV_DEVICE_UD_IP_CSUM)
+ printf("\t\t\t\t\tUD_IP_CSUM\n");
+ if (dev_cap_flags & IBV_DEVICE_XRC)
+ printf("\t\t\t\t\tXRC\n");
+ if (dev_cap_flags & IBV_DEVICE_MEM_MGT_EXTENSIONS)
+ printf("\t\t\t\t\tMEM_MGT_EXTENSIONS\n");
+ if (dev_cap_flags & IBV_DEVICE_MEM_WINDOW_TYPE_2A)
+ printf("\t\t\t\t\tMEM_WINDOW_TYPE_2A\n");
+ if (dev_cap_flags & IBV_DEVICE_MEM_WINDOW_TYPE_2B)
+ printf("\t\t\t\t\tMEM_WINDOW_TYPE_2B\n");
+ if (dev_cap_flags & IBV_DEVICE_RC_IP_CSUM)
+ printf("\t\t\t\t\tRC_IP_CSUM\n");
+ if (dev_cap_flags & IBV_DEVICE_RAW_IP_CSUM)
+ printf("\t\t\t\t\tRAW_IP_CSUM\n");
+ if (dev_cap_flags & IBV_DEVICE_MANAGED_FLOW_STEERING)
+ printf("\t\t\t\t\tMANAGED_FLOW_STEERING\n");
+ if (dev_cap_flags & unknown_flags)
+ printf("\t\t\t\t\tUnknown flags: 0x%" PRIX32 "\n",
+ dev_cap_flags & unknown_flags);
+}
+
void print_odp_trans_caps(uint32_t trans)
{
uint32_t unknown_transport_caps = ~(IBV_ODP_SUPPORT_SEND |
@@ -304,6 +384,7 @@ static int print_hca_cap(struct ibv_device *ib_dev, uint8_t ib_port)
printf("\tmax_qp:\t\t\t\t%d\n", device_attr.orig_attr.max_qp);
printf("\tmax_qp_wr:\t\t\t%d\n", device_attr.orig_attr.max_qp_wr);
printf("\tdevice_cap_flags:\t\t0x%08x\n", device_attr.orig_attr.device_cap_flags);
+ print_device_cap_flags(device_attr.orig_attr.device_cap_flags);
printf("\tmax_sge:\t\t\t%d\n", device_attr.orig_attr.max_sge);
printf("\tmax_sge_rd:\t\t\t%d\n", device_attr.orig_attr.max_sge_rd);
printf("\tmax_cq:\t\t\t\t%d\n", device_attr.orig_attr.max_cq);