Commit | Line | Data |
---|---|---|
867e359b CM |
1 | /* |
2 | * Copyright (C) 1999 Gerhard Wichert, Siemens AG | |
3 | * Gerhard.Wichert@pdb.siemens.de | |
4 | * Copyright 2010 Tilera Corporation. All Rights Reserved. | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU General Public License | |
8 | * as published by the Free Software Foundation, version 2. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, but | |
11 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | |
13 | * NON INFRINGEMENT. See the GNU General Public License for | |
14 | * more details. | |
15 | * | |
16 | * Used in CONFIG_HIGHMEM systems for memory pages which | |
17 | * are not addressable by direct kernel virtual addresses. | |
18 | * | |
19 | */ | |
20 | ||
21 | #ifndef _ASM_TILE_HIGHMEM_H | |
22 | #define _ASM_TILE_HIGHMEM_H | |
23 | ||
24 | #include <linux/interrupt.h> | |
25 | #include <linux/threads.h> | |
867e359b CM |
26 | #include <asm/tlbflush.h> |
27 | #include <asm/homecache.h> | |
28 | ||
29 | /* declarations for highmem.c */ | |
30 | extern unsigned long highstart_pfn, highend_pfn; | |
31 | ||
32 | extern pte_t *pkmap_page_table; | |
33 | ||
34 | /* | |
35 | * Ordering is: | |
36 | * | |
37 | * FIXADDR_TOP | |
38 | * fixed_addresses | |
39 | * FIXADDR_START | |
40 | * temp fixed addresses | |
41 | * FIXADDR_BOOT_START | |
42 | * Persistent kmap area | |
43 | * PKMAP_BASE | |
44 | * VMALLOC_END | |
45 | * Vmalloc area | |
46 | * VMALLOC_START | |
47 | * high_memory | |
48 | */ | |
49 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) | |
50 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) | |
51 | #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) | |
52 | ||
53 | void *kmap_high(struct page *page); | |
54 | void kunmap_high(struct page *page); | |
55 | void *kmap(struct page *page); | |
56 | void kunmap(struct page *page); | |
57 | void *kmap_fix_kpte(struct page *page, int finished); | |
58 | ||
59 | /* This macro is used only in map_new_virtual() to map "page". */ | |
60 | #define kmap_prot page_to_kpgprot(page) | |
61 | ||
a24401bc | 62 | void *kmap_atomic(struct page *page); |
3e4d3af5 PZ |
63 | void __kunmap_atomic(void *kvaddr); |
64 | void *kmap_atomic_pfn(unsigned long pfn); | |
65 | void *kmap_atomic_prot_pfn(unsigned long pfn, pgprot_t prot); | |
3e4d3af5 | 66 | void *kmap_atomic_prot(struct page *page, pgprot_t prot); |
867e359b CM |
67 | void kmap_atomic_fix_kpte(struct page *page, int finished); |
68 | ||
69 | #define flush_cache_kmaps() do { } while (0) | |
70 | ||
71 | #endif /* _ASM_TILE_HIGHMEM_H */ |