[PATCH 2/7] i386: move idle thread into BSP layer

Gedare Bloom gedare at rtems.org
Mon Feb 15 19:05:39 UTC 2016


---
 c/src/lib/libbsp/i386/pc386/Makefile.am       |  1 +
 c/src/lib/libbsp/i386/pc386/include/bsp.h     |  3 +++
 c/src/lib/libbsp/i386/pc386/startup/bspidle.S | 19 +++++++++++++++++++
 cpukit/score/cpu/i386/cpu.c                   |  8 --------
 cpukit/score/cpu/i386/rtems/score/cpu.h       |  2 +-
 5 files changed, 24 insertions(+), 9 deletions(-)
 create mode 100644 c/src/lib/libbsp/i386/pc386/startup/bspidle.S

diff --git a/c/src/lib/libbsp/i386/pc386/Makefile.am b/c/src/lib/libbsp/i386/pc386/Makefile.am
index ac07741..75a56c9 100644
--- a/c/src/lib/libbsp/i386/pc386/Makefile.am
+++ b/c/src/lib/libbsp/i386/pc386/Makefile.am
@@ -148,6 +148,7 @@ include_HEADERS += ../../i386/shared/comm/uart.h
 # startup
 libbsp_a_SOURCES += ../../shared/bsppredriverhook.c
 libbsp_a_SOURCES += startup/bspgetworkarea.c
+libbsp_a_SOURCES += startup/bspidle.S
 libbsp_a_SOURCES += startup/bspstart.c
 libbsp_a_SOURCES += startup/bspcmdline.c
 libbsp_a_SOURCES += ../../shared/bspclean.c
diff --git a/c/src/lib/libbsp/i386/pc386/include/bsp.h b/c/src/lib/libbsp/i386/pc386/include/bsp.h
index d68af4d..cee5566 100644
--- a/c/src/lib/libbsp/i386/pc386/include/bsp.h
+++ b/c/src/lib/libbsp/i386/pc386/include/bsp.h
@@ -213,6 +213,9 @@ void rtems_irq_mngt_init(void);          /* from 'irq_init.c' */
     } while ( 0 )
 #endif /* edison */
 
+void *bsp_idle_thread( uintptr_t ignored );
+#define BSP_IDLE_TASK_BODY bsp_idle_thread
+
 void kbd_reset_setup(char *str, int *ints);   /* from 'pc_keyb.c' */
 size_t read_aux(char * buffer, size_t count); /* from 'ps2_mouse.c'  */
 
diff --git a/c/src/lib/libbsp/i386/pc386/startup/bspidle.S b/c/src/lib/libbsp/i386/pc386/startup/bspidle.S
new file mode 100644
index 0000000..740671a
--- /dev/null
+++ b/c/src/lib/libbsp/i386/pc386/startup/bspidle.S
@@ -0,0 +1,19 @@
+/*
+ * Idle Thread Body
+ *
+ * COPYRIGHT (c) 2016.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems/asm.h>
+
+.p2align 4
+
+PUBLIC(bsp_idle_thread)
+SYM(bsp_idle_thread):
+hltloop: hlt
+  jmp hltloop
diff --git a/cpukit/score/cpu/i386/cpu.c b/cpukit/score/cpu/i386/cpu.c
index 436c822..52eb511 100644
--- a/cpukit/score/cpu/i386/cpu.c
+++ b/cpukit/score/cpu/i386/cpu.c
@@ -116,14 +116,6 @@ uint32_t   _CPU_ISR_Get_level( void )
   return level;
 }
 
-void *_CPU_Thread_Idle_body( uintptr_t ignored )
-{
-  while(1){
-    __asm__ volatile ("hlt");
-  }
-  return NULL;
-}
-
 struct Frame_ {
 	struct Frame_  *up;
 	uintptr_t		pc;
diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h
index 5a8e5d6..2a1b95b 100644
--- a/cpukit/score/cpu/i386/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/rtems/score/cpu.h
@@ -117,7 +117,7 @@ extern "C" {
  *  not provide one.
  */
 
-#define CPU_PROVIDES_IDLE_THREAD_BODY    TRUE
+#define CPU_PROVIDES_IDLE_THREAD_BODY    FALSE
 
 /*
  *  Define what is required to specify how the network to host conversion
-- 
1.9.1




More information about the devel mailing list