X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-arm%2Farch-omap%2Fmemory.h;h=f6b57dd846a318a2099981cd402fd478aacca6f9;hb=f7f1b0f1e2fbadeab12d24236000e778aa9b1ead;hp=71a8e2196e80c48844bea5eec3b046bd4e5eed75;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-arm/arch-omap/memory.h b/include/asm-arm/arch-omap/memory.h index 71a8e2196..f6b57dd84 100644 --- a/include/asm-arm/arch-omap/memory.h +++ b/include/asm-arm/arch-omap/memory.h @@ -25,30 +25,17 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef __ASM_ARCH_MMU_H -#define __ASM_ARCH_MMU_H +#ifndef __ASM_ARCH_MEMORY_H +#define __ASM_ARCH_MEMORY_H /* - * Task size: 3GB + * Physical DRAM offset. */ -#define TASK_SIZE (0xbf000000UL) -#define TASK_SIZE_26 (0x04000000UL) - -/* - * This decides where the kernel will search for a free chunk of vm - * space during mmap's. - */ -#define TASK_UNMAPPED_BASE (0x40000000) - -/* - * Page offset: 3GB - */ -#define PAGE_OFFSET (0xC0000000UL) #define PHYS_OFFSET (0x10000000UL) /* @@ -56,21 +43,11 @@ */ #define OMAP1510_LB_OFFSET (0x30000000UL) -/* - * The DRAM is contiguous. - */ -#define __virt_to_phys__is_a_macro -#define __virt_to_phys(vpage) ((vpage) - PAGE_OFFSET + PHYS_OFFSET) -#define __phys_to_virt__is_a_macro -#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET - PHYS_OFFSET) - /* * Conversion between SDRAM and fake PCI bus, used by USB * NOTE: Physical address must be converted to Local Bus address * on OMAP-1510 only */ -#define __virt_to_bus__is_a_macro -#define __bus_to_virt__is_a_macro /* * Bus address is physical address, except for OMAP-1510 Local Bus. @@ -80,12 +57,30 @@ /* * OMAP-1510 bus address is translated into a Local Bus address if the - * OMAP bus type is lbus. See dmadev_uses_omap_lbus(). + * OMAP bus type is lbus. We do the address translation based on the + * device overriding the defaults used in the dma-mapping API. + * Note that the is_lbus_device() test is not very efficient on 1510 + * because of the strncmp(). */ #ifdef CONFIG_ARCH_OMAP1510 -#define bus_to_lbus(x) ((x) + (OMAP1510_LB_OFFSET - PHYS_OFFSET)) -#define lbus_to_bus(x) ((x) - (OMAP1510_LB_OFFSET - PHYS_OFFSET)) -#endif + +#define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET) +#define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET) +#define is_lbus_device(dev) (cpu_is_omap1510() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0)) + +#define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \ + (dma_addr_t)virt_to_lbus(page_address(page)) : \ + (dma_addr_t)__virt_to_bus(page_address(page));}) + +#define __arch_dma_to_virt(dev, addr) ({is_lbus_device(dev) ? \ + lbus_to_virt(addr) : \ + __bus_to_virt(addr);}) + +#define __arch_virt_to_dma(dev, addr) ({is_lbus_device(dev) ? \ + virt_to_lbus(addr) : \ + __virt_to_bus(addr);}) + +#endif /* CONFIG_ARCH_OMAP1510 */ #define PHYS_TO_NID(addr) (0) #endif