Lines Matching +full:iommu +full:- +full:addresses
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
109 for (; sglist_cnt > 0 && length != 0; sglist_cnt--, list++) { in _bus_dmamap_load_vlist()
113 KASSERT((offset < list->ds_len), in _bus_dmamap_load_vlist()
114 ("Invalid mid-segment offset")); in _bus_dmamap_load_vlist()
115 addr = (char *)(uintptr_t)list->ds_addr + offset; in _bus_dmamap_load_vlist()
116 ds_len = list->ds_len - offset; in _bus_dmamap_load_vlist()
120 length -= ds_len; in _bus_dmamap_load_vlist()
131 * Load a list of physical addresses.
140 for (; sglist_cnt > 0; sglist_cnt--, list++) { in _bus_dmamap_load_plist()
142 (vm_paddr_t)list->ds_addr, list->ds_len, flags, NULL, in _bus_dmamap_load_plist()
161 len = m->m_len; in _bus_dmamap_load_mbuf_epg()
167 if (m->m_epg_hdrlen != 0) { in _bus_dmamap_load_mbuf_epg()
168 if (off >= m->m_epg_hdrlen) { in _bus_dmamap_load_mbuf_epg()
169 off -= m->m_epg_hdrlen; in _bus_dmamap_load_mbuf_epg()
171 seglen = m->m_epg_hdrlen - off; in _bus_dmamap_load_mbuf_epg()
175 len -= seglen; in _bus_dmamap_load_mbuf_epg()
177 &m->m_epg_hdr[segoff], seglen, kernel_pmap, in _bus_dmamap_load_mbuf_epg()
181 pgoff = m->m_epg_1st_off; in _bus_dmamap_load_mbuf_epg()
182 for (i = 0; i < m->m_epg_npgs && error == 0 && len > 0; i++) { in _bus_dmamap_load_mbuf_epg()
185 off -= pglen; in _bus_dmamap_load_mbuf_epg()
189 seglen = pglen - off; in _bus_dmamap_load_mbuf_epg()
193 len -= seglen; in _bus_dmamap_load_mbuf_epg()
195 m->m_epg_pa[i] + segoff, seglen, flags, segs, nsegs); in _bus_dmamap_load_mbuf_epg()
199 KASSERT((off + len) <= m->m_epg_trllen, in _bus_dmamap_load_mbuf_epg()
201 m->m_epg_trllen)); in _bus_dmamap_load_mbuf_epg()
203 &m->m_epg_trail[off], len, kernel_pmap, flags, segs, in _bus_dmamap_load_mbuf_epg()
219 if ((m->m_flags & M_EXTPG) != 0) in _bus_dmamap_load_single_mbuf()
223 error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, in _bus_dmamap_load_single_mbuf()
241 for (m = m0; m != NULL && error == 0; m = m->m_next) { in _bus_dmamap_load_mbuf_sg()
242 if (m->m_len > 0) { in _bus_dmamap_load_mbuf_sg()
243 if ((m->m_flags & M_EXTPG) != 0) in _bus_dmamap_load_mbuf_sg()
248 m->m_data, m->m_len, kernel_pmap, in _bus_dmamap_load_mbuf_sg()
267 for (i = 0; tlen > 0; i++, tlen -= len) { in bus_dmamap_load_ma_triv()
268 len = min(PAGE_SIZE - ma_offs, tlen); in bus_dmamap_load_ma_triv()
293 if (uio->uio_segflg == UIO_USERSPACE) { in _bus_dmamap_load_uio()
294 KASSERT(uio->uio_td != NULL, in _bus_dmamap_load_uio()
296 pmap = vmspace_pmap(uio->uio_td->td_proc->p_vmspace); in _bus_dmamap_load_uio()
299 resid = uio->uio_resid; in _bus_dmamap_load_uio()
300 iov = uio->uio_iov; in _bus_dmamap_load_uio()
303 for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { in _bus_dmamap_load_uio()
314 resid -= minlen; in _bus_dmamap_load_uio()
344 nsegs = -1; in bus_dmamap_load()
386 nsegs = -1; in bus_dmamap_load_mbuf()
394 (*callback)(callback_arg, segs, nsegs, m0->m_pkthdr.len, error); in bus_dmamap_load_mbuf()
413 *nsegs = -1; in bus_dmamap_load_mbuf_sg()
433 nsegs = -1; in bus_dmamap_load_uio()
441 (*callback)(callback_arg, segs, nsegs, uio->uio_resid, error); in bus_dmamap_load_uio()
476 nsegs = -1; in bus_dmamap_load_mem()
478 switch (mem->md_type) { in bus_dmamap_load_mem()
480 error = _bus_dmamap_load_buffer(dmat, map, mem->u.md_vaddr, in bus_dmamap_load_mem()
481 mem->md_len, kernel_pmap, flags, NULL, &nsegs); in bus_dmamap_load_mem()
484 error = _bus_dmamap_load_phys(dmat, map, mem->u.md_paddr, in bus_dmamap_load_mem()
485 mem->md_len, flags, NULL, &nsegs); in bus_dmamap_load_mem()
488 error = _bus_dmamap_load_vlist(dmat, map, mem->u.md_list, in bus_dmamap_load_mem()
489 mem->md_nseg, kernel_pmap, &nsegs, flags, 0, SIZE_T_MAX); in bus_dmamap_load_mem()
492 error = _bus_dmamap_load_plist(dmat, map, mem->u.md_list, in bus_dmamap_load_mem()
493 mem->md_nseg, &nsegs, flags); in bus_dmamap_load_mem()
496 error = _bus_dmamap_load_uio(dmat, map, mem->u.md_uio, in bus_dmamap_load_mem()
500 error = _bus_dmamap_load_mbuf_sg(dmat, map, mem->u.md_mbuf, in bus_dmamap_load_mem()
504 error = _bus_dmamap_load_ma(dmat, map, mem->u.md_ma, in bus_dmamap_load_mem()
505 mem->md_len, mem->md_offset, flags, NULL, &nsegs); in bus_dmamap_load_mem()
542 nsegs = -1; in bus_dmamap_load_crp_buffer()
544 switch (cb->cb_type) { in bus_dmamap_load_crp_buffer()
546 error = _bus_dmamap_load_buffer(dmat, map, cb->cb_buf, in bus_dmamap_load_crp_buffer()
547 cb->cb_buf_len, kernel_pmap, flags, NULL, &nsegs); in bus_dmamap_load_crp_buffer()
550 error = _bus_dmamap_load_mbuf_sg(dmat, map, cb->cb_mbuf, in bus_dmamap_load_crp_buffer()
554 error = _bus_dmamap_load_single_mbuf(dmat, map, cb->cb_mbuf, in bus_dmamap_load_crp_buffer()
558 error = _bus_dmamap_load_uio(dmat, map, cb->cb_uio, &nsegs, in bus_dmamap_load_crp_buffer()
562 error = _bus_dmamap_load_ma(dmat, map, cb->cb_vm_page, in bus_dmamap_load_crp_buffer()
563 cb->cb_vm_page_len, cb->cb_vm_page_offset, flags, NULL, in bus_dmamap_load_crp_buffer()
597 return (bus_dmamap_load_crp_buffer(dmat, map, &crp->crp_buf, callback, in bus_dmamap_load_crp()
608 t->parent = parent; in bus_dma_template_init()
609 t->alignment = 1; in bus_dma_template_init()
610 t->boundary = 0; in bus_dma_template_init()
611 t->lowaddr = t->highaddr = BUS_SPACE_MAXADDR; in bus_dma_template_init()
612 t->maxsize = t->maxsegsize = BUS_SPACE_MAXSIZE; in bus_dma_template_init()
613 t->nsegments = BUS_SPACE_UNRESTRICTED; in bus_dma_template_init()
614 t->lockfunc = NULL; in bus_dma_template_init()
615 t->lockfuncarg = NULL; in bus_dma_template_init()
616 t->flags = 0; in bus_dma_template_init()
626 return (bus_dma_tag_create(t->parent, t->alignment, t->boundary, in bus_dma_template_tag()
627 t->lowaddr, t->highaddr, NULL, NULL, t->maxsize, in bus_dma_template_tag()
628 t->nsegments, t->maxsegsize, t->flags, t->lockfunc, t->lockfuncarg, in bus_dma_template_tag()
638 pkv = &kv[--count]; in bus_dma_template_fill()
639 switch (pkv->key) { in bus_dma_template_fill()
641 t->parent = pkv->ptr; in bus_dma_template_fill()
644 t->alignment = pkv->num; in bus_dma_template_fill()
647 t->boundary = pkv->num; in bus_dma_template_fill()
650 t->lowaddr = pkv->pa; in bus_dma_template_fill()
653 t->highaddr = pkv->pa; in bus_dma_template_fill()
656 t->maxsize = pkv->num; in bus_dma_template_fill()
659 t->nsegments = pkv->num; in bus_dma_template_fill()
662 t->maxsegsize = pkv->num; in bus_dma_template_fill()
665 t->flags = pkv->num; in bus_dma_template_fill()
668 t->lockfunc = pkv->ptr; in bus_dma_template_fill()
671 t->lockfuncarg = pkv->ptr; in bus_dma_template_fill()
674 t->name = pkv->ptr; in bus_dma_template_fill()
678 KASSERT(0, ("Invalid key %d\n", pkv->key)); in bus_dma_template_fill()
685 #ifndef IOMMU