diff options
Diffstat (limited to 'include/linux/mlx5/device.h')
| -rw-r--r-- | include/linux/mlx5/device.h | 152 |
1 files changed, 55 insertions, 97 deletions
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index 334947151dfc..1d67fd32e71c 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h | |||
| @@ -44,6 +44,50 @@ | |||
| 44 | #error Host endianness not defined | 44 | #error Host endianness not defined |
| 45 | #endif | 45 | #endif |
| 46 | 46 | ||
| 47 | /* helper macros */ | ||
| 48 | #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0) | ||
| 49 | #define __mlx5_bit_sz(typ, fld) sizeof(__mlx5_nullp(typ)->fld) | ||
| 50 | #define __mlx5_bit_off(typ, fld) ((unsigned)(unsigned long)(&(__mlx5_nullp(typ)->fld))) | ||
| 51 | #define __mlx5_dw_off(typ, fld) (__mlx5_bit_off(typ, fld) / 32) | ||
| 52 | #define __mlx5_64_off(typ, fld) (__mlx5_bit_off(typ, fld) / 64) | ||
| 53 | #define __mlx5_dw_bit_off(typ, fld) (32 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0x1f)) | ||
| 54 | #define __mlx5_mask(typ, fld) ((u32)((1ull << __mlx5_bit_sz(typ, fld)) - 1)) | ||
| 55 | #define __mlx5_dw_mask(typ, fld) (__mlx5_mask(typ, fld) << __mlx5_dw_bit_off(typ, fld)) | ||
| 56 | #define __mlx5_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits) | ||
| 57 | |||
| 58 | #define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8) | ||
| 59 | #define MLX5_ST_SZ_BYTES(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 8) | ||
| 60 | #define MLX5_ST_SZ_DW(typ) (sizeof(struct mlx5_ifc_##typ##_bits) / 32) | ||
| 61 | #define MLX5_BYTE_OFF(typ, fld) (__mlx5_bit_off(typ, fld) / 8) | ||
| 62 | #define MLX5_ADDR_OF(typ, p, fld) ((char *)(p) + MLX5_BYTE_OFF(typ, fld)) | ||
| 63 | |||
| 64 | /* insert a value to a struct */ | ||
| 65 | #define MLX5_SET(typ, p, fld, v) do { \ | ||
| 66 | BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 32); \ | ||
| 67 | *((__be32 *)(p) + __mlx5_dw_off(typ, fld)) = \ | ||
| 68 | cpu_to_be32((be32_to_cpu(*((__be32 *)(p) + __mlx5_dw_off(typ, fld))) & \ | ||
| 69 | (~__mlx5_dw_mask(typ, fld))) | (((v) & __mlx5_mask(typ, fld)) \ | ||
| 70 | << __mlx5_dw_bit_off(typ, fld))); \ | ||
| 71 | } while (0) | ||
| 72 | |||
| 73 | #define MLX5_GET(typ, p, fld) ((be32_to_cpu(*((__be32 *)(p) +\ | ||
| 74 | __mlx5_dw_off(typ, fld))) >> __mlx5_dw_bit_off(typ, fld)) & \ | ||
| 75 | __mlx5_mask(typ, fld)) | ||
| 76 | |||
| 77 | #define MLX5_GET_PR(typ, p, fld) ({ \ | ||
| 78 | u32 ___t = MLX5_GET(typ, p, fld); \ | ||
| 79 | pr_debug(#fld " = 0x%x\n", ___t); \ | ||
| 80 | ___t; \ | ||
| 81 | }) | ||
| 82 | |||
| 83 | #define MLX5_SET64(typ, p, fld, v) do { \ | ||
| 84 | BUILD_BUG_ON(__mlx5_bit_sz(typ, fld) != 64); \ | ||
| 85 | BUILD_BUG_ON(__mlx5_bit_off(typ, fld) % 64); \ | ||
| 86 | *((__be64 *)(p) + __mlx5_64_off(typ, fld)) = cpu_to_be64(v); \ | ||
| 87 | } while (0) | ||
| 88 | |||
| 89 | #define MLX5_GET64(typ, p, fld) be64_to_cpu(*((__be64 *)(p) + __mlx5_64_off(typ, fld))) | ||
| 90 | |||
| 47 | enum { | 91 | enum { |
| 48 | MLX5_MAX_COMMANDS = 32, | 92 | MLX5_MAX_COMMANDS = 32, |
| 49 | MLX5_CMD_DATA_BLOCK_SIZE = 512, | 93 | MLX5_CMD_DATA_BLOCK_SIZE = 512, |
| @@ -71,6 +115,11 @@ enum { | |||
| 71 | }; | 115 | }; |
| 72 | 116 | ||
| 73 | enum { | 117 | enum { |
| 118 | MLX5_MIN_PKEY_TABLE_SIZE = 128, | ||
| 119 | MLX5_MAX_LOG_PKEY_TABLE = 5, | ||
| 120 | }; | ||
| 121 | |||
| 122 | enum { | ||
| 74 | MLX5_PERM_LOCAL_READ = 1 << 2, | 123 | MLX5_PERM_LOCAL_READ = 1 << 2, |
| 75 | MLX5_PERM_LOCAL_WRITE = 1 << 3, | 124 | MLX5_PERM_LOCAL_WRITE = 1 << 3, |
| 76 | MLX5_PERM_REMOTE_READ = 1 << 4, | 125 | MLX5_PERM_REMOTE_READ = 1 << 4, |
| @@ -184,10 +233,10 @@ enum { | |||
| 184 | MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, | 233 | MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, |
| 185 | MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, | 234 | MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, |
| 186 | MLX5_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32, | 235 | MLX5_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32, |
| 236 | MLX5_DEV_CAP_FLAG_DCT = 1LL << 37, | ||
| 187 | MLX5_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38, | 237 | MLX5_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38, |
| 188 | MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39, | 238 | MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39, |
| 189 | MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40, | 239 | MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40, |
| 190 | MLX5_DEV_CAP_FLAG_DCT = 1LL << 41, | ||
| 191 | MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 3LL << 46, | 240 | MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 3LL << 46, |
| 192 | }; | 241 | }; |
| 193 | 242 | ||
| @@ -243,10 +292,14 @@ enum { | |||
| 243 | }; | 292 | }; |
| 244 | 293 | ||
| 245 | enum { | 294 | enum { |
| 246 | MLX5_CAP_OFF_DCT = 41, | ||
| 247 | MLX5_CAP_OFF_CMDIF_CSUM = 46, | 295 | MLX5_CAP_OFF_CMDIF_CSUM = 46, |
| 248 | }; | 296 | }; |
| 249 | 297 | ||
| 298 | enum { | ||
| 299 | HCA_CAP_OPMOD_GET_MAX = 0, | ||
| 300 | HCA_CAP_OPMOD_GET_CUR = 1, | ||
| 301 | }; | ||
| 302 | |||
| 250 | struct mlx5_inbox_hdr { | 303 | struct mlx5_inbox_hdr { |
| 251 | __be16 opcode; | 304 | __be16 opcode; |
| 252 | u8 rsvd[4]; | 305 | u8 rsvd[4]; |
| @@ -274,101 +327,6 @@ struct mlx5_cmd_query_adapter_mbox_out { | |||
| 274 | u8 vsd_psid[16]; | 327 | u8 vsd_psid[16]; |
| 275 | }; | 328 | }; |
| 276 | 329 | ||
| 277 | struct mlx5_hca_cap { | ||
| 278 | u8 rsvd1[16]; | ||
| 279 | u8 log_max_srq_sz; | ||
| 280 | u8 log_max_qp_sz; | ||
| 281 | u8 rsvd2; | ||
| 282 | u8 log_max_qp; | ||
| 283 | u8 log_max_strq_sz; | ||
| 284 | u8 log_max_srqs; | ||
| 285 | u8 rsvd4[2]; | ||
| 286 | u8 rsvd5; | ||
| 287 | u8 log_max_cq_sz; | ||
| 288 | u8 rsvd6; | ||
| 289 | u8 log_max_cq; | ||
| 290 | u8 log_max_eq_sz; | ||
| 291 | u8 log_max_mkey; | ||
| 292 | u8 rsvd7; | ||
| 293 | u8 log_max_eq; | ||
| 294 | u8 max_indirection; | ||
| 295 | u8 log_max_mrw_sz; | ||
| 296 | u8 log_max_bsf_list_sz; | ||
| 297 | u8 log_max_klm_list_sz; | ||
| 298 | u8 rsvd_8_0; | ||
| 299 | u8 log_max_ra_req_dc; | ||
| 300 | u8 rsvd_8_1; | ||
| 301 | u8 log_max_ra_res_dc; | ||
| 302 | u8 rsvd9; | ||
| 303 | u8 log_max_ra_req_qp; | ||
| 304 | u8 rsvd10; | ||
| 305 | u8 log_max_ra_res_qp; | ||
| 306 | u8 rsvd11[4]; | ||
| 307 | __be16 max_qp_count; | ||
| 308 | __be16 rsvd12; | ||
| 309 | u8 rsvd13; | ||
| 310 | u8 local_ca_ack_delay; | ||
| 311 | u8 rsvd14; | ||
| 312 | u8 num_ports; | ||
| 313 | u8 log_max_msg; | ||
| 314 | u8 rsvd15[3]; | ||
| 315 | __be16 stat_rate_support; | ||
| 316 | u8 rsvd16[2]; | ||
| 317 | __be64 flags; | ||
| 318 | u8 rsvd17; | ||
| 319 | u8 uar_sz; | ||
| 320 | u8 rsvd18; | ||
| 321 | u8 log_pg_sz; | ||
| 322 | __be16 bf_log_bf_reg_size; | ||
| 323 | u8 rsvd19[4]; | ||
| 324 | __be16 max_desc_sz_sq; | ||
| 325 | u8 rsvd20[2]; | ||
| 326 | __be16 max_desc_sz_rq; | ||
| 327 | u8 rsvd21[2]; | ||
| 328 | __be16 max_desc_sz_sq_dc; | ||
| 329 | __be32 max_qp_mcg; | ||
| 330 | u8 rsvd22[3]; | ||
| 331 | u8 log_max_mcg; | ||
| 332 | u8 rsvd23; | ||
| 333 | u8 log_max_pd; | ||
| 334 | u8 rsvd24; | ||
| 335 | u8 log_max_xrcd; | ||
| 336 | u8 rsvd25[42]; | ||
| 337 | __be16 log_uar_page_sz; | ||
| 338 | u8 rsvd26[28]; | ||
| 339 | u8 log_max_atomic_size_qp; | ||
| 340 | u8 rsvd27[2]; | ||
| 341 | u8 log_max_atomic_size_dc; | ||
| 342 | u8 rsvd28[76]; | ||
| 343 | }; | ||
| 344 | |||
| 345 | |||
| 346 | struct mlx5_cmd_query_hca_cap_mbox_in { | ||
| 347 | struct mlx5_inbox_hdr hdr; | ||
| 348 | u8 rsvd[8]; | ||
| 349 | }; | ||
| 350 | |||
| 351 | |||
| 352 | struct mlx5_cmd_query_hca_cap_mbox_out { | ||
| 353 | struct mlx5_outbox_hdr hdr; | ||
| 354 | u8 rsvd0[8]; | ||
| 355 | struct mlx5_hca_cap hca_cap; | ||
| 356 | }; | ||
| 357 | |||
| 358 | |||
| 359 | struct mlx5_cmd_set_hca_cap_mbox_in { | ||
| 360 | struct mlx5_inbox_hdr hdr; | ||
| 361 | u8 rsvd[8]; | ||
| 362 | struct mlx5_hca_cap hca_cap; | ||
| 363 | }; | ||
| 364 | |||
| 365 | |||
| 366 | struct mlx5_cmd_set_hca_cap_mbox_out { | ||
| 367 | struct mlx5_outbox_hdr hdr; | ||
| 368 | u8 rsvd0[8]; | ||
| 369 | }; | ||
| 370 | |||
| 371 | |||
| 372 | struct mlx5_cmd_init_hca_mbox_in { | 330 | struct mlx5_cmd_init_hca_mbox_in { |
| 373 | struct mlx5_inbox_hdr hdr; | 331 | struct mlx5_inbox_hdr hdr; |
| 374 | u8 rsvd0[2]; | 332 | u8 rsvd0[2]; |
