Lines Matching refs:vnic
83 const char *usnic_vnic_pci_name(struct usnic_vnic *vnic) in usnic_vnic_pci_name() argument
85 return pci_name(usnic_vnic_get_pdev(vnic)); in usnic_vnic_pci_name()
88 int usnic_vnic_dump(struct usnic_vnic *vnic, char *buf, in usnic_vnic_dump() argument
101 bar0 = usnic_vnic_get_bar(vnic, 0); in usnic_vnic_dump()
104 usnic_vnic_get_index(vnic), in usnic_vnic_dump()
116 spin_lock(&vnic->res_lock); in usnic_vnic_dump()
117 for (i = 0; i < ARRAY_SIZE(vnic->chunks); i++) { in usnic_vnic_dump()
118 chunk = &vnic->chunks[i]; in usnic_vnic_dump()
133 spin_unlock(&vnic->res_lock); in usnic_vnic_dump()
198 int usnic_vnic_check_room(struct usnic_vnic *vnic, in usnic_vnic_check_room() argument
212 if (res_cnt > usnic_vnic_res_free_cnt(vnic, res_type)) in usnic_vnic_check_room()
219 int usnic_vnic_res_cnt(struct usnic_vnic *vnic, in usnic_vnic_res_cnt() argument
222 return vnic->chunks[type].cnt; in usnic_vnic_res_cnt()
225 int usnic_vnic_res_free_cnt(struct usnic_vnic *vnic, in usnic_vnic_res_free_cnt() argument
228 return vnic->chunks[type].free_cnt; in usnic_vnic_res_free_cnt()
232 usnic_vnic_get_resources(struct usnic_vnic *vnic, enum usnic_vnic_res_type type, in usnic_vnic_get_resources() argument
239 if (usnic_vnic_res_free_cnt(vnic, type) < cnt || cnt < 0 || !owner) in usnic_vnic_get_resources()
253 spin_lock(&vnic->res_lock); in usnic_vnic_get_resources()
254 src = &vnic->chunks[type]; in usnic_vnic_get_resources()
264 spin_unlock(&vnic->res_lock); in usnic_vnic_get_resources()
267 ret->vnic = vnic; in usnic_vnic_get_resources()
278 struct usnic_vnic *vnic = chunk->vnic; in usnic_vnic_put_resources() local
281 spin_lock(&vnic->res_lock); in usnic_vnic_put_resources()
286 vnic->chunks[res->type].free_cnt++; in usnic_vnic_put_resources()
288 spin_unlock(&vnic->res_lock); in usnic_vnic_put_resources()
295 u16 usnic_vnic_get_index(struct usnic_vnic *vnic) in usnic_vnic_get_index() argument
297 return usnic_vnic_get_pdev(vnic)->devfn - 1; in usnic_vnic_get_index()
300 static int usnic_vnic_alloc_res_chunk(struct usnic_vnic *vnic, in usnic_vnic_alloc_res_chunk() argument
307 cnt = vnic_dev_get_res_count(vnic->vdev, _to_vnic_res_type(type)); in usnic_vnic_alloc_res_chunk()
326 res->vnic = vnic; in usnic_vnic_alloc_res_chunk()
327 res->ctrl = vnic_dev_get_res(vnic->vdev, in usnic_vnic_alloc_res_chunk()
332 chunk->vnic = vnic; in usnic_vnic_alloc_res_chunk()
350 struct usnic_vnic *vnic) in usnic_vnic_discover_resources() argument
356 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_discover_resources()
359 vnic->bar[i].len = pci_resource_len(pdev, i); in usnic_vnic_discover_resources()
360 vnic->bar[i].vaddr = pci_iomap(pdev, i, vnic->bar[i].len); in usnic_vnic_discover_resources()
361 if (!vnic->bar[i].vaddr) { in usnic_vnic_discover_resources()
367 vnic->bar[i].bus_addr = pci_resource_start(pdev, i); in usnic_vnic_discover_resources()
370 vnic->vdev = vnic_dev_register(NULL, pdev, pdev, vnic->bar, in usnic_vnic_discover_resources()
371 ARRAY_SIZE(vnic->bar)); in usnic_vnic_discover_resources()
372 if (!vnic->vdev) { in usnic_vnic_discover_resources()
381 err = usnic_vnic_alloc_res_chunk(vnic, res_type, in usnic_vnic_discover_resources()
382 &vnic->chunks[res_type]); in usnic_vnic_discover_resources()
391 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]); in usnic_vnic_discover_resources()
392 vnic_dev_unregister(vnic->vdev); in usnic_vnic_discover_resources()
394 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_discover_resources()
397 if (!vnic->bar[i].vaddr) in usnic_vnic_discover_resources()
400 iounmap(vnic->bar[i].vaddr); in usnic_vnic_discover_resources()
406 struct pci_dev *usnic_vnic_get_pdev(struct usnic_vnic *vnic) in usnic_vnic_get_pdev() argument
408 return vnic_dev_get_pdev(vnic->vdev); in usnic_vnic_get_pdev()
411 struct vnic_dev_bar *usnic_vnic_get_bar(struct usnic_vnic *vnic, in usnic_vnic_get_bar() argument
414 return (bar_num < ARRAY_SIZE(vnic->bar)) ? &vnic->bar[bar_num] : NULL; in usnic_vnic_get_bar()
417 static void usnic_vnic_release_resources(struct usnic_vnic *vnic) in usnic_vnic_release_resources() argument
423 pdev = usnic_vnic_get_pdev(vnic); in usnic_vnic_release_resources()
427 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]); in usnic_vnic_release_resources()
429 vnic_dev_unregister(vnic->vdev); in usnic_vnic_release_resources()
431 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) { in usnic_vnic_release_resources()
434 iounmap(vnic->bar[i].vaddr); in usnic_vnic_release_resources()
440 struct usnic_vnic *vnic; in usnic_vnic_alloc() local
448 vnic = kzalloc(sizeof(*vnic), GFP_KERNEL); in usnic_vnic_alloc()
449 if (!vnic) in usnic_vnic_alloc()
452 spin_lock_init(&vnic->res_lock); in usnic_vnic_alloc()
454 err = usnic_vnic_discover_resources(pdev, vnic); in usnic_vnic_alloc()
461 usnic_dbg("Allocated vnic for %s\n", usnic_vnic_pci_name(vnic)); in usnic_vnic_alloc()
463 return vnic; in usnic_vnic_alloc()
466 kfree(vnic); in usnic_vnic_alloc()
471 void usnic_vnic_free(struct usnic_vnic *vnic) in usnic_vnic_free() argument
473 usnic_vnic_release_resources(vnic); in usnic_vnic_free()
474 kfree(vnic); in usnic_vnic_free()