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> 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 62 void *kmap_atomic(struct page *page); 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); 66 void *kmap_atomic_prot(struct page *page, pgprot_t prot); 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 */ 72