[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 01/17] plat/common: Common x86 CPU definitions


  • To: minios-devel@xxxxxxxxxxxxx
  • From: Costin Lupu <costin.lupu@xxxxxxxxx>
  • Date: Tue, 27 Mar 2018 15:29:34 +0300
  • Cc: simon.kuenzer@xxxxxxxxx
  • Delivery-date: Tue, 27 Mar 2018 12:30:13 +0000
  • Ironport-phdr: 9a23:V8c99Re4dws9eXtKxl9VwKtNlGMj4u6mDksu8pMizoh2WeGdxcS+YB7h7PlgxGXEQZ/co6odzbaO6Oa4ASQp2tWoiDg6aptCVhsI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTahb75+Ngm6oRnMvcQKnIVuLbo8xAHUqXVSYeRWwm1oJVOXnxni48q74YBu/SdNtf8/7sBMSar1cbg2QrxeFzQmLns65Nb3uhnZTAuA/WUTX2MLmRdVGQfF7RX6XpDssivms+d2xSeXMdHqQb0yRD+v6bpgRh31hycdLzM38H/ZhNF+gqxYpxyupRJ/zpXIbI2JLvdyYrnQcc8GSWdHQ81fVzZBAoS5b4YXEecBOv1Yr5X8p1sIsBCwAxSsBPvyyjRVgXL5wao60/89EQHH2gwsBdYOsGnMrNXoL6odTfu1wLPQzTXedPxawy396I/Rfx0nvPqCU7Vwcc/LxkkuEQPIlkufqYr5PzOP1uUAsmeW4/B7Ve20jWMstgJ/oiC3y8sxhYTFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZKmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00EpSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jpsTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PAgORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufbJm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGrSZMKLXsV+P4OIjOeqMZJILtzb7Kvkq+eTugGQ/mVADYaap2YEYZ2uiEvt4PkXKKUbr19IAF2YNpU8yQfLnjHWGUCVPfDCiUqR64Ss0W6y8CoKWbYe2nL2HlAOmBoAeMmtBEUyNFzHsap2Zc/wXLjqPKIl7lWpXBvCaV4Y92ET250fBwL19I7+M9w==
  • List-id: Mini-os development list <minios-devel.lists.xenproject.org>

Introducing new header for x86 CPU register layouts.

Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
---
 plat/common/include/x86/cpu_defs.h         | 76 ++++++++++++++++++++++++++++++
 plat/kvm/Makefile.uk                       |  2 +
 plat/kvm/include/kvm-x86/cpu_x86_64_defs.h | 46 +-----------------
 plat/kvm/x86/entry64.S                     |  2 +-
 plat/xen/Makefile.uk                       |  2 +
 plat/xen/include/xen-x86/os.h              |  9 +---
 6 files changed, 83 insertions(+), 54 deletions(-)
 create mode 100644 plat/common/include/x86/cpu_defs.h

