OSDN Git Service

modify MicroBlaze
authorryuz <ryuz@users.sourceforge.jp>
Mon, 7 Feb 2011 16:00:34 +0000 (01:00 +0900)
committerryuz <ryuz@users.sourceforge.jp>
Mon, 7 Feb 2011 16:00:34 +0000 (01:00 +0900)
kernel/build/mb/mb_v8/gcc/Makefile
kernel/include/arch/proc/mb/mb_v8/proc.h
kernel/include/arch/proc/mb/mb_v8/procatr.h
kernel/include/core/sys.h
kernel/source/arch/proc/mb/mb_v8/gcc/kexc_hdr.S [new file with mode: 0644]
kernel/source/arch/proc/mb/mb_v8/gcc/kint_hdr.S [new file with mode: 0644]
kernel/source/arch/proc/mb/mb_v8/gcc/krst_ctx.S
kernel/source/arch/proc/mb/mb_v8/gcc/kswi_ctx.S
kernel/source/arch/proc/mb/mb_v8/val_int.c [new file with mode: 0644]

index 12c331a..ff897b7 100644 (file)
@@ -86,11 +86,12 @@ ASRCS += $(SRC_PROC_CC_DIR)/kcre_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/krst_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/kswi_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/kwai_int.S
-#ASRCS += $(SRC_PROC_CC_DIR)/kint_hdr.S
+ASRCS += $(SRC_PROC_CC_DIR)/kint_hdr.S
+ASRCS += $(SRC_PROC_CC_DIR)/kexc_hdr.S
 
 
 # %jp{C言語ファイルの追加}%en{C sources}
-#CSRCS += $(SRC_PROC_DIR)/val_int.c
+CSRCS += $(SRC_PROC_DIR)/val_int.c
 
 
 # %jp{カーネル共通ソースの追加}%en{kernel common sources}
index 54ae474..b23e73a 100644 (file)
@@ -22,8 +22,6 @@ typedef struct _kernel_t_ctxcb
 /** %jp{割込みコンテキスト制御ブロック} */
 typedef struct _kernel_t_ictxcb
 {
-       H       imsk;
-       B       intcnt;
        VP      isp;
 } _KERNEL_T_ICTXCB;
 
index e1c5cc9..64070d5 100644 (file)
@@ -4,7 +4,7 @@
  * @file  procatr.h
  * @brief %jp{プロセッサアーキテクチャ固有属性定義(XILINX MicroBlaze)}
  *
- * Copyright (C) 1998-2006 by Project HOS
+ * Copyright (C) 1998-2011 by Project HOS
  * http://sourceforge.jp/projects/hos/
  */
 
@@ -27,7 +27,7 @@
 #define _KERNEL_PROCATR_TMIN_STKSZ                     (4*32)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
 
 #define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
-#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割込みに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    FALSE           /**< %jp{多重割込みに対応しているか?} */
 
 #define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
 #define _KERNEL_PROCATR_TMAX_INHNO                     255                     /**< %jp{割込みハンドラ番号の最大値} */
index a43de9a..da689ae 100755 (executable)
@@ -202,7 +202,11 @@ extern const _KERNEL_T_SYSCB_RO            _kernel_syscb_ro;
 #else                                  /* %jp{バズロック型の場合} */
 
 #define _KERNEL_ENTER_SVC()                                    do { _KERNEL_DIS_INT(); } while (0)
+#if _KERNEL_PROCATR_SPT_MULTINT
 #define _KERNEL_LEAVE_SVC()                                    do { if (!(_KERNEL_SYS_GET_STST() & (_KERNEL_TSS_LOC | _KERNEL_TSS_SYS))){ _KERNEL_ENA_INT(); } } while (0)
+#else
+#define _KERNEL_LEAVE_SVC()                                    do { if (!(_KERNEL_SYS_GET_STST() & (_KERNEL_TSS_LOC | _KERNEL_TSS_SYS | _KERNEL_TSS_CTX))){ _KERNEL_ENA_INT(); } } while (0)
+#endif
 
 #endif
 
