Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
[platform/kernel/linux-starfive.git] / include / linux / mlx5 / mlx5_ifc.h
index 92602e3..5a4e914 100644 (file)
@@ -68,6 +68,7 @@ enum {
        MLX5_SET_HCA_CAP_OP_MOD_ODP                   = 0x2,
        MLX5_SET_HCA_CAP_OP_MOD_ATOMIC                = 0x3,
        MLX5_SET_HCA_CAP_OP_MOD_ROCE                  = 0x4,
+       MLX5_SET_HCA_CAP_OP_MODE_PORT_SELECTION       = 0x25,
 };
 
 enum {
@@ -82,6 +83,7 @@ enum {
        MLX5_GENERAL_OBJ_TYPES_CAP_SW_ICM = (1ULL << MLX5_OBJ_TYPE_SW_ICM),
        MLX5_GENERAL_OBJ_TYPES_CAP_GENEVE_TLV_OPT = (1ULL << 11),
        MLX5_GENERAL_OBJ_TYPES_CAP_VIRTIO_NET_Q = (1ULL << 13),
+       MLX5_GENERAL_OBJ_TYPES_CAP_MACSEC_OFFLOAD = (1ULL << 39),
 };
 
 enum {
@@ -89,6 +91,7 @@ enum {
        MLX5_OBJ_TYPE_VIRTIO_NET_Q = 0x000d,
        MLX5_OBJ_TYPE_VIRTIO_Q_COUNTERS = 0x001c,
        MLX5_OBJ_TYPE_MATCH_DEFINER = 0x0018,
+       MLX5_OBJ_TYPE_PAGE_TRACK = 0x46,
        MLX5_OBJ_TYPE_MKEY = 0xff01,
        MLX5_OBJ_TYPE_QP = 0xff02,
        MLX5_OBJ_TYPE_PSV = 0xff03,
@@ -449,7 +452,12 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
        u8         reserved_at_60[0x2];
        u8         reformat_insert[0x1];
        u8         reformat_remove[0x1];
-       u8         reserver_at_64[0x14];
+       u8         macsec_encrypt[0x1];
+       u8         macsec_decrypt[0x1];
+       u8         reserved_at_66[0x2];
+       u8         reformat_add_macsec[0x1];
+       u8         reformat_remove_macsec[0x1];
+       u8         reserved_at_6a[0xe];
        u8         log_max_ft_num[0x8];
 
        u8         reserved_at_80[0x10];
@@ -476,6 +484,22 @@ struct mlx5_ifc_odp_per_transport_service_cap_bits {
        u8         reserved_at_6[0x1a];
 };
 
+struct mlx5_ifc_ipv4_layout_bits {
+       u8         reserved_at_0[0x60];
+
+       u8         ipv4[0x20];
+};
+
+struct mlx5_ifc_ipv6_layout_bits {
+       u8         ipv6[16][0x8];
+};
+
+union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits {
+       struct mlx5_ifc_ipv6_layout_bits ipv6_layout;
+       struct mlx5_ifc_ipv4_layout_bits ipv4_layout;
+       u8         reserved_at_0[0x80];
+};
+
 struct mlx5_ifc_fte_match_set_lyr_2_4_bits {
        u8         smac_47_16[0x20];
 
@@ -611,7 +635,11 @@ struct mlx5_ifc_fte_match_set_misc2_bits {
 
        u8         metadata_reg_a[0x20];
 
-       u8         reserved_at_1a0[0x60];
+       u8         reserved_at_1a0[0x8];
+
+       u8         macsec_syndrome[0x8];
+
+       u8         reserved_at_1b0[0x50];
 };
 
 struct mlx5_ifc_fte_match_set_misc3_bits {
@@ -813,7 +841,9 @@ struct mlx5_ifc_flow_table_nic_cap_bits {
 struct mlx5_ifc_port_selection_cap_bits {
        u8         reserved_at_0[0x10];
        u8         port_select_flow_table[0x1];
-       u8         reserved_at_11[0xf];
+       u8         reserved_at_11[0x1];
+       u8         port_select_flow_table_bypass[0x1];
+       u8         reserved_at_13[0xd];
 
        u8         reserved_at_20[0x1e0];
 
@@ -1276,6 +1306,24 @@ struct mlx5_ifc_ipsec_cap_bits {
        u8         reserved_at_30[0x7d0];
 };
 
+struct mlx5_ifc_macsec_cap_bits {
+       u8    macsec_epn[0x1];
+       u8    reserved_at_1[0x2];
+       u8    macsec_crypto_esp_aes_gcm_256_encrypt[0x1];
+       u8    macsec_crypto_esp_aes_gcm_128_encrypt[0x1];
+       u8    macsec_crypto_esp_aes_gcm_256_decrypt[0x1];
+       u8    macsec_crypto_esp_aes_gcm_128_decrypt[0x1];
+       u8    reserved_at_7[0x4];
+       u8    log_max_macsec_offload[0x5];
+       u8    reserved_at_10[0x10];
+
+       u8    min_log_macsec_full_replay_window[0x8];
+       u8    max_log_macsec_full_replay_window[0x8];
+       u8    reserved_at_30[0x10];
+
+       u8    reserved_at_40[0x7c0];
+};
+
 enum {
        MLX5_WQ_TYPE_LINKED_LIST  = 0x0,
        MLX5_WQ_TYPE_CYCLIC       = 0x1,
@@ -1443,7 +1491,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
 
        u8         reserved_at_120[0xa];
        u8         log_max_ra_req_dc[0x6];
-       u8         reserved_at_130[0x9];
+       u8         reserved_at_130[0x2];
+       u8         eth_wqe_too_small[0x1];
+       u8         reserved_at_133[0x6];
        u8         vnic_env_cq_overrun[0x1];
        u8         log_max_ra_res_dc[0x6];
 
@@ -1735,7 +1785,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
        u8         max_geneve_tlv_options[0x8];
        u8         reserved_at_568[0x3];
        u8         max_geneve_tlv_option_data_len[0x5];
-       u8         reserved_at_570[0x10];
+       u8         reserved_at_570[0x9];
+       u8         adv_virtualization[0x1];
+       u8         reserved_at_57a[0x6];
 
        u8         reserved_at_580[0xb];
        u8         log_max_dci_stream_channels[0x5];
@@ -1830,7 +1882,13 @@ struct mlx5_ifc_cmd_hca_cap_2_bits {
        u8         max_reformat_remove_size[0x8];
        u8         max_reformat_remove_offset[0x8];
 
-       u8         reserved_at_c0[0x160];
+       u8         reserved_at_c0[0xe0];
+
+       u8         reserved_at_1a0[0xb];
+       u8         log_min_mkey_entity_size[0x5];
+       u8         reserved_at_1b0[0x10];
+
+       u8         reserved_at_1c0[0x60];
 
        u8         reserved_at_220[0x1];
        u8         sw_vhca_id_valid[0x1];
@@ -3297,6 +3355,7 @@ union mlx5_ifc_hca_cap_union_bits {
        struct mlx5_ifc_device_mem_cap_bits device_mem_cap;
        struct mlx5_ifc_virtio_emulation_cap_bits virtio_emulation_cap;
        struct mlx5_ifc_shampo_cap_bits shampo_cap;
+       struct mlx5_ifc_macsec_cap_bits macsec_cap;
        u8         reserved_at_0[0x8000];
 };
 
@@ -3312,8 +3371,8 @@ enum {
        MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH = 0x100,
        MLX5_FLOW_CONTEXT_ACTION_VLAN_POP_2  = 0x400,
        MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2 = 0x800,
-       MLX5_FLOW_CONTEXT_ACTION_IPSEC_DECRYPT = 0x1000,
-       MLX5_FLOW_CONTEXT_ACTION_IPSEC_ENCRYPT = 0x2000,
+       MLX5_FLOW_CONTEXT_ACTION_CRYPTO_DECRYPT = 0x1000,
+       MLX5_FLOW_CONTEXT_ACTION_CRYPTO_ENCRYPT = 0x2000,
        MLX5_FLOW_CONTEXT_ACTION_EXECUTE_ASO = 0x4000,
 };
 
@@ -3323,6 +3382,11 @@ enum {
        MLX5_FLOW_CONTEXT_FLOW_SOURCE_LOCAL_VPORT       = 0x2,
 };
 
+enum {
+       MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_IPSEC   = 0x0,
+       MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_MACSEC  = 0x1,
+};
+
 struct mlx5_ifc_vlan_bits {
        u8         ethtype[0x10];
        u8         prio[0x3];
@@ -3376,7 +3440,7 @@ struct mlx5_ifc_flow_context_bits {
        u8         extended_destination[0x1];
        u8         reserved_at_81[0x1];
        u8         flow_source[0x2];
-       u8         reserved_at_84[0x4];
+       u8         encrypt_decrypt_type[0x4];
        u8         destination_list_size[0x18];
 
        u8         reserved_at_a0[0x8];
@@ -3388,7 +3452,7 @@ struct mlx5_ifc_flow_context_bits {
 
        struct mlx5_ifc_vlan_bits push_vlan_2;
 
-       u8         ipsec_obj_id[0x20];
+       u8         encrypt_decrypt_obj_id[0x20];
        u8         reserved_at_140[0xc0];
 
        struct mlx5_ifc_fte_match_param_bits match_value;
@@ -3477,7 +3541,9 @@ struct mlx5_ifc_vnic_diagnostic_statistics_bits {
 
        u8         cq_overrun[0x20];
 
-       u8         reserved_at_220[0xde0];
+       u8         eth_wqe_too_small[0x20];
+
+       u8         reserved_at_220[0xdc0];
 };
 
 struct mlx5_ifc_traffic_counter_bits {
@@ -6320,6 +6386,8 @@ enum mlx5_reformat_ctx_type {
        MLX5_REFORMAT_TYPE_L2_TO_L3_TUNNEL = 0x4,
        MLX5_REFORMAT_TYPE_INSERT_HDR = 0xf,
        MLX5_REFORMAT_TYPE_REMOVE_HDR = 0x10,
+       MLX5_REFORMAT_TYPE_ADD_MACSEC = 0x11,
+       MLX5_REFORMAT_TYPE_DEL_MACSEC = 0x12,
 };
 
 struct mlx5_ifc_alloc_packet_reformat_context_in_bits {
@@ -9793,7 +9861,9 @@ struct mlx5_ifc_pcam_reg_bits {
 struct mlx5_ifc_mcam_enhanced_features_bits {
        u8         reserved_at_0[0x5d];
        u8         mcia_32dwords[0x1];
-       u8         reserved_at_5e[0xc];
+       u8         out_pulse_duration_ns[0x1];
+       u8         npps_period[0x1];
+       u8         reserved_at_60[0xa];
        u8         reset_state[0x1];
        u8         ptpcyc2realtime_modify[0x1];
        u8         reserved_at_6c[0x2];
@@ -10293,7 +10363,12 @@ struct mlx5_ifc_mtpps_reg_bits {
        u8         reserved_at_18[0x4];
        u8         cap_max_num_of_pps_out_pins[0x4];
 
-       u8         reserved_at_20[0x24];
+       u8         reserved_at_20[0x13];
+       u8         cap_log_min_npps_period[0x5];
+       u8         reserved_at_38[0x3];
+       u8         cap_log_min_out_pulse_duration_ns[0x5];
+
+       u8         reserved_at_40[0x4];
        u8         cap_pin_3_mode[0x4];
        u8         reserved_at_48[0x4];
        u8         cap_pin_2_mode[0x4];
@@ -10312,7 +10387,9 @@ struct mlx5_ifc_mtpps_reg_bits {
        u8         cap_pin_4_mode[0x4];
 
        u8         field_select[0x20];
-       u8         reserved_at_a0[0x60];
+       u8         reserved_at_a0[0x20];
+
+       u8         npps_period[0x40];
 
        u8         enable[0x1];
        u8         reserved_at_101[0xb];
@@ -10321,7 +10398,8 @@ struct mlx5_ifc_mtpps_reg_bits {
        u8         pin_mode[0x4];
        u8         pin[0x8];
 
-       u8         reserved_at_120[0x20];
+       u8         reserved_at_120[0x2];
+       u8         out_pulse_duration_ns[0x1e];
 
        u8         time_stamp[0x40];
 
@@ -10924,7 +11002,9 @@ struct mlx5_ifc_lagc_bits {
        u8         reserved_at_18[0x5];
        u8         lag_state[0x3];
 
-       u8         reserved_at_20[0x14];
+       u8         reserved_at_20[0xc];
+       u8         active_port[0x4];
+       u8         reserved_at_30[0x4];
        u8         tx_remap_affinity_2[0x4];
        u8         reserved_at_38[0x4];
        u8         tx_remap_affinity_1[0x4];
@@ -11476,6 +11556,7 @@ enum {
        MLX5_GENERAL_OBJECT_TYPES_IPSEC = 0x13,
        MLX5_GENERAL_OBJECT_TYPES_SAMPLER = 0x20,
        MLX5_GENERAL_OBJECT_TYPES_FLOW_METER_ASO = 0x24,
+       MLX5_GENERAL_OBJECT_TYPES_MACSEC = 0x27,
 };
 
 enum {
@@ -11526,6 +11607,96 @@ struct mlx5_ifc_modify_ipsec_obj_in_bits {
        struct mlx5_ifc_ipsec_obj_bits ipsec_object;
 };
 
+enum {
+       MLX5_MACSEC_ASO_REPLAY_PROTECTION = 0x1,
+};
+
+enum {
+       MLX5_MACSEC_ASO_REPLAY_WIN_32BIT  = 0x0,
+       MLX5_MACSEC_ASO_REPLAY_WIN_64BIT  = 0x1,
+       MLX5_MACSEC_ASO_REPLAY_WIN_128BIT = 0x2,
+       MLX5_MACSEC_ASO_REPLAY_WIN_256BIT = 0x3,
+};
+
+#define MLX5_MACSEC_ASO_INC_SN  0x2
+#define MLX5_MACSEC_ASO_REG_C_4_5 0x2
+
+struct mlx5_ifc_macsec_aso_bits {
+       u8    valid[0x1];
+       u8    reserved_at_1[0x1];
+       u8    mode[0x2];
+       u8    window_size[0x2];
+       u8    soft_lifetime_arm[0x1];
+       u8    hard_lifetime_arm[0x1];
+       u8    remove_flow_enable[0x1];
+       u8    epn_event_arm[0x1];
+       u8    reserved_at_a[0x16];
+
+       u8    remove_flow_packet_count[0x20];
+
+       u8    remove_flow_soft_lifetime[0x20];
+
+       u8    reserved_at_60[0x80];
+
+       u8    mode_parameter[0x20];
+
+       u8    replay_protection_window[8][0x20];
+};
+
+struct mlx5_ifc_macsec_offload_obj_bits {
+       u8    modify_field_select[0x40];
+
+       u8    confidentiality_en[0x1];
+       u8    reserved_at_41[0x1];
+       u8    epn_en[0x1];
+       u8    epn_overlap[0x1];
+       u8    reserved_at_44[0x2];
+       u8    confidentiality_offset[0x2];
+       u8    reserved_at_48[0x4];
+       u8    aso_return_reg[0x4];
+       u8    reserved_at_50[0x10];
+
+       u8    epn_msb[0x20];
+
+       u8    reserved_at_80[0x8];
+       u8    dekn[0x18];
+
+       u8    reserved_at_a0[0x20];
+
+       u8    sci[0x40];
+
+       u8    reserved_at_100[0x8];
+       u8    macsec_aso_access_pd[0x18];
+
+       u8    reserved_at_120[0x60];
+
+       u8    salt[3][0x20];
+
+       u8    reserved_at_1e0[0x20];
+
+       struct mlx5_ifc_macsec_aso_bits macsec_aso;
+};
+
+struct mlx5_ifc_create_macsec_obj_in_bits {
+       struct mlx5_ifc_general_obj_in_cmd_hdr_bits general_obj_in_cmd_hdr;
+       struct mlx5_ifc_macsec_offload_obj_bits macsec_object;
+};
+
+struct mlx5_ifc_modify_macsec_obj_in_bits {
+       struct mlx5_ifc_general_obj_in_cmd_hdr_bits general_obj_in_cmd_hdr;
+       struct mlx5_ifc_macsec_offload_obj_bits macsec_object;
+};
+
+enum {
+       MLX5_MODIFY_MACSEC_BITMASK_EPN_OVERLAP = BIT(0),
+       MLX5_MODIFY_MACSEC_BITMASK_EPN_MSB = BIT(1),
+};
+
+struct mlx5_ifc_query_macsec_obj_out_bits {
+       struct mlx5_ifc_general_obj_out_cmd_hdr_bits general_obj_out_cmd_hdr;
+       struct mlx5_ifc_macsec_offload_obj_bits macsec_object;
+};
+
 struct mlx5_ifc_encryption_key_obj_bits {
        u8         modify_field_select[0x40];
 
@@ -11643,6 +11814,7 @@ enum {
 enum {
        MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_TYPE_TLS = 0x1,
        MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_TYPE_IPSEC = 0x2,
+       MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_TYPE_MACSEC = 0x4,
 };
 
 struct mlx5_ifc_tls_static_params_bits {
@@ -11823,4 +11995,82 @@ struct mlx5_ifc_load_vhca_state_out_bits {
        u8         reserved_at_40[0x40];
 };
 
+struct mlx5_ifc_adv_virtualization_cap_bits {
+       u8         reserved_at_0[0x3];
+       u8         pg_track_log_max_num[0x5];
+       u8         pg_track_max_num_range[0x8];
+       u8         pg_track_log_min_addr_space[0x8];
+       u8         pg_track_log_max_addr_space[0x8];
+
+       u8         reserved_at_20[0x3];
+       u8         pg_track_log_min_msg_size[0x5];
+       u8         reserved_at_28[0x3];
+       u8         pg_track_log_max_msg_size[0x5];
+       u8         reserved_at_30[0x3];
+       u8         pg_track_log_min_page_size[0x5];
+       u8         reserved_at_38[0x3];
+       u8         pg_track_log_max_page_size[0x5];
+
+       u8         reserved_at_40[0x7c0];
+};
+
+struct mlx5_ifc_page_track_report_entry_bits {
+       u8         dirty_address_high[0x20];
+
+       u8         dirty_address_low[0x20];
+};
+
+enum {
+       MLX5_PAGE_TRACK_STATE_TRACKING,
+       MLX5_PAGE_TRACK_STATE_REPORTING,
+       MLX5_PAGE_TRACK_STATE_ERROR,
+};
+
+struct mlx5_ifc_page_track_range_bits {
+       u8         start_address[0x40];
+
+       u8         length[0x40];
+};
+
+struct mlx5_ifc_page_track_bits {
+       u8         modify_field_select[0x40];
+
+       u8         reserved_at_40[0x10];
+       u8         vhca_id[0x10];
+
+       u8         reserved_at_60[0x20];
+
+       u8         state[0x4];
+       u8         track_type[0x4];
+       u8         log_addr_space_size[0x8];
+       u8         reserved_at_90[0x3];
+       u8         log_page_size[0x5];
+       u8         reserved_at_98[0x3];
+       u8         log_msg_size[0x5];
+
+       u8         reserved_at_a0[0x8];
+       u8         reporting_qpn[0x18];
+
+       u8         reserved_at_c0[0x18];
+       u8         num_ranges[0x8];
+
+       u8         reserved_at_e0[0x20];
+
+       u8         range_start_address[0x40];
+
+       u8         length[0x40];
+
+       struct     mlx5_ifc_page_track_range_bits track_range[0];
+};
+
+struct mlx5_ifc_create_page_track_obj_in_bits {
+       struct mlx5_ifc_general_obj_in_cmd_hdr_bits general_obj_in_cmd_hdr;
+       struct mlx5_ifc_page_track_bits obj_context;
+};
+
+struct mlx5_ifc_modify_page_track_obj_in_bits {
+       struct mlx5_ifc_general_obj_in_cmd_hdr_bits general_obj_in_cmd_hdr;
+       struct mlx5_ifc_page_track_bits obj_context;
+};
+
 #endif /* MLX5_IFC_H */