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