2005-04-16 15:20:36 -07:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1999 by Kaz Kojima
*
* Defitions for the address spaces of the SH CPUs .
*/
# ifndef __ASM_SH_ADDRSPACE_H
# define __ASM_SH_ADDRSPACE_H
2007-11-08 18:42:46 +09:00
2005-04-16 15:20:36 -07:00
# ifdef __KERNEL__
# include <asm/cpu/addrspace.h>
2007-11-08 18:42:46 +09:00
/* If this CPU supports segmentation, hook up the helpers */
# ifdef P1SEG
2005-04-16 15:20:36 -07:00
2007-11-21 15:34:02 +09:00
/*
[ P0 / U0 ( virtual ) ] 0x00000000 < - - - - - - User space
[ P1 ( fixed ) cached ] 0x80000000 < - - - - - - Kernel space
[ P2 ( fixed ) non - cachable ] 0xA0000000 < - - - - - - Physical access
[ P3 ( virtual ) cached ] 0xC0000000 < - - - - - - vmalloced area
[ P4 control ] 0xE0000000
*/
2005-04-16 15:20:36 -07:00
/* Returns the privileged segment base of a given address */
# define PXSEG(a) (((unsigned long)(a)) & 0xe0000000)
/* Returns the physical address of a PnSEG (n=1,2) address */
# define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff)
2007-11-30 17:52:53 +09:00
# ifdef CONFIG_29BIT
2005-04-16 15:20:36 -07:00
/*
* Map an address to a certain privileged segment
*/
2007-11-08 18:42:46 +09:00
# define P1SEGADDR(a) \
( ( __typeof__ ( a ) ) ( ( ( unsigned long ) ( a ) & 0x1fffffff ) | P1SEG ) )
# define P2SEGADDR(a) \
( ( __typeof__ ( a ) ) ( ( ( unsigned long ) ( a ) & 0x1fffffff ) | P2SEG ) )
# define P3SEGADDR(a) \
( ( __typeof__ ( a ) ) ( ( ( unsigned long ) ( a ) & 0x1fffffff ) | P3SEG ) )
# define P4SEGADDR(a) \
( ( __typeof__ ( a ) ) ( ( ( unsigned long ) ( a ) & 0x1fffffff ) | P4SEG ) )
2007-11-30 17:52:53 +09:00
# endif /* 29BIT */
2007-11-08 18:42:46 +09:00
# endif /* P1SEG */
2005-04-16 15:20:36 -07:00
2007-11-30 17:52:53 +09:00
/* Check if an address can be reached in 29 bits */
# define IS_29BIT(a) (((unsigned long)(a)) < 0x20000000)
2005-04-16 15:20:36 -07:00
# endif /* __KERNEL__ */
# endif /* __ASM_SH_ADDRSPACE_H */