diff options
Diffstat (limited to 'sys/sparc64')
| -rw-r--r-- | sys/sparc64/include/bus.h | 15 | ||||
| -rw-r--r-- | sys/sparc64/pci/psycho.c | 5 | ||||
| -rw-r--r-- | sys/sparc64/sbus/sbus.c | 5 | ||||
| -rw-r--r-- | sys/sparc64/sparc64/bus_machdep.c | 11 | ||||
| -rw-r--r-- | sys/sparc64/sparc64/iommu.c | 18 |
5 files changed, 20 insertions, 34 deletions
diff --git a/sys/sparc64/include/bus.h b/sys/sparc64/include/bus.h index 4a8a5c2aca80..bc6e518bd557 100644 --- a/sys/sparc64/include/bus.h +++ b/sys/sparc64/include/bus.h @@ -905,12 +905,10 @@ memsetw(void *d, int val, size_t size) struct mbuf; struct uio; -typedef enum { - BUS_DMASYNC_PREREAD, - BUS_DMASYNC_POSTREAD, - BUS_DMASYNC_PREWRITE, - BUS_DMASYNC_POSTWRITE, -} bus_dmasync_op_t; +#define BUS_DMASYNC_PREREAD 1 +#define BUS_DMASYNC_POSTREAD 2 +#define BUS_DMASYNC_PREWRITE 4 +#define BUS_DMASYNC_POSTWRITE 8 /* * A function that returns 1 if the address cannot be accessed by @@ -977,7 +975,7 @@ struct bus_dma_tag { bus_dmamap_t, struct uio *, bus_dmamap_callback2_t *, void *, int); void (*dt_dmamap_unload)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t); void (*dt_dmamap_sync)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, - bus_dmasync_op_t); + int); /* * DMA memory utility functions. @@ -1086,8 +1084,7 @@ sparc64_dmamap_unload(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t p) sparc64_dmamap_unload((t), (t), (p)) static __inline void -sparc64_dmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t m, - bus_dmasync_op_t op) +sparc64_dmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t m, int op) { bus_dma_tag_t lt; diff --git a/sys/sparc64/pci/psycho.c b/sys/sparc64/pci/psycho.c index 75767ee75490..77deb68cc8ff 100644 --- a/sys/sparc64/pci/psycho.c +++ b/sys/sparc64/pci/psycho.c @@ -111,8 +111,7 @@ static int psycho_dmamap_load_mbuf(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, static int psycho_dmamap_load_uio(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, struct uio *, bus_dmamap_callback2_t *, void *, int); static void psycho_dmamap_unload(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t); -static void psycho_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, - bus_dmasync_op_t); +static void psycho_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, int); static int psycho_dmamem_alloc_size(bus_dma_tag_t, bus_dma_tag_t, void **, int, bus_dmamap_t *, bus_size_t size); static int psycho_dmamem_alloc(bus_dma_tag_t, bus_dma_tag_t, void **, int, @@ -1430,7 +1429,7 @@ psycho_dmamap_unload(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map) static void psycho_dmamap_sync(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map, - bus_dmasync_op_t op) + int op) { struct psycho_softc *sc; diff --git a/sys/sparc64/sbus/sbus.c b/sys/sparc64/sbus/sbus.c index 46648291f4f8..bf398514fedb 100644 --- a/sys/sparc64/sbus/sbus.c +++ b/sys/sparc64/sbus/sbus.c @@ -242,8 +242,7 @@ static int sbus_dmamap_load_mbuf(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, static int sbus_dmamap_load_uio(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, struct uio *, bus_dmamap_callback2_t *, void *, int); static void sbus_dmamap_unload(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t); -static void sbus_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, - bus_dmasync_op_t); +static void sbus_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, int); static int sbus_dmamem_alloc_size(bus_dma_tag_t, bus_dma_tag_t, void **, int, bus_dmamap_t *, bus_size_t size); static int sbus_dmamem_alloc(bus_dma_tag_t, bus_dma_tag_t, void **, int, @@ -986,7 +985,7 @@ sbus_dmamap_unload(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map) static void sbus_dmamap_sync(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map, - bus_dmasync_op_t op) + int) { struct sbus_softc *sc = (struct sbus_softc *)pdmat->dt_cookie; diff --git a/sys/sparc64/sparc64/bus_machdep.c b/sys/sparc64/sparc64/bus_machdep.c index 2b3ddc87d650..c3545b014859 100644 --- a/sys/sparc64/sparc64/bus_machdep.c +++ b/sys/sparc64/sparc64/bus_machdep.c @@ -169,8 +169,7 @@ static int nexus_dmamap_load_mbuf(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, static int nexus_dmamap_load_uio(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, struct uio *, bus_dmamap_callback2_t *, void *, int); static void nexus_dmamap_unload(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t); -static void nexus_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, - bus_dmasync_op_t); +static void nexus_dmamap_sync(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t, int); static int nexus_dmamem_alloc_size(bus_dma_tag_t, bus_dma_tag_t, void **, int, bus_dmamap_t *, u_long size); static int nexus_dmamem_alloc(bus_dma_tag_t, bus_dma_tag_t, void **, int, @@ -555,7 +554,7 @@ nexus_dmamap_unload(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map) */ static void nexus_dmamap_sync(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map, - bus_dmasync_op_t op) + int op) { /* @@ -563,7 +562,7 @@ nexus_dmamap_sync(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map, * * Actually a #Sync is expensive. We should optimize. */ - if ((op == BUS_DMASYNC_PREREAD) || (op == BUS_DMASYNC_PREWRITE)) { + if ((op & BUS_DMASYNC_PREREAD) || (op & BUS_DMASYNC_PREWRITE)) { /* * Don't really need to do anything, but flush any pending * writes anyway. @@ -572,12 +571,12 @@ nexus_dmamap_sync(bus_dma_tag_t pdmat, bus_dma_tag_t ddmat, bus_dmamap_t map, } #if 0 /* Should not be needed. */ - if (op == BUS_DMASYNC_POSTREAD) { + if (op & BUS_DMASYNC_POSTREAD) { ecache_flush((vm_offset_t)map->buf, (vm_offset_t)map->buf + map->buflen - 1); } #endif - if (op == BUS_DMASYNC_POSTWRITE) { + if (op & BUS_DMASYNC_POSTWRITE) { /* Nothing to do. Handled by the bus controller. */ } } diff --git a/sys/sparc64/sparc64/iommu.c b/sys/sparc64/sparc64/iommu.c index 9dc8d96cc32e..015b19d2e0b5 100644 --- a/sys/sparc64/sparc64/iommu.c +++ b/sys/sparc64/sparc64/iommu.c @@ -1011,18 +1011,16 @@ iommu_dvmamap_unload(bus_dma_tag_t pt, bus_dma_tag_t dt, struct iommu_state *is, void iommu_dvmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, struct iommu_state *is, - bus_dmamap_t map, bus_dmasync_op_t op) + bus_dmamap_t map, int op) { struct bus_dmamap_res *r; vm_offset_t va; vm_size_t len; - switch (op) { - case BUS_DMASYNC_PREREAD: + /* XXX This is probably bogus. */ + if (op & BUS_DMASYNC_PREREAD) membar(Sync); - break; - case BUS_DMASYNC_POSTREAD: - case BUS_DMASYNC_PREWRITE: + if ((op & BUS_DMASYNC_POSTREAD) || (op & BUS_DMASYNC_PREWRITE)) { SLIST_FOREACH(r, &map->dm_reslist, dr_link) { va = (vm_offset_t)BDR_START(r); len = r->dr_used; @@ -1034,14 +1032,8 @@ iommu_dvmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, struct iommu_state *is, va += IO_PAGE_SIZE; } } - if (op == BUS_DMASYNC_PREWRITE) + if (op & BUS_DMASYNC_PREWRITE) membar(Sync); - break; - case BUS_DMASYNC_POSTWRITE: - /* Nothing to do. */ - break; - default: - panic("iommu_dvmamap_sync: bogus op %d", op); } } |
