Lines Matching defs:dmat

45 	bus_dma_tag_t		dmat;
94 int flags, bus_dma_lock_t* lockfunc, void* lockfuncarg, bus_dma_tag_t* dmat)
144 *dmat = newtag;
150 bus_dma_tag_destroy(bus_dma_tag_t dmat)
152 if (dmat == NULL)
154 if (dmat->map_count != 0)
157 while (dmat != NULL) {
160 parent = dmat->parent;
161 atomic_add(&dmat->ref_count, -1);
162 if (dmat->ref_count == 0) {
163 kernel_free(dmat, M_DEVBUF);
166 dmat = parent;
168 dmat = NULL;
175 bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t* mapp)
181 (*mapp)->dmat = dmat;
183 (*mapp)->segments = (bus_dma_segment_t *)calloc(dmat->maxsegments,
191 atomic_add(&dmat->map_count, 1);
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)
235 atomic_add(&map->dmat->map_count, -1);
244 bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
258 bus_dmamap_create(dmat, flags, mapp);
272 if (dmat->lowaddr > B_PAGE_SIZE) {
273 *vaddr = kernel_contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
274 0, dmat->lowaddr,
275 dmat->alignment ? dmat->alignment : 1ul, dmat->boundary);
278 "0x%" B_PRIxPHYSADDR "\n", dmat->lowaddr);
280 if (*vaddr == NULL && dmat->highaddr < BUS_SPACE_MAXADDR) {
281 *vaddr = kernel_contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
282 dmat->highaddr, BUS_SPACE_MAXADDR,
283 dmat->alignment ? dmat->alignment : 1ul, dmat->boundary);
290 (int)dmat->maxsize, dmat->lowaddr, dmat->highaddr, dmat->boundary);
292 } else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
294 dmat->alignment, vtophys(vaddr));
295 bus_dmamem_free(dmat, *vaddr, (mapp != NULL) ? *mapp : NULL);
310 bus_dmamem_free(bus_dma_tag_t dmat, void* vaddr, bus_dmamap_t map)
312 bus_dmamem_free_tagless(vaddr, dmat->maxsize);
313 bus_dmamap_destroy(dmat, map);
318 _validate_address(bus_dma_tag_t dmat, bus_addr_t paddr, bool validate_alignment = true)
320 if (paddr > dmat->lowaddr && paddr <= dmat->highaddr)
322 if (validate_alignment && !vm_addr_align_ok(paddr, dmat->alignment))
330 _bus_load_buffer(bus_dma_tag_t dmat, void* buf, bus_size_t buflen,
335 const bus_addr_t boundary_mask = ~(dmat->boundary - 1);
343 if (segment_size > dmat->maxsegsz)
344 segment_size = dmat->maxsegsz;
346 if (dmat->boundary > 0) {
348 bus_addr_t boundary_addr = (phys_addr + dmat->boundary) & boundary_mask;
355 && (segs[seg].ds_len + segment_size) <= dmat->maxsegsz
356 && (dmat->boundary == 0
359 if (!_validate_address(dmat, phys_addr, false))
366 else if (++seg >= dmat->maxsegments)
369 if (!_validate_address(dmat, phys_addr))
386 bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
393 if (buflen > dmat->maxsize)
396 error = _bus_load_buffer(dmat, buf, buflen, flags,
410 error = _bus_load_buffer(dmat, map->bounce_buffer, buflen, flags,
427 bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf* mb,
432 if (mb->m_pkthdr.len > dmat->maxsize)
444 error = _bus_load_buffer(dmat, m->m_data, m->m_len,
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);
486 bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
498 bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
522 bus_dmamap_sync_etc(dmat, map, 0, length, op);
527 bus_dmamap_sync_etc(bus_dma_tag_t dmat, bus_dmamap_t map,