Module Name: src Committed By: dyoung Date: Wed Aug 31 20:04:51 UTC 2011
Modified Files: src/sys/sys: bus.h Log Message: Add some definitions for bus_dma(9) overrides. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/sys/bus.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/sys/bus.h diff -u src/sys/sys/bus.h:1.8 src/sys/sys/bus.h:1.9 --- src/sys/sys/bus.h:1.8 Sat Aug 20 06:00:14 2011 +++ src/sys/sys/bus.h Wed Aug 31 20:04:51 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: bus.h,v 1.8 2011/08/20 06:00:14 he Exp $ */ +/* $NetBSD: bus.h,v 1.9 2011/08/31 20:04:51 dyoung Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -79,6 +79,17 @@ #endif }; +enum bus_dma_override_idx { + BUS_DMAMAP_OVERRIDE_CREATE = __BIT(0) + , BUS_DMAMAP_OVERRIDE_DESTROY = __BIT(1) + , BUS_DMAMAP_OVERRIDE_LOAD = __BIT(2) + , BUS_DMAMAP_OVERRIDE_LOAD_MBUF = __BIT(3) + , BUS_DMAMAP_OVERRIDE_LOAD_UIO = __BIT(4) + , BUS_DMAMAP_OVERRIDE_LOAD_RAW = __BIT(5) + , BUS_DMAMAP_OVERRIDE_UNLOAD = __BIT(6) + , BUS_DMAMAP_OVERRIDE_SYNC = __BIT(7) +}; + /* Only add new members at the end of this struct! */ struct bus_space_overrides { int (*ov_space_map)(void *, bus_space_tag_t, bus_addr_t, bus_size_t, @@ -119,11 +130,36 @@ #endif }; +struct mbuf; +struct uio; + +/* Only add new members at the end of this struct! */ +struct bus_dma_overrides { + int (*ov_dmamap_create)(void *, bus_dma_tag_t, bus_size_t, int, + bus_size_t, bus_size_t, int, bus_dmamap_t *); + void (*ov_dmamap_destroy)(void *, bus_dma_tag_t, bus_dmamap_t); + int (*ov_dmamap_load)(void *, bus_dma_tag_t, bus_dmamap_t, void *, + bus_size_t, struct lwp *, int); + int (*ov_dmamap_load_mbuf)(void *, bus_dma_tag_t, bus_dmamap_t, + struct mbuf *, int); + int (*ov_dmamap_load_uio)(void *, bus_dma_tag_t, bus_dmamap_t, + struct uio *, int); + int (*ov_dmamap_load_raw)(void *, bus_dma_tag_t, bus_dmamap_t, + bus_dma_segment_t *, int, bus_size_t, int); + void (*ov_dmamap_unload)(void *, bus_dma_tag_t, bus_dmamap_t); + void (*ov_dmamap_sync)(void *, bus_dma_tag_t, bus_dmamap_t, bus_addr_t, + bus_size_t, int); +}; + int bus_space_tag_create(bus_space_tag_t, uint64_t, uint64_t, const struct bus_space_overrides *, void *, bus_space_tag_t *); void bus_space_tag_destroy(bus_space_tag_t); +int bus_dma_tag_create(bus_dma_tag_t, uint64_t, + const struct bus_dma_overrides *, void *, bus_dma_tag_t *); +void bus_dma_tag_destroy(bus_dma_tag_t); + /* Reserve a region of bus space. Reserved bus space cannot be allocated * with bus_space_alloc(). Reserved space has not been bus_space_map()'d. */