linux/arch/x86/um/asm/mm_context.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2004 Fujitsu Siemens Computers GmbH
   3 * Licensed under the GPL
   4 *
   5 * Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com>
   6 */
   7
   8#ifndef __ASM_LDT_H
   9#define __ASM_LDT_H
  10
  11#include <linux/mutex.h>
  12#include <asm/ldt.h>
  13
  14extern void ldt_host_info(void);
  15
  16#define LDT_PAGES_MAX \
  17        ((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE)
  18#define LDT_ENTRIES_PER_PAGE \
  19        (PAGE_SIZE/LDT_ENTRY_SIZE)
  20#define LDT_DIRECT_ENTRIES \
  21        ((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE)
  22
  23struct ldt_entry {
  24        __u32 a;
  25        __u32 b;
  26};
  27
  28typedef struct uml_ldt {
  29        int entry_count;
  30        struct mutex lock;
  31        union {
  32                struct ldt_entry * pages[LDT_PAGES_MAX];
  33                struct ldt_entry entries[LDT_DIRECT_ENTRIES];
  34        } u;
  35} uml_ldt_t;
  36
  37#define LDT_entry_a(info) \
  38        ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff))
  39
  40#define LDT_entry_b(info) \
  41        (((info)->base_addr & 0xff000000) | \
  42        (((info)->base_addr & 0x00ff0000) >> 16) | \
  43        ((info)->limit & 0xf0000) | \
  44        (((info)->read_exec_only ^ 1) << 9) | \
  45        ((info)->contents << 10) | \
  46        (((info)->seg_not_present ^ 1) << 15) | \
  47        ((info)->seg_32bit << 22) | \
  48        ((info)->limit_in_pages << 23) | \
  49        ((info)->useable << 20) | \
  50        0x7000)
  51
  52#define _LDT_empty(info) (\
  53        (info)->base_addr       == 0    && \
  54        (info)->limit           == 0    && \
  55        (info)->contents        == 0    && \
  56        (info)->read_exec_only  == 1    && \
  57        (info)->seg_32bit       == 0    && \
  58        (info)->limit_in_pages  == 0    && \
  59        (info)->seg_not_present == 1    && \
  60        (info)->useable         == 0    )
  61
  62#ifdef CONFIG_X86_64
  63#define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0))
  64#else
  65#define LDT_empty(info) (_LDT_empty(info))
  66#endif
  67
  68struct uml_arch_mm_context {
  69        uml_ldt_t ldt;
  70};
  71
  72#endif
  73