diff --git a/plat/common/include/x86/cpu_defs.h 
b/plat/common/include/x86/cpu_defs.h
new file mode 100644
index 0000000..9ecec96
--- /dev/null
+++ b/plat/common/include/x86/cpu_defs.h
@@ -0,0 +1,76 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/*
+ * Authors: Costin Lupu <costin.lupu@xxxxxxxxx>
+ *
+ * Copyright (c) 2018, NEC Europe Ltd., NEC Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
+ */
+#ifndef __PLAT_CMN_X86_CPU_DEFS_H__
+#define __PLAT_CMN_X86_CPU_DEFS_H__
+
+/* EFLAGS register */
+#define X86_EFLAGS_CF           (1 <<  0)   /* carry flag                */
+#define X86_EFLAGS_PF           (1 <<  2)   /* parity flag               */
+#define X86_EFLAGS_AF           (1 <<  4)   /* auxiliary flag            */
+#define X86_EFLAGS_ZF           (1 <<  6)   /* zero flag                 */
+#define X86_EFLAGS_SF           (1 <<  7)   /* sign flag                 */
+#define X86_EFLAGS_TF           (1 <<  8)   /* trap flag                 */
+#define X86_EFLAGS_IF           (1 <<  9)   /* interrupt flag            */
+#define X86_EFLAGS_DF           (1 << 10)   /* direction flag            */
+#define X86_EFLAGS_OF           (1 << 11)   /* overflow flag             */
+#define X86_EFLAGS_NT           (1 << 14)   /* nested task flag          */
+#define X86_EFLAGS_RF           (1 << 16)   /* resume flag               */
+#define X86_EFLAGS_VM           (1 << 17)   /* virtual 8086 mode flag    */
+#define X86_EFLAGS_AC           (1 << 18)   /* alignment check flag      */
+#define X86_EFLAGS_VIF          (1 << 19)   /* virtual interrupt flag    */
+#define X86_EFLAGS_VIP          (1 << 20)   /* virtual interrupt pending */
+#define X86_EFLAGS_ID           (1 << 21)   /* ID flag                   */
+
+
+/*
+ * Basic CPU control in CR0
+ */
+#define X86_CR0_MP              (1 << 1)    /* Monitor Coprocessor */
+#define X86_CR0_EM              (1 << 2)    /* Emulation */
+#define X86_CR0_NE              (1 << 5)    /* Numeric Exception */
+#define X86_CR0_PG              (1 << 31)   /* Paging */
+
+/*
+ * Intel CPU features in CR4
+ */
+#define X86_CR4_PAE             (1 << 5)    /* enable PAE */
+#define X86_CR4_OSFXSR          (1 << 9)    /* OS support for FXSAVE/FXRSTOR */
+#define X86_CR4_OSXMMEXCPT      (1 << 10)   /* OS support for FP exceptions */
+
+/*
+ * Intel CPU features in EFER
+ */
+#define X86_EFER_LME            (1 << 8)    /* Long mode enable (R/W) */
+
+#endif /* __PLAT_CMN_X86_CPU_DEFS_H__ */
diff --git a/plat/kvm/Makefile.uk b/plat/kvm/Makefile.uk
index 4b3abc3..e7a55fd 100644
--- a/plat/kvm/Makefile.uk
+++ b/plat/kvm/Makefile.uk
@@ -12,7 +12,9 @@ $(eval $(call addplatlib,kvm,libkvmplat))
 ## Platform library definitions
 ##
 LIBKVMPLAT_ASINCLUDES-y        += -I$(LIBKVMPLAT_BASE)/include
+LIBKVMPLAT_ASINCLUDES-y        += -I$(UK_PLAT_COMMON_BASE)/include
 LIBKVMPLAT_CINCLUDES-y         += -I$(LIBKVMPLAT_BASE)/include
+LIBKVMPLAT_CINCLUDES-y         += -I$(UK_PLAT_COMMON_BASE)/include
 
 LIBKVMPLAT_SRCS-$(ARCH_X86_64) += $(LIBKVMPLAT_BASE)/x86/entry64.S
 LIBKVMPLAT_SRCS-$(ARCH_X86_64) += $(LIBKVMPLAT_BASE)/x86/cpu_x86_64.c
