svn commit: r245214 - in projects/altix2/sys: kern sys
Marcel Moolenaar
marcel at FreeBSD.org
Wed Jan 9 05:02:56 UTC 2013
Author: marcel
Date: Wed Jan 9 05:02:55 2013
New Revision: 245214
URL: http://svnweb.freebsd.org/changeset/base/245214
Log:
Add the BUSDMA_ALLOC_CONSISTENT flag. Pass it along in the mtag and save
it in the memory descriptor.
The flag tells the backend that the allocation needs a coherent and
unbuffered (synchronous) DMA mapping because it's used for a CPU and
device handshake protocol, such as mailboxes and/or buffer rings.
On the SGI Altix, this means that we cannot use a direct-mapped 32-bit
DMA address, nor a 64-bit DAC address when the PCI bus is not in PCI-X
mode.
Modified:
projects/altix2/sys/kern/subr_busdma.c
projects/altix2/sys/sys/busdma.h
Modified: projects/altix2/sys/kern/subr_busdma.c
==============================================================================
--- projects/altix2/sys/kern/subr_busdma.c Wed Jan 9 04:04:30 2013 (r245213)
+++ projects/altix2/sys/kern/subr_busdma.c Wed Jan 9 05:02:55 2013 (r245214)
@@ -813,7 +813,7 @@ busdma_mem_alloc(struct busdma_tag *tag,
if (md == NULL)
return (ENOMEM);
- mtag.dmt_flags = flags & BUSDMA_MD_PLATFORM_FLAGS;
+ mtag.dmt_flags = flags;
mtag.dmt_minaddr = tag->dt_minaddr;
mtag.dmt_maxaddr = tag->dt_maxaddr;
mtag.dmt_maxsz = tag->dt_maxsegsz;
@@ -826,7 +826,7 @@ busdma_mem_alloc(struct busdma_tag *tag,
goto fail;
}
- md->md_flags |= mtag.dmt_flags & BUSDMA_MD_PLATFORM_FLAGS;
+ md->md_flags = mtag.dmt_flags;
mflags = (flags & BUSDMA_ALLOC_ZERO) ? M_ZERO : 0;
idx = 0;
Modified: projects/altix2/sys/sys/busdma.h
==============================================================================
--- projects/altix2/sys/sys/busdma.h Wed Jan 9 04:04:30 2013 (r245213)
+++ projects/altix2/sys/sys/busdma.h Wed Jan 9 05:02:55 2013 (r245214)
@@ -148,9 +148,12 @@ busdma_md_get_pointer(busdma_md_t md, u_
*/
int busdma_mem_alloc(busdma_tag_t tag, u_int flags, busdma_md_t *md_p);
-/* Allocate pre-zeroed memory. */
+/* Allocate pre-zeroed DMA memory. */
#define BUSDMA_ALLOC_ZERO 0x10000
+/* Allocate memory with consistent mapping. */
+#define BUSDMA_ALLOC_CONSISTENT 0x20000
+
/*
* busdma_mem_free
* returns: errno value
More information about the svn-src-projects
mailing list