mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 04:59:05 -04:00
Mellanox ConnectX-4/Connect-IB shared code (SW part)
* net/mlx5: Add sniffer namespaces * net/mlx5: Introduce sniffer steering hardware capabilities * net/mlx5: Configure IB devices according to LAG state * net/mlx5: Vport LAG creation support * net/mlx5: Add LAG flow steering namespace * net/mlx5: LAG demux flow table support * net/mlx5: LAG and SRIOV cannot be used together * net/mlx5e: Avoid port remapping of mlx5e netdev TISes * net/mlx5: Get RoCE netdev * net/mlx5: Implement RoCE LAG feature * net/mlx5: Add HW interfaces used by LAG * net/mlx5: Separate query_port_proto_oper for IB and EN * net/mlx5: Expose mlx5e_link_mode * net/mlx5: Update struct mlx5_ifc_xrqc_bits * net/mlx5: Modify RQ bitmask from mlx5 ifc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXu20hAAoJEORje4g2cliniO8P/0nMxLemOxY63u7P6DqT+UZQ +LN62W+/iLicNayKkt8mtcjnDm768YcF3ADvx73vRvKEeUyyEqT5ChMA59eicf70 rrumfNXB/kfBOaPh5rFWf4Tn8WWpKW+0559drm80NslFZF9jjF9pwv5QGg7xISb7 fYLcDQWn+5fYDuZzYsSu8zZKUEyGN0AugdjfxT5OHfh4rw+6oqGDb2fhH6LdkD8q j3Qx1cPmdQQnjJ5veXJFJT5qHFDqJlNmy85s4l99ItdWD/bcU29ue3Q3vNf7+lHp XoJB4ZRWG7sf98yXYXnOUt3iGUMdSJzpLfZqh/Nx9U1LZpdJ8lmBf7pRuR1hpPIN yDitcz+CMcFVr2WxvwWaUPhRE7SJsZxxr6tQISgRicYcFVyy9e7mLjABMtkh9vEn CXXqiDGUb/27HqTi9ha5qRiLoeT8yFpOCkINL4omV2FJKoUEbC+Jbq5P0mjnPpS1 ZdzTOzWCtkDQGtLbi+nCIF5SVTv7CCDU+6VpGZPmk6M4/ednwajhxGPsbw6bRpna ck5SglGO8dFAaUv1UVRq04PIt7Lj2FRakP7sHWx3tc9XEP8syLX0OEiVB+ZN3yRn y2TlpsREk7AqDdRulwM4qfuNd4AxaDklXyS3C79RiJtenYO4GUGrJ6J6ryesLg8u tGKVV3fXEr2Hve6cTkpu =+m21 -----END PGP SIGNATURE----- Merge tag 'shared-for-4.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma into mlx5-shared Mellanox ConnectX-4/Connect-IB shared code (SW part) * net/mlx5: Add sniffer namespaces * net/mlx5: Introduce sniffer steering hardware capabilities * net/mlx5: Configure IB devices according to LAG state * net/mlx5: Vport LAG creation support * net/mlx5: Add LAG flow steering namespace * net/mlx5: LAG demux flow table support * net/mlx5: LAG and SRIOV cannot be used together * net/mlx5e: Avoid port remapping of mlx5e netdev TISes * net/mlx5: Get RoCE netdev * net/mlx5: Implement RoCE LAG feature * net/mlx5: Add HW interfaces used by LAG * net/mlx5: Separate query_port_proto_oper for IB and EN * net/mlx5: Expose mlx5e_link_mode * net/mlx5: Update struct mlx5_ifc_xrqc_bits * net/mlx5: Modify RQ bitmask from mlx5 ifc
This commit is contained in:
commit
0c41284c83
19 changed files with 1105 additions and 100 deletions
|
|
@ -964,6 +964,18 @@ enum mlx5_cap_type {
|
|||
#define MLX5_CAP_FLOWTABLE_NIC_RX_MAX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_receive.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_SNIFFER_RX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive_sniffer.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_SNIFFER_RX_MAX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_receive_sniffer.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_SNIFFER_TX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_transmit_sniffer.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_SNIFFER_TX_MAX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_transmit_sniffer.cap)
|
||||
|
||||
#define MLX5_CAP_ESW_FLOWTABLE(mdev, cap) \
|
||||
MLX5_GET(flow_table_eswitch_cap, \
|
||||
mdev->hca_caps_cur[MLX5_CAP_ESWITCH_FLOW_TABLE], cap)
|
||||
|
|
|
|||
|
|
@ -48,10 +48,6 @@
|
|||
#include <linux/mlx5/doorbell.h>
|
||||
#include <linux/mlx5/srq.h>
|
||||
|
||||
enum {
|
||||
MLX5_RQ_BITMASK_VSD = 1 << 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_BOARD_ID_LEN = 64,
|
||||
MLX5_MAX_NAME_LEN = 16,
|
||||
|
|
@ -481,6 +477,7 @@ struct mlx5_fc_stats {
|
|||
};
|
||||
|
||||
struct mlx5_eswitch;
|
||||
struct mlx5_lag;
|
||||
|
||||
struct mlx5_rl_entry {
|
||||
u32 rate;
|
||||
|
|
@ -554,6 +551,7 @@ struct mlx5_priv {
|
|||
struct mlx5_flow_steering *steering;
|
||||
struct mlx5_eswitch *eswitch;
|
||||
struct mlx5_core_sriov sriov;
|
||||
struct mlx5_lag *lag;
|
||||
unsigned long pci_dev_data;
|
||||
struct mlx5_fc_stats fc_stats;
|
||||
struct mlx5_rl_table rl_table;
|
||||
|
|
@ -946,6 +944,11 @@ int mlx5_register_interface(struct mlx5_interface *intf);
|
|||
void mlx5_unregister_interface(struct mlx5_interface *intf);
|
||||
int mlx5_core_query_vendor_id(struct mlx5_core_dev *mdev, u32 *vendor_id);
|
||||
|
||||
int mlx5_cmd_create_vport_lag(struct mlx5_core_dev *dev);
|
||||
int mlx5_cmd_destroy_vport_lag(struct mlx5_core_dev *dev);
|
||||
bool mlx5_lag_is_active(struct mlx5_core_dev *dev);
|
||||
struct net_device *mlx5_lag_get_roce_netdev(struct mlx5_core_dev *dev);
|
||||
|
||||
struct mlx5_profile {
|
||||
u64 mask;
|
||||
u8 log_max_qp;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ static inline void build_leftovers_ft_param(int *priority,
|
|||
|
||||
enum mlx5_flow_namespace_type {
|
||||
MLX5_FLOW_NAMESPACE_BYPASS,
|
||||
MLX5_FLOW_NAMESPACE_LAG,
|
||||
MLX5_FLOW_NAMESPACE_OFFLOADS,
|
||||
MLX5_FLOW_NAMESPACE_ETHTOOL,
|
||||
MLX5_FLOW_NAMESPACE_KERNEL,
|
||||
|
|
@ -62,6 +63,8 @@ enum mlx5_flow_namespace_type {
|
|||
MLX5_FLOW_NAMESPACE_FDB,
|
||||
MLX5_FLOW_NAMESPACE_ESW_EGRESS,
|
||||
MLX5_FLOW_NAMESPACE_ESW_INGRESS,
|
||||
MLX5_FLOW_NAMESPACE_SNIFFER_RX,
|
||||
MLX5_FLOW_NAMESPACE_SNIFFER_TX,
|
||||
};
|
||||
|
||||
struct mlx5_flow_table;
|
||||
|
|
@ -106,6 +109,9 @@ mlx5_create_vport_flow_table(struct mlx5_flow_namespace *ns,
|
|||
int prio,
|
||||
int num_flow_table_entries,
|
||||
u32 level, u16 vport);
|
||||
struct mlx5_flow_table *mlx5_create_lag_demux_flow_table(
|
||||
struct mlx5_flow_namespace *ns,
|
||||
int prio, u32 level);
|
||||
int mlx5_destroy_flow_table(struct mlx5_flow_table *ft);
|
||||
|
||||
/* inbox should be set with the following values:
|
||||
|
|
|
|||
|
|
@ -174,6 +174,12 @@ enum {
|
|||
MLX5_CMD_OP_DELETE_L2_TABLE_ENTRY = 0x82b,
|
||||
MLX5_CMD_OP_SET_WOL_ROL = 0x830,
|
||||
MLX5_CMD_OP_QUERY_WOL_ROL = 0x831,
|
||||
MLX5_CMD_OP_CREATE_LAG = 0x840,
|
||||
MLX5_CMD_OP_MODIFY_LAG = 0x841,
|
||||
MLX5_CMD_OP_QUERY_LAG = 0x842,
|
||||
MLX5_CMD_OP_DESTROY_LAG = 0x843,
|
||||
MLX5_CMD_OP_CREATE_VPORT_LAG = 0x844,
|
||||
MLX5_CMD_OP_DESTROY_VPORT_LAG = 0x845,
|
||||
MLX5_CMD_OP_CREATE_TIR = 0x900,
|
||||
MLX5_CMD_OP_MODIFY_TIR = 0x901,
|
||||
MLX5_CMD_OP_DESTROY_TIR = 0x902,
|
||||
|
|
@ -477,7 +483,9 @@ struct mlx5_ifc_ads_bits {
|
|||
|
||||
struct mlx5_ifc_flow_table_nic_cap_bits {
|
||||
u8 nic_rx_multi_path_tirs[0x1];
|
||||
u8 reserved_at_1[0x1ff];
|
||||
u8 nic_rx_multi_path_tirs_fts[0x1];
|
||||
u8 allow_sniffer_and_nic_rx_shared_tir[0x1];
|
||||
u8 reserved_at_3[0x1fd];
|
||||
|
||||
struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive;
|
||||
|
||||
|
|
@ -779,7 +787,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
|
|||
u8 out_of_seq_cnt[0x1];
|
||||
u8 vport_counters[0x1];
|
||||
u8 retransmission_q_counters[0x1];
|
||||
u8 reserved_at_183[0x3];
|
||||
u8 reserved_at_183[0x1];
|
||||
u8 modify_rq_counter_set_id[0x1];
|
||||
u8 reserved_at_185[0x1];
|
||||
u8 max_qp_cnt[0xa];
|
||||
u8 pkey_table_size[0x10];
|
||||
|
||||
|
|
@ -882,7 +892,10 @@ struct mlx5_ifc_cmd_hca_cap_bits {
|
|||
u8 pad_tx_eth_packet[0x1];
|
||||
u8 reserved_at_263[0x8];
|
||||
u8 log_bf_reg_size[0x5];
|
||||
u8 reserved_at_270[0x10];
|
||||
|
||||
u8 reserved_at_270[0xb];
|
||||
u8 lag_master[0x1];
|
||||
u8 num_lag_ports[0x4];
|
||||
|
||||
u8 reserved_at_280[0x10];
|
||||
u8 max_wqe_sz_sq[0x10];
|
||||
|
|
@ -1916,7 +1929,7 @@ enum {
|
|||
|
||||
struct mlx5_ifc_qpc_bits {
|
||||
u8 state[0x4];
|
||||
u8 reserved_at_4[0x4];
|
||||
u8 lag_tx_port_affinity[0x4];
|
||||
u8 st[0x8];
|
||||
u8 reserved_at_10[0x3];
|
||||
u8 pm_state[0x2];
|
||||
|
|
@ -2165,7 +2178,11 @@ struct mlx5_ifc_traffic_counter_bits {
|
|||
};
|
||||
|
||||
struct mlx5_ifc_tisc_bits {
|
||||
u8 reserved_at_0[0xc];
|
||||
u8 strict_lag_tx_port_affinity[0x1];
|
||||
u8 reserved_at_1[0x3];
|
||||
u8 lag_tx_port_affinity[0x04];
|
||||
|
||||
u8 reserved_at_8[0x4];
|
||||
u8 prio[0x4];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
|
|
@ -2827,7 +2844,7 @@ struct mlx5_ifc_xrqc_bits {
|
|||
|
||||
struct mlx5_ifc_tag_matching_topology_context_bits tag_matching_topology_context;
|
||||
|
||||
u8 reserved_at_180[0x180];
|
||||
u8 reserved_at_180[0x200];
|
||||
|
||||
struct mlx5_ifc_wq_bits wq;
|
||||
};
|
||||
|
|
@ -4615,7 +4632,9 @@ struct mlx5_ifc_modify_tis_out_bits {
|
|||
struct mlx5_ifc_modify_tis_bitmask_bits {
|
||||
u8 reserved_at_0[0x20];
|
||||
|
||||
u8 reserved_at_20[0x1f];
|
||||
u8 reserved_at_20[0x1d];
|
||||
u8 lag_tx_port_affinity[0x1];
|
||||
u8 strict_lag_tx_port_affinity[0x1];
|
||||
u8 prio[0x1];
|
||||
};
|
||||
|
||||
|
|
@ -4750,6 +4769,11 @@ struct mlx5_ifc_modify_rq_out_bits {
|
|||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_VSD = 1ULL << 1,
|
||||
MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_MODIFY_RQ_COUNTER_SET_ID = 1ULL << 3,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_modify_rq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
|
@ -6208,7 +6232,10 @@ struct mlx5_ifc_create_flow_table_in_bits {
|
|||
u8 reserved_at_e0[0x8];
|
||||
u8 table_miss_id[0x18];
|
||||
|
||||
u8 reserved_at_100[0x100];
|
||||
u8 reserved_at_100[0x8];
|
||||
u8 lag_master_next_table_id[0x18];
|
||||
|
||||
u8 reserved_at_120[0x80];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_create_flow_group_out_bits {
|
||||
|
|
@ -7662,7 +7689,8 @@ struct mlx5_ifc_set_flow_table_root_in_bits {
|
|||
};
|
||||
|
||||
enum {
|
||||
MLX5_MODIFY_FLOW_TABLE_MISS_TABLE_ID = 0x1,
|
||||
MLX5_MODIFY_FLOW_TABLE_MISS_TABLE_ID = (1UL << 0),
|
||||
MLX5_MODIFY_FLOW_TABLE_LAG_NEXT_TABLE_ID = (1UL << 15),
|
||||
};
|
||||
|
||||
struct mlx5_ifc_modify_flow_table_out_bits {
|
||||
|
|
@ -7701,7 +7729,10 @@ struct mlx5_ifc_modify_flow_table_in_bits {
|
|||
u8 reserved_at_e0[0x8];
|
||||
u8 table_miss_id[0x18];
|
||||
|
||||
u8 reserved_at_100[0x100];
|
||||
u8 reserved_at_100[0x8];
|
||||
u8 lag_master_next_table_id[0x18];
|
||||
|
||||
u8 reserved_at_120[0x80];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_ets_tcn_config_reg_bits {
|
||||
|
|
@ -7809,4 +7840,134 @@ struct mlx5_ifc_dcbx_param_bits {
|
|||
u8 error[0x8];
|
||||
u8 reserved_at_a0[0x160];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_lagc_bits {
|
||||
u8 reserved_at_0[0x1d];
|
||||
u8 lag_state[0x3];
|
||||
|
||||
u8 reserved_at_20[0x14];
|
||||
u8 tx_remap_affinity_2[0x4];
|
||||
u8 reserved_at_38[0x4];
|
||||
u8 tx_remap_affinity_1[0x4];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_create_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_create_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
struct mlx5_ifc_lagc_bits ctx;
|
||||
};
|
||||
|
||||
struct mlx5_ifc_modify_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_modify_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x20];
|
||||
u8 field_select[0x20];
|
||||
|
||||
struct mlx5_ifc_lagc_bits ctx;
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
|
||||
struct mlx5_ifc_lagc_bits ctx;
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_destroy_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_destroy_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_create_vport_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_create_vport_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_destroy_vport_lag_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_destroy_vport_lag_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
#endif /* MLX5_IFC_H */
|
||||
|
|
|
|||
|
|
@ -61,6 +61,39 @@ enum mlx5_an_status {
|
|||
#define MLX5_I2C_ADDR_HIGH 0x51
|
||||
#define MLX5_EEPROM_PAGE_LENGTH 256
|
||||
|
||||
enum mlx5e_link_mode {
|
||||
MLX5E_1000BASE_CX_SGMII = 0,
|
||||
MLX5E_1000BASE_KX = 1,
|
||||
MLX5E_10GBASE_CX4 = 2,
|
||||
MLX5E_10GBASE_KX4 = 3,
|
||||
MLX5E_10GBASE_KR = 4,
|
||||
MLX5E_20GBASE_KR2 = 5,
|
||||
MLX5E_40GBASE_CR4 = 6,
|
||||
MLX5E_40GBASE_KR4 = 7,
|
||||
MLX5E_56GBASE_R4 = 8,
|
||||
MLX5E_10GBASE_CR = 12,
|
||||
MLX5E_10GBASE_SR = 13,
|
||||
MLX5E_10GBASE_ER = 14,
|
||||
MLX5E_40GBASE_SR4 = 15,
|
||||
MLX5E_40GBASE_LR4 = 16,
|
||||
MLX5E_50GBASE_SR2 = 18,
|
||||
MLX5E_100GBASE_CR4 = 20,
|
||||
MLX5E_100GBASE_SR4 = 21,
|
||||
MLX5E_100GBASE_KR4 = 22,
|
||||
MLX5E_100GBASE_LR4 = 23,
|
||||
MLX5E_100BASE_TX = 24,
|
||||
MLX5E_1000BASE_T = 25,
|
||||
MLX5E_10GBASE_T = 26,
|
||||
MLX5E_25GBASE_CR = 27,
|
||||
MLX5E_25GBASE_KR = 28,
|
||||
MLX5E_25GBASE_SR = 29,
|
||||
MLX5E_50GBASE_CR2 = 30,
|
||||
MLX5E_50GBASE_KR2 = 31,
|
||||
MLX5E_LINK_MODES_NUMBER,
|
||||
};
|
||||
|
||||
#define MLX5E_PROT_MASK(link_mode) (1 << link_mode)
|
||||
|
||||
int mlx5_set_port_caps(struct mlx5_core_dev *dev, u8 port_num, u32 caps);
|
||||
int mlx5_query_port_ptys(struct mlx5_core_dev *dev, u32 *ptys,
|
||||
int ptys_size, int proto_mask, u8 local_port);
|
||||
|
|
@ -70,9 +103,10 @@ int mlx5_query_port_proto_admin(struct mlx5_core_dev *dev,
|
|||
u32 *proto_admin, int proto_mask);
|
||||
int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev,
|
||||
u8 *link_width_oper, u8 local_port);
|
||||
int mlx5_query_port_proto_oper(struct mlx5_core_dev *dev,
|
||||
u8 *proto_oper, int proto_mask,
|
||||
u8 local_port);
|
||||
int mlx5_query_port_ib_proto_oper(struct mlx5_core_dev *dev,
|
||||
u8 *proto_oper, u8 local_port);
|
||||
int mlx5_query_port_eth_proto_oper(struct mlx5_core_dev *dev,
|
||||
u32 *proto_oper, u8 local_port);
|
||||
int mlx5_set_port_ptys(struct mlx5_core_dev *dev, bool an_disable,
|
||||
u32 proto_admin, int proto_mask);
|
||||
void mlx5_toggle_port_link(struct mlx5_core_dev *dev);
|
||||
|
|
|
|||
Loading…
Reference in a new issue