Lines Matching refs:dev_cap

207 static int mlx4_query_func(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)  in mlx4_query_func()  argument
218 dev_cap->max_eqs = func.max_eq; in mlx4_query_func()
219 dev_cap->reserved_eqs = func.rsvd_eqs; in mlx4_query_func()
220 dev_cap->reserved_uars = func.rsvd_uars; in mlx4_query_func()
228 struct mlx4_caps *dev_cap = &dev->caps; in mlx4_enable_cqe_eqe_stride() local
231 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_EQE_STRIDE) || in mlx4_enable_cqe_eqe_stride()
232 !(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_CQE_STRIDE)) in mlx4_enable_cqe_eqe_stride()
238 if (!(dev_cap->flags & MLX4_DEV_CAP_FLAG_64B_EQE) || in mlx4_enable_cqe_eqe_stride()
239 !(dev_cap->flags & MLX4_DEV_CAP_FLAG_64B_CQE)) { in mlx4_enable_cqe_eqe_stride()
240 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
241 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
248 dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_CQE; in mlx4_enable_cqe_eqe_stride()
249 dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_EQE; in mlx4_enable_cqe_eqe_stride()
252 dev_cap->function_caps |= MLX4_FUNC_CAP_EQE_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
256 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
257 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
320 static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) in mlx4_dev_cap() argument
325 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_dev_cap()
330 mlx4_dev_cap_dump(dev, dev_cap); in mlx4_dev_cap()
332 if (dev_cap->min_page_sz > PAGE_SIZE) { in mlx4_dev_cap()
334 dev_cap->min_page_sz, PAGE_SIZE); in mlx4_dev_cap()
337 if (dev_cap->num_ports > MLX4_MAX_PORTS) { in mlx4_dev_cap()
339 dev_cap->num_ports, MLX4_MAX_PORTS); in mlx4_dev_cap()
343 if (dev_cap->uar_size > pci_resource_len(dev->persist->pdev, 2)) { in mlx4_dev_cap()
345 dev_cap->uar_size, in mlx4_dev_cap()
351 dev->caps.num_ports = dev_cap->num_ports; in mlx4_dev_cap()
352 dev->caps.num_sys_eqs = dev_cap->num_sys_eqs; in mlx4_dev_cap()
353 dev->phys_caps.num_phys_eqs = dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS ? in mlx4_dev_cap()
357 err = _mlx4_dev_port(dev, i, dev_cap->port_cap + i); in mlx4_dev_cap()
365 dev->caps.num_uars = dev_cap->uar_size / PAGE_SIZE; in mlx4_dev_cap()
366 dev->caps.local_ca_ack_delay = dev_cap->local_ca_ack_delay; in mlx4_dev_cap()
367 dev->caps.bf_reg_size = dev_cap->bf_reg_size; in mlx4_dev_cap()
368 dev->caps.bf_regs_per_page = dev_cap->bf_regs_per_page; in mlx4_dev_cap()
369 dev->caps.max_sq_sg = dev_cap->max_sq_sg; in mlx4_dev_cap()
370 dev->caps.max_rq_sg = dev_cap->max_rq_sg; in mlx4_dev_cap()
371 dev->caps.max_wqes = dev_cap->max_qp_sz; in mlx4_dev_cap()
372 dev->caps.max_qp_init_rdma = dev_cap->max_requester_per_qp; in mlx4_dev_cap()
373 dev->caps.max_srq_wqes = dev_cap->max_srq_sz; in mlx4_dev_cap()
374 dev->caps.max_srq_sge = dev_cap->max_rq_sg - 1; in mlx4_dev_cap()
375 dev->caps.reserved_srqs = dev_cap->reserved_srqs; in mlx4_dev_cap()
376 dev->caps.max_sq_desc_sz = dev_cap->max_sq_desc_sz; in mlx4_dev_cap()
377 dev->caps.max_rq_desc_sz = dev_cap->max_rq_desc_sz; in mlx4_dev_cap()
383 dev->caps.max_cqes = dev_cap->max_cq_sz - 1; in mlx4_dev_cap()
384 dev->caps.reserved_cqs = dev_cap->reserved_cqs; in mlx4_dev_cap()
385 dev->caps.reserved_eqs = dev_cap->reserved_eqs; in mlx4_dev_cap()
386 dev->caps.reserved_mtts = dev_cap->reserved_mtts; in mlx4_dev_cap()
387 dev->caps.reserved_mrws = dev_cap->reserved_mrws; in mlx4_dev_cap()
390 dev->caps.reserved_uars = max_t(int, 128, dev_cap->reserved_uars); in mlx4_dev_cap()
391 dev->caps.reserved_pds = dev_cap->reserved_pds; in mlx4_dev_cap()
393 dev_cap->reserved_xrcds : 0; in mlx4_dev_cap()
395 dev_cap->max_xrcds : 0; in mlx4_dev_cap()
396 dev->caps.mtt_entry_sz = dev_cap->mtt_entry_sz; in mlx4_dev_cap()
398 dev->caps.max_msg_sz = dev_cap->max_msg_sz; in mlx4_dev_cap()
399 dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1); in mlx4_dev_cap()
400 dev->caps.flags = dev_cap->flags; in mlx4_dev_cap()
401 dev->caps.flags2 = dev_cap->flags2; in mlx4_dev_cap()
402 dev->caps.bmme_flags = dev_cap->bmme_flags; in mlx4_dev_cap()
403 dev->caps.reserved_lkey = dev_cap->reserved_lkey; in mlx4_dev_cap()
404 dev->caps.stat_rate_support = dev_cap->stat_rate_support; in mlx4_dev_cap()
405 dev->caps.max_gso_sz = dev_cap->max_gso_sz; in mlx4_dev_cap()
406 dev->caps.max_rss_tbl_sz = dev_cap->max_rss_tbl_sz; in mlx4_dev_cap()
470 if (dev->caps.log_num_macs > dev_cap->port_cap[i].log_max_macs) { in mlx4_dev_cap()
471 dev->caps.log_num_macs = dev_cap->port_cap[i].log_max_macs; in mlx4_dev_cap()
475 if (dev->caps.log_num_vlans > dev_cap->port_cap[i].log_max_vlans) { in mlx4_dev_cap()
476 dev->caps.log_num_vlans = dev_cap->port_cap[i].log_max_vlans; in mlx4_dev_cap()
482 dev->caps.max_counters = 1 << ilog2(dev_cap->max_counters); in mlx4_dev_cap()
484 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW] = dev_cap->reserved_qps; in mlx4_dev_cap()
492 if (dev_cap->dmfs_high_rate_qpn_base > 0 && in mlx4_dev_cap()
494 dev->caps.dmfs_high_rate_qpn_base = dev_cap->dmfs_high_rate_qpn_base; in mlx4_dev_cap()
499 if (dev_cap->dmfs_high_rate_qpn_range > 0 && in mlx4_dev_cap()
501 dev->caps.dmfs_high_rate_qpn_range = dev_cap->dmfs_high_rate_qpn_range; in mlx4_dev_cap()
511 dev->caps.rl_caps = dev_cap->rl_caps; in mlx4_dev_cap()
524 if (dev_cap->flags & in mlx4_dev_cap()
531 if (dev_cap->flags2 & in mlx4_dev_cap()
535 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_dev_cap()
536 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_dev_cap()
731 struct mlx4_dev_cap *dev_cap, in slave_adjust_steering_mode() argument
736 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in slave_adjust_steering_mode()
738 dev_cap->fs_log_max_ucast_qp_range_size; in slave_adjust_steering_mode()
751 struct mlx4_dev_cap dev_cap; in mlx4_slave_cap() local
775 memset(&dev_cap, 0, sizeof(dev_cap)); in mlx4_slave_cap()
777 err = mlx4_dev_cap(dev, &dev_cap); in mlx4_slave_cap()
916 slave_adjust_steering_mode(dev, &dev_cap, &hca_param); in mlx4_slave_cap()
1375 static int mlx4_init_icm(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_init_icm() argument
1406 err = mlx4_init_cmpt_table(dev, init_hca->cmpt_base, dev_cap->cmpt_entry_sz); in mlx4_init_icm()
1415 init_hca->eqc_base, dev_cap->eqc_entry_sz, in mlx4_init_icm()
1445 dev_cap->dmpt_entry_sz, in mlx4_init_icm()
1455 dev_cap->qpc_entry_sz, in mlx4_init_icm()
1466 dev_cap->aux_entry_sz, in mlx4_init_icm()
1477 dev_cap->altc_entry_sz, in mlx4_init_icm()
1488 dev_cap->rdmarc_entry_sz << priv->qp_table.rdmarc_shift, in mlx4_init_icm()
1499 dev_cap->cqc_entry_sz, in mlx4_init_icm()
1509 dev_cap->srq_entry_sz, in mlx4_init_icm()
1873 struct mlx4_dev_cap *dev_cap) in choose_steering_mode() argument
1887 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_FS_EN && in choose_steering_mode()
1889 (dev_cap->fs_max_num_qp_per_entry >= in choose_steering_mode()
1891 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry) >= in choose_steering_mode()
1894 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry); in choose_steering_mode()
1896 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in choose_steering_mode()
1898 dev_cap->fs_log_max_ucast_qp_range_size; in choose_steering_mode()
1926 struct mlx4_dev_cap *dev_cap) in choose_tunnel_offload_mode() argument
1929 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS) in choose_tunnel_offload_mode()
2002 struct mlx4_dev_cap dev_cap; in mlx4_init_hca() local
2010 err = mlx4_dev_cap(dev, &dev_cap); in mlx4_init_hca()
2016 choose_steering_mode(dev, &dev_cap); in mlx4_init_hca()
2017 choose_tunnel_offload_mode(dev, &dev_cap); in mlx4_init_hca()
2040 icm_size = mlx4_make_profile(dev, &profile, &dev_cap, in mlx4_init_hca()
2056 err = mlx4_init_icm(dev, &dev_cap, &init_hca, icm_size); in mlx4_init_hca()
2066 if (dev_cap.flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS) { in mlx4_init_hca()
2067 err = mlx4_query_func(dev, &dev_cap); in mlx4_init_hca()
2072 dev->caps.num_eqs = dev_cap.max_eqs; in mlx4_init_hca()
2073 dev->caps.reserved_eqs = dev_cap.reserved_eqs; in mlx4_init_hca()
2074 dev->caps.reserved_uars = dev_cap.reserved_uars; in mlx4_init_hca()
2759 static int mlx4_check_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_check_dev_cap() argument
2764 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_80_VFS) && in mlx4_check_dev_cap()
2782 struct mlx4_dev_cap *dev_cap = NULL; in mlx4_load_one() local
2880 if (!dev_cap) { in mlx4_load_one()
2881 dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL); in mlx4_load_one()
2883 if (!dev_cap) { in mlx4_load_one()
2888 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
2894 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
2897 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
2921 memset(dev_cap, 0, sizeof(*dev_cap)); in mlx4_load_one()
2922 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
2928 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
2956 if (mlx4_is_master(dev) && (dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
3105 kfree(dev_cap); in mlx4_load_one()
3176 kfree(dev_cap); in mlx4_load_one()