|  | #include <linux/init.h> | 
|  | #include <linux/module.h> | 
|  | #include <asm/sizes.h> | 
|  | #include <asm/page.h> | 
|  | #include <asm/addrspace.h> | 
|  |  | 
|  | /* | 
|  | * 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 | 
|  | * 512MB lowmem, others via a special uncached mapping. | 
|  | * | 
|  | * Default value only valid in 29 bit mode, in 32bit 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; | 
|  | EXPORT_SYMBOL(uncached_start); | 
|  | EXPORT_SYMBOL(uncached_end); | 
|  |  | 
|  | int virt_addr_uncached(unsigned long kaddr) | 
|  | { | 
|  | return (kaddr >= uncached_start) && (kaddr < uncached_end); | 
|  | } | 
|  | EXPORT_SYMBOL(virt_addr_uncached); | 
|  |  | 
|  | void __init uncached_init(void) | 
|  | { | 
|  | #ifdef CONFIG_29BIT | 
|  | uncached_start = P2SEG; | 
|  | #else | 
|  | uncached_start = memory_end; | 
|  | #endif | 
|  | uncached_end = uncached_start + uncached_size; | 
|  | } | 
|  |  | 
|  | void __init uncached_resize(unsigned long size) | 
|  | { | 
|  | uncached_size = size; | 
|  | uncached_end = uncached_start + uncached_size; | 
|  | } |