net/mlx5_core: New device capabilities handling
- Query all supported types of dev caps on driver load. - Store the Cap data outbox per cap type into driver private data. - Introduce new Macros to access/dump stored caps (using the auto generated data types). - Obsolete SW representation of dev caps (no need for SW copy for each cap). - Modify IB driver to use new macros for checking caps. Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e281682bf2
commit
938fe83c8d
@@ -59,6 +59,8 @@
|
||||
#define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8)
|
||||
#define MLX5_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8)
|
||||
#define MLX5_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32)
|
||||
#define MLX5_UN_SZ_BYTES(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 8)
|
||||
#define MLX5_UN_SZ_DW(typ) (sizeof(union mlx5_ifc_##typ##_bits) / 32)
|
||||
#define MLX5_BYTE_OFF(typ, fld) (__mlx5_bit_off(typ, fld) / 8)
|
||||
#define MLX5_ADDR_OF(typ, p, fld) ((char *)(p) + MLX5_BYTE_OFF(typ, fld))
|
||||
|
||||
@@ -322,13 +324,6 @@ enum {
|
||||
MLX5_CAP_OFF_CMDIF_CSUM = 46,
|
||||
};
|
||||
|
||||
enum {
|
||||
HCA_CAP_OPMOD_GET_MAX = 0,
|
||||
HCA_CAP_OPMOD_GET_CUR = 1,
|
||||
HCA_CAP_OPMOD_GET_ODP_MAX = 4,
|
||||
HCA_CAP_OPMOD_GET_ODP_CUR = 5
|
||||
};
|
||||
|
||||
struct mlx5_inbox_hdr {
|
||||
__be16 opcode;
|
||||
u8 rsvd[4];
|
||||
@@ -1101,4 +1096,61 @@ enum {
|
||||
MLX5_RQC_RQ_TYPE_MEMORY_RQ_RPM = 0x1,
|
||||
};
|
||||
|
||||
/* MLX5 DEV CAPs */
|
||||
|
||||
/* TODO: EAT.ME */
|
||||
enum mlx5_cap_mode {
|
||||
HCA_CAP_OPMOD_GET_MAX = 0,
|
||||
HCA_CAP_OPMOD_GET_CUR = 1,
|
||||
};
|
||||
|
||||
enum mlx5_cap_type {
|
||||
MLX5_CAP_GENERAL = 0,
|
||||
MLX5_CAP_ETHERNET_OFFLOADS,
|
||||
MLX5_CAP_ODP,
|
||||
MLX5_CAP_ATOMIC,
|
||||
MLX5_CAP_ROCE,
|
||||
MLX5_CAP_IPOIB_OFFLOADS,
|
||||
MLX5_CAP_EOIB_OFFLOADS,
|
||||
MLX5_CAP_FLOW_TABLE,
|
||||
/* NUM OF CAP Types */
|
||||
MLX5_CAP_NUM
|
||||
};
|
||||
|
||||
/* GET Dev Caps macros */
|
||||
#define MLX5_CAP_GEN(mdev, cap) \
|
||||
MLX5_GET(cmd_hca_cap, mdev->hca_caps_cur[MLX5_CAP_GENERAL], cap)
|
||||
|
||||
#define MLX5_CAP_GEN_MAX(mdev, cap) \
|
||||
MLX5_GET(cmd_hca_cap, mdev->hca_caps_max[MLX5_CAP_GENERAL], cap)
|
||||
|
||||
#define MLX5_CAP_ETH(mdev, cap) \
|
||||
MLX5_GET(per_protocol_networking_offload_caps,\
|
||||
mdev->hca_caps_cur[MLX5_CAP_ETHERNET_OFFLOADS], cap)
|
||||
|
||||
#define MLX5_CAP_ETH_MAX(mdev, cap) \
|
||||
MLX5_GET(per_protocol_networking_offload_caps,\
|
||||
mdev->hca_caps_max[MLX5_CAP_ETHERNET_OFFLOADS], cap)
|
||||
|
||||
#define MLX5_CAP_ROCE(mdev, cap) \
|
||||
MLX5_GET(roce_cap, mdev->hca_caps_cur[MLX5_CAP_ROCE], cap)
|
||||
|
||||
#define MLX5_CAP_ROCE_MAX(mdev, cap) \
|
||||
MLX5_GET(roce_cap, mdev->hca_caps_max[MLX5_CAP_ROCE], cap)
|
||||
|
||||
#define MLX5_CAP_ATOMIC(mdev, cap) \
|
||||
MLX5_GET(atomic_caps, mdev->hca_caps_cur[MLX5_CAP_ATOMIC], cap)
|
||||
|
||||
#define MLX5_CAP_ATOMIC_MAX(mdev, cap) \
|
||||
MLX5_GET(atomic_caps, mdev->hca_caps_max[MLX5_CAP_ATOMIC], cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE(mdev, cap) \
|
||||
MLX5_GET(flow_table_nic_cap, mdev->hca_caps_cur[MLX5_CAP_FLOW_TABLE], cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_MAX(mdev, cap) \
|
||||
MLX5_GET(flow_table_nic_cap, mdev->hca_caps_max[MLX5_CAP_FLOW_TABLE], cap)
|
||||
|
||||
#define MLX5_CAP_ODP(mdev, cap)\
|
||||
MLX5_GET(odp_cap, mdev->hca_caps_cur[MLX5_CAP_ODP], cap)
|
||||
|
||||
#endif /* MLX5_DEVICE_H */
|
||||
|
Reference in New Issue
Block a user