Deleted Added
full compact
busdma_machdep-v4.c (254025) busdma_machdep-v4.c (257201)
1/*-
2 * Copyright (c) 2012 Ian Lepore
3 * Copyright (c) 2004 Olivier Houchard
4 * Copyright (c) 2002 Peter Grehan
5 * Copyright (c) 1997, 1998 Justin T. Gibbs.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 16 unchanged lines hidden (view full) ---

25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred
30 */
31
32#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2012 Ian Lepore
3 * Copyright (c) 2004 Olivier Houchard
4 * Copyright (c) 2002 Peter Grehan
5 * Copyright (c) 1997, 1998 Justin T. Gibbs.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 16 unchanged lines hidden (view full) ---

25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * From i386/busdma_machdep.c,v 1.26 2002/04/19 22:58:09 alfred
30 */
31
32#include <sys/cdefs.h>
33__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 254025 2013-08-07 06:21:20Z jeff $");
33__FBSDID("$FreeBSD: head/sys/arm/arm/busdma_machdep.c 257201 2013-10-27 03:13:26Z ian $");
34
35/*
36 * ARM bus dma support routines.
37 *
38 * XXX Things to investigate / fix some day...
39 * - What is the earliest that this API can be called? Could there be any
40 * fallout from changing the SYSINIT() order from SI_SUB_VM to SI_SUB_KMEM?
41 * - The manpage mentions the BUS_DMA_NOWAIT flag only in the context of the

--- 75 unchanged lines hidden (view full) ---

117 * on first use.
118 */
119 bus_dma_segment_t *segments;
120 bus_dma_segment_t tagsegs[2];
121};
122
123struct bounce_page {
124 vm_offset_t vaddr; /* kva of bounce buffer */
34
35/*
36 * ARM bus dma support routines.
37 *
38 * XXX Things to investigate / fix some day...
39 * - What is the earliest that this API can be called? Could there be any
40 * fallout from changing the SYSINIT() order from SI_SUB_VM to SI_SUB_KMEM?
41 * - The manpage mentions the BUS_DMA_NOWAIT flag only in the context of the

--- 75 unchanged lines hidden (view full) ---

117 * on first use.
118 */
119 bus_dma_segment_t *segments;
120 bus_dma_segment_t tagsegs[2];
121};
122
123struct bounce_page {
124 vm_offset_t vaddr; /* kva of bounce buffer */
125 vm_offset_t vaddr_nocache; /* kva of bounce buffer uncached */
126 bus_addr_t busaddr; /* Physical address */
127 vm_offset_t datavaddr; /* kva of client data */
128 bus_addr_t dataaddr; /* client physical address */
129 bus_size_t datacount; /* client data count */
130 STAILQ_ENTRY(bounce_page) links;
131};
132
133struct sync_list {

--- 1057 unchanged lines hidden (view full) ---

1191static void
1192_bus_dmamap_sync_bp(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
1193{
1194 struct bounce_page *bpage;
1195
1196 STAILQ_FOREACH(bpage, &map->bpages, links) {
1197 if (op & BUS_DMASYNC_PREWRITE) {
1198 if (bpage->datavaddr != 0)
125 bus_addr_t busaddr; /* Physical address */
126 vm_offset_t datavaddr; /* kva of client data */
127 bus_addr_t dataaddr; /* client physical address */
128 bus_size_t datacount; /* client data count */
129 STAILQ_ENTRY(bounce_page) links;
130};
131
132struct sync_list {

--- 1057 unchanged lines hidden (view full) ---

1190static void
1191_bus_dmamap_sync_bp(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
1192{
1193 struct bounce_page *bpage;
1194
1195 STAILQ_FOREACH(bpage, &map->bpages, links) {
1196 if (op & BUS_DMASYNC_PREWRITE) {
1197 if (bpage->datavaddr != 0)
1199 bcopy((void *)bpage->datavaddr,
1200 (void *)(bpage->vaddr_nocache != 0 ?
1201 bpage->vaddr_nocache :
1202 bpage->vaddr),
1203 bpage->datacount);
1198 bcopy((void *)bpage->datavaddr,
1199 (void *)bpage->vaddr, bpage->datacount);
1204 else
1205 physcopyout(bpage->dataaddr,
1200 else
1201 physcopyout(bpage->dataaddr,
1206 (void *)(bpage->vaddr_nocache != 0 ?
1207 bpage->vaddr_nocache :
1208 bpage->vaddr),
1209 bpage->datacount);
1210 if (bpage->vaddr_nocache == 0) {
1211 cpu_dcache_wb_range(bpage->vaddr,
1212 bpage->datacount);
1213 cpu_l2cache_wb_range(bpage->vaddr,
1214 bpage->datacount);
1215 }
1202 (void *)bpage->vaddr,bpage->datacount);
1203 cpu_dcache_wb_range(bpage->vaddr, bpage->datacount);
1204 cpu_l2cache_wb_range(bpage->vaddr, bpage->datacount);
1216 dmat->bounce_zone->total_bounced++;
1217 }
1218 if (op & BUS_DMASYNC_POSTREAD) {
1205 dmat->bounce_zone->total_bounced++;
1206 }
1207 if (op & BUS_DMASYNC_POSTREAD) {
1219 if (bpage->vaddr_nocache == 0) {
1220 cpu_dcache_inv_range(bpage->vaddr,
1221 bpage->datacount);
1222 cpu_l2cache_inv_range(bpage->vaddr,
1223 bpage->datacount);
1224 }
1208 cpu_dcache_inv_range(bpage->vaddr, bpage->datacount);
1209 cpu_l2cache_inv_range(bpage->vaddr, bpage->datacount);
1225 if (bpage->datavaddr != 0)
1210 if (bpage->datavaddr != 0)
1226 bcopy((void *)(bpage->vaddr_nocache != 0 ?
1227 bpage->vaddr_nocache : bpage->vaddr),
1211 bcopy((void *)bpage->vaddr,
1228 (void *)bpage->datavaddr, bpage->datacount);
1229 else
1212 (void *)bpage->datavaddr, bpage->datacount);
1213 else
1230 physcopyin((void *)(bpage->vaddr_nocache != 0 ?
1231 bpage->vaddr_nocache : bpage->vaddr),
1214 physcopyin((void *)bpage->vaddr,
1232 bpage->dataaddr, bpage->datacount);
1233 dmat->bounce_zone->total_bounced++;
1234 }
1235 }
1236}
1237
1238void
1239_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)

--- 140 unchanged lines hidden (view full) ---

1380 bz->lowaddr,
1381 PAGE_SIZE,
1382 0);
1383 if (bpage->vaddr == 0) {
1384 free(bpage, M_DEVBUF);
1385 break;
1386 }
1387 bpage->busaddr = pmap_kextract(bpage->vaddr);
1215 bpage->dataaddr, bpage->datacount);
1216 dmat->bounce_zone->total_bounced++;
1217 }
1218 }
1219}
1220
1221void
1222_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)

--- 140 unchanged lines hidden (view full) ---

1363 bz->lowaddr,
1364 PAGE_SIZE,
1365 0);
1366 if (bpage->vaddr == 0) {
1367 free(bpage, M_DEVBUF);
1368 break;
1369 }
1370 bpage->busaddr = pmap_kextract(bpage->vaddr);
1388 bpage->vaddr_nocache = (vm_offset_t)arm_remap_nocache(
1389 (void *)bpage->vaddr, PAGE_SIZE);
1390 mtx_lock(&bounce_lock);
1391 STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links);
1392 total_bpages++;
1393 bz->total_bpages++;
1394 bz->free_bpages++;
1395 mtx_unlock(&bounce_lock);
1396 count++;
1397 numpages--;

--- 119 unchanged lines hidden ---
1371 mtx_lock(&bounce_lock);
1372 STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links);
1373 total_bpages++;
1374 bz->total_bpages++;
1375 bz->free_bpages++;
1376 mtx_unlock(&bounce_lock);
1377 count++;
1378 numpages--;

--- 119 unchanged lines hidden ---