[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH gnumach 1/2] i386: add parts of cpu.h from x15
From: |
Samuel Thibault |
Subject: |
Re: [PATCH gnumach 1/2] i386: add parts of cpu.h from x15 |
Date: |
Sun, 28 Feb 2016 00:39:33 +0100 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, on Sun 28 Feb 2016 00:33:21 +0100, wrote:
> * i386/Makefrag.am (libkernel_a_SOURCES): Add new file.
> * i386/i386/cpu.h: New file.
Ack, thanks.
> ---
> 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
>
--
Samuel
<c> xlnt comme sujet de stage je peux essayer de donner une description
formelle de automake
-+- #ens-mim -+-