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

Function alloc_bounce_zone

freebsd/mips/mips/busdma_machdep.c:1311–1383  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1309}
1310
1311static int
1312alloc_bounce_zone(bus_dma_tag_t dmat)
1313{
1314 struct bounce_zone *bz;
1315
1316 /* Check to see if we already have a suitable zone */
1317 STAILQ_FOREACH(bz, &bounce_zone_list, links) {
1318 if ((dmat->alignment <= bz->alignment)
1319 && (dmat->lowaddr >= bz->lowaddr)) {
1320 dmat->bounce_zone = bz;
1321 return (0);
1322 }
1323 }
1324
1325 if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_BUSDMA,
1326 M_NOWAIT | M_ZERO)) == NULL)
1327 return (ENOMEM);
1328
1329 STAILQ_INIT(&bz->bounce_page_list);
1330 bz->free_bpages = 0;
1331 bz->reserved_bpages = 0;
1332 bz->active_bpages = 0;
1333 bz->lowaddr = dmat->lowaddr;
1334 bz->alignment = MAX(dmat->alignment, PAGE_SIZE);
1335 bz->map_count = 0;
1336 snprintf(bz->zoneid, 8, "zone%d", busdma_zonecount);
1337 busdma_zonecount++;
1338 snprintf(bz->lowaddrid, 18, "%#jx", (uintmax_t)bz->lowaddr);
1339 STAILQ_INSERT_TAIL(&bounce_zone_list, bz, links);
1340 dmat->bounce_zone = bz;
1341
1342 sysctl_ctx_init(&bz->sysctl_tree);
1343 bz->sysctl_tree_top = SYSCTL_ADD_NODE(&bz->sysctl_tree,
1344 SYSCTL_STATIC_CHILDREN(_hw_busdma), OID_AUTO, bz->zoneid,
1345 CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
1346 if (bz->sysctl_tree_top == NULL) {
1347 sysctl_ctx_free(&bz->sysctl_tree);
1348 return (0); /* XXX error code? */
1349 }
1350
1351 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1352 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1353 "total_bpages", CTLFLAG_RD, &bz->total_bpages, 0,
1354 "Total bounce pages");
1355 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1356 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1357 "free_bpages", CTLFLAG_RD, &bz->free_bpages, 0,
1358 "Free bounce pages");
1359 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1360 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1361 "reserved_bpages", CTLFLAG_RD, &bz->reserved_bpages, 0,
1362 "Reserved bounce pages");
1363 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1364 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1365 "active_bpages", CTLFLAG_RD, &bz->active_bpages, 0,
1366 "Active bounce pages");
1367 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1368 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,

Callers 2

bus_dma_tag_createFunction · 0.70
bus_dmamap_createFunction · 0.70

Calls 6

mallocFunction · 0.85
snprintfFunction · 0.85
sysctl_ctx_initFunction · 0.85
sysctl_ctx_freeFunction · 0.85
busdma_sysctl_treeFunction · 0.70
busdma_sysctl_tree_topFunction · 0.70

Tested by

no test coverage detected