Lines Matching refs:vnic

69 const char *usnic_vnic_pci_name(struct usnic_vnic *vnic)  in usnic_vnic_pci_name()  argument
71 return pci_name(usnic_vnic_get_pdev(vnic)); in usnic_vnic_pci_name()
74 int usnic_vnic_dump(struct usnic_vnic *vnic, char *buf, in usnic_vnic_dump() argument
87 bar0 = usnic_vnic_get_bar(vnic, 0); in usnic_vnic_dump()
90 usnic_vnic_get_index(vnic), in usnic_vnic_dump()
102 spin_lock(&vnic->res_lock); in usnic_vnic_dump()
103 for (i = 0; i < ARRAY_SIZE(vnic->chunks); i++) { in usnic_vnic_dump()
104 chunk = &vnic->chunks[i]; in usnic_vnic_dump()
119 spin_unlock(&vnic->res_lock); in usnic_vnic_dump()
184 int usnic_vnic_check_room(struct usnic_vnic *vnic, in usnic_vnic_check_room() argument
198 if (res_cnt > usnic_vnic_res_free_cnt(vnic, res_type)) in usnic_vnic_check_room()
205 int usnic_vnic_res_cnt(struct usnic_vnic *vnic, in usnic_vnic_res_cnt() argument
208 return vnic->chunks[type].cnt; in usnic_vnic_res_cnt()
211 int usnic_vnic_res_free_cnt(struct usnic_vnic *vnic, in usnic_vnic_res_free_cnt() argument
214 return vnic->chunks[type].free_cnt; in usnic_vnic_res_free_cnt()
218 usnic_vnic_get_resources(struct usnic_vnic *vnic, enum usnic_vnic_res_type type, in usnic_vnic_get_resources() argument
225 if (usnic_vnic_res_free_cnt(vnic, type) < cnt || cnt < 1 || !owner) in usnic_vnic_get_resources()
231 usnic_vnic_pci_name(vnic)); in usnic_vnic_get_resources()
238 usnic_vnic_pci_name(vnic)); in usnic_vnic_get_resources()
243 spin_lock(&vnic->res_lock); in usnic_vnic_get_resources()
244 src = &vnic->chunks[type]; in usnic_vnic_get_resources()
254 spin_unlock(&vnic->res_lock); in usnic_vnic_get_resources()
256 ret->vnic = vnic; in usnic_vnic_get_resources()
267 struct usnic_vnic *vnic = chunk->vnic; in usnic_vnic_put_resources() local
269 spin_lock(&vnic->res_lock); in usnic_vnic_put_resources()
274 vnic->chunks[res->type].free_cnt++; in usnic_vnic_put_resources()
276 spin_unlock(&vnic->res_lock); in usnic_vnic_put_resources()
282 u16 usnic_vnic_get_index(struct usnic_vnic *vnic) in usnic_vnic_get_index() argument
284 return usnic_vnic_get_pdev(vnic)->devfn - 1; in usnic_vnic_get_index()
287 static int usnic_vnic_alloc_res_chunk(struct usnic_vnic *vnic, in usnic_vnic_alloc_res_chunk() argument
294 cnt = vnic_dev_get_res_count(vnic->vdev, _to_vnic_res_type(type)); in usnic_vnic_alloc_res_chunk()
311 res->vnic = vnic; in usnic_vnic_alloc_res_chunk()
312 res->ctrl = vnic_dev_get_res(vnic->vdev, in usnic_vnic_alloc_res_chunk()
317 chunk->vnic = vnic; in usnic_vnic_alloc_res_chunk()
335 struct usnic_vnic *vnic) in usnic_vnic_discover_resources() argument
341 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_discover_resources()
344 vnic->bar[i].len = pci_resource_len(pdev, i); in usnic_vnic_discover_resources()
345 vnic->bar[i].vaddr = pci_iomap(pdev, i, vnic->bar[i].len); in usnic_vnic_discover_resources()
346 if (!vnic->bar[i].vaddr) { in usnic_vnic_discover_resources()
352 vnic->bar[i].bus_addr = pci_resource_start(pdev, i); in usnic_vnic_discover_resources()
355 vnic->vdev = vnic_dev_register(NULL, pdev, pdev, vnic->bar, in usnic_vnic_discover_resources()
356 ARRAY_SIZE(vnic->bar)); in usnic_vnic_discover_resources()
357 if (!vnic->vdev) { in usnic_vnic_discover_resources()
366 err = usnic_vnic_alloc_res_chunk(vnic, res_type, in usnic_vnic_discover_resources()
367 &vnic->chunks[res_type]); in usnic_vnic_discover_resources()
380 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]); in usnic_vnic_discover_resources()
381 vnic_dev_unregister(vnic->vdev); in usnic_vnic_discover_resources()
383 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_discover_resources()
386 if (!vnic->bar[i].vaddr) in usnic_vnic_discover_resources()
389 iounmap(vnic->bar[i].vaddr); in usnic_vnic_discover_resources()
395 struct pci_dev *usnic_vnic_get_pdev(struct usnic_vnic *vnic) in usnic_vnic_get_pdev() argument
397 return vnic_dev_get_pdev(vnic->vdev); in usnic_vnic_get_pdev()
400 struct vnic_dev_bar *usnic_vnic_get_bar(struct usnic_vnic *vnic, in usnic_vnic_get_bar() argument
403 return (bar_num < ARRAY_SIZE(vnic->bar)) ? &vnic->bar[bar_num] : NULL; in usnic_vnic_get_bar()
406 static void usnic_vnic_release_resources(struct usnic_vnic *vnic) in usnic_vnic_release_resources() argument
412 pdev = usnic_vnic_get_pdev(vnic); in usnic_vnic_release_resources()
416 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]); in usnic_vnic_release_resources()
418 vnic_dev_unregister(vnic->vdev); in usnic_vnic_release_resources()
420 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_release_resources()
423 iounmap(vnic->bar[i].vaddr); in usnic_vnic_release_resources()
429 struct usnic_vnic *vnic; in usnic_vnic_alloc() local
437 vnic = kzalloc(sizeof(*vnic), GFP_KERNEL); in usnic_vnic_alloc()
438 if (!vnic) { in usnic_vnic_alloc()
444 spin_lock_init(&vnic->res_lock); in usnic_vnic_alloc()
446 err = usnic_vnic_discover_resources(pdev, vnic); in usnic_vnic_alloc()
453 usnic_dbg("Allocated vnic for %s\n", usnic_vnic_pci_name(vnic)); in usnic_vnic_alloc()
455 return vnic; in usnic_vnic_alloc()
458 kfree(vnic); in usnic_vnic_alloc()
463 void usnic_vnic_free(struct usnic_vnic *vnic) in usnic_vnic_free() argument
465 usnic_vnic_release_resources(vnic); in usnic_vnic_free()
466 kfree(vnic); in usnic_vnic_free()