diff options
Diffstat (limited to 'debian/patches/700012-i386-add-parts-of-cpu.h-from-x15.patch')
-rw-r--r-- | debian/patches/700012-i386-add-parts-of-cpu.h-from-x15.patch | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/debian/patches/700012-i386-add-parts-of-cpu.h-from-x15.patch b/debian/patches/700012-i386-add-parts-of-cpu.h-from-x15.patch new file mode 100644 index 0000000..2ee0bc2 --- /dev/null +++ b/debian/patches/700012-i386-add-parts-of-cpu.h-from-x15.patch @@ -0,0 +1,144 @@ +From d8210eecee55d4848b391fef280fe1b5afc84201 Mon Sep 17 00:00:00 2001 +From: Justus Winter <justus@gnupg.org> +Date: Fri, 26 Feb 2016 17:48:27 +0100 +Subject: [PATCH gnumach 12/15] i386: add parts of cpu.h from x15 + +* i386/Makefrag.am (libkernel_a_SOURCES): Add new file. +* i386/i386/cpu.h: New file. +--- + i386/Makefrag.am | 1 + + i386/i386/cpu.h | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 111 insertions(+) + create mode 100644 i386/i386/cpu.h + +diff --git a/i386/Makefrag.am b/i386/Makefrag.am +index 0c5faa3..4e56543 100644 +--- a/i386/Makefrag.am ++++ b/i386/Makefrag.am +@@ -97,6 +97,7 @@ libkernel_a_SOURCES += \ + i386/i386/ast.h \ + i386/i386/ast_check.c \ + i386/i386/ast_types.h \ ++ i386/i386/cpu.h \ + i386/i386/cpu_number.h \ + i386/i386/cswitch.S \ + i386/i386/db_disasm.c \ +diff --git a/i386/i386/cpu.h b/i386/i386/cpu.h +new file mode 100644 +index 0000000..1bf40dc +--- /dev/null ++++ b/i386/i386/cpu.h +@@ -0,0 +1,110 @@ ++/* ++ * Copyright (c) 2010-2014 Richard Braun. ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ */ ++ ++#ifndef _X86_CPU_H ++#define _X86_CPU_H ++ ++#include <kern/macros.h> ++ ++/* ++ * EFLAGS register flags. ++ */ ++#define CPU_EFL_ONE 0x00000002 ++#define CPU_EFL_IF 0x00000200 ++ ++/* ++ * Return the content of the EFLAGS register. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline unsigned long ++cpu_get_eflags(void) ++{ ++ unsigned long eflags; ++ ++ asm volatile("pushf\n" ++ "pop %0\n" ++ : "=r" (eflags) ++ : : "memory"); ++ ++ return eflags; ++} ++ ++/* ++ * Enable local interrupts. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline void ++cpu_intr_enable(void) ++{ ++ asm volatile("sti" : : : "memory"); ++} ++ ++/* ++ * Disable local interrupts. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline void ++cpu_intr_disable(void) ++{ ++ asm volatile("cli" : : : "memory"); ++} ++ ++/* ++ * Restore the content of the EFLAGS register, possibly enabling interrupts. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline void ++cpu_intr_restore(unsigned long flags) ++{ ++ asm volatile("push %0\n" ++ "popf\n" ++ : : "r" (flags) ++ : "memory"); ++} ++ ++/* ++ * Disable local interrupts, returning the previous content of the EFLAGS ++ * register. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline void ++cpu_intr_save(unsigned long *flags) ++{ ++ *flags = cpu_get_eflags(); ++ cpu_intr_disable(); ++} ++ ++/* ++ * Return true if interrupts are enabled. ++ * ++ * Implies a compiler barrier. ++ */ ++static __always_inline int ++cpu_intr_enabled(void) ++{ ++ unsigned long eflags; ++ ++ eflags = cpu_get_eflags(); ++ return (eflags & CPU_EFL_IF) ? 1 : 0; ++} ++ ++#endif /* _X86_CPU_H */ +-- +2.1.4 + |