2010-02-17 16:28:00 +09:00
# include <linux/init.h>
2010-03-10 16:46:58 +09:00
# include <linux/module.h>
2010-02-17 16:28:00 +09:00
# include <asm/sizes.h>
# include <asm/page.h>
2010-03-08 21:03:21 +09:00
# include <asm/addrspace.h>
2010-02-17 16:28:00 +09:00
/*
* This is the offset of the uncached section from its cached alias .
*
* Legacy platforms handle trivial transitions between cached and
* uncached segments by making use of the 1 : 1 mapping relationship in
* 512 MB lowmem , others via a special uncached mapping .
*
* Default value only valid in 29 bit mode , in 32 bit mode this will be
* updated by the early PMB initialization code .
*/
unsigned long cached_to_uncached = SZ_512M ;
unsigned long uncached_size = SZ_512M ;
unsigned long uncached_start , uncached_end ;
2010-03-10 16:46:58 +09:00
EXPORT_SYMBOL ( uncached_start ) ;
EXPORT_SYMBOL ( uncached_end ) ;
2010-02-17 16:28:00 +09:00
int virt_addr_uncached ( unsigned long kaddr )
{
return ( kaddr > = uncached_start ) & & ( kaddr < uncached_end ) ;
}
2010-03-10 16:46:58 +09:00
EXPORT_SYMBOL ( virt_addr_uncached ) ;
2010-02-17 16:28:00 +09:00
void __init uncached_init ( void )
{
2010-11-04 12:32:24 +09:00
# if defined(CONFIG_29BIT) || !defined(CONFIG_MMU)
2010-03-08 21:03:21 +09:00
uncached_start = P2SEG ;
# else
2010-02-17 16:28:00 +09:00
uncached_start = memory_end ;
2010-03-08 21:03:21 +09:00
# endif
2010-02-17 16:28:00 +09:00
uncached_end = uncached_start + uncached_size ;
}
2010-02-18 18:13:51 +09:00
void __init uncached_resize ( unsigned long size )
{
uncached_size = size ;
uncached_end = uncached_start + uncached_size ;
}