linux/arch/sh/include/asm/fixmap.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0
   2 *
   3 * fixmap.h: compile-time virtual memory allocation
   4 *
   5 * Copyright (C) 1998 Ingo Molnar
   6 *
   7 * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
   8 */
   9
  10#ifndef _ASM_FIXMAP_H
  11#define _ASM_FIXMAP_H
  12
  13#include <linux/kernel.h>
  14#include <linux/threads.h>
  15#include <asm/page.h>
  16
  17/*
  18 * Here we define all the compile-time 'special' virtual
  19 * addresses. The point is to have a constant address at
  20 * compile time, but to set the physical address only
  21 * in the boot process. We allocate these special  addresses
  22 * from the end of P3 backwards.
  23 * Also this lets us do fail-safe vmalloc(), we
  24 * can guarantee that these special addresses and
  25 * vmalloc()-ed addresses never overlap.
  26 *
  27 * these 'compile-time allocated' memory buffers are
  28 * fixed-size 4k pages. (or larger if used with an increment
  29 * highger than 1) use fixmap_set(idx,phys) to associate
  30 * physical memory with fixmap indices.
  31 *
  32 * TLB entries of such buffers will not be flushed across
  33 * task switches.
  34 */
  35
  36/*
  37 * on UP currently we will have no trace of the fixmap mechanizm,
  38 * no page table allocations, etc. This might change in the
  39 * future, say framebuffers for the console driver(s) could be
  40 * fix-mapped?
  41 */
  42enum fixed_addresses {
  43        /*
  44         * The FIX_CMAP entries are used by kmap_coherent() to get virtual
  45         * addresses which are of a known color, and so their values are
  46         * important. __fix_to_virt(FIX_CMAP_END - n) must give an address
  47         * which is the same color as a page (n<<PAGE_SHIFT).
  48         */
  49#define FIX_N_COLOURS 8
  50        FIX_CMAP_BEGIN,
  51        FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS) - 1,
  52
  53#ifdef CONFIG_IOREMAP_FIXED
  54        /*
  55         * FIX_IOREMAP entries are useful for mapping physical address
  56         * space before ioremap() is useable, e.g. really early in boot
  57         * before kmalloc() is working.
  58         */
  59#define FIX_N_IOREMAPS  32
  60        FIX_IOREMAP_BEGIN,
  61        FIX_IOREMAP_END = FIX_IOREMAP_BEGIN + FIX_N_IOREMAPS - 1,
  62#endif
  63
  64        __end_of_fixed_addresses
  65};
  66
  67extern void __set_fixmap(enum fixed_addresses idx,
  68                         unsigned long phys, pgprot_t flags);
  69extern void __clear_fixmap(enum fixed_addresses idx, pgprot_t flags);
  70
  71/*
  72 * used by vmalloc.c.
  73 *
  74 * Leave one empty page between vmalloc'ed areas and
  75 * the start of the fixmap, and leave one page empty
  76 * at the top of mem..
  77 */
  78#define FIXADDR_TOP     (P4SEG - PAGE_SIZE)
  79#define FIXADDR_SIZE    (__end_of_fixed_addresses << PAGE_SHIFT)
  80#define FIXADDR_START   (FIXADDR_TOP - FIXADDR_SIZE)
  81
  82#define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE
  83
  84#include <asm-generic/fixmap.h>
  85
  86#endif
  87