1282655Szbb/*- 2282655Szbb * Copyright (c) 2013 The FreeBSD Foundation 3282655Szbb * All rights reserved. 4282655Szbb * 5282655Szbb * This software was developed by Konstantin Belousov <kib@FreeBSD.org> 6282655Szbb * under sponsorship from the FreeBSD Foundation. 7282655Szbb * 8282655Szbb * Redistribution and use in source and binary forms, with or without 9282655Szbb * modification, are permitted provided that the following conditions 10282655Szbb * are met: 11282655Szbb * 1. Redistributions of source code must retain the above copyright 12282655Szbb * notice, this list of conditions and the following disclaimer. 13282655Szbb * 2. Redistributions in binary form must reproduce the above copyright 14282655Szbb * notice, this list of conditions and the following disclaimer in the 15282655Szbb * documentation and/or other materials provided with the distribution. 16282655Szbb * 17282655Szbb * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18282655Szbb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19282655Szbb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20282655Szbb * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21282655Szbb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22282655Szbb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23282655Szbb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24282655Szbb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25282655Szbb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26282655Szbb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27282655Szbb * SUCH DAMAGE. 28282655Szbb * 29282655Szbb * $FreeBSD: releng/11.0/sys/arm64/include/bus_dma_impl.h 282655 2015-05-08 18:47:19Z zbb $ 30282655Szbb */ 31282655Szbb 32282655Szbb#ifndef _MACHINE_BUS_DMA_IMPL_H_ 33282655Szbb#define _MACHINE_BUS_DMA_IMPL_H_ 34282655Szbb 35282655Szbbstruct bus_dma_tag_common { 36282655Szbb struct bus_dma_impl *impl; 37282655Szbb struct bus_dma_tag_common *parent; 38282655Szbb bus_size_t alignment; 39282655Szbb bus_addr_t boundary; 40282655Szbb bus_addr_t lowaddr; 41282655Szbb bus_addr_t highaddr; 42282655Szbb bus_dma_filter_t *filter; 43282655Szbb void *filterarg; 44282655Szbb bus_size_t maxsize; 45282655Szbb u_int nsegments; 46282655Szbb bus_size_t maxsegsz; 47282655Szbb int flags; 48282655Szbb bus_dma_lock_t *lockfunc; 49282655Szbb void *lockfuncarg; 50282655Szbb int ref_count; 51282655Szbb}; 52282655Szbb 53282655Szbbstruct bus_dma_impl { 54282655Szbb int (*tag_create)(bus_dma_tag_t parent, 55282655Szbb bus_size_t alignment, bus_addr_t boundary, bus_addr_t lowaddr, 56282655Szbb bus_addr_t highaddr, bus_dma_filter_t *filter, 57282655Szbb void *filterarg, bus_size_t maxsize, int nsegments, 58282655Szbb bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc, 59282655Szbb void *lockfuncarg, bus_dma_tag_t *dmat); 60282655Szbb int (*tag_destroy)(bus_dma_tag_t dmat); 61282655Szbb int (*map_create)(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp); 62282655Szbb int (*map_destroy)(bus_dma_tag_t dmat, bus_dmamap_t map); 63282655Szbb int (*mem_alloc)(bus_dma_tag_t dmat, void** vaddr, int flags, 64282655Szbb bus_dmamap_t *mapp); 65282655Szbb void (*mem_free)(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map); 66282655Szbb int (*load_ma)(bus_dma_tag_t dmat, bus_dmamap_t map, 67282655Szbb struct vm_page **ma, bus_size_t tlen, int ma_offs, int flags, 68282655Szbb bus_dma_segment_t *segs, int *segp); 69282655Szbb int (*load_phys)(bus_dma_tag_t dmat, bus_dmamap_t map, 70282655Szbb vm_paddr_t buf, bus_size_t buflen, int flags, 71282655Szbb bus_dma_segment_t *segs, int *segp); 72282655Szbb int (*load_buffer)(bus_dma_tag_t dmat, bus_dmamap_t map, 73282655Szbb void *buf, bus_size_t buflen, pmap_t pmap, int flags, 74282655Szbb bus_dma_segment_t *segs, int *segp); 75282655Szbb void (*map_waitok)(bus_dma_tag_t dmat, bus_dmamap_t map, 76282655Szbb struct memdesc *mem, bus_dmamap_callback_t *callback, 77282655Szbb void *callback_arg); 78282655Szbb bus_dma_segment_t *(*map_complete)(bus_dma_tag_t dmat, bus_dmamap_t map, 79282655Szbb bus_dma_segment_t *segs, int nsegs, int error); 80282655Szbb void (*map_unload)(bus_dma_tag_t dmat, bus_dmamap_t map); 81282655Szbb void (*map_sync)(bus_dma_tag_t dmat, bus_dmamap_t map, 82282655Szbb bus_dmasync_op_t op); 83282655Szbb}; 84282655Szbb 85282655Szbbvoid bus_dma_dflt_lock(void *arg, bus_dma_lock_op_t op); 86282655Szbbint bus_dma_run_filter(struct bus_dma_tag_common *dmat, bus_addr_t paddr); 87282655Szbbint common_bus_dma_tag_create(struct bus_dma_tag_common *parent, 88282655Szbb bus_size_t alignment, 89282655Szbb bus_addr_t boundary, bus_addr_t lowaddr, bus_addr_t highaddr, 90282655Szbb bus_dma_filter_t *filter, void *filterarg, bus_size_t maxsize, 91282655Szbb int nsegments, bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc, 92282655Szbb void *lockfuncarg, size_t sz, void **dmat); 93282655Szbb 94282655Szbbextern struct bus_dma_impl bus_dma_bounce_impl; 95282655Szbb 96282655Szbb#endif 97