Lines Matching refs:dev_cap
293 struct mlx4_dev_cap *dev_cap) in mlx4_set_num_reserved_uars() argument
302 dev_cap->reserved_uars / in mlx4_set_num_reserved_uars()
342 static int mlx4_query_func(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) in mlx4_query_func() argument
353 dev_cap->max_eqs = func.max_eq; in mlx4_query_func()
354 dev_cap->reserved_eqs = func.rsvd_eqs; in mlx4_query_func()
355 dev_cap->reserved_uars = func.rsvd_uars; in mlx4_query_func()
363 struct mlx4_caps *dev_cap = &dev->caps; in mlx4_enable_cqe_eqe_stride() local
366 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_EQE_STRIDE) || in mlx4_enable_cqe_eqe_stride()
367 !(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_CQE_STRIDE)) in mlx4_enable_cqe_eqe_stride()
373 if (!(dev_cap->flags & MLX4_DEV_CAP_FLAG_64B_EQE) || in mlx4_enable_cqe_eqe_stride()
374 !(dev_cap->flags & MLX4_DEV_CAP_FLAG_64B_CQE)) { in mlx4_enable_cqe_eqe_stride()
375 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
376 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
383 dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_CQE; in mlx4_enable_cqe_eqe_stride()
384 dev_cap->flags &= ~MLX4_DEV_CAP_FLAG_64B_EQE; in mlx4_enable_cqe_eqe_stride()
387 dev_cap->function_caps |= MLX4_FUNC_CAP_EQE_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
391 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
392 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_enable_cqe_eqe_stride()
456 static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) in mlx4_dev_cap() argument
461 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_dev_cap()
466 mlx4_dev_cap_dump(dev, dev_cap); in mlx4_dev_cap()
468 if (dev_cap->min_page_sz > PAGE_SIZE) { in mlx4_dev_cap()
470 dev_cap->min_page_sz, PAGE_SIZE); in mlx4_dev_cap()
473 if (dev_cap->num_ports > MLX4_MAX_PORTS) { in mlx4_dev_cap()
475 dev_cap->num_ports, MLX4_MAX_PORTS); in mlx4_dev_cap()
479 if (dev_cap->uar_size > pci_resource_len(dev->persist->pdev, 2)) { in mlx4_dev_cap()
481 dev_cap->uar_size, in mlx4_dev_cap()
487 dev->caps.num_ports = dev_cap->num_ports; in mlx4_dev_cap()
488 dev->caps.num_sys_eqs = dev_cap->num_sys_eqs; in mlx4_dev_cap()
489 dev->phys_caps.num_phys_eqs = dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS ? in mlx4_dev_cap()
493 err = _mlx4_dev_port(dev, i, dev_cap->port_cap + i); in mlx4_dev_cap()
500 dev->caps.map_clock_to_user = dev_cap->map_clock_to_user; in mlx4_dev_cap()
502 dev->caps.num_uars = dev_cap->uar_size / PAGE_SIZE; in mlx4_dev_cap()
503 dev->caps.local_ca_ack_delay = dev_cap->local_ca_ack_delay; in mlx4_dev_cap()
504 dev->caps.bf_reg_size = dev_cap->bf_reg_size; in mlx4_dev_cap()
505 dev->caps.bf_regs_per_page = dev_cap->bf_regs_per_page; in mlx4_dev_cap()
506 dev->caps.max_sq_sg = dev_cap->max_sq_sg; in mlx4_dev_cap()
507 dev->caps.max_rq_sg = dev_cap->max_rq_sg; in mlx4_dev_cap()
508 dev->caps.max_wqes = dev_cap->max_qp_sz; in mlx4_dev_cap()
509 dev->caps.max_qp_init_rdma = dev_cap->max_requester_per_qp; in mlx4_dev_cap()
510 dev->caps.max_srq_wqes = dev_cap->max_srq_sz; in mlx4_dev_cap()
511 dev->caps.max_srq_sge = dev_cap->max_rq_sg - 1; in mlx4_dev_cap()
512 dev->caps.reserved_srqs = dev_cap->reserved_srqs; in mlx4_dev_cap()
513 dev->caps.max_sq_desc_sz = dev_cap->max_sq_desc_sz; in mlx4_dev_cap()
514 dev->caps.max_rq_desc_sz = dev_cap->max_rq_desc_sz; in mlx4_dev_cap()
519 dev->caps.max_cqes = dev_cap->max_cq_sz - 1; in mlx4_dev_cap()
520 dev->caps.reserved_cqs = dev_cap->reserved_cqs; in mlx4_dev_cap()
521 dev->caps.reserved_eqs = dev_cap->reserved_eqs; in mlx4_dev_cap()
522 dev->caps.reserved_mtts = dev_cap->reserved_mtts; in mlx4_dev_cap()
523 dev->caps.reserved_mrws = dev_cap->reserved_mrws; in mlx4_dev_cap()
525 dev->caps.reserved_pds = dev_cap->reserved_pds; in mlx4_dev_cap()
527 dev_cap->reserved_xrcds : 0; in mlx4_dev_cap()
529 dev_cap->max_xrcds : 0; in mlx4_dev_cap()
530 dev->caps.mtt_entry_sz = dev_cap->mtt_entry_sz; in mlx4_dev_cap()
532 dev->caps.max_msg_sz = dev_cap->max_msg_sz; in mlx4_dev_cap()
533 dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1); in mlx4_dev_cap()
534 dev->caps.flags = dev_cap->flags; in mlx4_dev_cap()
535 dev->caps.flags2 = dev_cap->flags2; in mlx4_dev_cap()
536 dev->caps.bmme_flags = dev_cap->bmme_flags; in mlx4_dev_cap()
537 dev->caps.reserved_lkey = dev_cap->reserved_lkey; in mlx4_dev_cap()
538 dev->caps.stat_rate_support = dev_cap->stat_rate_support; in mlx4_dev_cap()
539 dev->caps.max_gso_sz = dev_cap->max_gso_sz; in mlx4_dev_cap()
540 dev->caps.max_rss_tbl_sz = dev_cap->max_rss_tbl_sz; in mlx4_dev_cap()
541 dev->caps.wol_port[1] = dev_cap->wol_port[1]; in mlx4_dev_cap()
542 dev->caps.wol_port[2] = dev_cap->wol_port[2]; in mlx4_dev_cap()
543 dev->caps.health_buffer_addrs = dev_cap->health_buffer_addrs; in mlx4_dev_cap()
555 mlx4_set_num_reserved_uars(dev, dev_cap); in mlx4_dev_cap()
635 if (dev->caps.log_num_macs > dev_cap->port_cap[i].log_max_macs) { in mlx4_dev_cap()
636 dev->caps.log_num_macs = dev_cap->port_cap[i].log_max_macs; in mlx4_dev_cap()
640 if (dev->caps.log_num_vlans > dev_cap->port_cap[i].log_max_vlans) { in mlx4_dev_cap()
641 dev->caps.log_num_vlans = dev_cap->port_cap[i].log_max_vlans; in mlx4_dev_cap()
655 dev->caps.max_counters = dev_cap->max_counters; in mlx4_dev_cap()
657 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW] = dev_cap->reserved_qps; in mlx4_dev_cap()
665 if (dev_cap->dmfs_high_rate_qpn_base > 0 && in mlx4_dev_cap()
667 dev->caps.dmfs_high_rate_qpn_base = dev_cap->dmfs_high_rate_qpn_base; in mlx4_dev_cap()
672 if (dev_cap->dmfs_high_rate_qpn_range > 0 && in mlx4_dev_cap()
674 dev->caps.dmfs_high_rate_qpn_range = dev_cap->dmfs_high_rate_qpn_range; in mlx4_dev_cap()
684 dev->caps.rl_caps = dev_cap->rl_caps; in mlx4_dev_cap()
697 if (dev_cap->flags & in mlx4_dev_cap()
704 if (dev_cap->flags2 & in mlx4_dev_cap()
708 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_dev_cap()
709 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_dev_cap()
842 struct mlx4_dev_cap *dev_cap, in slave_adjust_steering_mode() argument
847 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in slave_adjust_steering_mode()
849 dev_cap->fs_log_max_ucast_qp_range_size; in slave_adjust_steering_mode()
910 struct mlx4_dev_cap *dev_cap; in mlx4_slave_cap() local
916 dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL); in mlx4_slave_cap()
917 if (!hca_param || !func_cap || !dev_cap) { in mlx4_slave_cap()
941 err = mlx4_dev_cap(dev, dev_cap); in mlx4_slave_cap()
972 mlx4_set_num_reserved_uars(dev, dev_cap); in mlx4_slave_cap()
1072 slave_adjust_steering_mode(dev, dev_cap, hca_param); in mlx4_slave_cap()
1089 kfree(dev_cap); in mlx4_slave_cap()
1667 static int mlx4_init_icm(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_init_icm() argument
1698 err = mlx4_init_cmpt_table(dev, init_hca->cmpt_base, dev_cap->cmpt_entry_sz); in mlx4_init_icm()
1707 init_hca->eqc_base, dev_cap->eqc_entry_sz, in mlx4_init_icm()
1737 dev_cap->dmpt_entry_sz, in mlx4_init_icm()
1747 dev_cap->qpc_entry_sz, in mlx4_init_icm()
1758 dev_cap->aux_entry_sz, in mlx4_init_icm()
1769 dev_cap->altc_entry_sz, in mlx4_init_icm()
1780 dev_cap->rdmarc_entry_sz << priv->qp_table.rdmarc_shift, in mlx4_init_icm()
1791 dev_cap->cqc_entry_sz, in mlx4_init_icm()
1801 dev_cap->srq_entry_sz, in mlx4_init_icm()
2197 struct mlx4_dev_cap *dev_cap) in choose_steering_mode() argument
2211 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_FS_EN && in choose_steering_mode()
2213 (dev_cap->fs_max_num_qp_per_entry >= in choose_steering_mode()
2215 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry) >= in choose_steering_mode()
2218 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry); in choose_steering_mode()
2220 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in choose_steering_mode()
2222 dev_cap->fs_log_max_ucast_qp_range_size; in choose_steering_mode()
2250 struct mlx4_dev_cap *dev_cap) in choose_tunnel_offload_mode() argument
2253 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS) in choose_tunnel_offload_mode()
2326 struct mlx4_dev_cap *dev_cap = NULL; in mlx4_init_hca() local
2334 dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL); in mlx4_init_hca()
2337 if (!dev_cap || !init_hca) { in mlx4_init_hca()
2342 err = mlx4_dev_cap(dev, dev_cap); in mlx4_init_hca()
2348 choose_steering_mode(dev, dev_cap); in mlx4_init_hca()
2349 choose_tunnel_offload_mode(dev, dev_cap); in mlx4_init_hca()
2372 icm_size = mlx4_make_profile(dev, &profile, dev_cap, in mlx4_init_hca()
2393 err = mlx4_init_icm(dev, dev_cap, init_hca, icm_size); in mlx4_init_hca()
2403 if (dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS) { in mlx4_init_hca()
2404 err = mlx4_query_func(dev, dev_cap); in mlx4_init_hca()
2409 dev->caps.num_eqs = dev_cap->max_eqs; in mlx4_init_hca()
2410 dev->caps.reserved_eqs = dev_cap->reserved_eqs; in mlx4_init_hca()
2411 dev->caps.reserved_uars = dev_cap->reserved_uars; in mlx4_init_hca()
2523 kfree(dev_cap); in mlx4_init_hca()
3348 static int mlx4_check_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_check_dev_cap() argument
3353 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_80_VFS) && in mlx4_check_dev_cap()
3400 struct mlx4_dev_cap *dev_cap = NULL; in mlx4_load_one() local
3504 if (!dev_cap) { in mlx4_load_one()
3505 dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL); in mlx4_load_one()
3507 if (!dev_cap) { in mlx4_load_one()
3512 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
3518 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
3521 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
3546 memset(dev_cap, 0, sizeof(*dev_cap)); in mlx4_load_one()
3547 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
3553 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
3581 if (mlx4_is_master(dev) && (dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
3717 kfree(dev_cap); in mlx4_load_one()
3785 kfree(dev_cap); in mlx4_load_one()