diff --git a/plat/kvm/include/kvm-x86/cpu_x86_64_defs.h 
b/plat/kvm/include/kvm-x86/cpu_x86_64_defs.h
index 9459689..985f8d3 100644
--- a/plat/kvm/include/kvm-x86/cpu_x86_64_defs.h
+++ b/plat/kvm/include/kvm-x86/cpu_x86_64_defs.h
@@ -19,51 +19,7 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#ifndef _BITUL
-
-#define _AC(X, Y)               X
-#define _AT(T, X)               X
-#else
-#define __AC(X, Y)              (X##Y)
-#define _AC(X, Y)               __AC(X, Y)
-#define _AT(T, X)               ((T)(X))
-#endif
-
-#define _BITUL(x)               (_AC(1, UL) << (x))
-#define _BITULL(x)              (_AC(1, ULL) << (x))
-
-/*
- * Basic CPU control in CR0
- */
-#define X86_CR0_MP_BIT          1 /* Monitor Coprocessor */
-#define X86_CR0_MP              _BITUL(X86_CR0_MP_BIT)
-#define X86_CR0_EM_BIT          2 /* Emulation */
-#define X86_CR0_EM              _BITUL(X86_CR0_EM_BIT)
-#define X86_CR0_NE_BIT          5 /* Numeric Exception */
-#define X86_CR0_NE              _BITUL(X86_CR0_NE_BIT)
-#define X86_CR0_PG_BIT          31 /* Paging */
-#define X86_CR0_PG              _BITUL(X86_CR0_PG_BIT)
-
-/*
- * Intel CPU features in CR4
- */
-#define X86_CR4_PAE_BIT         5 /* enable physical address extensions */
-#define X86_CR4_PAE             _BITUL(X86_CR4_PAE_BIT)
-#define X86_CR4_OSFXSR_BIT      9 /* OS support for FXSAVE/FXRSTOR */
-#define X86_CR4_OSFXSR          _BITUL(X86_CR4_OSFXSR_BIT)
-#define X86_CR4_OSXMMEXCPT_BIT  10 /* OS support for FP exceptions */
-#define X86_CR4_OSXMMEXCPT      _BITUL(X86_CR4_OSXMMEXCPT_BIT)
-
-/*
- * Intel CPU features in EFER
- */
-#define X86_EFER_LME_BIT        8 /* Long mode enable (R/W) */
-#define X86_EFER_LME            _BITUL(X86_EFER_LME_BIT)
-
-/* Needed by mem.c */
-#define PAGE_SIZE               4096
-//#define PAGE_SHIFT              12
-#define PAGE_MASK               ~(0xfff)
+#include <x86/cpu_defs.h>
 
 /*
  * GDT layout
diff --git a/plat/kvm/x86/entry64.S b/plat/kvm/x86/entry64.S
index 2d14386..6570c47 100644
--- a/plat/kvm/x86/entry64.S
+++ b/plat/kvm/x86/entry64.S
@@ -27,8 +27,8 @@
  * SUCH DAMAGE.
  */
 
+#include <x86/cpu_defs.h>
 #include <kvm-x86/multiboot_defs.h>
-#include <kvm-x86/cpu_x86_64_defs.h>
 
 #define ENTRY(x) .text; .globl x; .type x,%function; x:
 #define END(x)   .size x, . - x
diff --git a/plat/xen/Makefile.uk b/plat/xen/Makefile.uk
index 08e77e0..c1b2ecb 100644
--- a/plat/xen/Makefile.uk
+++ b/plat/xen/Makefile.uk
@@ -22,7 +22,9 @@ LIBXENPLAT_CXXFLAGS-y    += 
-D__XEN_INTERFACE_VERSION__=$(XEN_INTERFACE_VERSION)
 ## Platform library definitions
 ##
 LIBXENPLAT_ASINCLUDES-y        += -I$(LIBXENPLAT_BASE)/include
+LIBXENPLAT_ASINCLUDES-y        += -I$(UK_PLAT_COMMON_BASE)/include
 LIBXENPLAT_CINCLUDES-y         += -I$(LIBXENPLAT_BASE)/include
+LIBXENPLAT_CINCLUDES-y         += -I$(UK_PLAT_COMMON_BASE)/include
 LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/hypervisor.c
 LIBXENPLAT_SRCS-y              += $(LIBXENPLAT_BASE)/memory.c
 
diff --git a/plat/xen/include/xen-x86/os.h b/plat/xen/include/xen-x86/os.h
index 99c9d14..3df773c 100644
--- a/plat/xen/include/xen-x86/os.h
+++ b/plat/xen/include/xen-x86/os.h
@@ -60,14 +60,7 @@ typedef unsigned long u_long;
 #include <xen/xsm/flask_op.h>
 #endif
 
-#define MSR_EFER        0xc0000080
-#define _EFER_LME       8           /* Long mode enable */
-
-#define X86_CR0_PG      0x80000000  /* Paging */
-#define X86_CR4_PAE     0x00000020  /* enable physical address extensions */
-#define X86_CR4_OSFXSR  0x00000200  /* enable fast FPU save and restore */
-
-#define X86_EFLAGS_IF   0x00000200
+#include <x86/cpu_defs.h>
 
 #define __KERNEL_CS     FLAT_KERNEL_CS
 #define __KERNEL_DS     FLAT_KERNEL_DS
-- 
2.1.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.