Lines Matching refs:nmd

146 netmap_mem_get_lut(struct netmap_mem_d *nmd)
148 return nmd->pools[NETMAP_BUF_POOL].lut;
152 netmap_mem_get_buftotal(struct netmap_mem_d *nmd)
154 return nmd->pools[NETMAP_BUF_POOL].objtotal;
158 netmap_mem_get_bufsize(struct netmap_mem_d *nmd)
160 return nmd->pools[NETMAP_BUF_POOL]._objsize;
212 static int netmap_mem_global_config(struct netmap_mem_d *nmd);
213 static int netmap_mem_global_finalize(struct netmap_mem_d *nmd);
214 static void netmap_mem_global_deref(struct netmap_mem_d *nmd);
254 static int netmap_mem_private_config(struct netmap_mem_d *nmd);
255 static int netmap_mem_private_finalize(struct netmap_mem_d *nmd);
256 static void netmap_mem_private_deref(struct netmap_mem_d *nmd);
315 nm_mem_assign_id(struct netmap_mem_d *nmd)
330 nmd->nm_id = id;
331 nmd->prev = scan->prev;
332 nmd->next = scan;
333 scan->prev->next = nmd;
334 scan->prev = nmd;
335 netmap_last_mem_d = nmd;
346 nm_mem_release_id(struct netmap_mem_d *nmd)
350 nmd->prev->next = nmd->next;
351 nmd->next->prev = nmd->prev;
353 if (netmap_last_mem_d == nmd)
354 netmap_last_mem_d = nmd->prev;
356 nmd->prev = nmd->next = NULL;
362 nm_mem_assign_group(struct netmap_mem_d *nmd, struct device *dev)
369 NMA_LOCK(nmd);
371 if (nmd->nm_grp < 0)
372 nmd->nm_grp = id;
374 if (nmd->nm_grp != id)
375 nmd->lasterr = err = ENOMEM;
377 NMA_UNLOCK(nmd);
386 netmap_mem_ofstophys(struct netmap_mem_d* nmd, vm_ooffset_t offset)
393 NMA_LOCK(nmd);
394 p = nmd->pools;
402 NMA_UNLOCK(nmd);
413 NMA_UNLOCK(nmd);
418 netmap_mem_get_info(struct netmap_mem_d* nmd, u_int* size, u_int *memflags,
422 NMA_LOCK(nmd);
423 error = nmd->config(nmd);
427 if (nmd->flags & NETMAP_MEM_FINALIZED) {
428 *size = nmd->nm_totalsize;
433 struct netmap_obj_pool *p = nmd->pools + i;
439 *memflags = nmd->flags;
441 *id = nmd->nm_id;
443 NMA_UNLOCK(nmd);
491 netmap_mem_if_offset(struct netmap_mem_d *nmd, const void *addr)
494 NMA_LOCK(nmd);
495 v = netmap_if_offset(nmd, addr);
496 NMA_UNLOCK(nmd);
625 struct netmap_mem_d *nmd = na->nm_mem;
628 NMA_LOCK(nmd);
633 uint32_t *p = netmap_buf_malloc(nmd, &pos, head);
643 NMA_UNLOCK(nmd);
652 struct netmap_mem_d *nmd = na->nm_mem;
653 struct netmap_obj_pool *p = &nmd->pools[NETMAP_BUF_POOL];
673 netmap_new_bufs(struct netmap_mem_d *nmd, struct netmap_slot *slot, u_int n)
675 struct netmap_obj_pool *p = &nmd->pools[NETMAP_BUF_POOL];
681 void *vaddr = netmap_buf_malloc(nmd, &pos, &index);
704 netmap_mem_set_ring(struct netmap_mem_d *nmd, struct netmap_slot *slot, u_int n, uint32_t index)
706 struct netmap_obj_pool *p = &nmd->pools[NETMAP_BUF_POOL];
718 netmap_free_buf(struct netmap_mem_d *nmd, uint32_t i)
720 struct netmap_obj_pool *p = &nmd->pools[NETMAP_BUF_POOL];
731 netmap_free_bufs(struct netmap_mem_d *nmd, struct netmap_slot *slot, u_int n)
737 netmap_free_buf(nmd, slot[i].buf_idx);
981 netmap_memory_config_changed(struct netmap_mem_d *nmd)
986 if (nmd->pools[i].r_objsize != netmap_params[i].size ||
987 nmd->pools[i].r_objtotal != netmap_params[i].num)
994 netmap_mem_reset_all(struct netmap_mem_d *nmd)
999 D("resetting %p", nmd);
1001 netmap_reset_obj_allocator(&nmd->pools[i]);
1003 nmd->flags &= ~NETMAP_MEM_FINALIZED;
1048 netmap_mem_finalize_all(struct netmap_mem_d *nmd)
1051 if (nmd->flags & NETMAP_MEM_FINALIZED)
1053 nmd->lasterr = 0;
1054 nmd->nm_totalsize = 0;
1056 nmd->lasterr = netmap_finalize_obj_allocator(&nmd->pools[i]);
1057 if (nmd->lasterr)
1059 nmd->nm_totalsize += nmd->pools[i].memtotal;
1062 nmd->pools[NETMAP_BUF_POOL].objfree -= 2;
1063 nmd->pools[NETMAP_BUF_POOL].bitmap[0] = ~3;
1064 nmd->flags |= NETMAP_MEM_FINALIZED;
1068 nmd->pools[NETMAP_IF_POOL].memtotal >> 10,
1069 nmd->pools[NETMAP_RING_POOL].memtotal >> 10,
1070 nmd->pools[NETMAP_BUF_POOL].memtotal >> 20);
1073 D("Free buffers: %d", nmd->pools[NETMAP_BUF_POOL].objfree);
1078 netmap_mem_reset_all(nmd);
1079 return nmd->lasterr;
1085 netmap_mem_private_delete(struct netmap_mem_d *nmd)
1087 if (nmd == NULL)
1090 D("deleting %p", nmd);
1091 if (nmd->refcount > 0)
1092 D("bug: deleting mem allocator with refcount=%d!", nmd->refcount);
1093 nm_mem_release_id(nmd);
1095 D("done deleting %p", nmd);
1096 NMA_LOCK_DESTROY(nmd);
1097 free(nmd, M_DEVBUF);
1101 netmap_mem_private_config(struct netmap_mem_d *nmd)
1110 netmap_mem_private_finalize(struct netmap_mem_d *nmd)
1113 nmd->refcount++;
1114 err = netmap_mem_finalize_all(nmd);
1120 netmap_mem_private_deref(struct netmap_mem_d *nmd)
1122 if (--nmd->refcount <= 0)
1123 netmap_mem_reset_all(nmd);
1222 netmap_mem_global_config(struct netmap_mem_d *nmd)
1226 if (nmd->refcount)
1230 if (!netmap_memory_config_changed(nmd))
1235 if (nmd->flags & NETMAP_MEM_FINALIZED) {
1238 netmap_reset_obj_allocator(&nmd->pools[i]);
1240 nmd->flags &= ~NETMAP_MEM_FINALIZED;
1244 nmd->lasterr = netmap_config_obj_allocator(&nmd->pools[i],
1246 if (nmd->lasterr)
1252 return nmd->lasterr;
1256 netmap_mem_global_finalize(struct netmap_mem_d *nmd)
1261 if (netmap_mem_global_config(nmd))
1264 nmd->refcount++;
1266 if (nmd->flags & NETMAP_MEM_FINALIZED) {
1272 if (netmap_mem_finalize_all(nmd))
1275 nmd->lasterr = 0;
1278 if (nmd->lasterr)
1279 nmd->refcount--;
1280 err = nmd->lasterr;
1528 netmap_mem_global_deref(struct netmap_mem_d *nmd)
1531 nmd->refcount--;
1532 if (!nmd->refcount)
1533 nmd->nm_grp = -1;
1535 D("refcount = %d", nmd->refcount);
1540 netmap_mem_finalize(struct netmap_mem_d *nmd, struct netmap_adapter *na)
1542 if (nm_mem_assign_group(nmd, na->pdev) < 0) {
1545 NMA_LOCK(nmd);
1546 nmd->finalize(nmd);
1547 NMA_UNLOCK(nmd);
1550 if (!nmd->lasterr && na->pdev)
1551 netmap_mem_map(&nmd->pools[NETMAP_BUF_POOL], na);
1553 return nmd->lasterr;
1557 netmap_mem_deref(struct netmap_mem_d *nmd, struct netmap_adapter *na)
1559 NMA_LOCK(nmd);
1560 netmap_mem_unmap(&nmd->pools[NETMAP_BUF_POOL], na);
1561 if (nmd->refcount == 1) {
1573 p = &nmd->pools[i];
1600 nmd->pools[NETMAP_BUF_POOL].objfree -= 2;
1601 nmd->pools[NETMAP_BUF_POOL].bitmap[0] = ~3;
1603 nmd->deref(nmd);
1604 NMA_UNLOCK(nmd);