X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-ppc64%2Fpage.h;h=ac098722ae728c1d645ae9098dcce51d3f809d86;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=984602ae4fccf46fdc83014fe6163339c57f3de8;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-ppc64/page.h b/include/asm-ppc64/page.h index 984602ae4..ac098722a 100644 --- a/include/asm-ppc64/page.h +++ b/include/asm-ppc64/page.h @@ -12,30 +12,35 @@ #include -/* PAGE_SHIFT determines the page size */ -#define PAGE_SHIFT 12 -#ifndef __ASSEMBLY__ -# define PAGE_SIZE (1UL << PAGE_SHIFT) +#ifdef __ASSEMBLY__ + #define ASM_CONST(x) x #else -# define PAGE_SIZE (1 << PAGE_SHIFT) + #define __ASM_CONST(x) x##UL + #define ASM_CONST(x) __ASM_CONST(x) #endif + +/* PAGE_SHIFT determines the page size */ +#define PAGE_SHIFT 12 +#define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE-1)) #define PAGE_OFFSET_MASK (PAGE_SIZE-1) #define SID_SHIFT 28 -#define SID_MASK 0xfffffffff +#define SID_MASK 0xfffffffffUL +#define ESID_MASK 0xfffffffff0000000UL #define GET_ESID(x) (((x) >> SID_SHIFT) & SID_MASK) -#ifdef CONFIG_HUGETLB_PAGE - #define HPAGE_SHIFT 24 #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) #define HPAGE_MASK (~(HPAGE_SIZE - 1)) + +#ifdef CONFIG_HUGETLB_PAGE + #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) /* For 64-bit processes the hugepage range is 1T-1.5T */ -#define TASK_HPAGE_BASE (0x0000010000000000UL) -#define TASK_HPAGE_END (0x0000018000000000UL) +#define TASK_HPAGE_BASE ASM_CONST(0x0000010000000000) +#define TASK_HPAGE_END ASM_CONST(0x0000018000000000) #define LOW_ESID_MASK(addr, len) (((1U << (GET_ESID(addr+len-1)+1)) \ - (1U << GET_ESID(addr))) & 0xffff) @@ -177,8 +182,7 @@ static inline int get_order(unsigned long size) #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) -/* Not 100% correct, for use by /dev/mem only */ -extern int page_is_ram(unsigned long physaddr); +extern int page_is_ram(unsigned long pfn); #endif /* __ASSEMBLY__ */ @@ -196,11 +200,11 @@ extern int page_is_ram(unsigned long physaddr); /* KERNELBASE is defined for performance reasons. */ /* When KERNELBASE moves, those macros may have */ /* to change! */ -#define PAGE_OFFSET 0xC000000000000000 +#define PAGE_OFFSET ASM_CONST(0xC000000000000000) #define KERNELBASE PAGE_OFFSET -#define VMALLOCBASE 0xD000000000000000 -#define IOREGIONBASE 0xE000000000000000 -#define EEHREGIONBASE 0xA000000000000000 +#define VMALLOCBASE ASM_CONST(0xD000000000000000) +#define IOREGIONBASE ASM_CONST(0xE000000000000000) +#define EEHREGIONBASE ASM_CONST(0xA000000000000000) #define IO_REGION_ID (IOREGIONBASE>>REGION_SHIFT) #define EEH_REGION_ID (EEHREGIONBASE>>REGION_SHIFT) @@ -209,17 +213,6 @@ extern int page_is_ram(unsigned long physaddr); #define USER_REGION_ID (0UL) #define REGION_ID(X) (((unsigned long)(X))>>REGION_SHIFT) -/* - * Define valid/invalid EA bits (for all ranges) - */ -#define VALID_EA_BITS (0x000001ffffffffffUL) -#define INVALID_EA_BITS (~(REGION_MASK|VALID_EA_BITS)) - -#define IS_VALID_REGION_ID(x) \ - (((x) == USER_REGION_ID) || ((x) >= KERNEL_REGION_ID)) -#define IS_VALID_EA(x) \ - ((!((x) & INVALID_EA_BITS)) && IS_VALID_REGION_ID(REGION_ID(x))) - #define __bpn_to_ba(x) ((((unsigned long)(x))<> PAGE_SHIFT) @@ -236,6 +229,7 @@ extern int page_is_ram(unsigned long physaddr); #endif #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) +#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)