2005-09-08 00:27:09 +04:00
# ifndef _ASM_POWERPC_MMAN_H
# define _ASM_POWERPC_MMAN_H
2005-04-17 02:20:36 +04:00
2009-05-14 02:56:24 +04:00
# include <asm-generic/mman-common.h>
2006-02-16 02:17:39 +03:00
2005-04-17 02:20:36 +04:00
/*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
2008-07-07 18:28:52 +04:00
# define PROT_SAO 0x10 /* Strong Access Ordering */
2005-04-17 02:20:36 +04:00
# define MAP_RENAME MAP_ANONYMOUS /* In SunOS terminology */
# define MAP_NORESERVE 0x40 /* don't reserve swap pages */
# define MAP_LOCKED 0x80
# define MAP_GROWSDOWN 0x0100 /* stack-like segment */
# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
# define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
# define MCL_CURRENT 0x2000 /* lock all currently mapped pages */
# define MCL_FUTURE 0x4000 /* lock all additions to address space */
# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
# define MAP_NONBLOCK 0x10000 /* do not block on IO */
2009-09-22 04:03:45 +04:00
# define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */
# define MAP_HUGETLB 0x40000 /* create a huge page mapping */
2005-04-17 02:20:36 +04:00
2008-07-14 13:25:57 +04:00
# ifdef __KERNEL__
2008-07-07 18:28:54 +04:00
# ifdef CONFIG_PPC64
2008-07-14 13:25:57 +04:00
# include <asm/cputable.h>
# include <linux/mm.h>
2008-07-07 18:28:54 +04:00
/*
* This file is included by linux / mman . h , so we can ' t use cacl_vm_prot_bits ( )
* here . How important is the optimization ?
*/
static inline unsigned long arch_calc_vm_prot_bits ( unsigned long prot )
{
return ( prot & PROT_SAO ) ? VM_SAO : 0 ;
}
# define arch_calc_vm_prot_bits(prot) arch_calc_vm_prot_bits(prot)
static inline pgprot_t arch_vm_get_page_prot ( unsigned long vm_flags )
{
2008-10-12 21:54:24 +04:00
return ( vm_flags & VM_SAO ) ? __pgprot ( _PAGE_SAO ) : __pgprot ( 0 ) ;
2008-07-07 18:28:54 +04:00
}
# define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags)
static inline int arch_validate_prot ( unsigned long prot )
{
if ( prot & ~ ( PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_SAO ) )
return 0 ;
if ( ( prot & PROT_SAO ) & & ! cpu_has_feature ( CPU_FTR_SAO ) )
return 0 ;
return 1 ;
}
# define arch_validate_prot(prot) arch_validate_prot(prot)
# endif /* CONFIG_PPC64 */
2008-07-14 13:25:57 +04:00
# endif /* __KERNEL__ */
2005-09-08 00:27:09 +04:00
# endif /* _ASM_POWERPC_MMAN_H */