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()
485 if (dev->caps.log_num_macs > dev_cap->port_cap[i].log_max_macs) { in mlx4_dev_cap()
486 dev->caps.log_num_macs = dev_cap->port_cap[i].log_max_macs; in mlx4_dev_cap()
490 if (dev->caps.log_num_vlans > dev_cap->port_cap[i].log_max_vlans) { in mlx4_dev_cap()
491 dev->caps.log_num_vlans = dev_cap->port_cap[i].log_max_vlans; in mlx4_dev_cap()
505 dev->caps.max_counters = dev_cap->max_counters; in mlx4_dev_cap()
507 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW] = dev_cap->reserved_qps; in mlx4_dev_cap()
515 if (dev_cap->dmfs_high_rate_qpn_base > 0 && in mlx4_dev_cap()
517 dev->caps.dmfs_high_rate_qpn_base = dev_cap->dmfs_high_rate_qpn_base; in mlx4_dev_cap()
522 if (dev_cap->dmfs_high_rate_qpn_range > 0 && in mlx4_dev_cap()
524 dev->caps.dmfs_high_rate_qpn_range = dev_cap->dmfs_high_rate_qpn_range; in mlx4_dev_cap()
534 dev->caps.rl_caps = dev_cap->rl_caps; in mlx4_dev_cap()
547 if (dev_cap->flags & in mlx4_dev_cap()
554 if (dev_cap->flags2 & in mlx4_dev_cap()
558 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_CQE_STRIDE; in mlx4_dev_cap()
559 dev_cap->flags2 &= ~MLX4_DEV_CAP_FLAG2_EQE_STRIDE; in mlx4_dev_cap()
754 struct mlx4_dev_cap *dev_cap, in slave_adjust_steering_mode() argument
759 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in slave_adjust_steering_mode()
761 dev_cap->fs_log_max_ucast_qp_range_size; in slave_adjust_steering_mode()
774 struct mlx4_dev_cap dev_cap; in mlx4_slave_cap() local
798 memset(&dev_cap, 0, sizeof(dev_cap)); in mlx4_slave_cap()
800 err = mlx4_dev_cap(dev, &dev_cap); in mlx4_slave_cap()
943 slave_adjust_steering_mode(dev, &dev_cap, &hca_param); in mlx4_slave_cap()
1402 static int mlx4_init_icm(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_init_icm() argument
1433 err = mlx4_init_cmpt_table(dev, init_hca->cmpt_base, dev_cap->cmpt_entry_sz); in mlx4_init_icm()
1442 init_hca->eqc_base, dev_cap->eqc_entry_sz, in mlx4_init_icm()
1472 dev_cap->dmpt_entry_sz, in mlx4_init_icm()
1482 dev_cap->qpc_entry_sz, in mlx4_init_icm()
1493 dev_cap->aux_entry_sz, in mlx4_init_icm()
1504 dev_cap->altc_entry_sz, in mlx4_init_icm()
1515 dev_cap->rdmarc_entry_sz << priv->qp_table.rdmarc_shift, in mlx4_init_icm()
1526 dev_cap->cqc_entry_sz, in mlx4_init_icm()
1536 dev_cap->srq_entry_sz, in mlx4_init_icm()
1919 struct mlx4_dev_cap *dev_cap) in choose_steering_mode() argument
1933 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_FS_EN && in choose_steering_mode()
1935 (dev_cap->fs_max_num_qp_per_entry >= in choose_steering_mode()
1937 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry) >= in choose_steering_mode()
1940 choose_log_fs_mgm_entry_size(dev_cap->fs_max_num_qp_per_entry); in choose_steering_mode()
1942 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; in choose_steering_mode()
1944 dev_cap->fs_log_max_ucast_qp_range_size; in choose_steering_mode()
1972 struct mlx4_dev_cap *dev_cap) in choose_tunnel_offload_mode() argument
1975 dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_VXLAN_OFFLOADS) in choose_tunnel_offload_mode()
2048 struct mlx4_dev_cap dev_cap; in mlx4_init_hca() local
2056 err = mlx4_dev_cap(dev, &dev_cap); in mlx4_init_hca()
2062 choose_steering_mode(dev, &dev_cap); in mlx4_init_hca()
2063 choose_tunnel_offload_mode(dev, &dev_cap); in mlx4_init_hca()
2086 icm_size = mlx4_make_profile(dev, &profile, &dev_cap, in mlx4_init_hca()
2102 err = mlx4_init_icm(dev, &dev_cap, &init_hca, icm_size); in mlx4_init_hca()
2112 if (dev_cap.flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS) { in mlx4_init_hca()
2113 err = mlx4_query_func(dev, &dev_cap); in mlx4_init_hca()
2118 dev->caps.num_eqs = dev_cap.max_eqs; in mlx4_init_hca()
2119 dev->caps.reserved_eqs = dev_cap.reserved_eqs; in mlx4_init_hca()
2120 dev->caps.reserved_uars = dev_cap.reserved_uars; in mlx4_init_hca()
2998 static int mlx4_check_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, in mlx4_check_dev_cap() argument
3003 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_80_VFS) && in mlx4_check_dev_cap()
3021 struct mlx4_dev_cap *dev_cap = NULL; in mlx4_load_one() local
3119 if (!dev_cap) { in mlx4_load_one()
3120 dev_cap = kzalloc(sizeof(*dev_cap), GFP_KERNEL); in mlx4_load_one()
3122 if (!dev_cap) { in mlx4_load_one()
3127 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
3133 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
3136 if (!(dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
3161 memset(dev_cap, 0, sizeof(*dev_cap)); in mlx4_load_one()
3162 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); in mlx4_load_one()
3168 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) in mlx4_load_one()
3196 if (mlx4_is_master(dev) && (dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { in mlx4_load_one()
3332 kfree(dev_cap); in mlx4_load_one()
3405 kfree(dev_cap); in mlx4_load_one()