Lines Matching refs:map

197 _prepare_bounce_buffer(bus_dmamap_t map, bus_size_t reqsize, int flags)
199 if (map->buffer_type == bus_dmamap::BUFFER_PROHIBITED) {
203 if (map->buffer_type != bus_dmamap::BUFFER_NONE) {
208 if (map->bounce_buffer_size >= reqsize)
211 if (map->bounce_buffer != NULL) {
212 kernel_contigfree(map->bounce_buffer, map->bounce_buffer_size, 0);
213 map->bounce_buffer = NULL;
217 int error = bus_dmamem_alloc(map->dmat, &map->bounce_buffer, flags, &extraMap);
220 map->bounce_buffer_size = map->dmat->maxsize;
221 bus_dmamap_destroy(map->dmat, extraMap);
228 bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
230 if (map == NULL)
232 if (map->buffer_type > bus_dmamap::BUFFER_PROHIBITED)
235 atomic_add(&map->dmat->map_count, -1);
236 kernel_contigfree(map->bounce_buffer, map->bounce_buffer_size, M_DEVBUF);
237 free(map->segments);
238 free(map);
310 bus_dmamem_free(bus_dma_tag_t dmat, void* vaddr, bus_dmamap_t map)
313 bus_dmamap_destroy(dmat, map);
386 bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
397 lastaddr, map->segments, seg, true);
401 error = _prepare_bounce_buffer(map, buflen, flags);
405 map->buffer_type = bus_dmamap::BUFFER_TYPE_SIMPLE;
406 map->buffer = buf;
407 map->buffer_length = buflen;
410 error = _bus_load_buffer(dmat, map->bounce_buffer, buflen, flags,
411 lastaddr, map->segments, seg, true);
415 (*callback)(callback_arg, map->segments, 0, error);
417 (*callback)(callback_arg, map->segments, seg + 1, 0);
427 bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf* mb,
451 error = _prepare_bounce_buffer(map, mb->m_pkthdr.len, flags);
455 map->buffer_type = bus_dmamap::BUFFER_TYPE_MBUF;
456 map->mbuf = mb;
459 error = _bus_load_buffer(dmat, map->bounce_buffer, mb->m_pkthdr.len, flags,
469 bus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf* mb,
473 error = bus_dmamap_load_mbuf_sg(dmat, map, mb, map->segments, &nsegs, flags);
476 (*callback)(callback_arg, map->segments, 0, 0, error);
478 (*callback)(callback_arg, map->segments, nsegs, mb->m_pkthdr.len,
486 bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
488 if (map == NULL)
491 if (map->buffer_type != bus_dmamap::BUFFER_PROHIBITED)
492 map->buffer_type = bus_dmamap::BUFFER_NONE;
493 map->buffer = NULL;
498 bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
500 if (map == NULL)
504 switch (map->buffer_type) {
511 length = map->buffer_length;
515 length = map->mbuf->m_pkthdr.len;
522 bus_dmamap_sync_etc(dmat, map, 0, length, op);
527 bus_dmamap_sync_etc(bus_dma_tag_t dmat, bus_dmamap_t map,
530 if (map == NULL)
535 switch (map->buffer_type) {
542 KASSERT((offset + length) <= map->buffer_length, ("mis-sized sync"));
543 memcpy((caddr_t)map->bounce_buffer + offset,
544 (caddr_t)map->buffer + offset, length);
548 m_copydata(map->mbuf, offset, length,
549 (caddr_t)map->bounce_buffer + offset);
563 switch (map->buffer_type) {
570 KASSERT((offset + length) <= map->buffer_length, ("mis-sized sync"));
571 memcpy((caddr_t)map->buffer + offset,
572 (caddr_t)map->bounce_buffer + offset, length);
576 m_copyback(map->mbuf, offset, length,
577 (caddr_t)map->bounce_buffer + offset);