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
# ifdef __KERNEL__
# include <asm/cpu/addrspace.h>
2006-03-28 01:56:53 -08:00
/* Memory segments (32bit Privileged mode addresses) */
2006-09-27 17:25:07 +09:00
# ifndef CONFIG_CPU_SH2A
2005-04-16 15:20:36 -07:00
# define P0SEG 0x00000000
# define P1SEG 0x80000000
# define P2SEG 0xa0000000
# define P3SEG 0xc0000000
# define P4SEG 0xe0000000
2006-09-27 17:21:02 +09:00
# else
# define P0SEG 0x00000000
# define P1SEG 0x00000000
# define P2SEG 0x20000000
2006-09-27 17:25:07 +09:00
# define P3SEG 0x00000000
2006-09-27 17:21:02 +09:00
# define P4SEG 0x80000000
# endif
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)
/*
* Map an address to a certain privileged segment
*/
# 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))
# endif /* __KERNEL__ */
# endif /* __ASM_SH_ADDRSPACE_H */