| 1383 | } |
| 1384 | |
| 1385 | static int |
| 1386 | alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages) |
| 1387 | { |
| 1388 | struct bounce_zone *bz; |
| 1389 | int count; |
| 1390 | |
| 1391 | bz = dmat->bounce_zone; |
| 1392 | count = 0; |
| 1393 | while (numpages > 0) { |
| 1394 | struct bounce_page *bpage; |
| 1395 | |
| 1396 | bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA, |
| 1397 | M_NOWAIT | M_ZERO); |
| 1398 | |
| 1399 | if (bpage == NULL) |
| 1400 | break; |
| 1401 | bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE, |
| 1402 | M_NOWAIT, 0ul, |
| 1403 | bz->lowaddr, |
| 1404 | PAGE_SIZE, |
| 1405 | 0); |
| 1406 | if (bpage->vaddr == 0) { |
| 1407 | free(bpage, M_BUSDMA); |
| 1408 | break; |
| 1409 | } |
| 1410 | bpage->busaddr = pmap_kextract(bpage->vaddr); |
| 1411 | bpage->vaddr_nocache = |
| 1412 | (vm_offset_t)pmap_mapdev(bpage->busaddr, PAGE_SIZE); |
| 1413 | mtx_lock(&bounce_lock); |
| 1414 | STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links); |
| 1415 | total_bpages++; |
| 1416 | bz->total_bpages++; |
| 1417 | bz->free_bpages++; |
| 1418 | mtx_unlock(&bounce_lock); |
| 1419 | count++; |
| 1420 | numpages--; |
| 1421 | } |
| 1422 | return (count); |
| 1423 | } |
| 1424 | |
| 1425 | static int |
| 1426 | reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit) |
no test coverage detected