MCPcopy Create free account
hub / github.com/F-Stack/f-stack / iflib_dma_alloc_align

Function iflib_dma_alloc_align

freebsd/net/iflib.c:1392–1447  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1390}
1391
1392int
1393iflib_dma_alloc_align(if_ctx_t ctx, int size, int align, iflib_dma_info_t dma, int mapflags)
1394{
1395 int err;
1396 device_t dev = ctx->ifc_dev;
1397
1398 err = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */
1399 align, 0, /* alignment, bounds */
1400 BUS_SPACE_MAXADDR, /* lowaddr */
1401 BUS_SPACE_MAXADDR, /* highaddr */
1402 NULL, NULL, /* filter, filterarg */
1403 size, /* maxsize */
1404 1, /* nsegments */
1405 size, /* maxsegsize */
1406 BUS_DMA_ALLOCNOW, /* flags */
1407 NULL, /* lockfunc */
1408 NULL, /* lockarg */
1409 &dma->idi_tag);
1410 if (err) {
1411 device_printf(dev,
1412 "%s: bus_dma_tag_create failed: %d\n",
1413 __func__, err);
1414 goto fail_0;
1415 }
1416
1417 err = bus_dmamem_alloc(dma->idi_tag, (void**) &dma->idi_vaddr,
1418 BUS_DMA_NOWAIT | BUS_DMA_COHERENT | BUS_DMA_ZERO, &dma->idi_map);
1419 if (err) {
1420 device_printf(dev,
1421 "%s: bus_dmamem_alloc(%ju) failed: %d\n",
1422 __func__, (uintmax_t)size, err);
1423 goto fail_1;
1424 }
1425
1426 dma->idi_paddr = IF_BAD_DMA;
1427 err = bus_dmamap_load(dma->idi_tag, dma->idi_map, dma->idi_vaddr,
1428 size, _iflib_dmamap_cb, &dma->idi_paddr, mapflags | BUS_DMA_NOWAIT);
1429 if (err || dma->idi_paddr == IF_BAD_DMA) {
1430 device_printf(dev,
1431 "%s: bus_dmamap_load failed: %d\n",
1432 __func__, err);
1433 goto fail_2;
1434 }
1435
1436 dma->idi_size = size;
1437 return (0);
1438
1439fail_2:
1440 bus_dmamem_free(dma->idi_tag, dma->idi_vaddr, dma->idi_map);
1441fail_1:
1442 bus_dma_tag_destroy(dma->idi_tag);
1443fail_0:
1444 dma->idi_tag = NULL;
1445
1446 return (err);
1447}
1448
1449int

Callers 1

iflib_dma_allocFunction · 0.85

Calls 7

bus_get_dma_tagFunction · 0.85
device_printfFunction · 0.85
bus_dmamap_loadFunction · 0.85
bus_dma_tag_createFunction · 0.50
bus_dmamem_allocFunction · 0.50
bus_dmamem_freeFunction · 0.50
bus_dma_tag_destroyFunction · 0.50

Tested by

no test coverage detected