Lines Matching refs:vnic
84 const char *usnic_vnic_pci_name(struct usnic_vnic *vnic)
86 return pci_name(usnic_vnic_get_pdev(vnic));
89 int usnic_vnic_dump(struct usnic_vnic *vnic, char *buf,
102 bar0 = usnic_vnic_get_bar(vnic, 0);
105 usnic_vnic_get_index(vnic),
117 spin_lock(&vnic->res_lock);
118 for (i = 0; i < ARRAY_SIZE(vnic->chunks); i++) {
119 chunk = &vnic->chunks[i];
134 spin_unlock(&vnic->res_lock);
199 int usnic_vnic_check_room(struct usnic_vnic *vnic,
213 if (res_cnt > usnic_vnic_res_free_cnt(vnic, res_type))
220 int usnic_vnic_res_cnt(struct usnic_vnic *vnic,
223 return vnic->chunks[type].cnt;
226 int usnic_vnic_res_free_cnt(struct usnic_vnic *vnic,
229 return vnic->chunks[type].free_cnt;
233 usnic_vnic_get_resources(struct usnic_vnic *vnic, enum usnic_vnic_res_type type,
240 if (usnic_vnic_res_free_cnt(vnic, type) < cnt || cnt < 0 || !owner)
254 spin_lock(&vnic->res_lock);
255 src = &vnic->chunks[type];
265 spin_unlock(&vnic->res_lock);
268 ret->vnic = vnic;
279 struct usnic_vnic *vnic = chunk->vnic;
282 spin_lock(&vnic->res_lock);
287 vnic->chunks[res->type].free_cnt++;
289 spin_unlock(&vnic->res_lock);
296 u16 usnic_vnic_get_index(struct usnic_vnic *vnic)
298 return usnic_vnic_get_pdev(vnic)->devfn - 1;
301 static int usnic_vnic_alloc_res_chunk(struct usnic_vnic *vnic,
308 cnt = vnic_dev_get_res_count(vnic->vdev, _to_vnic_res_type(type));
327 res->vnic = vnic;
328 res->ctrl = vnic_dev_get_res(vnic->vdev,
333 chunk->vnic = vnic;
351 struct usnic_vnic *vnic)
357 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) {
360 vnic->bar[i].len = pci_resource_len(pdev, i);
361 vnic->bar[i].vaddr = pci_iomap(pdev, i, vnic->bar[i].len);
362 if (!vnic->bar[i].vaddr) {
368 vnic->bar[i].bus_addr = pci_resource_start(pdev, i);
371 vnic->vdev = vnic_dev_register(NULL, pdev, pdev, vnic->bar,
372 ARRAY_SIZE(vnic->bar));
373 if (!vnic->vdev) {
382 err = usnic_vnic_alloc_res_chunk(vnic, res_type,
383 &vnic->chunks[res_type]);
392 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]);
393 vnic_dev_unregister(vnic->vdev);
395 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) {
398 if (!vnic->bar[i].vaddr)
401 iounmap(vnic->bar[i].vaddr);
407 struct pci_dev *usnic_vnic_get_pdev(struct usnic_vnic *vnic)
409 return vnic_dev_get_pdev(vnic->vdev);
412 struct vnic_dev_bar *usnic_vnic_get_bar(struct usnic_vnic *vnic,
415 return (bar_num < ARRAY_SIZE(vnic->bar)) ? &vnic->bar[bar_num] : NULL;
418 static void usnic_vnic_release_resources(struct usnic_vnic *vnic)
424 pdev = usnic_vnic_get_pdev(vnic);
428 usnic_vnic_free_res_chunk(&vnic->chunks[res_type]);
430 vnic_dev_unregister(vnic->vdev);
432 for (i = 0; i < ARRAY_SIZE(vnic->bar); i++) {
435 iounmap(vnic->bar[i].vaddr);
441 struct usnic_vnic *vnic;
449 vnic = kzalloc(sizeof(*vnic), GFP_KERNEL);
450 if (!vnic)
453 spin_lock_init(&vnic->res_lock);
455 err = usnic_vnic_discover_resources(pdev, vnic);
462 usnic_dbg("Allocated vnic for %s\n", usnic_vnic_pci_name(vnic));
464 return vnic;
467 kfree(vnic);
472 void usnic_vnic_free(struct usnic_vnic *vnic)
474 usnic_vnic_release_resources(vnic);
475 kfree(vnic);