1e29341fbSIlan Tayari /* 2e29341fbSIlan Tayari * Copyright (c) 2017, Mellanox Technologies, Ltd. All rights reserved. 3e29341fbSIlan Tayari * 4e29341fbSIlan Tayari * This software is available to you under a choice of one of two 5e29341fbSIlan Tayari * licenses. You may choose to be licensed under the terms of the GNU 6e29341fbSIlan Tayari * General Public License (GPL) Version 2, available from the file 7e29341fbSIlan Tayari * COPYING in the main directory of this source tree, or the 8e29341fbSIlan Tayari * OpenIB.org BSD license below: 9e29341fbSIlan Tayari * 10e29341fbSIlan Tayari * Redistribution and use in source and binary forms, with or 11e29341fbSIlan Tayari * without modification, are permitted provided that the following 12e29341fbSIlan Tayari * conditions are met: 13e29341fbSIlan Tayari * 14e29341fbSIlan Tayari * - Redistributions of source code must retain the above 15e29341fbSIlan Tayari * copyright notice, this list of conditions and the following 16e29341fbSIlan Tayari * disclaimer. 17e29341fbSIlan Tayari * 18e29341fbSIlan Tayari * - Redistributions in binary form must reproduce the above 19e29341fbSIlan Tayari * copyright notice, this list of conditions and the following 20e29341fbSIlan Tayari * disclaimer in the documentation and/or other materials 21e29341fbSIlan Tayari * provided with the distribution. 22e29341fbSIlan Tayari * 23e29341fbSIlan Tayari * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24e29341fbSIlan Tayari * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25e29341fbSIlan Tayari * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26e29341fbSIlan Tayari * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27e29341fbSIlan Tayari * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28e29341fbSIlan Tayari * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29e29341fbSIlan Tayari * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30e29341fbSIlan Tayari * SOFTWARE. 31e29341fbSIlan Tayari */ 32e29341fbSIlan Tayari #ifndef MLX5_IFC_FPGA_H 33e29341fbSIlan Tayari #define MLX5_IFC_FPGA_H 34e29341fbSIlan Tayari 351ae17322SIlya Lesokhin struct mlx5_ifc_ipv4_layout_bits { 361ae17322SIlya Lesokhin u8 reserved_at_0[0x60]; 371ae17322SIlya Lesokhin 381ae17322SIlya Lesokhin u8 ipv4[0x20]; 391ae17322SIlya Lesokhin }; 401ae17322SIlya Lesokhin 411ae17322SIlya Lesokhin struct mlx5_ifc_ipv6_layout_bits { 421ae17322SIlya Lesokhin u8 ipv6[16][0x8]; 431ae17322SIlya Lesokhin }; 441ae17322SIlya Lesokhin 451ae17322SIlya Lesokhin union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits { 461ae17322SIlya Lesokhin struct mlx5_ifc_ipv6_layout_bits ipv6_layout; 471ae17322SIlya Lesokhin struct mlx5_ifc_ipv4_layout_bits ipv4_layout; 481ae17322SIlya Lesokhin u8 reserved_at_0[0x80]; 491ae17322SIlya Lesokhin }; 501ae17322SIlya Lesokhin 51bebb23e6SIlan Tayari enum { 52bebb23e6SIlan Tayari MLX5_FPGA_CAP_SANDBOX_VENDOR_ID_MLNX = 0x2c9, 53bebb23e6SIlan Tayari }; 54bebb23e6SIlan Tayari 55bebb23e6SIlan Tayari enum { 56bebb23e6SIlan Tayari MLX5_FPGA_CAP_SANDBOX_PRODUCT_ID_IPSEC = 0x2, 571ae17322SIlya Lesokhin MLX5_FPGA_CAP_SANDBOX_PRODUCT_ID_TLS = 0x3, 58bebb23e6SIlan Tayari }; 59bebb23e6SIlan Tayari 60e29341fbSIlan Tayari struct mlx5_ifc_fpga_shell_caps_bits { 61e29341fbSIlan Tayari u8 max_num_qps[0x10]; 62e29341fbSIlan Tayari u8 reserved_at_10[0x8]; 63e29341fbSIlan Tayari u8 total_rcv_credits[0x8]; 64e29341fbSIlan Tayari 65e29341fbSIlan Tayari u8 reserved_at_20[0xe]; 66e29341fbSIlan Tayari u8 qp_type[0x2]; 67e29341fbSIlan Tayari u8 reserved_at_30[0x5]; 68e29341fbSIlan Tayari u8 rae[0x1]; 69e29341fbSIlan Tayari u8 rwe[0x1]; 70e29341fbSIlan Tayari u8 rre[0x1]; 71e29341fbSIlan Tayari u8 reserved_at_38[0x4]; 72e29341fbSIlan Tayari u8 dc[0x1]; 73e29341fbSIlan Tayari u8 ud[0x1]; 74e29341fbSIlan Tayari u8 uc[0x1]; 75e29341fbSIlan Tayari u8 rc[0x1]; 76e29341fbSIlan Tayari 77e29341fbSIlan Tayari u8 reserved_at_40[0x1a]; 78e29341fbSIlan Tayari u8 log_ddr_size[0x6]; 79e29341fbSIlan Tayari 80e29341fbSIlan Tayari u8 max_fpga_qp_msg_size[0x20]; 81e29341fbSIlan Tayari 82e29341fbSIlan Tayari u8 reserved_at_80[0x180]; 83e29341fbSIlan Tayari }; 84e29341fbSIlan Tayari 85e29341fbSIlan Tayari struct mlx5_ifc_fpga_cap_bits { 86e29341fbSIlan Tayari u8 fpga_id[0x8]; 87e29341fbSIlan Tayari u8 fpga_device[0x18]; 88e29341fbSIlan Tayari 89e29341fbSIlan Tayari u8 register_file_ver[0x20]; 90e29341fbSIlan Tayari 91e29341fbSIlan Tayari u8 fpga_ctrl_modify[0x1]; 92e29341fbSIlan Tayari u8 reserved_at_41[0x5]; 93e29341fbSIlan Tayari u8 access_reg_query_mode[0x2]; 94e29341fbSIlan Tayari u8 reserved_at_48[0x6]; 95e29341fbSIlan Tayari u8 access_reg_modify_mode[0x2]; 96e29341fbSIlan Tayari u8 reserved_at_50[0x10]; 97e29341fbSIlan Tayari 98e29341fbSIlan Tayari u8 reserved_at_60[0x20]; 99e29341fbSIlan Tayari 100e29341fbSIlan Tayari u8 image_version[0x20]; 101e29341fbSIlan Tayari 102e29341fbSIlan Tayari u8 image_date[0x20]; 103e29341fbSIlan Tayari 104e29341fbSIlan Tayari u8 image_time[0x20]; 105e29341fbSIlan Tayari 106e29341fbSIlan Tayari u8 shell_version[0x20]; 107e29341fbSIlan Tayari 108e29341fbSIlan Tayari u8 reserved_at_100[0x80]; 109e29341fbSIlan Tayari 110e29341fbSIlan Tayari struct mlx5_ifc_fpga_shell_caps_bits shell_caps; 111e29341fbSIlan Tayari 112e29341fbSIlan Tayari u8 reserved_at_380[0x8]; 113e29341fbSIlan Tayari u8 ieee_vendor_id[0x18]; 114e29341fbSIlan Tayari 115e29341fbSIlan Tayari u8 sandbox_product_version[0x10]; 116e29341fbSIlan Tayari u8 sandbox_product_id[0x10]; 117e29341fbSIlan Tayari 118e29341fbSIlan Tayari u8 sandbox_basic_caps[0x20]; 119e29341fbSIlan Tayari 120e29341fbSIlan Tayari u8 reserved_at_3e0[0x10]; 121e29341fbSIlan Tayari u8 sandbox_extended_caps_len[0x10]; 122e29341fbSIlan Tayari 123e29341fbSIlan Tayari u8 sandbox_extended_caps_addr[0x40]; 124e29341fbSIlan Tayari 125e29341fbSIlan Tayari u8 fpga_ddr_start_addr[0x40]; 126e29341fbSIlan Tayari 127e29341fbSIlan Tayari u8 fpga_cr_space_start_addr[0x40]; 128e29341fbSIlan Tayari 129e29341fbSIlan Tayari u8 fpga_ddr_size[0x20]; 130e29341fbSIlan Tayari 131e29341fbSIlan Tayari u8 fpga_cr_space_size[0x20]; 132e29341fbSIlan Tayari 133e29341fbSIlan Tayari u8 reserved_at_500[0x300]; 134e29341fbSIlan Tayari }; 135e29341fbSIlan Tayari 136c43051d7SIlan Tayari enum { 137c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_LOAD = 0x1, 138c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_RESET = 0x2, 139c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_FLASH_SELECT = 0x3, 140c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_SANDBOX_BYPASS_ON = 0x4, 141c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_SANDBOX_BYPASS_OFF = 0x5, 142c43051d7SIlan Tayari MLX5_FPGA_CTRL_OPERATION_RESET_SANDBOX = 0x6, 143c43051d7SIlan Tayari }; 144c43051d7SIlan Tayari 145e29341fbSIlan Tayari struct mlx5_ifc_fpga_ctrl_bits { 146e29341fbSIlan Tayari u8 reserved_at_0[0x8]; 147e29341fbSIlan Tayari u8 operation[0x8]; 148e29341fbSIlan Tayari u8 reserved_at_10[0x8]; 149e29341fbSIlan Tayari u8 status[0x8]; 150e29341fbSIlan Tayari 151e29341fbSIlan Tayari u8 reserved_at_20[0x8]; 152e29341fbSIlan Tayari u8 flash_select_admin[0x8]; 153e29341fbSIlan Tayari u8 reserved_at_30[0x8]; 154e29341fbSIlan Tayari u8 flash_select_oper[0x8]; 155e29341fbSIlan Tayari 156e29341fbSIlan Tayari u8 reserved_at_40[0x40]; 157e29341fbSIlan Tayari }; 158e29341fbSIlan Tayari 159e29341fbSIlan Tayari enum { 160e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_CORRUPTED_DDR = 0x1, 161e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_FLASH_TIMEOUT = 0x2, 162e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_INTERNAL_LINK_ERROR = 0x3, 163e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_WATCHDOG_FAILURE = 0x4, 164e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_I2C_FAILURE = 0x5, 165e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_IMAGE_CHANGED = 0x6, 166e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_TEMPERATURE_CRITICAL = 0x7, 167e29341fbSIlan Tayari }; 168e29341fbSIlan Tayari 169e29341fbSIlan Tayari struct mlx5_ifc_fpga_error_event_bits { 170e29341fbSIlan Tayari u8 reserved_at_0[0x40]; 171e29341fbSIlan Tayari 172e29341fbSIlan Tayari u8 reserved_at_40[0x18]; 173e29341fbSIlan Tayari u8 syndrome[0x8]; 174e29341fbSIlan Tayari 175e29341fbSIlan Tayari u8 reserved_at_60[0x80]; 176e29341fbSIlan Tayari }; 177e29341fbSIlan Tayari 178a9956d35SIlan Tayari #define MLX5_FPGA_ACCESS_REG_SIZE_MAX 64 179a9956d35SIlan Tayari 180a9956d35SIlan Tayari struct mlx5_ifc_fpga_access_reg_bits { 181a9956d35SIlan Tayari u8 reserved_at_0[0x20]; 182a9956d35SIlan Tayari 183a9956d35SIlan Tayari u8 reserved_at_20[0x10]; 184a9956d35SIlan Tayari u8 size[0x10]; 185a9956d35SIlan Tayari 186a9956d35SIlan Tayari u8 address[0x40]; 187a9956d35SIlan Tayari 188a9956d35SIlan Tayari u8 data[0][0x8]; 189a9956d35SIlan Tayari }; 190a9956d35SIlan Tayari 1916062118dSIlan Tayari enum mlx5_ifc_fpga_qp_state { 1926062118dSIlan Tayari MLX5_FPGA_QPC_STATE_INIT = 0x0, 1936062118dSIlan Tayari MLX5_FPGA_QPC_STATE_ACTIVE = 0x1, 1946062118dSIlan Tayari MLX5_FPGA_QPC_STATE_ERROR = 0x2, 1956062118dSIlan Tayari }; 1966062118dSIlan Tayari 1976062118dSIlan Tayari enum mlx5_ifc_fpga_qp_type { 1986062118dSIlan Tayari MLX5_FPGA_QPC_QP_TYPE_SHELL_QP = 0x0, 1996062118dSIlan Tayari MLX5_FPGA_QPC_QP_TYPE_SANDBOX_QP = 0x1, 2006062118dSIlan Tayari }; 2016062118dSIlan Tayari 2026062118dSIlan Tayari enum mlx5_ifc_fpga_qp_service_type { 2036062118dSIlan Tayari MLX5_FPGA_QPC_ST_RC = 0x0, 2046062118dSIlan Tayari }; 2056062118dSIlan Tayari 2066062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits { 2076062118dSIlan Tayari u8 state[0x4]; 2086062118dSIlan Tayari u8 reserved_at_4[0x1b]; 2096062118dSIlan Tayari u8 qp_type[0x1]; 2106062118dSIlan Tayari 2116062118dSIlan Tayari u8 reserved_at_20[0x4]; 2126062118dSIlan Tayari u8 st[0x4]; 2136062118dSIlan Tayari u8 reserved_at_28[0x10]; 2146062118dSIlan Tayari u8 traffic_class[0x8]; 2156062118dSIlan Tayari 2166062118dSIlan Tayari u8 ether_type[0x10]; 2176062118dSIlan Tayari u8 prio[0x3]; 2186062118dSIlan Tayari u8 dei[0x1]; 2196062118dSIlan Tayari u8 vid[0xc]; 2206062118dSIlan Tayari 2216062118dSIlan Tayari u8 reserved_at_60[0x20]; 2226062118dSIlan Tayari 2236062118dSIlan Tayari u8 reserved_at_80[0x8]; 2246062118dSIlan Tayari u8 next_rcv_psn[0x18]; 2256062118dSIlan Tayari 2266062118dSIlan Tayari u8 reserved_at_a0[0x8]; 2276062118dSIlan Tayari u8 next_send_psn[0x18]; 2286062118dSIlan Tayari 2296062118dSIlan Tayari u8 reserved_at_c0[0x10]; 2306062118dSIlan Tayari u8 pkey[0x10]; 2316062118dSIlan Tayari 2326062118dSIlan Tayari u8 reserved_at_e0[0x8]; 2336062118dSIlan Tayari u8 remote_qpn[0x18]; 2346062118dSIlan Tayari 2356062118dSIlan Tayari u8 reserved_at_100[0x15]; 2366062118dSIlan Tayari u8 rnr_retry[0x3]; 2376062118dSIlan Tayari u8 reserved_at_118[0x5]; 2386062118dSIlan Tayari u8 retry_count[0x3]; 2396062118dSIlan Tayari 2406062118dSIlan Tayari u8 reserved_at_120[0x20]; 2416062118dSIlan Tayari 2426062118dSIlan Tayari u8 reserved_at_140[0x10]; 2436062118dSIlan Tayari u8 remote_mac_47_32[0x10]; 2446062118dSIlan Tayari 2456062118dSIlan Tayari u8 remote_mac_31_0[0x20]; 2466062118dSIlan Tayari 2476062118dSIlan Tayari u8 remote_ip[16][0x8]; 2486062118dSIlan Tayari 2496062118dSIlan Tayari u8 reserved_at_200[0x40]; 2506062118dSIlan Tayari 2516062118dSIlan Tayari u8 reserved_at_240[0x10]; 2526062118dSIlan Tayari u8 fpga_mac_47_32[0x10]; 2536062118dSIlan Tayari 2546062118dSIlan Tayari u8 fpga_mac_31_0[0x20]; 2556062118dSIlan Tayari 2566062118dSIlan Tayari u8 fpga_ip[16][0x8]; 2576062118dSIlan Tayari }; 2586062118dSIlan Tayari 2596062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_in_bits { 2606062118dSIlan Tayari u8 opcode[0x10]; 2616062118dSIlan Tayari u8 reserved_at_10[0x10]; 2626062118dSIlan Tayari 2636062118dSIlan Tayari u8 reserved_at_20[0x10]; 2646062118dSIlan Tayari u8 op_mod[0x10]; 2656062118dSIlan Tayari 2666062118dSIlan Tayari u8 reserved_at_40[0x40]; 2676062118dSIlan Tayari 2686062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 2696062118dSIlan Tayari }; 2706062118dSIlan Tayari 2716062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_out_bits { 2726062118dSIlan Tayari u8 status[0x8]; 2736062118dSIlan Tayari u8 reserved_at_8[0x18]; 2746062118dSIlan Tayari 2756062118dSIlan Tayari u8 syndrome[0x20]; 2766062118dSIlan Tayari 2776062118dSIlan Tayari u8 reserved_at_40[0x8]; 2786062118dSIlan Tayari u8 fpga_qpn[0x18]; 2796062118dSIlan Tayari 2806062118dSIlan Tayari u8 reserved_at_60[0x20]; 2816062118dSIlan Tayari 2826062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 2836062118dSIlan Tayari }; 2846062118dSIlan Tayari 2856062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_in_bits { 2866062118dSIlan Tayari u8 opcode[0x10]; 2876062118dSIlan Tayari u8 reserved_at_10[0x10]; 2886062118dSIlan Tayari 2896062118dSIlan Tayari u8 reserved_at_20[0x10]; 2906062118dSIlan Tayari u8 op_mod[0x10]; 2916062118dSIlan Tayari 2926062118dSIlan Tayari u8 reserved_at_40[0x8]; 2936062118dSIlan Tayari u8 fpga_qpn[0x18]; 2946062118dSIlan Tayari 2956062118dSIlan Tayari u8 field_select[0x20]; 2966062118dSIlan Tayari 2976062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 2986062118dSIlan Tayari }; 2996062118dSIlan Tayari 3006062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_out_bits { 3016062118dSIlan Tayari u8 status[0x8]; 3026062118dSIlan Tayari u8 reserved_at_8[0x18]; 3036062118dSIlan Tayari 3046062118dSIlan Tayari u8 syndrome[0x20]; 3056062118dSIlan Tayari 3066062118dSIlan Tayari u8 reserved_at_40[0x40]; 3076062118dSIlan Tayari }; 3086062118dSIlan Tayari 3096062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_in_bits { 3106062118dSIlan Tayari u8 opcode[0x10]; 3116062118dSIlan Tayari u8 reserved_at_10[0x10]; 3126062118dSIlan Tayari 3136062118dSIlan Tayari u8 reserved_at_20[0x10]; 3146062118dSIlan Tayari u8 op_mod[0x10]; 3156062118dSIlan Tayari 3166062118dSIlan Tayari u8 reserved_at_40[0x8]; 3176062118dSIlan Tayari u8 fpga_qpn[0x18]; 3186062118dSIlan Tayari 3196062118dSIlan Tayari u8 reserved_at_60[0x20]; 3206062118dSIlan Tayari }; 3216062118dSIlan Tayari 3226062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_out_bits { 3236062118dSIlan Tayari u8 status[0x8]; 3246062118dSIlan Tayari u8 reserved_at_8[0x18]; 3256062118dSIlan Tayari 3266062118dSIlan Tayari u8 syndrome[0x20]; 3276062118dSIlan Tayari 3286062118dSIlan Tayari u8 reserved_at_40[0x40]; 3296062118dSIlan Tayari 3306062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 3316062118dSIlan Tayari }; 3326062118dSIlan Tayari 3336062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_in_bits { 3346062118dSIlan Tayari u8 opcode[0x10]; 3356062118dSIlan Tayari u8 reserved_at_10[0x10]; 3366062118dSIlan Tayari 3376062118dSIlan Tayari u8 reserved_at_20[0x10]; 3386062118dSIlan Tayari u8 op_mod[0x10]; 3396062118dSIlan Tayari 3406062118dSIlan Tayari u8 clear[0x1]; 3416062118dSIlan Tayari u8 reserved_at_41[0x7]; 3426062118dSIlan Tayari u8 fpga_qpn[0x18]; 3436062118dSIlan Tayari 3446062118dSIlan Tayari u8 reserved_at_60[0x20]; 3456062118dSIlan Tayari }; 3466062118dSIlan Tayari 3476062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_out_bits { 3486062118dSIlan Tayari u8 status[0x8]; 3496062118dSIlan Tayari u8 reserved_at_8[0x18]; 3506062118dSIlan Tayari 3516062118dSIlan Tayari u8 syndrome[0x20]; 3526062118dSIlan Tayari 3536062118dSIlan Tayari u8 reserved_at_40[0x40]; 3546062118dSIlan Tayari 3556062118dSIlan Tayari u8 rx_ack_packets[0x40]; 3566062118dSIlan Tayari 3576062118dSIlan Tayari u8 rx_send_packets[0x40]; 3586062118dSIlan Tayari 3596062118dSIlan Tayari u8 tx_ack_packets[0x40]; 3606062118dSIlan Tayari 3616062118dSIlan Tayari u8 tx_send_packets[0x40]; 3626062118dSIlan Tayari 3636062118dSIlan Tayari u8 rx_total_drop[0x40]; 3646062118dSIlan Tayari 3656062118dSIlan Tayari u8 reserved_at_1c0[0x1c0]; 3666062118dSIlan Tayari }; 3676062118dSIlan Tayari 3686062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_in_bits { 3696062118dSIlan Tayari u8 opcode[0x10]; 3706062118dSIlan Tayari u8 reserved_at_10[0x10]; 3716062118dSIlan Tayari 3726062118dSIlan Tayari u8 reserved_at_20[0x10]; 3736062118dSIlan Tayari u8 op_mod[0x10]; 3746062118dSIlan Tayari 3756062118dSIlan Tayari u8 reserved_at_40[0x8]; 3766062118dSIlan Tayari u8 fpga_qpn[0x18]; 3776062118dSIlan Tayari 3786062118dSIlan Tayari u8 reserved_at_60[0x20]; 3796062118dSIlan Tayari }; 3806062118dSIlan Tayari 3816062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_out_bits { 3826062118dSIlan Tayari u8 status[0x8]; 3836062118dSIlan Tayari u8 reserved_at_8[0x18]; 3846062118dSIlan Tayari 3856062118dSIlan Tayari u8 syndrome[0x20]; 3866062118dSIlan Tayari 3876062118dSIlan Tayari u8 reserved_at_40[0x40]; 3886062118dSIlan Tayari }; 3896062118dSIlan Tayari 3901ae17322SIlya Lesokhin struct mlx5_ifc_tls_extended_cap_bits { 3911ae17322SIlya Lesokhin u8 aes_gcm_128[0x1]; 3921ae17322SIlya Lesokhin u8 aes_gcm_256[0x1]; 3931ae17322SIlya Lesokhin u8 reserved_at_2[0x1e]; 3941ae17322SIlya Lesokhin u8 reserved_at_20[0x20]; 3951ae17322SIlya Lesokhin u8 context_capacity_total[0x20]; 3961ae17322SIlya Lesokhin u8 context_capacity_rx[0x20]; 3971ae17322SIlya Lesokhin u8 context_capacity_tx[0x20]; 3981ae17322SIlya Lesokhin u8 reserved_at_a0[0x10]; 3991ae17322SIlya Lesokhin u8 tls_counter_size[0x10]; 4001ae17322SIlya Lesokhin u8 tls_counters_addr_low[0x20]; 4011ae17322SIlya Lesokhin u8 tls_counters_addr_high[0x20]; 4021ae17322SIlya Lesokhin u8 rx[0x1]; 4031ae17322SIlya Lesokhin u8 tx[0x1]; 4041ae17322SIlya Lesokhin u8 tls_v12[0x1]; 4051ae17322SIlya Lesokhin u8 tls_v13[0x1]; 4061ae17322SIlya Lesokhin u8 lro[0x1]; 4071ae17322SIlya Lesokhin u8 ipv6[0x1]; 4081ae17322SIlya Lesokhin u8 reserved_at_106[0x1a]; 4091ae17322SIlya Lesokhin }; 4101ae17322SIlya Lesokhin 411bebb23e6SIlan Tayari struct mlx5_ifc_ipsec_extended_cap_bits { 412bebb23e6SIlan Tayari u8 encapsulation[0x20]; 413bebb23e6SIlan Tayari 41465802f48SAviad Yehezkel u8 reserved_0[0x12]; 41565802f48SAviad Yehezkel u8 v2_command[0x1]; 41665802f48SAviad Yehezkel u8 udp_encap[0x1]; 417788a8210SYossi Kuperman u8 rx_no_trailer[0x1]; 418bebb23e6SIlan Tayari u8 ipv4_fragment[0x1]; 419bebb23e6SIlan Tayari u8 ipv6[0x1]; 420bebb23e6SIlan Tayari u8 esn[0x1]; 421bebb23e6SIlan Tayari u8 lso[0x1]; 422bebb23e6SIlan Tayari u8 transport_and_tunnel_mode[0x1]; 423bebb23e6SIlan Tayari u8 tunnel_mode[0x1]; 424bebb23e6SIlan Tayari u8 transport_mode[0x1]; 425bebb23e6SIlan Tayari u8 ah_esp[0x1]; 426bebb23e6SIlan Tayari u8 esp[0x1]; 427bebb23e6SIlan Tayari u8 ah[0x1]; 428bebb23e6SIlan Tayari u8 ipv4_options[0x1]; 429bebb23e6SIlan Tayari 430bebb23e6SIlan Tayari u8 auth_alg[0x20]; 431bebb23e6SIlan Tayari 432bebb23e6SIlan Tayari u8 enc_alg[0x20]; 433bebb23e6SIlan Tayari 434bebb23e6SIlan Tayari u8 sa_cap[0x20]; 435bebb23e6SIlan Tayari 436bebb23e6SIlan Tayari u8 reserved_1[0x10]; 437bebb23e6SIlan Tayari u8 number_of_ipsec_counters[0x10]; 438bebb23e6SIlan Tayari 439bebb23e6SIlan Tayari u8 ipsec_counters_addr_low[0x20]; 440bebb23e6SIlan Tayari u8 ipsec_counters_addr_high[0x20]; 441bebb23e6SIlan Tayari }; 442bebb23e6SIlan Tayari 443bebb23e6SIlan Tayari struct mlx5_ifc_ipsec_counters_bits { 444bebb23e6SIlan Tayari u8 dec_in_packets[0x40]; 445bebb23e6SIlan Tayari 446bebb23e6SIlan Tayari u8 dec_out_packets[0x40]; 447bebb23e6SIlan Tayari 448bebb23e6SIlan Tayari u8 dec_bypass_packets[0x40]; 449bebb23e6SIlan Tayari 450bebb23e6SIlan Tayari u8 enc_in_packets[0x40]; 451bebb23e6SIlan Tayari 452bebb23e6SIlan Tayari u8 enc_out_packets[0x40]; 453bebb23e6SIlan Tayari 454bebb23e6SIlan Tayari u8 enc_bypass_packets[0x40]; 455bebb23e6SIlan Tayari 456bebb23e6SIlan Tayari u8 drop_dec_packets[0x40]; 457bebb23e6SIlan Tayari 458bebb23e6SIlan Tayari u8 failed_auth_dec_packets[0x40]; 459bebb23e6SIlan Tayari 460bebb23e6SIlan Tayari u8 drop_enc_packets[0x40]; 461bebb23e6SIlan Tayari 462bebb23e6SIlan Tayari u8 success_add_sa[0x40]; 463bebb23e6SIlan Tayari 464bebb23e6SIlan Tayari u8 fail_add_sa[0x40]; 465bebb23e6SIlan Tayari 466bebb23e6SIlan Tayari u8 success_delete_sa[0x40]; 467bebb23e6SIlan Tayari 468bebb23e6SIlan Tayari u8 fail_delete_sa[0x40]; 469bebb23e6SIlan Tayari 470bebb23e6SIlan Tayari u8 dropped_cmd[0x40]; 471bebb23e6SIlan Tayari }; 472bebb23e6SIlan Tayari 473*1f0cf89bSIlan Tayari enum { 474*1f0cf89bSIlan Tayari MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RETRY_COUNTER_EXPIRED = 0x1, 475*1f0cf89bSIlan Tayari MLX5_FPGA_QP_ERROR_EVENT_SYNDROME_RNR_EXPIRED = 0x2, 476*1f0cf89bSIlan Tayari }; 477*1f0cf89bSIlan Tayari 478*1f0cf89bSIlan Tayari struct mlx5_ifc_fpga_qp_error_event_bits { 479*1f0cf89bSIlan Tayari u8 reserved_at_0[0x40]; 480*1f0cf89bSIlan Tayari 481*1f0cf89bSIlan Tayari u8 reserved_at_40[0x18]; 482*1f0cf89bSIlan Tayari u8 syndrome[0x8]; 483*1f0cf89bSIlan Tayari 484*1f0cf89bSIlan Tayari u8 reserved_at_60[0x60]; 485*1f0cf89bSIlan Tayari 486*1f0cf89bSIlan Tayari u8 reserved_at_c0[0x8]; 487*1f0cf89bSIlan Tayari u8 fpga_qpn[0x18]; 488*1f0cf89bSIlan Tayari }; 489581fdddeSYossi Kuperman enum mlx5_ifc_fpga_ipsec_response_syndrome { 490581fdddeSYossi Kuperman MLX5_FPGA_IPSEC_RESPONSE_SUCCESS = 0, 491581fdddeSYossi Kuperman MLX5_FPGA_IPSEC_RESPONSE_ILLEGAL_REQUEST = 1, 492581fdddeSYossi Kuperman MLX5_FPGA_IPSEC_RESPONSE_SADB_ISSUE = 2, 493581fdddeSYossi Kuperman MLX5_FPGA_IPSEC_RESPONSE_WRITE_RESPONSE_ISSUE = 3, 494581fdddeSYossi Kuperman }; 495581fdddeSYossi Kuperman 496581fdddeSYossi Kuperman struct mlx5_ifc_fpga_ipsec_cmd_resp { 497581fdddeSYossi Kuperman __be32 syndrome; 498581fdddeSYossi Kuperman union { 499581fdddeSYossi Kuperman __be32 sw_sa_handle; 500581fdddeSYossi Kuperman __be32 flags; 501581fdddeSYossi Kuperman }; 502581fdddeSYossi Kuperman u8 reserved[24]; 503581fdddeSYossi Kuperman } __packed; 504581fdddeSYossi Kuperman 505d6c4f029SAviad Yehezkel enum mlx5_ifc_fpga_ipsec_cmd_opcode { 506d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_ADD_SA = 0, 507d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_DEL_SA = 1, 508d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_ADD_SA_V2 = 2, 509d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_DEL_SA_V2 = 3, 510d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_MOD_SA_V2 = 4, 511d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_CMD_OP_SET_CAP = 5, 512d6c4f029SAviad Yehezkel }; 513d6c4f029SAviad Yehezkel 514788a8210SYossi Kuperman enum mlx5_ifc_fpga_ipsec_cap { 515788a8210SYossi Kuperman MLX5_FPGA_IPSEC_CAP_NO_TRAILER = BIT(0), 516788a8210SYossi Kuperman }; 517788a8210SYossi Kuperman 518788a8210SYossi Kuperman struct mlx5_ifc_fpga_ipsec_cmd_cap { 519788a8210SYossi Kuperman __be32 cmd; 520788a8210SYossi Kuperman __be32 flags; 521788a8210SYossi Kuperman u8 reserved[24]; 522788a8210SYossi Kuperman } __packed; 523788a8210SYossi Kuperman 524d6c4f029SAviad Yehezkel enum mlx5_ifc_fpga_ipsec_sa_flags { 525cb010083SAviad Yehezkel MLX5_FPGA_IPSEC_SA_ESN_EN = BIT(0), 526cb010083SAviad Yehezkel MLX5_FPGA_IPSEC_SA_ESN_OVERLAP = BIT(1), 527d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_IPV6 = BIT(2), 528d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_DIR_SX = BIT(3), 529d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_SPI_EN = BIT(4), 530d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_SA_VALID = BIT(5), 531d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_IP_ESP = BIT(6), 532d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_IP_AH = BIT(7), 533d6c4f029SAviad Yehezkel }; 534d6c4f029SAviad Yehezkel 535d6c4f029SAviad Yehezkel enum mlx5_ifc_fpga_ipsec_sa_enc_mode { 536d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_ENC_MODE_NONE = 0, 537d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_ENC_MODE_AES_GCM_128_AUTH_128 = 1, 538d6c4f029SAviad Yehezkel MLX5_FPGA_IPSEC_SA_ENC_MODE_AES_GCM_256_AUTH_128 = 3, 539d6c4f029SAviad Yehezkel }; 540d6c4f029SAviad Yehezkel 541d6c4f029SAviad Yehezkel struct mlx5_ifc_fpga_ipsec_sa_v1 { 542d6c4f029SAviad Yehezkel __be32 cmd; 543d6c4f029SAviad Yehezkel u8 key_enc[32]; 544d6c4f029SAviad Yehezkel u8 key_auth[32]; 545d6c4f029SAviad Yehezkel __be32 sip[4]; 546d6c4f029SAviad Yehezkel __be32 dip[4]; 547d6c4f029SAviad Yehezkel union { 548d6c4f029SAviad Yehezkel struct { 549d6c4f029SAviad Yehezkel __be32 reserved; 550d6c4f029SAviad Yehezkel u8 salt_iv[8]; 551d6c4f029SAviad Yehezkel __be32 salt; 552d6c4f029SAviad Yehezkel } __packed gcm; 553d6c4f029SAviad Yehezkel struct { 554d6c4f029SAviad Yehezkel u8 salt[16]; 555d6c4f029SAviad Yehezkel } __packed cbc; 556d6c4f029SAviad Yehezkel }; 557d6c4f029SAviad Yehezkel __be32 spi; 558d6c4f029SAviad Yehezkel __be32 sw_sa_handle; 559d6c4f029SAviad Yehezkel __be16 tfclen; 560d6c4f029SAviad Yehezkel u8 enc_mode; 561d6c4f029SAviad Yehezkel u8 reserved1[2]; 562d6c4f029SAviad Yehezkel u8 flags; 563d6c4f029SAviad Yehezkel u8 reserved2[2]; 564d6c4f029SAviad Yehezkel }; 565d6c4f029SAviad Yehezkel 566d6c4f029SAviad Yehezkel struct mlx5_ifc_fpga_ipsec_sa { 567d6c4f029SAviad Yehezkel struct mlx5_ifc_fpga_ipsec_sa_v1 ipsec_sa_v1; 568d6c4f029SAviad Yehezkel __be16 udp_sp; 569d6c4f029SAviad Yehezkel __be16 udp_dp; 570d6c4f029SAviad Yehezkel u8 reserved1[4]; 571d6c4f029SAviad Yehezkel __be32 esn; 572d6c4f029SAviad Yehezkel __be16 vid; /* only 12 bits, rest is reserved */ 573d6c4f029SAviad Yehezkel __be16 reserved2; 574d6c4f029SAviad Yehezkel } __packed; 575d6c4f029SAviad Yehezkel 5761ae17322SIlya Lesokhin enum fpga_tls_cmds { 5771ae17322SIlya Lesokhin CMD_SETUP_STREAM = 0x1001, 5781ae17322SIlya Lesokhin CMD_TEARDOWN_STREAM = 0x1002, 5791ae17322SIlya Lesokhin }; 5801ae17322SIlya Lesokhin 5811ae17322SIlya Lesokhin #define MLX5_TLS_1_2 (0) 5821ae17322SIlya Lesokhin 5831ae17322SIlya Lesokhin #define MLX5_TLS_ALG_AES_GCM_128 (0) 5841ae17322SIlya Lesokhin #define MLX5_TLS_ALG_AES_GCM_256 (1) 5851ae17322SIlya Lesokhin 5861ae17322SIlya Lesokhin struct mlx5_ifc_tls_cmd_bits { 5871ae17322SIlya Lesokhin u8 command_type[0x20]; 5881ae17322SIlya Lesokhin u8 ipv6[0x1]; 5891ae17322SIlya Lesokhin u8 direction_sx[0x1]; 5901ae17322SIlya Lesokhin u8 tls_version[0x2]; 5911ae17322SIlya Lesokhin u8 reserved[0x1c]; 5921ae17322SIlya Lesokhin u8 swid[0x20]; 5931ae17322SIlya Lesokhin u8 src_port[0x10]; 5941ae17322SIlya Lesokhin u8 dst_port[0x10]; 5951ae17322SIlya Lesokhin union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits src_ipv4_src_ipv6; 5961ae17322SIlya Lesokhin union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits dst_ipv4_dst_ipv6; 5971ae17322SIlya Lesokhin u8 tls_rcd_sn[0x40]; 5981ae17322SIlya Lesokhin u8 tcp_sn[0x20]; 5991ae17322SIlya Lesokhin u8 tls_implicit_iv[0x20]; 6001ae17322SIlya Lesokhin u8 tls_xor_iv[0x40]; 6011ae17322SIlya Lesokhin u8 encryption_key[0x100]; 6021ae17322SIlya Lesokhin u8 alg[4]; 6031ae17322SIlya Lesokhin u8 reserved2[0x1c]; 6041ae17322SIlya Lesokhin u8 reserved3[0x4a0]; 6051ae17322SIlya Lesokhin }; 6061ae17322SIlya Lesokhin 6071ae17322SIlya Lesokhin struct mlx5_ifc_tls_resp_bits { 6081ae17322SIlya Lesokhin u8 syndrome[0x20]; 6091ae17322SIlya Lesokhin u8 stream_id[0x20]; 6101ae17322SIlya Lesokhin u8 reserverd[0x40]; 6111ae17322SIlya Lesokhin }; 6121ae17322SIlya Lesokhin 6131ae17322SIlya Lesokhin #define MLX5_TLS_COMMAND_SIZE (0x100) 6141ae17322SIlya Lesokhin 615e29341fbSIlan Tayari #endif /* MLX5_IFC_FPGA_H */ 616