Lines Matching refs:ibdev
119 dev = mpi->ibdev; in mlx5_ib_get_ibdev_from_mpi()
146 static int get_port_state(struct ib_device *ibdev, in get_port_state() argument
154 ret = ibdev->ops.query_port(ibdev, port_num, &attr); in get_port_state()
195 struct mlx5_ib_dev *ibdev; in mlx5_netdev_event() local
197 ibdev = roce->dev; in mlx5_netdev_event()
198 mdev = mlx5_ib_get_native_port_mdev(ibdev, port_num, NULL); in mlx5_netdev_event()
205 if (ibdev->is_rep) in mlx5_netdev_event()
232 if (ibdev->is_rep) in mlx5_netdev_event()
233 roce = mlx5_get_rep_roce(ibdev, ndev, &port_num); in mlx5_netdev_event()
237 && ibdev->ib_active) { in mlx5_netdev_event()
241 if (get_port_state(&ibdev->ib_dev, port_num, in mlx5_netdev_event()
249 ibev.device = &ibdev->ib_dev; in mlx5_netdev_event()
267 mlx5_ib_put_native_port_mdev(ibdev, port_num); in mlx5_netdev_event()
274 struct mlx5_ib_dev *ibdev = to_mdev(device); in mlx5_ib_get_netdev() local
278 mdev = mlx5_ib_get_native_port_mdev(ibdev, port_num, NULL); in mlx5_ib_get_netdev()
288 read_lock(&ibdev->port[port_num - 1].roce.netdev_lock); in mlx5_ib_get_netdev()
289 ndev = ibdev->port[port_num - 1].roce.netdev; in mlx5_ib_get_netdev()
292 read_unlock(&ibdev->port[port_num - 1].roce.netdev_lock); in mlx5_ib_get_netdev()
295 mlx5_ib_put_native_port_mdev(ibdev, port_num); in mlx5_ib_get_netdev()
299 struct mlx5_core_dev *mlx5_ib_get_native_port_mdev(struct mlx5_ib_dev *ibdev, in mlx5_ib_get_native_port_mdev() argument
303 enum rdma_link_layer ll = mlx5_ib_port_link_layer(&ibdev->ib_dev, in mlx5_ib_get_native_port_mdev()
309 if (!mlx5_core_mp_enabled(ibdev->mdev) || in mlx5_ib_get_native_port_mdev()
313 return ibdev->mdev; in mlx5_ib_get_native_port_mdev()
319 port = &ibdev->port[ib_port_num - 1]; in mlx5_ib_get_native_port_mdev()
324 mpi = ibdev->port[ib_port_num - 1].mp.mpi; in mlx5_ib_get_native_port_mdev()
338 void mlx5_ib_put_native_port_mdev(struct mlx5_ib_dev *ibdev, u8 port_num) in mlx5_ib_put_native_port_mdev() argument
340 enum rdma_link_layer ll = mlx5_ib_port_link_layer(&ibdev->ib_dev, in mlx5_ib_put_native_port_mdev()
345 if (!mlx5_core_mp_enabled(ibdev->mdev) || ll != IB_LINK_LAYER_ETHERNET) in mlx5_ib_put_native_port_mdev()
348 port = &ibdev->port[port_num - 1]; in mlx5_ib_put_native_port_mdev()
351 mpi = ibdev->port[port_num - 1].mp.mpi; in mlx5_ib_put_native_port_mdev()
654 static int mlx5_get_vport_access_method(struct ib_device *ibdev) in mlx5_get_vport_access_method() argument
656 if (mlx5_use_mad_ifc(to_mdev(ibdev))) in mlx5_get_vport_access_method()
659 if (mlx5_ib_port_link_layer(ibdev, 1) == in mlx5_get_vport_access_method()
711 static int mlx5_query_system_image_guid(struct ib_device *ibdev, in mlx5_query_system_image_guid() argument
714 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_query_system_image_guid()
719 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_query_system_image_guid()
721 return mlx5_query_mad_ifc_system_image_guid(ibdev, in mlx5_query_system_image_guid()
743 static int mlx5_query_max_pkeys(struct ib_device *ibdev, in mlx5_query_max_pkeys() argument
746 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_query_max_pkeys()
749 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_query_max_pkeys()
751 return mlx5_query_mad_ifc_max_pkeys(ibdev, max_pkeys); in mlx5_query_max_pkeys()
764 static int mlx5_query_vendor_id(struct ib_device *ibdev, in mlx5_query_vendor_id() argument
767 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_query_vendor_id()
769 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_query_vendor_id()
771 return mlx5_query_mad_ifc_vendor_id(ibdev, vendor_id); in mlx5_query_vendor_id()
828 static int mlx5_ib_query_device(struct ib_device *ibdev, in mlx5_ib_query_device() argument
832 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_query_device()
854 err = mlx5_query_system_image_guid(ibdev, in mlx5_ib_query_device()
859 err = mlx5_query_max_pkeys(ibdev, &props->max_pkeys); in mlx5_ib_query_device()
863 err = mlx5_query_vendor_id(ibdev, &props->vendor_id); in mlx5_ib_query_device()
1037 if (mlx5_ib_port_link_layer(ibdev, 1) == in mlx5_ib_query_device()
1213 static void translate_active_width(struct ib_device *ibdev, u8 active_width, in translate_active_width() argument
1216 struct mlx5_ib_dev *dev = to_mdev(ibdev); in translate_active_width()
1271 static int translate_max_vl_num(struct ib_device *ibdev, u8 vl_hw_cap, in translate_max_vl_num() argument
1298 static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port, in mlx5_query_hca_port() argument
1301 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_query_hca_port()
1344 translate_active_width(ibdev, ib_link_width_oper, &props->active_width); in mlx5_query_hca_port()
1362 err = translate_max_vl_num(ibdev, vl_hw_cap, in mlx5_query_hca_port()
1369 int mlx5_ib_query_port(struct ib_device *ibdev, u8 port, in mlx5_ib_query_port() argument
1375 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_ib_query_port()
1377 ret = mlx5_query_mad_ifc_port(ibdev, port, props); in mlx5_ib_query_port()
1381 ret = mlx5_query_hca_port(ibdev, port, props); in mlx5_ib_query_port()
1385 ret = mlx5_query_port_roce(ibdev, port, props); in mlx5_ib_query_port()
1393 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_query_port()
1414 static int mlx5_ib_rep_query_port(struct ib_device *ibdev, u8 port, in mlx5_ib_rep_query_port() argument
1422 ret = mlx5_query_port_roce(ibdev, port, props); in mlx5_ib_rep_query_port()
1432 static int mlx5_ib_query_gid(struct ib_device *ibdev, u8 port, int index, in mlx5_ib_query_gid() argument
1435 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_query_gid()
1438 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_ib_query_gid()
1440 return mlx5_query_mad_ifc_gids(ibdev, port, index, gid); in mlx5_ib_query_gid()
1451 static int mlx5_query_hca_nic_pkey(struct ib_device *ibdev, u8 port, in mlx5_query_hca_nic_pkey() argument
1454 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_query_hca_nic_pkey()
1478 static int mlx5_ib_query_pkey(struct ib_device *ibdev, u8 port, u16 index, in mlx5_ib_query_pkey() argument
1481 switch (mlx5_get_vport_access_method(ibdev)) { in mlx5_ib_query_pkey()
1483 return mlx5_query_mad_ifc_pkey(ibdev, port, index, pkey); in mlx5_ib_query_pkey()
1487 return mlx5_query_hca_nic_pkey(ibdev, port, index, pkey); in mlx5_ib_query_pkey()
1493 static int mlx5_ib_modify_device(struct ib_device *ibdev, int mask, in mlx5_ib_modify_device() argument
1496 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_modify_device()
1517 memcpy(ibdev->node_desc, props->node_desc, IB_DEVICE_NODE_DESC_MAX); in mlx5_ib_modify_device()
1556 static int mlx5_ib_modify_port(struct ib_device *ibdev, u8 port, int mask, in mlx5_ib_modify_port() argument
1559 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_modify_port()
1565 bool is_ib = (mlx5_ib_port_link_layer(ibdev, port) == in mlx5_ib_modify_port()
1582 err = ib_query_port(ibdev, port, &attr); in mlx5_ib_modify_port()
1771 struct ib_device *ibdev = uctx->device; in mlx5_ib_alloc_ucontext() local
1772 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_alloc_ucontext()
1904 if (mlx5_ib_port_link_layer(ibdev, 1) == IB_LINK_LAYER_ETHERNET) { in mlx5_ib_alloc_ucontext()
2367 struct ib_dm *mlx5_ib_alloc_dm(struct ib_device *ibdev, in mlx5_ib_alloc_dm() argument
2382 mlx5_ib_dbg(to_mdev(ibdev), "alloc_dm req: dm_type=%d user_length=0x%llx log_alignment=%d\n", in mlx5_ib_alloc_dm()
2385 err = check_dm_type_support(to_mdev(ibdev), type); in mlx5_ib_alloc_dm()
2473 struct ib_device *ibdev = ibpd->device; in mlx5_ib_alloc_pd() local
2485 err = mlx5_cmd_exec(to_mdev(ibdev)->mdev, in, sizeof(in), in mlx5_ib_alloc_pd()
2495 mlx5_cmd_dealloc_pd(to_mdev(ibdev)->mdev, pd->pdn, uid); in mlx5_ib_alloc_pd()
3367 static int read_flow_counters(struct ib_device *ibdev, in read_flow_counters() argument
3371 struct mlx5_ib_dev *dev = to_mdev(ibdev); in read_flow_counters()
4471 static void mlx5_ib_handle_internal_error(struct mlx5_ib_dev *ibdev) in mlx5_ib_handle_internal_error() argument
4484 spin_lock_irqsave(&ibdev->reset_flow_resource_lock, flags); in mlx5_ib_handle_internal_error()
4485 list_for_each_entry(mqp, &ibdev->qp_list, qps_list) { in mlx5_ib_handle_internal_error()
4527 spin_unlock_irqrestore(&ibdev->reset_flow_resource_lock, flags); in mlx5_ib_handle_internal_error()
4550 static void handle_general_event(struct mlx5_ib_dev *ibdev, struct mlx5_eqe *eqe, in handle_general_event() argument
4557 if (mlx5_ib_port_link_layer(&ibdev->ib_dev, port) == in handle_general_event()
4559 schedule_work(&ibdev->delay_drop.delay_drop_work); in handle_general_event()
4566 static int handle_port_change(struct mlx5_ib_dev *ibdev, struct mlx5_eqe *eqe, in handle_port_change() argument
4580 if (mlx5_ib_port_link_layer(&ibdev->ib_dev, port) == in handle_port_change()
4594 schedule_work(&ibdev->devr.ports[port - 1].pkey_change_work); in handle_port_change()
4615 struct mlx5_ib_dev *ibdev; in mlx5_ib_handle_event() local
4620 ibdev = mlx5_ib_get_ibdev_from_mpi(work->mpi); in mlx5_ib_handle_event()
4621 if (!ibdev) in mlx5_ib_handle_event()
4624 ibdev = work->dev; in mlx5_ib_handle_event()
4630 mlx5_ib_handle_internal_error(ibdev); in mlx5_ib_handle_event()
4635 if (handle_port_change(ibdev, work->param, &ibev)) in mlx5_ib_handle_event()
4639 handle_general_event(ibdev, work->param, &ibev); in mlx5_ib_handle_event()
4645 ibev.device = &ibdev->ib_dev; in mlx5_ib_handle_event()
4647 if (!rdma_is_port_valid(&ibdev->ib_dev, ibev.element.port_num)) { in mlx5_ib_handle_event()
4648 mlx5_ib_warn(ibdev, "warning: event on port %d\n", ibev.element.port_num); in mlx5_ib_handle_event()
4652 if (ibdev->ib_active) in mlx5_ib_handle_event()
4656 ibdev->ib_active = false; in mlx5_ib_handle_event()
4936 struct ib_device *ibdev; in create_dev_resources() local
4942 ibdev = &dev->ib_dev; in create_dev_resources()
4946 devr->p0 = rdma_zalloc_drv_obj(ibdev, ib_pd); in create_dev_resources()
4950 devr->p0->device = ibdev; in create_dev_resources()
4958 devr->c0 = rdma_zalloc_drv_obj(ibdev, ib_cq); in create_dev_resources()
5000 devr->s0 = rdma_zalloc_drv_obj(ibdev, ib_srq); in create_dev_resources()
5024 devr->s1 = rdma_zalloc_drv_obj(ibdev, ib_srq); in create_dev_resources()
5091 static u32 get_core_cap_flags(struct ib_device *ibdev, in get_core_cap_flags() argument
5094 struct mlx5_ib_dev *dev = to_mdev(ibdev); in get_core_cap_flags()
5095 enum rdma_link_layer ll = mlx5_ib_port_link_layer(ibdev, 1); in get_core_cap_flags()
5125 static int mlx5_port_immutable(struct ib_device *ibdev, u8 port_num, in mlx5_port_immutable() argument
5129 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_port_immutable()
5130 enum rdma_link_layer ll = mlx5_ib_port_link_layer(ibdev, port_num); in mlx5_port_immutable()
5134 err = ib_query_port(ibdev, port_num, &attr); in mlx5_port_immutable()
5147 immutable->core_cap_flags = get_core_cap_flags(ibdev, &rep); in mlx5_port_immutable()
5154 static int mlx5_port_rep_immutable(struct ib_device *ibdev, u8 port_num, in mlx5_port_rep_immutable() argument
5162 err = ib_query_port(ibdev, port_num, &attr); in mlx5_port_rep_immutable()
5173 static void get_dev_fw_str(struct ib_device *ibdev, char *str) in get_dev_fw_str() argument
5176 container_of(ibdev, struct mlx5_ib_dev, ib_dev); in get_dev_fw_str()
5510 static struct rdma_hw_stats *mlx5_ib_alloc_hw_stats(struct ib_device *ibdev, in mlx5_ib_alloc_hw_stats() argument
5513 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_alloc_hw_stats()
5583 static int mlx5_ib_get_hw_stats(struct ib_device *ibdev, in mlx5_ib_get_hw_stats() argument
5587 struct mlx5_ib_dev *dev = to_mdev(ibdev); in mlx5_ib_get_hw_stats()
5833 static void mlx5_ib_unbind_slave_port(struct mlx5_ib_dev *ibdev, in mlx5_ib_unbind_slave_port() argument
5837 struct mlx5_ib_port *port = &ibdev->port[port_num]; in mlx5_ib_unbind_slave_port()
5844 mlx5_ib_cleanup_cong_debugfs(ibdev, port_num); in mlx5_ib_unbind_slave_port()
5847 if (!mpi->ibdev) { in mlx5_ib_unbind_slave_port()
5852 mpi->ibdev = NULL; in mlx5_ib_unbind_slave_port()
5858 mlx5_remove_netdev_notifier(ibdev, port_num); in mlx5_ib_unbind_slave_port()
5882 mlx5_ib_dbg(ibdev, "unaffiliated port %d\n", port_num + 1); in mlx5_ib_unbind_slave_port()
5887 mlx5_ib_err(ibdev, "Failed to unaffiliate port %u\n", in mlx5_ib_unbind_slave_port()
5890 ibdev->port[port_num].roce.last_port_state = IB_PORT_DOWN; in mlx5_ib_unbind_slave_port()
5893 static bool mlx5_ib_bind_slave_port(struct mlx5_ib_dev *ibdev, in mlx5_ib_bind_slave_port() argument
5901 spin_lock(&ibdev->port[port_num].mp.mpi_lock); in mlx5_ib_bind_slave_port()
5902 if (ibdev->port[port_num].mp.mpi) { in mlx5_ib_bind_slave_port()
5903 mlx5_ib_dbg(ibdev, "port %d already affiliated.\n", in mlx5_ib_bind_slave_port()
5905 spin_unlock(&ibdev->port[port_num].mp.mpi_lock); in mlx5_ib_bind_slave_port()
5909 ibdev->port[port_num].mp.mpi = mpi; in mlx5_ib_bind_slave_port()
5910 mpi->ibdev = ibdev; in mlx5_ib_bind_slave_port()
5912 spin_unlock(&ibdev->port[port_num].mp.mpi_lock); in mlx5_ib_bind_slave_port()
5914 err = mlx5_nic_vport_affiliate_multiport(ibdev->mdev, mpi->mdev); in mlx5_ib_bind_slave_port()
5918 err = get_port_caps(ibdev, mlx5_core_native_port_num(mpi->mdev)); in mlx5_ib_bind_slave_port()
5922 err = mlx5_add_netdev_notifier(ibdev, port_num); in mlx5_ib_bind_slave_port()
5924 mlx5_ib_err(ibdev, "failed adding netdev notifier for port %u\n", in mlx5_ib_bind_slave_port()
5932 mlx5_ib_init_cong_debugfs(ibdev, port_num); in mlx5_ib_bind_slave_port()
5937 mlx5_ib_unbind_slave_port(ibdev, mpi); in mlx5_ib_bind_slave_port()
5979 mpi->ibdev = dev; in mlx5_ib_init_multiport_master()
6952 if (mpi->ibdev) in mlx5_ib_remove()
6953 mlx5_ib_unbind_slave_port(mpi->ibdev, mpi); in mlx5_ib_remove()