Hi, It turns out my initial patch need to be limited to the use-case only. Before I start any real work, I want to know if anyone will object if I implement the following new BUS_DMA flag into FreeBSD's busdma system? amd64/amd64/busdma_machdep.c i386/i386/busdma_machdep.c arm/arm/busdma_machdep.c ia64/ia64/busdma_machdep.c mips/mips/busdma_machdep.c powerpc/powerpc/busdma_machdep.c sparc64/sparc64/bus_machdep.c sun4v/sun4v/bus_machdep.c sys/bus_dma.h /* * The following flag specifies that no re-alignment of individual * memory pages is allowed when loaded into DMA. It can only be used * when "maxsegsz" is equal to "PAGE_SIZE" and "alignment" is less * than or equal to 1. * * Background: Some kinds of DMA hardware only stores the full * physical address of the first memory page when multiple memory * pages are loaded into DMA. Consequtive memory pages only gets the * non-offset part of the physical address updated. The hardware * computes the amount of data that should be stored in the first * memory page from the minimum of the total transfer length and * PAGE_SIZE minus the initial page offset. When the initial page * offset is not preserved the hardware ends up transferring an * invalid number of bytes to or from the initial memory page. */ #define BUS_DMA_NOREAL 0x400 /* no page re-alignment allowed */ Without this new feature in busdma the USB hardware will not work when the DMA data is placed on bounce pages, for example on 64-bit architectures with more than 4GB of RAM. --HPSReceived on Sun Nov 16 2008 - 12:06:12 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:37 UTC