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 35e29341fbSIlan Tayari struct mlx5_ifc_fpga_shell_caps_bits { 36e29341fbSIlan Tayari u8 max_num_qps[0x10]; 37e29341fbSIlan Tayari u8 reserved_at_10[0x8]; 38e29341fbSIlan Tayari u8 total_rcv_credits[0x8]; 39e29341fbSIlan Tayari 40e29341fbSIlan Tayari u8 reserved_at_20[0xe]; 41e29341fbSIlan Tayari u8 qp_type[0x2]; 42e29341fbSIlan Tayari u8 reserved_at_30[0x5]; 43e29341fbSIlan Tayari u8 rae[0x1]; 44e29341fbSIlan Tayari u8 rwe[0x1]; 45e29341fbSIlan Tayari u8 rre[0x1]; 46e29341fbSIlan Tayari u8 reserved_at_38[0x4]; 47e29341fbSIlan Tayari u8 dc[0x1]; 48e29341fbSIlan Tayari u8 ud[0x1]; 49e29341fbSIlan Tayari u8 uc[0x1]; 50e29341fbSIlan Tayari u8 rc[0x1]; 51e29341fbSIlan Tayari 52e29341fbSIlan Tayari u8 reserved_at_40[0x1a]; 53e29341fbSIlan Tayari u8 log_ddr_size[0x6]; 54e29341fbSIlan Tayari 55e29341fbSIlan Tayari u8 max_fpga_qp_msg_size[0x20]; 56e29341fbSIlan Tayari 57e29341fbSIlan Tayari u8 reserved_at_80[0x180]; 58e29341fbSIlan Tayari }; 59e29341fbSIlan Tayari 60e29341fbSIlan Tayari struct mlx5_ifc_fpga_cap_bits { 61e29341fbSIlan Tayari u8 fpga_id[0x8]; 62e29341fbSIlan Tayari u8 fpga_device[0x18]; 63e29341fbSIlan Tayari 64e29341fbSIlan Tayari u8 register_file_ver[0x20]; 65e29341fbSIlan Tayari 66e29341fbSIlan Tayari u8 fpga_ctrl_modify[0x1]; 67e29341fbSIlan Tayari u8 reserved_at_41[0x5]; 68e29341fbSIlan Tayari u8 access_reg_query_mode[0x2]; 69e29341fbSIlan Tayari u8 reserved_at_48[0x6]; 70e29341fbSIlan Tayari u8 access_reg_modify_mode[0x2]; 71e29341fbSIlan Tayari u8 reserved_at_50[0x10]; 72e29341fbSIlan Tayari 73e29341fbSIlan Tayari u8 reserved_at_60[0x20]; 74e29341fbSIlan Tayari 75e29341fbSIlan Tayari u8 image_version[0x20]; 76e29341fbSIlan Tayari 77e29341fbSIlan Tayari u8 image_date[0x20]; 78e29341fbSIlan Tayari 79e29341fbSIlan Tayari u8 image_time[0x20]; 80e29341fbSIlan Tayari 81e29341fbSIlan Tayari u8 shell_version[0x20]; 82e29341fbSIlan Tayari 83e29341fbSIlan Tayari u8 reserved_at_100[0x80]; 84e29341fbSIlan Tayari 85e29341fbSIlan Tayari struct mlx5_ifc_fpga_shell_caps_bits shell_caps; 86e29341fbSIlan Tayari 87e29341fbSIlan Tayari u8 reserved_at_380[0x8]; 88e29341fbSIlan Tayari u8 ieee_vendor_id[0x18]; 89e29341fbSIlan Tayari 90e29341fbSIlan Tayari u8 sandbox_product_version[0x10]; 91e29341fbSIlan Tayari u8 sandbox_product_id[0x10]; 92e29341fbSIlan Tayari 93e29341fbSIlan Tayari u8 sandbox_basic_caps[0x20]; 94e29341fbSIlan Tayari 95e29341fbSIlan Tayari u8 reserved_at_3e0[0x10]; 96e29341fbSIlan Tayari u8 sandbox_extended_caps_len[0x10]; 97e29341fbSIlan Tayari 98e29341fbSIlan Tayari u8 sandbox_extended_caps_addr[0x40]; 99e29341fbSIlan Tayari 100e29341fbSIlan Tayari u8 fpga_ddr_start_addr[0x40]; 101e29341fbSIlan Tayari 102e29341fbSIlan Tayari u8 fpga_cr_space_start_addr[0x40]; 103e29341fbSIlan Tayari 104e29341fbSIlan Tayari u8 fpga_ddr_size[0x20]; 105e29341fbSIlan Tayari 106e29341fbSIlan Tayari u8 fpga_cr_space_size[0x20]; 107e29341fbSIlan Tayari 108e29341fbSIlan Tayari u8 reserved_at_500[0x300]; 109e29341fbSIlan Tayari }; 110e29341fbSIlan Tayari 111e29341fbSIlan Tayari struct mlx5_ifc_fpga_ctrl_bits { 112e29341fbSIlan Tayari u8 reserved_at_0[0x8]; 113e29341fbSIlan Tayari u8 operation[0x8]; 114e29341fbSIlan Tayari u8 reserved_at_10[0x8]; 115e29341fbSIlan Tayari u8 status[0x8]; 116e29341fbSIlan Tayari 117e29341fbSIlan Tayari u8 reserved_at_20[0x8]; 118e29341fbSIlan Tayari u8 flash_select_admin[0x8]; 119e29341fbSIlan Tayari u8 reserved_at_30[0x8]; 120e29341fbSIlan Tayari u8 flash_select_oper[0x8]; 121e29341fbSIlan Tayari 122e29341fbSIlan Tayari u8 reserved_at_40[0x40]; 123e29341fbSIlan Tayari }; 124e29341fbSIlan Tayari 125e29341fbSIlan Tayari enum { 126e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_CORRUPTED_DDR = 0x1, 127e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_FLASH_TIMEOUT = 0x2, 128e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_INTERNAL_LINK_ERROR = 0x3, 129e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_WATCHDOG_FAILURE = 0x4, 130e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_I2C_FAILURE = 0x5, 131e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_IMAGE_CHANGED = 0x6, 132e29341fbSIlan Tayari MLX5_FPGA_ERROR_EVENT_SYNDROME_TEMPERATURE_CRITICAL = 0x7, 133e29341fbSIlan Tayari }; 134e29341fbSIlan Tayari 135e29341fbSIlan Tayari struct mlx5_ifc_fpga_error_event_bits { 136e29341fbSIlan Tayari u8 reserved_at_0[0x40]; 137e29341fbSIlan Tayari 138e29341fbSIlan Tayari u8 reserved_at_40[0x18]; 139e29341fbSIlan Tayari u8 syndrome[0x8]; 140e29341fbSIlan Tayari 141e29341fbSIlan Tayari u8 reserved_at_60[0x80]; 142e29341fbSIlan Tayari }; 143e29341fbSIlan Tayari 144*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_state { 145*6062118dSIlan Tayari MLX5_FPGA_QPC_STATE_INIT = 0x0, 146*6062118dSIlan Tayari MLX5_FPGA_QPC_STATE_ACTIVE = 0x1, 147*6062118dSIlan Tayari MLX5_FPGA_QPC_STATE_ERROR = 0x2, 148*6062118dSIlan Tayari }; 149*6062118dSIlan Tayari 150*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_type { 151*6062118dSIlan Tayari MLX5_FPGA_QPC_QP_TYPE_SHELL_QP = 0x0, 152*6062118dSIlan Tayari MLX5_FPGA_QPC_QP_TYPE_SANDBOX_QP = 0x1, 153*6062118dSIlan Tayari }; 154*6062118dSIlan Tayari 155*6062118dSIlan Tayari enum mlx5_ifc_fpga_qp_service_type { 156*6062118dSIlan Tayari MLX5_FPGA_QPC_ST_RC = 0x0, 157*6062118dSIlan Tayari }; 158*6062118dSIlan Tayari 159*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits { 160*6062118dSIlan Tayari u8 state[0x4]; 161*6062118dSIlan Tayari u8 reserved_at_4[0x1b]; 162*6062118dSIlan Tayari u8 qp_type[0x1]; 163*6062118dSIlan Tayari 164*6062118dSIlan Tayari u8 reserved_at_20[0x4]; 165*6062118dSIlan Tayari u8 st[0x4]; 166*6062118dSIlan Tayari u8 reserved_at_28[0x10]; 167*6062118dSIlan Tayari u8 traffic_class[0x8]; 168*6062118dSIlan Tayari 169*6062118dSIlan Tayari u8 ether_type[0x10]; 170*6062118dSIlan Tayari u8 prio[0x3]; 171*6062118dSIlan Tayari u8 dei[0x1]; 172*6062118dSIlan Tayari u8 vid[0xc]; 173*6062118dSIlan Tayari 174*6062118dSIlan Tayari u8 reserved_at_60[0x20]; 175*6062118dSIlan Tayari 176*6062118dSIlan Tayari u8 reserved_at_80[0x8]; 177*6062118dSIlan Tayari u8 next_rcv_psn[0x18]; 178*6062118dSIlan Tayari 179*6062118dSIlan Tayari u8 reserved_at_a0[0x8]; 180*6062118dSIlan Tayari u8 next_send_psn[0x18]; 181*6062118dSIlan Tayari 182*6062118dSIlan Tayari u8 reserved_at_c0[0x10]; 183*6062118dSIlan Tayari u8 pkey[0x10]; 184*6062118dSIlan Tayari 185*6062118dSIlan Tayari u8 reserved_at_e0[0x8]; 186*6062118dSIlan Tayari u8 remote_qpn[0x18]; 187*6062118dSIlan Tayari 188*6062118dSIlan Tayari u8 reserved_at_100[0x15]; 189*6062118dSIlan Tayari u8 rnr_retry[0x3]; 190*6062118dSIlan Tayari u8 reserved_at_118[0x5]; 191*6062118dSIlan Tayari u8 retry_count[0x3]; 192*6062118dSIlan Tayari 193*6062118dSIlan Tayari u8 reserved_at_120[0x20]; 194*6062118dSIlan Tayari 195*6062118dSIlan Tayari u8 reserved_at_140[0x10]; 196*6062118dSIlan Tayari u8 remote_mac_47_32[0x10]; 197*6062118dSIlan Tayari 198*6062118dSIlan Tayari u8 remote_mac_31_0[0x20]; 199*6062118dSIlan Tayari 200*6062118dSIlan Tayari u8 remote_ip[16][0x8]; 201*6062118dSIlan Tayari 202*6062118dSIlan Tayari u8 reserved_at_200[0x40]; 203*6062118dSIlan Tayari 204*6062118dSIlan Tayari u8 reserved_at_240[0x10]; 205*6062118dSIlan Tayari u8 fpga_mac_47_32[0x10]; 206*6062118dSIlan Tayari 207*6062118dSIlan Tayari u8 fpga_mac_31_0[0x20]; 208*6062118dSIlan Tayari 209*6062118dSIlan Tayari u8 fpga_ip[16][0x8]; 210*6062118dSIlan Tayari }; 211*6062118dSIlan Tayari 212*6062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_in_bits { 213*6062118dSIlan Tayari u8 opcode[0x10]; 214*6062118dSIlan Tayari u8 reserved_at_10[0x10]; 215*6062118dSIlan Tayari 216*6062118dSIlan Tayari u8 reserved_at_20[0x10]; 217*6062118dSIlan Tayari u8 op_mod[0x10]; 218*6062118dSIlan Tayari 219*6062118dSIlan Tayari u8 reserved_at_40[0x40]; 220*6062118dSIlan Tayari 221*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 222*6062118dSIlan Tayari }; 223*6062118dSIlan Tayari 224*6062118dSIlan Tayari struct mlx5_ifc_fpga_create_qp_out_bits { 225*6062118dSIlan Tayari u8 status[0x8]; 226*6062118dSIlan Tayari u8 reserved_at_8[0x18]; 227*6062118dSIlan Tayari 228*6062118dSIlan Tayari u8 syndrome[0x20]; 229*6062118dSIlan Tayari 230*6062118dSIlan Tayari u8 reserved_at_40[0x8]; 231*6062118dSIlan Tayari u8 fpga_qpn[0x18]; 232*6062118dSIlan Tayari 233*6062118dSIlan Tayari u8 reserved_at_60[0x20]; 234*6062118dSIlan Tayari 235*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 236*6062118dSIlan Tayari }; 237*6062118dSIlan Tayari 238*6062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_in_bits { 239*6062118dSIlan Tayari u8 opcode[0x10]; 240*6062118dSIlan Tayari u8 reserved_at_10[0x10]; 241*6062118dSIlan Tayari 242*6062118dSIlan Tayari u8 reserved_at_20[0x10]; 243*6062118dSIlan Tayari u8 op_mod[0x10]; 244*6062118dSIlan Tayari 245*6062118dSIlan Tayari u8 reserved_at_40[0x8]; 246*6062118dSIlan Tayari u8 fpga_qpn[0x18]; 247*6062118dSIlan Tayari 248*6062118dSIlan Tayari u8 field_select[0x20]; 249*6062118dSIlan Tayari 250*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 251*6062118dSIlan Tayari }; 252*6062118dSIlan Tayari 253*6062118dSIlan Tayari struct mlx5_ifc_fpga_modify_qp_out_bits { 254*6062118dSIlan Tayari u8 status[0x8]; 255*6062118dSIlan Tayari u8 reserved_at_8[0x18]; 256*6062118dSIlan Tayari 257*6062118dSIlan Tayari u8 syndrome[0x20]; 258*6062118dSIlan Tayari 259*6062118dSIlan Tayari u8 reserved_at_40[0x40]; 260*6062118dSIlan Tayari }; 261*6062118dSIlan Tayari 262*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_in_bits { 263*6062118dSIlan Tayari u8 opcode[0x10]; 264*6062118dSIlan Tayari u8 reserved_at_10[0x10]; 265*6062118dSIlan Tayari 266*6062118dSIlan Tayari u8 reserved_at_20[0x10]; 267*6062118dSIlan Tayari u8 op_mod[0x10]; 268*6062118dSIlan Tayari 269*6062118dSIlan Tayari u8 reserved_at_40[0x8]; 270*6062118dSIlan Tayari u8 fpga_qpn[0x18]; 271*6062118dSIlan Tayari 272*6062118dSIlan Tayari u8 reserved_at_60[0x20]; 273*6062118dSIlan Tayari }; 274*6062118dSIlan Tayari 275*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_out_bits { 276*6062118dSIlan Tayari u8 status[0x8]; 277*6062118dSIlan Tayari u8 reserved_at_8[0x18]; 278*6062118dSIlan Tayari 279*6062118dSIlan Tayari u8 syndrome[0x20]; 280*6062118dSIlan Tayari 281*6062118dSIlan Tayari u8 reserved_at_40[0x40]; 282*6062118dSIlan Tayari 283*6062118dSIlan Tayari struct mlx5_ifc_fpga_qpc_bits fpga_qpc; 284*6062118dSIlan Tayari }; 285*6062118dSIlan Tayari 286*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_in_bits { 287*6062118dSIlan Tayari u8 opcode[0x10]; 288*6062118dSIlan Tayari u8 reserved_at_10[0x10]; 289*6062118dSIlan Tayari 290*6062118dSIlan Tayari u8 reserved_at_20[0x10]; 291*6062118dSIlan Tayari u8 op_mod[0x10]; 292*6062118dSIlan Tayari 293*6062118dSIlan Tayari u8 clear[0x1]; 294*6062118dSIlan Tayari u8 reserved_at_41[0x7]; 295*6062118dSIlan Tayari u8 fpga_qpn[0x18]; 296*6062118dSIlan Tayari 297*6062118dSIlan Tayari u8 reserved_at_60[0x20]; 298*6062118dSIlan Tayari }; 299*6062118dSIlan Tayari 300*6062118dSIlan Tayari struct mlx5_ifc_fpga_query_qp_counters_out_bits { 301*6062118dSIlan Tayari u8 status[0x8]; 302*6062118dSIlan Tayari u8 reserved_at_8[0x18]; 303*6062118dSIlan Tayari 304*6062118dSIlan Tayari u8 syndrome[0x20]; 305*6062118dSIlan Tayari 306*6062118dSIlan Tayari u8 reserved_at_40[0x40]; 307*6062118dSIlan Tayari 308*6062118dSIlan Tayari u8 rx_ack_packets[0x40]; 309*6062118dSIlan Tayari 310*6062118dSIlan Tayari u8 rx_send_packets[0x40]; 311*6062118dSIlan Tayari 312*6062118dSIlan Tayari u8 tx_ack_packets[0x40]; 313*6062118dSIlan Tayari 314*6062118dSIlan Tayari u8 tx_send_packets[0x40]; 315*6062118dSIlan Tayari 316*6062118dSIlan Tayari u8 rx_total_drop[0x40]; 317*6062118dSIlan Tayari 318*6062118dSIlan Tayari u8 reserved_at_1c0[0x1c0]; 319*6062118dSIlan Tayari }; 320*6062118dSIlan Tayari 321*6062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_in_bits { 322*6062118dSIlan Tayari u8 opcode[0x10]; 323*6062118dSIlan Tayari u8 reserved_at_10[0x10]; 324*6062118dSIlan Tayari 325*6062118dSIlan Tayari u8 reserved_at_20[0x10]; 326*6062118dSIlan Tayari u8 op_mod[0x10]; 327*6062118dSIlan Tayari 328*6062118dSIlan Tayari u8 reserved_at_40[0x8]; 329*6062118dSIlan Tayari u8 fpga_qpn[0x18]; 330*6062118dSIlan Tayari 331*6062118dSIlan Tayari u8 reserved_at_60[0x20]; 332*6062118dSIlan Tayari }; 333*6062118dSIlan Tayari 334*6062118dSIlan Tayari struct mlx5_ifc_fpga_destroy_qp_out_bits { 335*6062118dSIlan Tayari u8 status[0x8]; 336*6062118dSIlan Tayari u8 reserved_at_8[0x18]; 337*6062118dSIlan Tayari 338*6062118dSIlan Tayari u8 syndrome[0x20]; 339*6062118dSIlan Tayari 340*6062118dSIlan Tayari u8 reserved_at_40[0x40]; 341*6062118dSIlan Tayari }; 342*6062118dSIlan Tayari 343e29341fbSIlan Tayari #endif /* MLX5_IFC_FPGA_H */ 344