-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 93448 b: refs/heads/master c: 2c419bd h: refs/heads/master v: v3
- Loading branch information
Kumar Gala
authored and
Paul Mackerras
committed
Apr 24, 2008
1 parent
426040e
commit 84f83f2
Showing
7 changed files
with
178 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 2fd53e02be9a73cc49d69e0ff8860daa7b5bf8ab | ||
refs/heads/master: 2c419bdeca1d958bb02228b5141695f312d8c633 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
/* | ||
* fixmap.h: compile-time virtual memory allocation | ||
* | ||
* 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) 1998 Ingo Molnar | ||
* | ||
* Copyright 2008 Freescale Semiconductor Inc. | ||
* Port to powerpc added by Kumar Gala | ||
*/ | ||
|
||
#ifndef _ASM_FIXMAP_H | ||
#define _ASM_FIXMAP_H | ||
|
||
extern unsigned long FIXADDR_TOP; | ||
|
||
#ifndef __ASSEMBLY__ | ||
#include <linux/kernel.h> | ||
#include <asm/page.h> | ||
#ifdef CONFIG_HIGHMEM | ||
#include <linux/threads.h> | ||
#include <asm/kmap_types.h> | ||
#endif | ||
|
||
/* | ||
* Here we define all the compile-time 'special' virtual | ||
* addresses. The point is to have a constant address at | ||
* compile time, but to set the physical address only | ||
* in the boot process. We allocate these special addresses | ||
* from the end of virtual memory (0xfffff000) backwards. | ||
* Also this lets us do fail-safe vmalloc(), we | ||
* can guarantee that these special addresses and | ||
* vmalloc()-ed addresses never overlap. | ||
* | ||
* these 'compile-time allocated' memory buffers are | ||
* fixed-size 4k pages. (or larger if used with an increment | ||
* highger than 1) use fixmap_set(idx,phys) to associate | ||
* physical memory with fixmap indices. | ||
* | ||
* TLB entries of such buffers will not be flushed across | ||
* task switches. | ||
*/ | ||
enum fixed_addresses { | ||
FIX_HOLE, | ||
#ifdef CONFIG_HIGHMEM | ||
FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */ | ||
FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, | ||
#endif | ||
/* FIX_PCIE_MCFG, */ | ||
__end_of_fixed_addresses | ||
}; | ||
|
||
extern void __set_fixmap (enum fixed_addresses idx, | ||
phys_addr_t phys, pgprot_t flags); | ||
|
||
#define set_fixmap(idx, phys) \ | ||
__set_fixmap(idx, phys, PAGE_KERNEL) | ||
/* | ||
* Some hardware wants to get fixmapped without caching. | ||
*/ | ||
#define set_fixmap_nocache(idx, phys) \ | ||
__set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE) | ||
|
||
#define clear_fixmap(idx) \ | ||
__set_fixmap(idx, 0, __pgprot(0)) | ||
|
||
#define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) | ||
#define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) | ||
|
||
#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT)) | ||
#define __virt_to_fix(x) ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) | ||
|
||
extern void __this_fixmap_does_not_exist(void); | ||
|
||
/* | ||
* 'index to address' translation. If anyone tries to use the idx | ||
* directly without tranlation, we catch the bug with a NULL-deference | ||
* kernel oops. Illegal ranges of incoming indices are caught too. | ||
*/ | ||
static __always_inline unsigned long fix_to_virt(const unsigned int idx) | ||
{ | ||
/* | ||
* this branch gets completely eliminated after inlining, | ||
* except when someone tries to use fixaddr indices in an | ||
* illegal way. (such as mixing up address types or using | ||
* out-of-range indices). | ||
* | ||
* If it doesn't get removed, the linker will complain | ||
* loudly with a reasonably clear error message.. | ||
*/ | ||
if (idx >= __end_of_fixed_addresses) | ||
__this_fixmap_does_not_exist(); | ||
|
||
return __fix_to_virt(idx); | ||
} | ||
|
||
static inline unsigned long virt_to_fix(const unsigned long vaddr) | ||
{ | ||
BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | ||
return __virt_to_fix(vaddr); | ||
} | ||
|
||
#endif /* !__ASSEMBLY__ */ | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters