Lines Matching defs:vnic

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