fixmap.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * fixmap.h: compile-time virtual memory allocation
  3. *
  4. * This file is subject to the terms and conditions of the GNU General Public
  5. * License. See the file "COPYING" in the main directory of this archive
  6. * for more details.
  7. *
  8. * Copyright (C) 1998 Ingo Molnar
  9. *
  10. * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
  11. */
  12. #ifndef _ASM_FIXMAP_H
  13. #define _ASM_FIXMAP_H
  14. #include <asm/page.h>
  15. #include <spaces.h>
  16. #ifdef CONFIG_HIGHMEM
  17. #include <linux/threads.h>
  18. #include <asm/kmap_types.h>
  19. #endif
  20. /*
  21. * Here we define all the compile-time 'special' virtual
  22. * addresses. The point is to have a constant address at
  23. * compile time, but to set the physical address only
  24. * in the boot process. We allocate these special addresses
  25. * from the end of virtual memory (0xfffff000) backwards.
  26. * Also this lets us do fail-safe vmalloc(), we
  27. * can guarantee that these special addresses and
  28. * vmalloc()-ed addresses never overlap.
  29. *
  30. * these 'compile-time allocated' memory buffers are
  31. * fixed-size 4k pages. (or larger if used with an increment
  32. * highger than 1) use fixmap_set(idx,phys) to associate
  33. * physical memory with fixmap indices.
  34. *
  35. * TLB entries of such buffers will not be flushed across
  36. * task switches.
  37. */
  38. /*
  39. * on UP currently we will have no trace of the fixmap mechanizm,
  40. * no page table allocations, etc. This might change in the
  41. * future, say framebuffers for the console driver(s) could be
  42. * fix-mapped?
  43. */
  44. enum fixed_addresses {
  45. #define FIX_N_COLOURS 8
  46. FIX_CMAP_BEGIN,
  47. FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * 2),
  48. #ifdef CONFIG_HIGHMEM
  49. /* reserved pte's for temporary kernel mappings */
  50. FIX_KMAP_BEGIN = FIX_CMAP_END + 1,
  51. FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
  52. #endif
  53. __end_of_fixed_addresses
  54. };
  55. /*
  56. * used by vmalloc.c.
  57. *
  58. * Leave one empty page between vmalloc'ed areas and
  59. * the start of the fixmap, and leave one page empty
  60. * at the top of mem..
  61. */
  62. #define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
  63. #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
  64. #include <asm-generic/fixmap.h>
  65. #define kmap_get_fixmap_pte(vaddr) \
  66. pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr))
  67. /*
  68. * Called from pgtable_init()
  69. */
  70. extern void fixrange_init(unsigned long start, unsigned long end,
  71. pgd_t *pgd_base);
  72. #endif