summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu
diff options
context:
space:
mode:
authorJoel Sherrill <joel@rtems.org>2018-03-12 14:46:29 -0500
committerJoel Sherrill <joel@rtems.org>2018-03-13 09:49:21 -0500
commit7c39cab92a788dff434e7e7eaa38aa1543d9393e (patch)
tree9e67fcddc533ab55774677ffd46a7baa5dacd14f /cpukit/score/cpu
parentbsp/atsam: Allow setting the drive strength. (diff)
downloadrtems-7c39cab92a788dff434e7e7eaa38aa1543d9393e.tar.bz2
Rework i386 Paravirtualization to have paravirt.h
Diffstat (limited to 'cpukit/score/cpu')
-rw-r--r--cpukit/score/cpu/i386/cpu.c2
-rw-r--r--cpukit/score/cpu/i386/headers.am1
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/cpu.h5
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/interrupts.h2
-rw-r--r--cpukit/score/cpu/i386/include/rtems/score/paravirt.h63
5 files changed, 70 insertions, 3 deletions
diff --git a/cpukit/score/cpu/i386/cpu.c b/cpukit/score/cpu/i386/cpu.c
index b591b76508..72b99c0d80 100644
--- a/cpukit/score/cpu/i386/cpu.c
+++ b/cpukit/score/cpu/i386/cpu.c
@@ -198,7 +198,7 @@ uint32_t _CPU_ISR_Get_level( void )
{
uint32_t level;
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(I386_DISABLE_INLINE_ISR_DISABLE_ENABLE)
i386_get_interrupt_level( level );
#else
level = i386_get_interrupt_level();
diff --git a/cpukit/score/cpu/i386/headers.am b/cpukit/score/cpu/i386/headers.am
index ab47f9a803..79d21f762c 100644
--- a/cpukit/score/cpu/i386/headers.am
+++ b/cpukit/score/cpu/i386/headers.am
@@ -16,4 +16,5 @@ include_rtems_score_HEADERS += include/rtems/score/cpuimpl.h
include_rtems_score_HEADERS += include/rtems/score/i386.h
include_rtems_score_HEADERS += include/rtems/score/idtr.h
include_rtems_score_HEADERS += include/rtems/score/interrupts.h
+include_rtems_score_HEADERS += include/rtems/score/paravirt.h
include_rtems_score_HEADERS += include/rtems/score/registers.h
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
index 058d254f8b..f009a17c16 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
@@ -28,6 +28,9 @@ extern "C" {
#endif
#include <rtems/score/basedefs.h>
+#if defined(RTEMS_PARAVIRT)
+#include <rtems/score/paravirt.h>
+#endif
#include <rtems/score/i386.h>
/* conditional compilation parameters */
@@ -381,7 +384,7 @@ extern Context_Control_fp _CPU_Null_fp_context;
* + set a particular level
*/
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(I386_DISABLE_INLINE_ISR_DISABLE_ENABLE)
#define _CPU_ISR_Disable( _level ) i386_disable_interrupts( _level )
#define _CPU_ISR_Enable( _level ) i386_enable_interrupts( _level )
diff --git a/cpukit/score/cpu/i386/include/rtems/score/interrupts.h b/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
index 3a7971c1ff..6067254509 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/interrupts.h
@@ -33,7 +33,7 @@ typedef int (*rtems_raw_irq_is_enabled) (const struct __rtems_raw_irq_connect_d
*
*/
/**@{**/
-#if !defined(RTEMS_PARAVIRT)
+#if !defined(I386_DISABLE_INLINE_ISR_DISABLE_ENABLE)
#define i386_disable_interrupts( _level ) \
{ \
__asm__ volatile ( "pushf ; \
diff --git a/cpukit/score/cpu/i386/include/rtems/score/paravirt.h b/cpukit/score/cpu/i386/include/rtems/score/paravirt.h
new file mode 100644
index 0000000000..40eddb84be
--- /dev/null
+++ b/cpukit/score/cpu/i386/include/rtems/score/paravirt.h
@@ -0,0 +1,63 @@
+/**
+ * @file
+ *
+ * @brief i386 Paravirtualization Definitions
+ *
+ * This include file contains definitions pertaining to paravirtualization
+ * of the i386 port.
+ */
+
+/*
+ * COPYRIGHT (c) 2018.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+
+#ifndef RTEMS_PARAVIRT
+#error "This file should only be included with paravirtualization is enabled."
+#endif
+
+#ifndef _RTEMS_SCORE_PARAVIRT_H
+#define _RTEMS_SCORE_PARAVIRT_H
+
+/**
+ * @defgroup Paravirti386 Paravirtualization i386 Support
+ *
+ * @ingroup Score
+ *
+ * This handler encapulates the functionality (primarily conditional
+ * feature defines) related to paravirtualization on the i386.
+ *
+ * Paravirtualization on the i386 makes the following assumptions:
+ *
+ * - RTEMS executes in user space
+ * - Interrupt enable/disable support using the MSR must be disabled
+ * and replaced with BSP provided methods which are adapted to the
+ * hosting environment.
+ */
+
+#ifndef ASM
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !ASM */
+
+/**
+ * In a paravirtualized environment, RTEMS executes in user space
+ * and cannot disable/enable external exceptions (e.g. interrupts).
+ * The BSP which acts as an adapter to the hosting environment will
+ * provide the interrupt enable/disable methods.
+ */
+#define I386_DISABLE_INLINE_ISR_DISABLE_ENABLE
+
+#endif