| 1598 | } |
| 1599 | |
| 1600 | static int |
| 1601 | alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages) |
| 1602 | { |
| 1603 | struct bounce_zone *bz; |
| 1604 | int count; |
| 1605 | |
| 1606 | bz = dmat->bounce_zone; |
| 1607 | count = 0; |
| 1608 | while (numpages > 0) { |
| 1609 | struct bounce_page *bpage; |
| 1610 | |
| 1611 | bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA, |
| 1612 | M_NOWAIT | M_ZERO); |
| 1613 | |
| 1614 | if (bpage == NULL) |
| 1615 | break; |
| 1616 | bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE, |
| 1617 | M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0); |
| 1618 | if (bpage->vaddr == 0) { |
| 1619 | free(bpage, M_BUSDMA); |
| 1620 | break; |
| 1621 | } |
| 1622 | bpage->busaddr = pmap_kextract(bpage->vaddr); |
| 1623 | mtx_lock(&bounce_lock); |
| 1624 | STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links); |
| 1625 | total_bpages++; |
| 1626 | bz->total_bpages++; |
| 1627 | bz->free_bpages++; |
| 1628 | mtx_unlock(&bounce_lock); |
| 1629 | count++; |
| 1630 | numpages--; |
| 1631 | } |
| 1632 | return (count); |
| 1633 | } |
| 1634 | |
| 1635 | static int |
| 1636 | reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit) |
no test coverage detected