aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorEli Cohen <eli@mellanox.com>2014-10-02 05:19:42 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-03 18:42:31 -0400
commitc7a08ac7ee68b9af0d5af99c7b34b574cac4d144 (patch)
tree5c8ee3cd2058f2230df4b5c9fe21f44d47cfbf7b /include/linux
parent55a93b3ea780908b7d1b3a8cf1976223a9268d78 (diff)
net/mlx5_core: Update device capabilities handling
Rearrange struct mlx5_caps so it has a "gen" field to represent the current capabilities configured for the device. Max capabilities can also be queried from the device. Also update capabilities struct to contain more fields as per the latest revision if firmware specification. Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mlx5/device.h24
-rw-r--r--include/linux/mlx5/driver.h28
2 files changed, 40 insertions, 12 deletions
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h
index 334947151dfc..dce01fd854a8 100644
--- a/include/linux/mlx5/device.h
+++ b/include/linux/mlx5/device.h
@@ -71,6 +71,11 @@ enum {
71}; 71};
72 72
73enum { 73enum {
74 MLX5_MIN_PKEY_TABLE_SIZE = 128,
75 MLX5_MAX_LOG_PKEY_TABLE = 5,
76};
77
78enum {
74 MLX5_PERM_LOCAL_READ = 1 << 2, 79 MLX5_PERM_LOCAL_READ = 1 << 2,
75 MLX5_PERM_LOCAL_WRITE = 1 << 3, 80 MLX5_PERM_LOCAL_WRITE = 1 << 3,
76 MLX5_PERM_REMOTE_READ = 1 << 4, 81 MLX5_PERM_REMOTE_READ = 1 << 4,
@@ -184,10 +189,10 @@ enum {
184 MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29, 189 MLX5_DEV_CAP_FLAG_CQ_MODER = 1LL << 29,
185 MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30, 190 MLX5_DEV_CAP_FLAG_RESIZE_CQ = 1LL << 30,
186 MLX5_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32, 191 MLX5_DEV_CAP_FLAG_RESIZE_SRQ = 1LL << 32,
192 MLX5_DEV_CAP_FLAG_DCT = 1LL << 37,
187 MLX5_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38, 193 MLX5_DEV_CAP_FLAG_REMOTE_FENCE = 1LL << 38,
188 MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39, 194 MLX5_DEV_CAP_FLAG_TLP_HINTS = 1LL << 39,
189 MLX5_DEV_CAP_FLAG_SIG_HAND_OVER = 1LL << 40, 195 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, 196 MLX5_DEV_CAP_FLAG_CMDIF_CSUM = 3LL << 46,
192}; 197};
193 198
@@ -243,10 +248,14 @@ enum {
243}; 248};
244 249
245enum { 250enum {
246 MLX5_CAP_OFF_DCT = 41,
247 MLX5_CAP_OFF_CMDIF_CSUM = 46, 251 MLX5_CAP_OFF_CMDIF_CSUM = 46,
248}; 252};
249 253
254enum {
255 HCA_CAP_OPMOD_GET_MAX = 0,
256 HCA_CAP_OPMOD_GET_CUR = 1,
257};
258
250struct mlx5_inbox_hdr { 259struct mlx5_inbox_hdr {
251 __be16 opcode; 260 __be16 opcode;
252 u8 rsvd[4]; 261 u8 rsvd[4];
@@ -303,9 +312,10 @@ struct mlx5_hca_cap {
303 u8 log_max_ra_req_qp; 312 u8 log_max_ra_req_qp;
304 u8 rsvd10; 313 u8 rsvd10;
305 u8 log_max_ra_res_qp; 314 u8 log_max_ra_res_qp;
306 u8 rsvd11[4]; 315 u8 pad_cap;
316 u8 rsvd11[3];
307 __be16 max_qp_count; 317 __be16 max_qp_count;
308 __be16 rsvd12; 318 __be16 pkey_table_size;
309 u8 rsvd13; 319 u8 rsvd13;
310 u8 local_ca_ack_delay; 320 u8 local_ca_ack_delay;
311 u8 rsvd14; 321 u8 rsvd14;
@@ -335,11 +345,7 @@ struct mlx5_hca_cap {
335 u8 log_max_xrcd; 345 u8 log_max_xrcd;
336 u8 rsvd25[42]; 346 u8 rsvd25[42];
337 __be16 log_uar_page_sz; 347 __be16 log_uar_page_sz;
338 u8 rsvd26[28]; 348 u8 rsvd26[108];
339 u8 log_max_atomic_size_qp;
340 u8 rsvd27[2];
341 u8 log_max_atomic_size_dc;
342 u8 rsvd28[76];
343}; 349};
344 350
345 351
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index b88e9b46d957..45a2add747e0 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -335,23 +335,30 @@ struct mlx5_port_caps {
335 int pkey_table_len; 335 int pkey_table_len;
336}; 336};
337 337
338struct mlx5_caps { 338struct mlx5_general_caps {
339 u8 log_max_eq; 339 u8 log_max_eq;
340 u8 log_max_cq; 340 u8 log_max_cq;
341 u8 log_max_qp; 341 u8 log_max_qp;
342 u8 log_max_mkey; 342 u8 log_max_mkey;
343 u8 log_max_pd; 343 u8 log_max_pd;
344 u8 log_max_srq; 344 u8 log_max_srq;
345 u8 log_max_strq;
346 u8 log_max_mrw_sz;
347 u8 log_max_bsf_list_size;
348 u8 log_max_klm_list_size;
345 u32 max_cqes; 349 u32 max_cqes;
346 int max_wqes; 350 int max_wqes;
351 u32 max_eqes;
352 u32 max_indirection;
347 int max_sq_desc_sz; 353 int max_sq_desc_sz;
348 int max_rq_desc_sz; 354 int max_rq_desc_sz;
355 int max_dc_sq_desc_sz;
349 u64 flags; 356 u64 flags;
350 u16 stat_rate_support; 357 u16 stat_rate_support;
351 int log_max_msg; 358 int log_max_msg;
352 int num_ports; 359 int num_ports;
353 int max_ra_res_qp; 360 u8 log_max_ra_res_qp;
354 int max_ra_req_qp; 361 u8 log_max_ra_req_qp;
355 int max_srq_wqes; 362 int max_srq_wqes;
356 int bf_reg_size; 363 int bf_reg_size;
357 int bf_regs_per_page; 364 int bf_regs_per_page;
@@ -363,6 +370,19 @@ struct mlx5_caps {
363 u8 log_max_mcg; 370 u8 log_max_mcg;
364 u32 max_qp_mcg; 371 u32 max_qp_mcg;
365 int min_page_sz; 372 int min_page_sz;
373 int pd_cap;
374 u32 max_qp_counters;
375 u32 pkey_table_size;
376 u8 log_max_ra_req_dc;
377 u8 log_max_ra_res_dc;
378 u32 uar_sz;
379 u8 min_log_pg_sz;
380 u8 log_max_xrcd;
381 u16 log_uar_page_sz;
382};
383
384struct mlx5_caps {
385 struct mlx5_general_caps gen;
366}; 386};
367 387
368struct mlx5_cmd_mailbox { 388struct mlx5_cmd_mailbox {
@@ -695,6 +715,8 @@ void mlx5_cmd_cleanup(struct mlx5_core_dev *dev);
695void mlx5_cmd_use_events(struct mlx5_core_dev *dev); 715void mlx5_cmd_use_events(struct mlx5_core_dev *dev);
696void mlx5_cmd_use_polling(struct mlx5_core_dev *dev); 716void mlx5_cmd_use_polling(struct mlx5_core_dev *dev);
697int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr); 717int mlx5_cmd_status_to_err(struct mlx5_outbox_hdr *hdr);
718int mlx5_core_get_caps(struct mlx5_core_dev *dev, struct mlx5_caps *caps,
719 u16 opmod);
698int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out, 720int mlx5_cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,
699 int out_size); 721 int out_size);
700int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size, 722int mlx5_cmd_exec_cb(struct mlx5_core_dev *dev, void *in, int in_size,