Lines Matching refs:us_ibdev

104 static void usnic_ib_qp_grp_modify_active_to_err(struct usnic_ib_dev *us_ibdev)
111 BUG_ON(!mutex_is_locked(&us_ibdev->usdev_lock));
113 list_for_each_entry(ctx, &us_ibdev->ctx_list, link) {
135 static void usnic_ib_handle_usdev_event(struct usnic_ib_dev *us_ibdev,
143 mutex_lock(&us_ibdev->usdev_lock);
144 netdev = us_ibdev->netdev;
147 usnic_info("PF Reset on %s\n", dev_name(&us_ibdev->ib_dev.dev));
148 usnic_ib_qp_grp_modify_active_to_err(us_ibdev);
150 ib_event.device = &us_ibdev->ib_dev;
157 if (!us_ibdev->ufdev->link_up &&
159 usnic_fwd_carrier_up(us_ibdev->ufdev);
161 dev_name(&us_ibdev->ib_dev.dev));
163 ib_event.device = &us_ibdev->ib_dev;
166 } else if (us_ibdev->ufdev->link_up &&
168 usnic_fwd_carrier_down(us_ibdev->ufdev);
170 dev_name(&us_ibdev->ib_dev.dev));
171 usnic_ib_qp_grp_modify_active_to_err(us_ibdev);
173 ib_event.device = &us_ibdev->ib_dev;
179 dev_name(&us_ibdev->ib_dev.dev));
183 if (!memcmp(us_ibdev->ufdev->mac, netdev->dev_addr,
184 sizeof(us_ibdev->ufdev->mac))) {
186 dev_name(&us_ibdev->ib_dev.dev));
189 dev_name(&us_ibdev->ib_dev.dev),
190 us_ibdev->ufdev->mac,
192 usnic_fwd_set_mac(us_ibdev->ufdev, netdev->dev_addr);
193 usnic_ib_qp_grp_modify_active_to_err(us_ibdev);
195 ib_event.device = &us_ibdev->ib_dev;
202 if (us_ibdev->ufdev->mtu != netdev->mtu) {
204 dev_name(&us_ibdev->ib_dev.dev),
205 us_ibdev->ufdev->mtu, netdev->mtu);
206 usnic_fwd_set_mtu(us_ibdev->ufdev, netdev->mtu);
207 usnic_ib_qp_grp_modify_active_to_err(us_ibdev);
210 dev_name(&us_ibdev->ib_dev.dev));
216 dev_name(&us_ibdev->ib_dev.dev));
218 mutex_unlock(&us_ibdev->usdev_lock);
224 struct usnic_ib_dev *us_ibdev;
233 us_ibdev = container_of(ibdev, struct usnic_ib_dev, ib_dev);
234 usnic_ib_handle_usdev_event(us_ibdev, event);
245 static int usnic_ib_handle_inet_event(struct usnic_ib_dev *us_ibdev,
251 mutex_lock(&us_ibdev->usdev_lock);
257 usnic_fwd_del_ipaddr(us_ibdev->ufdev);
258 usnic_ib_qp_grp_modify_active_to_err(us_ibdev);
260 ib_event.device = &us_ibdev->ib_dev;
265 usnic_fwd_add_ipaddr(us_ibdev->ufdev, ifa->ifa_address);
268 &us_ibdev->ufdev->inaddr);
270 ib_event.device = &us_ibdev->ib_dev;
277 dev_name(&us_ibdev->ib_dev.dev));
279 mutex_unlock(&us_ibdev->usdev_lock);
287 struct usnic_ib_dev *us_ibdev;
296 us_ibdev = container_of(ibdev, struct usnic_ib_dev, ib_dev);
297 usnic_ib_handle_inet_event(us_ibdev, event, ptr);
325 struct usnic_ib_dev *us_ibdev =
329 mutex_lock(&us_ibdev->usdev_lock);
330 us_ibdev->netdev->ethtool_ops->get_drvinfo(us_ibdev->netdev, &info);
331 mutex_unlock(&us_ibdev->usdev_lock);
370 struct usnic_ib_dev *us_ibdev;
379 us_ibdev = ib_alloc_device(usnic_ib_dev, ib_dev);
380 if (!us_ibdev) {
386 us_ibdev->ufdev = usnic_fwd_dev_alloc(dev);
387 if (!us_ibdev->ufdev) {
392 mutex_init(&us_ibdev->usdev_lock);
393 INIT_LIST_HEAD(&us_ibdev->vf_dev_list);
394 INIT_LIST_HEAD(&us_ibdev->ctx_list);
396 us_ibdev->pdev = dev;
397 us_ibdev->netdev = pci_get_drvdata(dev);
398 us_ibdev->ib_dev.node_type = RDMA_NODE_USNIC_UDP;
399 us_ibdev->ib_dev.phys_port_cnt = USNIC_IB_PORT_CNT;
400 us_ibdev->ib_dev.num_comp_vectors = USNIC_IB_NUM_COMP_VECTORS;
401 us_ibdev->ib_dev.dev.parent = &dev->dev;
403 ib_set_device_ops(&us_ibdev->ib_dev, &usnic_dev_ops);
405 ret = ib_device_set_netdev(&us_ibdev->ib_dev, us_ibdev->netdev, 1);
410 if (ib_register_device(&us_ibdev->ib_dev, "usnic_%d", &dev->dev))
413 usnic_fwd_set_mtu(us_ibdev->ufdev, us_ibdev->netdev->mtu);
414 usnic_fwd_set_mac(us_ibdev->ufdev, us_ibdev->netdev->dev_addr);
415 if (netif_carrier_ok(us_ibdev->netdev))
416 usnic_fwd_carrier_up(us_ibdev->ufdev);
425 usnic_fwd_add_ipaddr(us_ibdev->ufdev, ifa->ifa_address);
429 usnic_mac_ip_to_gid(us_ibdev->netdev->perm_addr,
430 us_ibdev->ufdev->inaddr, &gid.raw[0]);
431 memcpy(&us_ibdev->ib_dev.node_guid, &gid.global.interface_id,
433 kref_init(&us_ibdev->vf_cnt);
436 dev_name(&us_ibdev->ib_dev.dev),
437 netdev_name(us_ibdev->netdev), us_ibdev->ufdev->mac,
438 us_ibdev->ufdev->link_up, us_ibdev->ufdev->mtu);
439 return us_ibdev;
442 usnic_fwd_dev_free(us_ibdev->ufdev);
445 ib_dealloc_device(&us_ibdev->ib_dev);
449 static void usnic_ib_device_remove(struct usnic_ib_dev *us_ibdev)
451 usnic_info("Unregistering %s\n", dev_name(&us_ibdev->ib_dev.dev));
452 usnic_ib_sysfs_unregister_usdev(us_ibdev);
453 usnic_fwd_dev_free(us_ibdev->ufdev);
454 ib_unregister_device(&us_ibdev->ib_dev);
455 ib_dealloc_device(&us_ibdev->ib_dev);
460 struct usnic_ib_dev *us_ibdev, *tmp;
466 list_for_each_entry_safe(us_ibdev, tmp,
468 if (us_ibdev->pdev == dev) {
469 list_del(&us_ibdev->ib_dev_link);
478 usnic_ib_device_remove(us_ibdev);
485 struct usnic_ib_dev *us_ibdev;
495 list_for_each_entry(us_ibdev, &usnic_ib_ibdev_list, ib_dev_link) {
496 if (us_ibdev->pdev == parent_pci) {
497 kref_get(&us_ibdev->vf_cnt);
502 us_ibdev = usnic_ib_device_add(parent_pci);
503 if (IS_ERR_OR_NULL(us_ibdev)) {
504 us_ibdev = us_ibdev ? us_ibdev : ERR_PTR(-EFAULT);
508 err = usnic_ib_sysfs_register_usdev(us_ibdev);
510 usnic_ib_device_remove(us_ibdev);
511 us_ibdev = ERR_PTR(err);
515 list_add(&us_ibdev->ib_dev_link, &usnic_ib_ibdev_list);
518 return us_ibdev;