Lines Matching refs:dev

102 	struct pvrdma_dev *dev =  in pvrdma_get_fw_ver_str()  local
105 (int) (dev->dsr->caps.fw_ver >> 32), in pvrdma_get_fw_ver_str()
106 (int) (dev->dsr->caps.fw_ver >> 16) & 0xffff, in pvrdma_get_fw_ver_str()
107 (int) dev->dsr->caps.fw_ver & 0xffff); in pvrdma_get_fw_ver_str()
110 static int pvrdma_init_device(struct pvrdma_dev *dev) in pvrdma_init_device() argument
113 spin_lock_init(&dev->cmd_lock); in pvrdma_init_device()
114 sema_init(&dev->cmd_sema, 1); in pvrdma_init_device()
115 atomic_set(&dev->num_qps, 0); in pvrdma_init_device()
116 atomic_set(&dev->num_srqs, 0); in pvrdma_init_device()
117 atomic_set(&dev->num_cqs, 0); in pvrdma_init_device()
118 atomic_set(&dev->num_pds, 0); in pvrdma_init_device()
119 atomic_set(&dev->num_ahs, 0); in pvrdma_init_device()
127 struct pvrdma_dev *dev = to_vdev(ibdev); in pvrdma_port_immutable() local
131 if (dev->dsr->caps.gid_types == PVRDMA_GID_TYPE_FLAG_ROCE_V1) in pvrdma_port_immutable()
133 else if (dev->dsr->caps.gid_types == PVRDMA_GID_TYPE_FLAG_ROCE_V2) in pvrdma_port_immutable()
201 static int pvrdma_register_device(struct pvrdma_dev *dev) in pvrdma_register_device() argument
205 dev->ib_dev.node_guid = dev->dsr->caps.node_guid; in pvrdma_register_device()
206 dev->sys_image_guid = dev->dsr->caps.sys_image_guid; in pvrdma_register_device()
207 dev->flags = 0; in pvrdma_register_device()
208 dev->ib_dev.num_comp_vectors = 1; in pvrdma_register_device()
209 dev->ib_dev.dev.parent = &dev->pdev->dev; in pvrdma_register_device()
211 dev->ib_dev.node_type = RDMA_NODE_IB_CA; in pvrdma_register_device()
212 dev->ib_dev.phys_port_cnt = dev->dsr->caps.phys_port_cnt; in pvrdma_register_device()
214 ib_set_device_ops(&dev->ib_dev, &pvrdma_dev_ops); in pvrdma_register_device()
216 mutex_init(&dev->port_mutex); in pvrdma_register_device()
217 spin_lock_init(&dev->desc_lock); in pvrdma_register_device()
219 dev->cq_tbl = kcalloc(dev->dsr->caps.max_cq, sizeof(struct pvrdma_cq *), in pvrdma_register_device()
221 if (!dev->cq_tbl) in pvrdma_register_device()
223 spin_lock_init(&dev->cq_tbl_lock); in pvrdma_register_device()
225 dev->qp_tbl = kcalloc(dev->dsr->caps.max_qp, sizeof(struct pvrdma_qp *), in pvrdma_register_device()
227 if (!dev->qp_tbl) in pvrdma_register_device()
229 spin_lock_init(&dev->qp_tbl_lock); in pvrdma_register_device()
232 if (dev->dsr->caps.max_srq) { in pvrdma_register_device()
233 ib_set_device_ops(&dev->ib_dev, &pvrdma_dev_srq_ops); in pvrdma_register_device()
235 dev->srq_tbl = kcalloc(dev->dsr->caps.max_srq, in pvrdma_register_device()
238 if (!dev->srq_tbl) in pvrdma_register_device()
241 ret = ib_device_set_netdev(&dev->ib_dev, dev->netdev, 1); in pvrdma_register_device()
244 spin_lock_init(&dev->srq_tbl_lock); in pvrdma_register_device()
246 ret = ib_register_device(&dev->ib_dev, "vmw_pvrdma%d", &dev->pdev->dev); in pvrdma_register_device()
250 dev->ib_active = true; in pvrdma_register_device()
255 kfree(dev->srq_tbl); in pvrdma_register_device()
257 kfree(dev->qp_tbl); in pvrdma_register_device()
259 kfree(dev->cq_tbl); in pvrdma_register_device()
267 struct pvrdma_dev *dev = dev_id; in pvrdma_intr0_handler() local
269 dev_dbg(&dev->pdev->dev, "interrupt 0 (response) handler\n"); in pvrdma_intr0_handler()
271 if (!dev->pdev->msix_enabled) { in pvrdma_intr0_handler()
273 icr = pvrdma_read_reg(dev, PVRDMA_REG_ICR); in pvrdma_intr0_handler()
279 complete(&dev->cmd_done); in pvrdma_intr0_handler()
284 static void pvrdma_qp_event(struct pvrdma_dev *dev, u32 qpn, int type) in pvrdma_qp_event() argument
289 spin_lock_irqsave(&dev->qp_tbl_lock, flags); in pvrdma_qp_event()
290 qp = dev->qp_tbl[qpn % dev->dsr->caps.max_qp]; in pvrdma_qp_event()
293 spin_unlock_irqrestore(&dev->qp_tbl_lock, flags); in pvrdma_qp_event()
310 static void pvrdma_cq_event(struct pvrdma_dev *dev, u32 cqn, int type) in pvrdma_cq_event() argument
315 spin_lock_irqsave(&dev->cq_tbl_lock, flags); in pvrdma_cq_event()
316 cq = dev->cq_tbl[cqn % dev->dsr->caps.max_cq]; in pvrdma_cq_event()
319 spin_unlock_irqrestore(&dev->cq_tbl_lock, flags); in pvrdma_cq_event()
336 static void pvrdma_srq_event(struct pvrdma_dev *dev, u32 srqn, int type) in pvrdma_srq_event() argument
341 spin_lock_irqsave(&dev->srq_tbl_lock, flags); in pvrdma_srq_event()
342 if (dev->srq_tbl) in pvrdma_srq_event()
343 srq = dev->srq_tbl[srqn % dev->dsr->caps.max_srq]; in pvrdma_srq_event()
348 spin_unlock_irqrestore(&dev->srq_tbl_lock, flags); in pvrdma_srq_event()
365 static void pvrdma_dispatch_event(struct pvrdma_dev *dev, int port, in pvrdma_dispatch_event() argument
371 ib_event.device = &dev->ib_dev; in pvrdma_dispatch_event()
377 static void pvrdma_dev_event(struct pvrdma_dev *dev, u8 port, int type) in pvrdma_dev_event() argument
379 if (port < 1 || port > dev->dsr->caps.phys_port_cnt) { in pvrdma_dev_event()
380 dev_warn(&dev->pdev->dev, "event on port %d\n", port); in pvrdma_dev_event()
384 pvrdma_dispatch_event(dev, port, type); in pvrdma_dev_event()
387 static inline struct pvrdma_eqe *get_eqe(struct pvrdma_dev *dev, unsigned int i) in get_eqe() argument
390 &dev->async_pdir, in get_eqe()
397 struct pvrdma_dev *dev = dev_id; in pvrdma_intr1_handler() local
398 struct pvrdma_ring *ring = &dev->async_ring_state->rx; in pvrdma_intr1_handler()
399 int ring_slots = (dev->dsr->async_ring_pages.num_pages - 1) * in pvrdma_intr1_handler()
403 dev_dbg(&dev->pdev->dev, "interrupt 1 (async event) handler\n"); in pvrdma_intr1_handler()
409 if (!dev->ib_active) in pvrdma_intr1_handler()
415 eqe = get_eqe(dev, head); in pvrdma_intr1_handler()
426 pvrdma_qp_event(dev, eqe->info, eqe->type); in pvrdma_intr1_handler()
430 pvrdma_cq_event(dev, eqe->info, eqe->type); in pvrdma_intr1_handler()
435 pvrdma_srq_event(dev, eqe->info, eqe->type); in pvrdma_intr1_handler()
445 pvrdma_dev_event(dev, eqe->info, eqe->type); in pvrdma_intr1_handler()
449 pvrdma_dev_event(dev, 1, eqe->type); in pvrdma_intr1_handler()
462 static inline struct pvrdma_cqne *get_cqne(struct pvrdma_dev *dev, in get_cqne() argument
466 &dev->cq_pdir, in get_cqne()
473 struct pvrdma_dev *dev = dev_id; in pvrdma_intrx_handler() local
474 struct pvrdma_ring *ring = &dev->cq_ring_state->rx; in pvrdma_intrx_handler()
475 int ring_slots = (dev->dsr->cq_ring_pages.num_pages - 1) * PAGE_SIZE / in pvrdma_intrx_handler()
479 dev_dbg(&dev->pdev->dev, "interrupt x (completion) handler\n"); in pvrdma_intrx_handler()
485 cqne = get_cqne(dev, head); in pvrdma_intrx_handler()
486 spin_lock(&dev->cq_tbl_lock); in pvrdma_intrx_handler()
487 cq = dev->cq_tbl[cqne->info % dev->dsr->caps.max_cq]; in pvrdma_intrx_handler()
490 spin_unlock(&dev->cq_tbl_lock); in pvrdma_intrx_handler()
504 static void pvrdma_free_irq(struct pvrdma_dev *dev) in pvrdma_free_irq() argument
508 dev_dbg(&dev->pdev->dev, "freeing interrupts\n"); in pvrdma_free_irq()
509 for (i = 0; i < dev->nr_vectors; i++) in pvrdma_free_irq()
510 free_irq(pci_irq_vector(dev->pdev, i), dev); in pvrdma_free_irq()
513 static void pvrdma_enable_intrs(struct pvrdma_dev *dev) in pvrdma_enable_intrs() argument
515 dev_dbg(&dev->pdev->dev, "enable interrupts\n"); in pvrdma_enable_intrs()
516 pvrdma_write_reg(dev, PVRDMA_REG_IMR, 0); in pvrdma_enable_intrs()
519 static void pvrdma_disable_intrs(struct pvrdma_dev *dev) in pvrdma_disable_intrs() argument
521 dev_dbg(&dev->pdev->dev, "disable interrupts\n"); in pvrdma_disable_intrs()
522 pvrdma_write_reg(dev, PVRDMA_REG_IMR, ~0); in pvrdma_disable_intrs()
525 static int pvrdma_alloc_intrs(struct pvrdma_dev *dev) in pvrdma_alloc_intrs() argument
527 struct pci_dev *pdev = dev->pdev; in pvrdma_alloc_intrs()
538 dev->nr_vectors = ret; in pvrdma_alloc_intrs()
540 ret = request_irq(pci_irq_vector(dev->pdev, 0), pvrdma_intr0_handler, in pvrdma_alloc_intrs()
541 pdev->msix_enabled ? 0 : IRQF_SHARED, DRV_NAME, dev); in pvrdma_alloc_intrs()
543 dev_err(&dev->pdev->dev, in pvrdma_alloc_intrs()
548 for (i = 1; i < dev->nr_vectors; i++) { in pvrdma_alloc_intrs()
549 ret = request_irq(pci_irq_vector(dev->pdev, i), in pvrdma_alloc_intrs()
552 0, DRV_NAME, dev); in pvrdma_alloc_intrs()
554 dev_err(&dev->pdev->dev, in pvrdma_alloc_intrs()
564 free_irq(pci_irq_vector(dev->pdev, i), dev); in pvrdma_alloc_intrs()
570 static void pvrdma_free_slots(struct pvrdma_dev *dev) in pvrdma_free_slots() argument
572 struct pci_dev *pdev = dev->pdev; in pvrdma_free_slots()
574 if (dev->resp_slot) in pvrdma_free_slots()
575 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->resp_slot, in pvrdma_free_slots()
576 dev->dsr->resp_slot_dma); in pvrdma_free_slots()
577 if (dev->cmd_slot) in pvrdma_free_slots()
578 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->cmd_slot, in pvrdma_free_slots()
579 dev->dsr->cmd_slot_dma); in pvrdma_free_slots()
582 static int pvrdma_add_gid_at_index(struct pvrdma_dev *dev, in pvrdma_add_gid_at_index() argument
591 if (!dev->sgid_tbl) { in pvrdma_add_gid_at_index()
592 dev_warn(&dev->pdev->dev, "sgid table not initialized\n"); in pvrdma_add_gid_at_index()
604 ret = pvrdma_cmd_post(dev, &req, NULL, 0); in pvrdma_add_gid_at_index()
606 dev_warn(&dev->pdev->dev, in pvrdma_add_gid_at_index()
610 memcpy(&dev->sgid_tbl[index], gid, sizeof(*gid)); in pvrdma_add_gid_at_index()
616 struct pvrdma_dev *dev = to_vdev(attr->device); in pvrdma_add_gid() local
618 return pvrdma_add_gid_at_index(dev, &attr->gid, in pvrdma_add_gid()
623 static int pvrdma_del_gid_at_index(struct pvrdma_dev *dev, int index) in pvrdma_del_gid_at_index() argument
630 if (!dev->sgid_tbl) { in pvrdma_del_gid_at_index()
631 dev_warn(&dev->pdev->dev, "sgid table not initialized\n"); in pvrdma_del_gid_at_index()
637 memcpy(cmd_dest->dest_gid, &dev->sgid_tbl[index], 16); in pvrdma_del_gid_at_index()
640 ret = pvrdma_cmd_post(dev, &req, NULL, 0); in pvrdma_del_gid_at_index()
642 dev_warn(&dev->pdev->dev, in pvrdma_del_gid_at_index()
646 memset(&dev->sgid_tbl[index], 0, 16); in pvrdma_del_gid_at_index()
652 struct pvrdma_dev *dev = to_vdev(attr->device); in pvrdma_del_gid() local
654 dev_dbg(&dev->pdev->dev, "removing gid at index %u from %s", in pvrdma_del_gid()
655 attr->index, dev->netdev->name); in pvrdma_del_gid()
657 return pvrdma_del_gid_at_index(dev, attr->index); in pvrdma_del_gid()
660 static void pvrdma_netdevice_event_handle(struct pvrdma_dev *dev, in pvrdma_netdevice_event_handle() argument
670 pvrdma_dispatch_event(dev, 1, IB_EVENT_PORT_ERR); in pvrdma_netdevice_event_handle()
673 pvrdma_write_reg(dev, PVRDMA_REG_CTL, in pvrdma_netdevice_event_handle()
678 if (pvrdma_read_reg(dev, PVRDMA_REG_ERR)) in pvrdma_netdevice_event_handle()
679 dev_err(&dev->pdev->dev, in pvrdma_netdevice_event_handle()
682 pvrdma_dispatch_event(dev, 1, IB_EVENT_PORT_ACTIVE); in pvrdma_netdevice_event_handle()
685 ib_device_set_netdev(&dev->ib_dev, NULL, 1); in pvrdma_netdevice_event_handle()
686 dev_put(dev->netdev); in pvrdma_netdevice_event_handle()
687 dev->netdev = NULL; in pvrdma_netdevice_event_handle()
691 slot = PCI_SLOT(dev->pdev->devfn); in pvrdma_netdevice_event_handle()
692 pdev_net = pci_get_slot(dev->pdev->bus, in pvrdma_netdevice_event_handle()
694 if ((dev->netdev == NULL) && in pvrdma_netdevice_event_handle()
697 ib_device_set_netdev(&dev->ib_dev, ndev, 1); in pvrdma_netdevice_event_handle()
698 dev->netdev = ndev; in pvrdma_netdevice_event_handle()
705 dev_dbg(&dev->pdev->dev, "ignore netdevice event %ld on %s\n", in pvrdma_netdevice_event_handle()
706 event, dev_name(&dev->ib_dev.dev)); in pvrdma_netdevice_event_handle()
714 struct pvrdma_dev *dev; in pvrdma_netdevice_event_work() local
719 list_for_each_entry(dev, &pvrdma_device_list, device_link) { in pvrdma_netdevice_event_work()
721 (dev->netdev == netdev_work->event_netdev)) { in pvrdma_netdevice_event_work()
722 pvrdma_netdevice_event_handle(dev, in pvrdma_netdevice_event_work()
755 struct pvrdma_dev *dev; in pvrdma_pci_probe() local
761 dev_dbg(&pdev->dev, "initializing driver %s\n", pci_name(pdev)); in pvrdma_pci_probe()
764 dev = ib_alloc_device(pvrdma_dev, ib_dev); in pvrdma_pci_probe()
765 if (!dev) { in pvrdma_pci_probe()
766 dev_err(&pdev->dev, "failed to allocate IB device\n"); in pvrdma_pci_probe()
771 list_add(&dev->device_link, &pvrdma_device_list); in pvrdma_pci_probe()
774 ret = pvrdma_init_device(dev); in pvrdma_pci_probe()
778 dev->pdev = pdev; in pvrdma_pci_probe()
779 pci_set_drvdata(pdev, dev); in pvrdma_pci_probe()
783 dev_err(&pdev->dev, "cannot enable PCI device\n"); in pvrdma_pci_probe()
787 dev_dbg(&pdev->dev, "PCI resource flags BAR0 %#lx\n", in pvrdma_pci_probe()
789 dev_dbg(&pdev->dev, "PCI resource len %#llx\n", in pvrdma_pci_probe()
791 dev_dbg(&pdev->dev, "PCI resource start %#llx\n", in pvrdma_pci_probe()
793 dev_dbg(&pdev->dev, "PCI resource flags BAR1 %#lx\n", in pvrdma_pci_probe()
795 dev_dbg(&pdev->dev, "PCI resource len %#llx\n", in pvrdma_pci_probe()
797 dev_dbg(&pdev->dev, "PCI resource start %#llx\n", in pvrdma_pci_probe()
802 dev_err(&pdev->dev, "PCI BAR region not MMIO\n"); in pvrdma_pci_probe()
809 dev_err(&pdev->dev, "cannot request PCI resources\n"); in pvrdma_pci_probe()
814 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); in pvrdma_pci_probe()
816 dev_err(&pdev->dev, "dma_set_mask failed\n"); in pvrdma_pci_probe()
819 dma_set_max_seg_size(&pdev->dev, UINT_MAX); in pvrdma_pci_probe()
823 start = pci_resource_start(dev->pdev, PVRDMA_PCI_RESOURCE_REG); in pvrdma_pci_probe()
824 len = pci_resource_len(dev->pdev, PVRDMA_PCI_RESOURCE_REG); in pvrdma_pci_probe()
825 dev->regs = ioremap(start, len); in pvrdma_pci_probe()
826 if (!dev->regs) { in pvrdma_pci_probe()
827 dev_err(&pdev->dev, "register mapping failed\n"); in pvrdma_pci_probe()
833 dev->driver_uar.index = 0; in pvrdma_pci_probe()
834 dev->driver_uar.pfn = in pvrdma_pci_probe()
835 pci_resource_start(dev->pdev, PVRDMA_PCI_RESOURCE_UAR) >> in pvrdma_pci_probe()
837 dev->driver_uar.map = in pvrdma_pci_probe()
838 ioremap(dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE); in pvrdma_pci_probe()
839 if (!dev->driver_uar.map) { in pvrdma_pci_probe()
840 dev_err(&pdev->dev, "failed to remap UAR pages\n"); in pvrdma_pci_probe()
845 dev->dsr_version = pvrdma_read_reg(dev, PVRDMA_REG_VERSION); in pvrdma_pci_probe()
846 dev_info(&pdev->dev, "device version %d, driver version %d\n", in pvrdma_pci_probe()
847 dev->dsr_version, PVRDMA_VERSION); in pvrdma_pci_probe()
849 dev->dsr = dma_alloc_coherent(&pdev->dev, sizeof(*dev->dsr), in pvrdma_pci_probe()
850 &dev->dsrbase, GFP_KERNEL); in pvrdma_pci_probe()
851 if (!dev->dsr) { in pvrdma_pci_probe()
852 dev_err(&pdev->dev, "failed to allocate shared region\n"); in pvrdma_pci_probe()
858 dev->dsr->driver_version = PVRDMA_VERSION; in pvrdma_pci_probe()
859 dev->dsr->gos_info.gos_bits = sizeof(void *) == 4 ? in pvrdma_pci_probe()
862 dev->dsr->gos_info.gos_type = PVRDMA_GOS_TYPE_LINUX; in pvrdma_pci_probe()
863 dev->dsr->gos_info.gos_ver = 1; in pvrdma_pci_probe()
865 if (dev->dsr_version < PVRDMA_PPN64_VERSION) in pvrdma_pci_probe()
866 dev->dsr->uar_pfn = dev->driver_uar.pfn; in pvrdma_pci_probe()
868 dev->dsr->uar_pfn64 = dev->driver_uar.pfn; in pvrdma_pci_probe()
871 dev->cmd_slot = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, in pvrdma_pci_probe()
873 if (!dev->cmd_slot) { in pvrdma_pci_probe()
878 dev->dsr->cmd_slot_dma = (u64)slot_dma; in pvrdma_pci_probe()
881 dev->resp_slot = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, in pvrdma_pci_probe()
883 if (!dev->resp_slot) { in pvrdma_pci_probe()
888 dev->dsr->resp_slot_dma = (u64)slot_dma; in pvrdma_pci_probe()
891 dev->dsr->async_ring_pages.num_pages = PVRDMA_NUM_RING_PAGES; in pvrdma_pci_probe()
892 ret = pvrdma_page_dir_init(dev, &dev->async_pdir, in pvrdma_pci_probe()
893 dev->dsr->async_ring_pages.num_pages, true); in pvrdma_pci_probe()
896 dev->async_ring_state = dev->async_pdir.pages[0]; in pvrdma_pci_probe()
897 dev->dsr->async_ring_pages.pdir_dma = dev->async_pdir.dir_dma; in pvrdma_pci_probe()
900 dev->dsr->cq_ring_pages.num_pages = PVRDMA_NUM_RING_PAGES; in pvrdma_pci_probe()
901 ret = pvrdma_page_dir_init(dev, &dev->cq_pdir, in pvrdma_pci_probe()
902 dev->dsr->cq_ring_pages.num_pages, true); in pvrdma_pci_probe()
905 dev->cq_ring_state = dev->cq_pdir.pages[0]; in pvrdma_pci_probe()
906 dev->dsr->cq_ring_pages.pdir_dma = dev->cq_pdir.dir_dma; in pvrdma_pci_probe()
914 pvrdma_write_reg(dev, PVRDMA_REG_DSRLOW, (u32)dev->dsrbase); in pvrdma_pci_probe()
915 pvrdma_write_reg(dev, PVRDMA_REG_DSRHIGH, in pvrdma_pci_probe()
916 (u32)((u64)(dev->dsrbase) >> 32)); in pvrdma_pci_probe()
922 if (!PVRDMA_SUPPORTED(dev)) { in pvrdma_pci_probe()
923 dev_err(&pdev->dev, "driver needs RoCE v1 or v2 support\n"); in pvrdma_pci_probe()
931 dev_err(&pdev->dev, "failed to find paired net device\n"); in pvrdma_pci_probe()
938 dev_err(&pdev->dev, "failed to find paired vmxnet3 device\n"); in pvrdma_pci_probe()
944 dev->netdev = pci_get_drvdata(pdev_net); in pvrdma_pci_probe()
946 if (!dev->netdev) { in pvrdma_pci_probe()
947 dev_err(&pdev->dev, "failed to get vmxnet3 device\n"); in pvrdma_pci_probe()
951 dev_hold(dev->netdev); in pvrdma_pci_probe()
953 dev_info(&pdev->dev, "paired device to %s\n", dev->netdev->name); in pvrdma_pci_probe()
956 ret = pvrdma_alloc_intrs(dev); in pvrdma_pci_probe()
958 dev_err(&pdev->dev, "failed to allocate interrupts\n"); in pvrdma_pci_probe()
964 ret = pvrdma_uar_table_init(dev); in pvrdma_pci_probe()
966 dev_err(&pdev->dev, "failed to allocate UAR table\n"); in pvrdma_pci_probe()
972 dev->sgid_tbl = kcalloc(dev->dsr->caps.gid_tbl_len, in pvrdma_pci_probe()
974 if (!dev->sgid_tbl) { in pvrdma_pci_probe()
978 dev_dbg(&pdev->dev, "gid table len %d\n", dev->dsr->caps.gid_tbl_len); in pvrdma_pci_probe()
980 pvrdma_enable_intrs(dev); in pvrdma_pci_probe()
983 pvrdma_write_reg(dev, PVRDMA_REG_CTL, PVRDMA_DEVICE_CTL_ACTIVATE); in pvrdma_pci_probe()
989 ret = pvrdma_read_reg(dev, PVRDMA_REG_ERR); in pvrdma_pci_probe()
991 dev_err(&pdev->dev, "failed to activate device\n"); in pvrdma_pci_probe()
997 ret = pvrdma_register_device(dev); in pvrdma_pci_probe()
999 dev_err(&pdev->dev, "failed to register IB device\n"); in pvrdma_pci_probe()
1003 dev->nb_netdev.notifier_call = pvrdma_netdevice_event; in pvrdma_pci_probe()
1004 ret = register_netdevice_notifier(&dev->nb_netdev); in pvrdma_pci_probe()
1006 dev_err(&pdev->dev, "failed to register netdevice events\n"); in pvrdma_pci_probe()
1010 dev_info(&pdev->dev, "attached to device\n"); in pvrdma_pci_probe()
1014 ib_unregister_device(&dev->ib_dev); in pvrdma_pci_probe()
1016 pvrdma_disable_intrs(dev); in pvrdma_pci_probe()
1017 kfree(dev->sgid_tbl); in pvrdma_pci_probe()
1019 pvrdma_uar_table_cleanup(dev); in pvrdma_pci_probe()
1021 pvrdma_free_irq(dev); in pvrdma_pci_probe()
1024 if (dev->netdev) { in pvrdma_pci_probe()
1025 dev_put(dev->netdev); in pvrdma_pci_probe()
1026 dev->netdev = NULL; in pvrdma_pci_probe()
1028 pvrdma_page_dir_cleanup(dev, &dev->cq_pdir); in pvrdma_pci_probe()
1030 pvrdma_page_dir_cleanup(dev, &dev->async_pdir); in pvrdma_pci_probe()
1032 pvrdma_free_slots(dev); in pvrdma_pci_probe()
1034 dma_free_coherent(&pdev->dev, sizeof(*dev->dsr), dev->dsr, in pvrdma_pci_probe()
1035 dev->dsrbase); in pvrdma_pci_probe()
1037 iounmap(dev->driver_uar.map); in pvrdma_pci_probe()
1039 iounmap(dev->regs); in pvrdma_pci_probe()
1047 list_del(&dev->device_link); in pvrdma_pci_probe()
1049 ib_dealloc_device(&dev->ib_dev); in pvrdma_pci_probe()
1055 struct pvrdma_dev *dev = pci_get_drvdata(pdev); in pvrdma_pci_remove() local
1057 if (!dev) in pvrdma_pci_remove()
1060 dev_info(&pdev->dev, "detaching from device\n"); in pvrdma_pci_remove()
1062 unregister_netdevice_notifier(&dev->nb_netdev); in pvrdma_pci_remove()
1063 dev->nb_netdev.notifier_call = NULL; in pvrdma_pci_remove()
1067 if (dev->netdev) { in pvrdma_pci_remove()
1068 dev_put(dev->netdev); in pvrdma_pci_remove()
1069 dev->netdev = NULL; in pvrdma_pci_remove()
1073 ib_unregister_device(&dev->ib_dev); in pvrdma_pci_remove()
1076 list_del(&dev->device_link); in pvrdma_pci_remove()
1079 pvrdma_disable_intrs(dev); in pvrdma_pci_remove()
1080 pvrdma_free_irq(dev); in pvrdma_pci_remove()
1084 pvrdma_write_reg(dev, PVRDMA_REG_CTL, PVRDMA_DEVICE_CTL_RESET); in pvrdma_pci_remove()
1085 pvrdma_page_dir_cleanup(dev, &dev->cq_pdir); in pvrdma_pci_remove()
1086 pvrdma_page_dir_cleanup(dev, &dev->async_pdir); in pvrdma_pci_remove()
1087 pvrdma_free_slots(dev); in pvrdma_pci_remove()
1088 dma_free_coherent(&pdev->dev, sizeof(*dev->dsr), dev->dsr, in pvrdma_pci_remove()
1089 dev->dsrbase); in pvrdma_pci_remove()
1091 iounmap(dev->regs); in pvrdma_pci_remove()
1092 kfree(dev->sgid_tbl); in pvrdma_pci_remove()
1093 kfree(dev->cq_tbl); in pvrdma_pci_remove()
1094 kfree(dev->srq_tbl); in pvrdma_pci_remove()
1095 kfree(dev->qp_tbl); in pvrdma_pci_remove()
1096 pvrdma_uar_table_cleanup(dev); in pvrdma_pci_remove()
1097 iounmap(dev->driver_uar.map); in pvrdma_pci_remove()
1099 ib_dealloc_device(&dev->ib_dev); in pvrdma_pci_remove()