Merge branch 'linus' into x86/urgent
[sfrench/cifs-2.6.git] / arch / arm / mach-iop13xx / include / mach / memory.h
1 #ifndef __ASM_ARCH_MEMORY_H
2 #define __ASM_ARCH_MEMORY_H
3
4 #include <mach/hardware.h>
5
6 /*
7  * Physical DRAM offset.
8  */
9 #define PHYS_OFFSET     UL(0x00000000)
10
11 #ifndef __ASSEMBLY__
12
13 #if defined(CONFIG_ARCH_IOP13XX)
14 #define IOP13XX_PMMR_V_START (IOP13XX_PMMR_VIRT_MEM_BASE)
15 #define IOP13XX_PMMR_V_END   (IOP13XX_PMMR_VIRT_MEM_BASE + IOP13XX_PMMR_SIZE)
16 #define IOP13XX_PMMR_P_START (IOP13XX_PMMR_PHYS_MEM_BASE)
17 #define IOP13XX_PMMR_P_END   (IOP13XX_PMMR_PHYS_MEM_BASE + IOP13XX_PMMR_SIZE)
18
19 static inline dma_addr_t __virt_to_lbus(unsigned long x)
20 {
21         return x + IOP13XX_PMMR_PHYS_MEM_BASE - IOP13XX_PMMR_VIRT_MEM_BASE;
22 }
23
24 static inline unsigned long __lbus_to_virt(dma_addr_t x)
25 {
26         return x + IOP13XX_PMMR_VIRT_MEM_BASE - IOP13XX_PMMR_PHYS_MEM_BASE;
27 }
28
29 #define __is_lbus_dma(a)                                \
30         ((a) >= IOP13XX_PMMR_P_START && (a) < IOP13XX_PMMR_P_END)
31
32 #define __is_lbus_virt(a)                               \
33         ((a) >= IOP13XX_PMMR_V_START && (a) < IOP13XX_PMMR_V_END)
34
35 /* Device is an lbus device if it is on the platform bus of the IOP13XX */
36 #define is_lbus_device(dev)                             \
37         (dev && strncmp(dev->bus->name, "platform", 8) == 0)
38
39 #define __arch_dma_to_virt(dev, addr)                                   \
40         ({                                                              \
41                 unsigned long __virt;                                   \
42                 dma_addr_t __dma = addr;                                \
43                 if (is_lbus_device(dev) && __is_lbus_dma(__dma))        \
44                         __virt = __lbus_to_virt(__dma);                 \
45                 else                                                    \
46                         __virt = __phys_to_virt(__dma);                 \
47                 (void *)__virt;                                         \
48         })
49
50 #define __arch_virt_to_dma(dev, addr)                                   \
51         ({                                                              \
52                 unsigned long __virt = (unsigned long)addr;             \
53                 dma_addr_t __dma;                                       \
54                 if (is_lbus_device(dev) && __is_lbus_virt(__virt))      \
55                         __dma = __virt_to_lbus(__virt);                 \
56                 else                                                    \
57                         __dma = __virt_to_phys(__virt);                 \
58                 __dma;                                                  \
59         })
60
61 #define __arch_page_to_dma(dev, page)                                   \
62         ({                                                              \
63                 /* __is_lbus_virt() can never be true for RAM pages */  \
64                 (dma_addr_t)page_to_phys(page);                         \
65         })
66
67 #endif /* CONFIG_ARCH_IOP13XX */
68 #endif /* !ASSEMBLY */
69
70 #define PFN_TO_NID(addr)        (0)
71
72 #endif