diff --git a/kernel/source/arch/proc/mb/mb_v8/gcc/kexc_hdr.S b/kernel/source/arch/proc/mb/mb_v8/gcc/kexc_hdr.S
new file mode 100644 (file)
index 0000000..717d217
--- /dev/null
@@ -0,0 +1,57 @@
+/* ------------------------------------------------------------------------ */
+/* Hyper Operating System V4 Advance                                        */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2011 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+                               .global _kernel_exc_hdr
+                               .global _kernel_exe_exc
+
+
+                               .text
+
+
+/************************************************
+  CPU例外ハンドラ
+************************************************/
+                               .align  2
+_kernel_exc_hdr:
+               /* ---- レジスタ保存 */
+                               addik   r1, r1, -44
+                               swi             r15, r1, 0
+                               swi             r3, r1, 4
+                               swi             r4, r1, 8
+                               swi             r5, r1, 12
+                               swi             r6, r1, 16
+                               swi             r7, r1, 20
+                               swi             r8, r1, 24
+                               swi             r9, r1, 28
+                               swi             r10, r1, 32
+                               swi             r11, r1, 36
+                               swi             r12, r1, 40
+                               
+                               
+               /* ---- 例外処理実行処理呼び出し */
+                               brlid   r15, _kernel_exe_exc
+                               addik   r3, r0, 0
+                               
+               /* ---- レジスタ復帰 */
+                               lwi             r15, r1, 0
+                               lwi             r3, r1, 4
+                               lwi             r4, r1, 8
+                               lwi             r5, r1, 12
+                               lwi             r6, r1, 16
+                               lwi             r7, r1, 20
+                               lwi             r8, r1, 24
+                               lwi             r9, r1, 28
+                               lwi             r10, r1, 32
+                               lwi             r11, r1, 36
+                               lwi             r12, r1, 40
+                               rted    r17, 0
+                               addik   r1, r1, 44
+
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/mb/mb_v8/gcc/kint_hdr.S b/kernel/source/arch/proc/mb/mb_v8/gcc/kint_hdr.S
new file mode 100644 (file)
index 0000000..5f8cfef
--- /dev/null
@@ -0,0 +1,77 @@
+/* ------------------------------------------------------------------------ */
+/* Hyper Operating System V4 Advance                                        */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2011 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+                               .global _kernel_int_hdr
+                               .global _kernel_ictxcb
+                               .global _kernel_sta_inh
+                               .global _kernel_exe_inh
+                               .global _kernel_end_inh
+
+
+                               .text
+
+
+#define ICTXCB_ISP             0
+#define ICTXCB_INTCNT  4
+#define ICTXCB_IMSK            6
+
+
+/************************************************
+  割込みハンドラ
+ ************************************************/
+                               .align  2
+_kernel_int_hdr:
+               /* ---- レジスタ保存 */
+                               addik   r1, r1, -44
+                               swi             r15, r1, 0
+                               swi             r3, r1, 4
+                               swi             r4, r1, 8
+                               swi             r5, r1, 12
+                               swi             r6, r1, 16
+                               swi             r7, r1, 20
+                               swi             r8, r1, 24
+                               swi             r9, r1, 28
+                               swi             r10, r1, 32
+                               swi             r11, r1, 36
+                               swi             r12, r1, 40
+                               
+               /* ---- スタック入れ替え */
+                               addik   r3, r1, 0
+                               addik   r4, r0, _kernel_ictxcb
+                               lwi             r1, r4, ICTXCB_ISP
+                               
+               /* ---- 割り込み開始処理呼び出し */
+                               addik   r1, r1, -4
+                               brlid   r15, _kernel_sta_inh
+                               swi             r3, r1, 0                                       /* 旧スタックポインタ保存 */
+                               
+               /* ---- 割り込み実行処理呼び出し */
+                               brlid   r15, _kernel_exe_inh
+                               addik   r3, r0, 0
+                               
+                               
+               /* ---- 割込み終了処理呼び出し */
+                               brlid   r15, _kernel_end_inh
+                               lwi             r1, r1, 0                                       /* スタックの復帰 */
+                               
+               /* ---- レジスタ復帰 */
+                               lwi             r15, r1, 0
+                               lwi             r3, r1, 4
+                               lwi             r4, r1, 8
+                               lwi             r5, r1, 12
+                               lwi             r6, r1, 16
+                               lwi             r7, r1, 20
+                               lwi             r8, r1, 24
+                               lwi             r9, r1, 28
+                               lwi             r10, r1, 32
+                               lwi             r11, r1, 36
+                               lwi             r12, r1, 40
+                               rtid    r14, 0
+                               addik   r1, r1, 44
+
+
+/* end of file */
index f390e1a..188ef11 100644 (file)
@@ -24,7 +24,5 @@ _kernel_rst_ctx:
                                addik   r15, r7, 0                              /* スタックポインタリセット(遅延スロット) */
 
 
-                               .end
-
 
 /* end of file */
index 46733ec..41215fa 100644 (file)
@@ -57,8 +57,9 @@ _kernel_sta_ctx:
                                lwi             r28, r1, 40
                                lwi             r29, r1, 44
                                lwi             r30, r1, 48
-                               rtsd    r15, 8
                                lwi             r31, r1, 52
+                               rtsd    r15, 8
+                               addik   r1, r1, 56
 
 
 
diff --git a/kernel/source/arch/proc/mb/mb_v8/val_int.c b/kernel/source/arch/proc/mb/mb_v8/val_int.c
new file mode 100644 (file)
index 0000000..c99953c
--- /dev/null
@@ -0,0 +1,18 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  val_int.c
+ * @brief %jp{割込み用変数定義}
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+#include "core/core.h"
+
+
+_KERNEL_T_ICTXCB _kernel_ictxcb;       /**< %jp{割込みコンテキスト制御ブロック} */
+
+
+/* end of file */
+