OSDN Git Service

(none)
authorryuz <ryuz>
Mon, 3 Dec 2007 14:16:35 +0000 (14:16 +0000)
committerryuz <ryuz>
Mon, 3 Dec 2007 14:16:35 +0000 (14:16 +0000)
46 files changed:
aplfw/driver/ether/lan9000/lan9000drv_create.c
aplfw/driver/ether/lan9118/lan9118drv_create.c
aplfw/driver/ether/ne2000/ne2000drv.c
aplfw/driver/misc/memdrv/memdrv_create.c
aplfw/driver/serial/at91/at91usartdrv_create.c
aplfw/driver/serial/mx1/mx1uartdrv.h [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_close.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_create.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_delete.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_flush.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_iocontrol.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_isr.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_local.h [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_open.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_read.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_seek.c [new file with mode: 0755]
aplfw/driver/serial/mx1/mx1uartdrv_write.c [new file with mode: 0755]
aplfw/driver/serial/pc16550/pc16550drv_create.c
aplfw/driver/serial/renesas/scidrv_create.c
aplfw/driver/tcpip/ipether/ipether_create.c
aplfw/driver/tcpip/tcpip/tcpip_create.c
aplfw/driver/tcpip/tcpip/tcpip_open.c
aplfw/driver/volume/fat/fatvol_create.c
aplfw/system/event/event_create.c
aplfw/system/file/chrdrv_create.c
aplfw/system/sysapi/sysapi.h
aplfw/system/sysapi/sysapi_initialize.c
aplfw/system/sysapi/sysevt_create.c
aplfw/system/sysapi/sysmtx_create.c
aplfw/system/system/system_initialize.c
kernel/build/arm/mx1/armcc/gmake.mak [new file with mode: 0755]
kernel/include/config/cfgknl.h
kernel/include/core/objid.h
kernel/include/core/rdq.h
kernel/include/parser/parsknl.h
kernel/source/arch/irc/arm/mx1/dis_int.c [new file with mode: 0755]
kernel/source/arch/irc/arm/mx1/ena_int.c [new file with mode: 0755]
kernel/source/arch/irc/arm/mx1/kexe_irc.c [new file with mode: 0755]
kernel/source/arch/irc/arm/mx1/kini_irc.c [new file with mode: 0755]
kernel/source/arch/irc/arm/mx1/vclr_int.c [new file with mode: 0755]
kernel/source/core/rdq/add_rdq.c [new file with mode: 0755]
kernel/source/core/rdq/cre_rdq.c [new file with mode: 0755]
kernel/source/core/rdq/del_rdq.c [new file with mode: 0755]
kernel/source/core/rdq/ref_rdq.c [new file with mode: 0755]
kernel/source/core/rdq/rmh_rdq.c [new file with mode: 0755]
kernel/source/core/rdq/rmv_rdq.c [new file with mode: 0755]

index 4d4ac0b..46c4aa5 100755 (executable)
@@ -39,11 +39,11 @@ void Lan9000Drv_Create(C_LAN9000DRV *self, void *pRegAddr, int iIntNum)
        Lan9000Hal_Create(&self->Lan9000Hal, pRegAddr);
        
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtSend = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtx = SysMtx_Create();
+       self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割込み処理登録 */
        self->iIntNum = iIntNum;
index c1d36eb..0ebd6d9 100755 (executable)
@@ -38,12 +38,12 @@ void Lan9118Drv_Create(C_LAN9118DRV *self, void *pRegBase, int iIntNum)
        self->iOpenCount  = 0;
        
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtSend = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtxSend = SysMtx_Create();
-       self->hMtxRecv = SysMtx_Create();
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割込み処理登録 */
        self->iIntNum = iIntNum;
index 6bcf3f1..54a7f06 100755 (executable)
@@ -40,11 +40,11 @@ void Ne2000Drv_Create(C_NE2000DRV *self, void *pRegAddr, int iIntNum)
        Ne2000Hal_Create(&self->Ne2000Hal, pRegAddr);
 
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtSend = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtx = SysMtx_Create();
+       self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割り込み処理登録 */
        SysIsr_Create(iIntNum, Ne2000Drv_Isr, (VPARAM)self);
index 80c8ef7..0ad2a20 100755 (executable)
@@ -42,7 +42,7 @@ void MemDrv_Create(C_MEMDRV *self, void *pMemAddr, FILE_POS MemSize, FILE_POS In
        self->iAttr      = iAttr;               /* 属性 */
        
        /* ミューテックス生成 */
-       self->hMtx = SysMtx_Create();
+       self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 }
 
 
index b1ee1af..2e7c5c3 100755 (executable)
@@ -45,12 +45,12 @@ void At91UsartDrv_Create(C_AT91USARTDRV *self, void *pRegBase, int iIntNum, unsi
        StreamBuf_Create(&self->StmBufRecv, iBufSize, pMem);
 
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtSend = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtxSend = SysMtx_Create();
-       self->hMtxRecv = SysMtx_Create();
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割込み処理登録 */
        self->iIntNum = iIntNum;
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv.h b/aplfw/driver/serial/mx1/mx1uartdrv.h
new file mode 100755 (executable)
index 0000000..e6a839a
--- /dev/null
@@ -0,0 +1,57 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv.h
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__mx1uartdrv_h__
+#define __HOS__mx1uartdrv_h__
+
+
+#include "system/sysapi/sysapi.h"
+#include "system/file/chrdrv.h"
+#include "library/container/streambuf/streambuf.h"
+
+
+/* ARM製 Integrator UART用ドライバ制御部 */
+typedef struct c_mx1uartdrv
+{
+       C_CHRDRV                ChrDrv;                 /* キャラクタ型デバイスドライバを継承 */
+
+       void                    *pRegBase;              /* レジスタベースアドレス */
+       unsigned long   ulBaseClock;    /* ベースクロック */
+       int                             iIntNum;                /* 割込み番号 */
+
+       int                             iOpenCount;             /* オープンカウンタ */
+
+       SYSEVT_HANDLE   hEvtSend;               /* 送信イベント */
+       SYSEVT_HANDLE   hEvtRecv;               /* 受信イベント */
+
+       SYSMTX_HANDLE   hMtxSend;               /* 送信排他制御ミューテックス */
+       SYSMTX_HANDLE   hMtxRecv;               /* 受信排他制御ミューテックス */
+       C_STREAMBUF             StmBufRecv;             /* 受信バッファ */
+} C_MX1UARTDRV;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Mx1UartDrv_Create(C_MX1UARTDRV *self, void *pRegBase, int iIntNum, unsigned long ulBaseClock, int iBufSize);      /**< コンストラクタ */
+void Mx1UartDrv_Delete(C_DRVOBJ *pDrvObj);                                                                                                                                                     /**< デストラクタ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__mx1uartdrv_h__ */
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_close.c b/aplfw/driver/serial/mx1/mx1uartdrv_close.c
new file mode 100755 (executable)
index 0000000..8a9bc74
--- /dev/null
@@ -0,0 +1,38 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_close.h
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/** クローズ */
+void Mx1UartDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       /* クローズ処理 */
+       if ( --self->iOpenCount == 0 )
+       {
+               SysInt_Disable(self->iIntNum);
+               StreamBuf_Clear(&self->StmBufRecv);
+       }
+       
+       /* ディスクリプタ削除 */
+       ChrFile_Delete(pFile);  
+       SysMem_Free(pFileObj);
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_create.c b/aplfw/driver/serial/mx1/mx1uartdrv_create.c
new file mode 100755 (executable)
index 0000000..f6bb01e
--- /dev/null
@@ -0,0 +1,62 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_create.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/* 仮想関数テーブル */
+const T_DRVOBJ_METHODS Mx1UartDrv_Methods = 
+       {
+               Mx1UartDrv_Delete,
+               Mx1UartDrv_Open,
+               Mx1UartDrv_Close,
+               Mx1UartDrv_IoControl,
+               Mx1UartDrv_Seek,
+               Mx1UartDrv_Read,
+               Mx1UartDrv_Write,
+               Mx1UartDrv_Flush,
+       };
+
+
+/** コンストラクタ */
+void Mx1UartDrv_Create(C_MX1UARTDRV *self, void *pRegBase, int iIntNum, unsigned long ulBaseClock, int iBufSize)
+{
+       void *pMem;
+       
+       /* 親クラスコンストラクタ呼び出し */
+       ChrDrv_Create(&self->ChrDrv, &Mx1UartDrv_Methods);
+
+       /* メンバ変数初期化 */
+       self->pRegBase    = pRegBase;
+       self->ulBaseClock = ulBaseClock;
+       self->iIntNum     = iIntNum;
+       self->iOpenCount  = 0;
+
+       /* バッファ確保 */
+       pMem = SysMem_Alloc(iBufSize);
+       StreamBuf_Create(&self->StmBufRecv, iBufSize, pMem);
+
+       /* イベント生成 */
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+
+       /* ミューテックス生成 */
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       
+       /* 割込み処理登録 */
+       self->iIntNum = iIntNum;
+       SysIsr_Create(iIntNum + 4, Mx1UartDrv_IsrTx, (VPARAM)self);
+       SysIsr_Create(iIntNum + 5, Mx1UartDrv_IsrRx, (VPARAM)self);
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_delete.c b/aplfw/driver/serial/mx1/mx1uartdrv_delete.c
new file mode 100755 (executable)
index 0000000..3191c38
--- /dev/null
@@ -0,0 +1,37 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_delete.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/** デストラクタ */
+void Mx1UartDrv_Delete(C_DRVOBJ *pDrvObj)
+{
+       C_MX1UARTDRV    *self;
+       void                    *pMem;
+       
+       /* upper cast */
+       self = (C_MX1UARTDRV *)pDrvObj;
+
+       /* 同期オブジェクト削除 */
+       SysEvt_Delete(self->hEvtRecv);
+       SysEvt_Delete(self->hEvtSend);
+       SysMtx_Delete(self->hMtxRecv);
+       SysMtx_Delete(self->hMtxSend);
+
+       /* バッファ削除 */
+       pMem = StreamBuf_RefBufAddr(&self->StmBufRecv);
+       StreamBuf_Delete(&self->StmBuf);
+       SysMem_Free(pMem);
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_flush.c b/aplfw/driver/serial/mx1/mx1uartdrv_flush.c
new file mode 100755 (executable)
index 0000000..1a6fb4d
--- /dev/null
@@ -0,0 +1,28 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_flush.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+FILE_ERR Mx1UartDrv_Flush(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       return FILE_ERR_OK;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_iocontrol.c b/aplfw/driver/serial/mx1/mx1uartdrv_iocontrol.c
new file mode 100755 (executable)
index 0000000..d5eff19
--- /dev/null
@@ -0,0 +1,28 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_iocontrol.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+FILE_ERR Mx1UartDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       return FILE_ERR_NG;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_isr.c b/aplfw/driver/serial/mx1/mx1uartdrv_isr.c
new file mode 100755 (executable)
index 0000000..9dc063f
--- /dev/null
@@ -0,0 +1,62 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_isr.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "system/system/system.h"
+#include "mx1uartdrv_local.h"
+
+
+void Mx1UartDrv_IsrTx(VPARAM Param)
+{
+       C_MX1UARTDRV    *self;
+       int                             c;
+
+       self = (C_MX1UARTDRV *)Param;
+}
+
+
+static void Mx1UartDrv_RecvProc(VPARAM Param);
+
+
+/* 受信割り込み */
+void Mx1UartDrv_IsrRx(VPARAM Param)
+{
+       C_MX1UARTDRV    *self;
+       int                             c;
+
+       self = (C_MX1UARTDRV *)Param;
+       
+       if ( MX1UART_REG_READ(self, MX1UART_USR2) & 0x0001 )
+       {
+               do
+               {
+                       c = MX1UART_REG_READ(self, MX1UART_URXD(0));
+                       StreamBuf_SendChar(&self->StmBufRecv, c);
+               } while ( MX1UART_REG_READ(self, MX1UART_USR2) & 0x0001 );
+
+               System_RequestProc(Mx1UartDrv_RecvProc, (VPARAM)self);
+/*             SysEvt_Set(self->hEvtRecv);
+               ChrDrv_SetReadSignal(&self->ChrDrv);    */
+       }
+}
+
+
+void Mx1UartDrv_RecvProc(VPARAM Param)
+{
+       C_MX1UARTDRV    *self;
+
+       self = (C_MX1UARTDRV *)Param;
+
+       SysEvt_Set(self->hEvtRecv);
+       ChrDrv_SetReadSignal(&self->ChrDrv);
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_local.h b/aplfw/driver/serial/mx1/mx1uartdrv_local.h
new file mode 100755 (executable)
index 0000000..9307f35
--- /dev/null
@@ -0,0 +1,71 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_local.h
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ ローカルヘッダファイル}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__mx1uartdrv_local_h__
+#define __HOS__mx1uartdrv_local_h__
+
+
+#include "mx1uartdrv.h"
+
+
+#define MX1UART_URXD(n)                        (0x00+4*(n))
+#define MX1UART_UTXD(n)                        (0x40+4*(n))
+#define MX1UART_UCR1                   0x80
+#define MX1UART_UCR2                   0x84
+#define MX1UART_UCR3                   0x88
+#define MX1UART_UCR4                   0x8c
+#define MX1UART_UFCR                   0x90
+#define MX1UART_USR1                   0x94
+#define MX1UART_USR2                   0x98
+#define MX1UART_UESC                   0x9c
+#define MX1UART_UTIM                   0xa0
+#define MX1UART_UBIR                   0xa4
+#define MX1UART_UBMR                   0xa8
+#define MX1UART_UBRC                   0xac
+#define MX1UART_BIPR1                  0xb0
+#define MX1UART_BIPR2                  0xb4
+#define MX1UART_BIPR3                  0xb8
+#define MX1UART_BIPR4                  0xbc
+#define MX1UART_BMPR1                  0xc0
+#define MX1UART_BMPR2                  0xc4
+#define MX1UART_BMPR3              0xc8
+#define MX1UART_BMPR4              0xcc
+#define MX1UART_UTS                        0xd0
+
+
+#define MX1UART_REG_WRITE(self, offset, val)   do { *(unsigned long *)((char *)(self)->pRegBase + (offset)) = (val); } while(0)
+#define MX1UART_REG_READ(self, offset)                 (*((unsigned long *)((char *)(self)->pRegBase + (offset))))
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE    Mx1UartDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode);
+void      Mx1UartDrv_Close(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj);
+FILE_ERR  Mx1UartDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
+FILE_POS  Mx1UartDrv_Seek(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign);
+FILE_SIZE Mx1UartDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size);
+FILE_SIZE Mx1UartDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size);
+FILE_ERR  Mx1UartDrv_Flush(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj);
+
+void      Mx1UartDrv_IsrTx(VPARAM Param);                      /* 割込み処理 */
+void      Mx1UartDrv_IsrRx(VPARAM Param);                      /* 割込み処理 */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__armuartdrv_h__ */
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_open.c b/aplfw/driver/serial/mx1/mx1uartdrv_open.c
new file mode 100755 (executable)
index 0000000..b4dec36
--- /dev/null
@@ -0,0 +1,53 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_open.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/** オープン */
+HANDLE Mx1UartDrv_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       
+       /* upper cast */
+       self = (C_MX1UARTDRV *)pDrvObj;
+
+       /* create file descriptor */
+       if ( (pFile = SysMem_Alloc(sizeof(*pFile))) == NULL )
+       {
+               return HANDLE_NULL;
+       }
+       ChrFile_Create(pFile, &self->ChrDrv, NULL);
+
+       
+       /* オープン処理 */
+       if ( self->iOpenCount++ == 0 )
+       {
+               MX1UART_REG_WRITE(self, MX1UART_UFCR, 0x00004290);
+
+               MX1UART_REG_WRITE(self, MX1UART_UBIR, 1152-1);
+               MX1UART_REG_WRITE(self, MX1UART_UBMR, 10000-1);
+
+               MX1UART_REG_WRITE(self, MX1UART_UCR1, 0x00000205);
+               MX1UART_REG_WRITE(self, MX1UART_UCR2, 0x00005027);
+               MX1UART_REG_WRITE(self, MX1UART_UCR3, 0x00001800);
+               MX1UART_REG_WRITE(self, MX1UART_UCR4, 0x00004007);
+               
+               /* 受信割り込み許可 */
+               SysInt_Enable(self->iIntNum + 5);
+       }
+
+       return (HANDLE)pFile;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_read.c b/aplfw/driver/serial/mx1/mx1uartdrv_read.c
new file mode 100755 (executable)
index 0000000..9d8f168
--- /dev/null
@@ -0,0 +1,60 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_read.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/** %jp{受信} */
+FILE_SIZE Mx1UartDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       unsigned char   *pubBuf;
+       FILE_SIZE               i;
+       int                             c;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       pubBuf = (unsigned char *)pBuf;
+
+       /* クリティカルセクションに入る */
+       SysMtx_Lock(self->hMtxRecv);
+
+       for ( i = 0; i < Size; i++ )
+       {
+               while ( (c = StreamBuf_RecvChar(&self->StmBufRecv)) < 0 )
+               {
+                       if ( pFile->cReadMode == FILE_RMODE_BLOCKING )
+                       {
+                               /* ブロッキングなら受信イベントを待つ */
+                               SysEvt_Wait(self->hEvtRecv);
+                               SysEvt_Clear(self->hEvtRecv);
+                       }
+                       else
+                       {
+                               /* ノンブロッキングなら終了 */
+                               goto loop_end;
+                       }
+               }
+               *pubBuf++ = (unsigned char)c;
+       }
+loop_end:
+       
+       /* クリティカルセクションを出る */
+       SysMtx_Unlock(self->hMtxRecv);
+
+       return i;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_seek.c b/aplfw/driver/serial/mx1/mx1uartdrv_seek.c
new file mode 100755 (executable)
index 0000000..f34cdd9
--- /dev/null
@@ -0,0 +1,28 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_seek.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+FILE_POS Mx1UartDrv_Seek(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, FILE_POS Offset, int iOrign)
+{
+       C_MX1UARTDRV    *self;
+       C_CHRFILE               *pFile;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       return FILE_ERR_NG;
+}
+
+
+/* end of file */
diff --git a/aplfw/driver/serial/mx1/mx1uartdrv_write.c b/aplfw/driver/serial/mx1/mx1uartdrv_write.c
new file mode 100755 (executable)
index 0000000..3974660
--- /dev/null
@@ -0,0 +1,63 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  mx1uartdrv_write.c
+ * @brief %jp{Freescale MX1 UART用デバイスドライバ}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "mx1uartdrv_local.h"
+
+
+/** %jp{送信} */
+FILE_SIZE Mx1UartDrv_Write(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, const void *pData, FILE_SIZE Size)
+{
+       C_MX1UARTDRV            *self;
+       C_CHRFILE                       *pFile;
+       const unsigned char     *pubBuf;
+       FILE_SIZE                       i;
+       int                                     c;
+       
+       /* upper cast */
+       self  = (C_MX1UARTDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+
+       pubBuf = (const unsigned char *)pData;
+
+       /* クリティカルセクションに入る */
+       SysMtx_Lock(self->hMtxSend);
+
+       for ( i = 0; i < Size; i++ )
+       {
+               c = *pubBuf++;
+               while ( !(MX1UART_REG_READ(self, MX1UART_USR2) & 0x0008) )
+               {
+                       if ( pFile->cWriteMode == FILE_WMODE_BLOCKING )
+                       {
+                               /* ブロッキングなら送信割り込みを待つ */
+               /*              ARMUART_REG_WRITE(self, ARMUART_UARTIMSC, 0x0070); */   /*送信/受信割り込み許可 */            
+               /*              SysEvt_Wait(self->hEvtSend);
+                               SysEvt_Clear(self->hEvtSend);   */
+                       }
+                       else
+                       {
+                               /* ノンブロッキングなら終了 */
+                               goto loop_end;
+                       }
+               }
+               MX1UART_REG_WRITE(self, MX1UART_UTXD(0), c);
+       }
+loop_end:
+
+       /* クリティカルセクションを出る */
+       SysMtx_Unlock(self->hMtxSend);
+
+       return i;
+}
+
+
+
+/* end of file */
index c6315d6..93b8046 100755 (executable)
@@ -45,8 +45,8 @@ void Pc16550Drv_Create(C_PC16550DRV *self, void *pRegAddr,  unsigned int uiRegSt
        StreamBuf_Create(&self->StmBufRecv, iBufSize, pMem);
        
        /* ミューテックス生成 */
-       self->hMtxSend = SysMtx_Create();
-       self->hMtxRecv = SysMtx_Create();
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割込み処理登録 */
        self->iIntNum = iIntNum;
index dc4a2f3..9d7ac61 100755 (executable)
@@ -45,12 +45,12 @@ void SciDrv_Create(C_SCIDRV *self, void *pRegAddr, int iIntNum, unsigned long ul
        StreamBuf_Create(&self->StmBufRecv, iBufSize, pMem);
 
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtSend = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtSend = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtxSend = SysMtx_Create();
-       self->hMtxRecv = SysMtx_Create();
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 割り込み処理登録 */
        SysIsr_Create(iIntNum + 0, SciDrv_IsrRecvErr, (VPARAM)self);
index 28c7442..c797347 100755 (executable)
@@ -50,13 +50,13 @@ FILE_ERR IpEther_Create(C_IPETHER *self, const char *pszEther, const T_IPETHER_I
        memcpy(self->ubGateWayIpAddr, pInf->ubGateWayIpAddr, 4);
        
        /* イベント生成 */
-       self->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtArp  = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtArp  = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
 
        /* ミューテックス生成 */
-       self->hMtxSend = SysMtx_Create();
-       self->hMtxRecv = SysMtx_Create();
-       self->hMtxArp  = SysMtx_Create();
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxArp  = SysMtx_Create(SYSMTX_ATTR_NORMAL);
 
        /* 受信プロセス生成 */
        self->hPrcRecv = SysPrc_Create(IpEther_Recv, (VPARAM)self, 1024, 2);
index 1650db0..be96d43 100755 (executable)
@@ -44,8 +44,8 @@ FILE_ERR TcpIp_Create(C_TCPIP *self, const char *pszIp)
        self->iOpenCount = 0;
        
        /* ミューテックス生成 */
-       self->hMtxLock = SysMtx_Create();
-       self->hMtxSend = SysMtx_Create();
+       self->hMtxLock = SysMtx_Create(SYSMTX_ATTR_NORMAL);
+       self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
        
        /* 受信プロセス生成 */
        self->hPrcRecv = SysPrc_Create(TcpIp_Recv, (VPARAM)self, 1024, 2);
index 8e9152d..177b55e 100755 (executable)
@@ -29,7 +29,7 @@ HANDLE TcpIp_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
        }
        ChrFile_Create(&pFile->ChrFile, &self->ChrDrv, NULL);
        StreamBuf_Create(&pFile->RecvBuf, TCPIPFILE_RECV_BUFSIZE, pFile->ubRecvBuf);
-       pFile->hEvtRecv = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       pFile->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
        
        /* デバイスオープン処理 */
        if ( self->iOpenCount++ == 0 )
index 75bbac4..84f5b98 100755 (executable)
@@ -149,7 +149,7 @@ int FatVol_Create(C_FATVOL *self, const char *pszPath)
        VolumeObj_Create(&self->VolumeObj, &FatVol_VolumeObjMethods);   
        
        /* ミューテックス生成 */
-       self->hMtx = SysMtx_Create();
+       self->hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);
        
        return FATVOL_ERR_OK;
 }
index f796a44..2156af0 100755 (executable)
@@ -31,7 +31,7 @@ HANDLE Event_Create(void)
        }
        
        /* オブジェクト生成 */
-       if ( (self->hSysEvt = SysEvt_Create(SYSEVT_MODE_NORMAL)) == SYSEVT_HANDLE_NULL )
+       if ( (self->hSysEvt = SysEvt_Create(SYSEVT_ATTR_NORMAL)) == SYSEVT_HANDLE_NULL )
        {
                SysMem_Free(self);
        }
index 5015eb0..a898fe4 100755 (executable)
 
 FILE_ERR ChrDrv_Create(C_CHRDRV *self, const T_DRVOBJ_METHODS *pMethods)
 {
-       self->hMtx      = SysMtx_Create();                      /**< 排他制御ミューテックス */
+       self->hMtx      = SysMtx_Create(SYSMTX_ATTR_NORMAL);                    /**< 排他制御ミューテックス */
        
-       self->hEvtRead  = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
-       self->hEvtWrite = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       self->hEvtRead  = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
+       self->hEvtWrite = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
        
        self->pFileHead = NULL;                                 /**< 状態監視オブジェクトの連結ポインタ */
        
index 3dd1ac4..2785dca 100755 (executable)
@@ -38,9 +38,13 @@ typedef void* SYSEVT_HANDLE;
 #define SYSISR_HANDLE_NULL                     (0)
 typedef void* SYSISR_HANDLE;
 
-/* システム用イベントモード */
-#define        SYSEVT_MODE_NORMAL                      0x00
-#define        SYSEVT_MODE_AUTOCLEAR           0x01
+/* システム用イベント属性 */
+#define        SYSEVT_ATTR_NORMAL                      0x00
+#define        SYSEVT_ATTR_AUTOCLEAR           0x01
+
+/* システム用ミューテックス属性 */
+#define        SYSMTX_ATTR_NORMAL                      0x00
+
 
 
 #ifdef __cplusplus
@@ -82,13 +86,13 @@ void           SysPrc_Wait(SYSPRC_HANDLE hPrc);
 SYSPRC_HANDLE  SysPrc_GetCurrentHandle(void);
 
 /* システム用ミューテックス制御API */
-SYSMTX_HANDLE  SysMtx_Create(void);                                                    /* システム用ミューテックス生成 */
+SYSMTX_HANDLE  SysMtx_Create(int iAttr);                                       /* システム用ミューテックス生成 */
 void           SysMtx_Delete(SYSMTX_HANDLE hMtx);                      /* システム用ミューテックス削除 */
 void           SysMtx_Lock(SYSMTX_HANDLE hMtx);                                /* システム用ミューテックスロック*/
 void           SysMtx_Unlock(SYSMTX_HANDLE hMtx);                      /* システム用ミューテックスロック解除*/
 
 /* システム用イベント制御API */
-SYSEVT_HANDLE  SysEvt_Create(int iMode);                                       /* システム用イベント生成 */
+SYSEVT_HANDLE  SysEvt_Create(int iAttr);                                       /* システム用イベント生成 */
 void           SysEvt_Delete(SYSEVT_HANDLE hEvt);                      /* システム用イベント削除 */
 void           SysEvt_Wait(SYSEVT_HANDLE hEvt);                                /* システム用イベント待ち*/
 void           SysEvt_Set(SYSEVT_HANDLE hEvt);                         /* システム用イベントセット */
index 6404fb5..45ba26b 100755 (executable)
@@ -23,8 +23,8 @@ C_MEMPOL      SysMem_MemPol;
 void SysApi_Initialize(void *pMem, MEMSIZE Size)
 {
        /* メモリ管理の初期化 */
-       SysMem_hMtx = SysMtx_Create();                                  /* メモリ管理用排他制御用ミューテックス生成 */
-       MemPol_Create(&SysMem_MemPol, pMem, Size);              /* メモリプール生成 */
+       SysMem_hMtx = SysMtx_Create(SYSMTX_ATTR_NORMAL);        /* メモリ管理用排他制御用ミューテックス生成 */
+       MemPol_Create(&SysMem_MemPol, pMem, Size);                      /* メモリプール生成 */
 }
 
 
index 875f10b..b4b2ad0 100755 (executable)
 
 
 /* システム用イベント生成 */
-SYSEVT_HANDLE SysEvt_Create(int iMode)
+SYSEVT_HANDLE SysEvt_Create(int iAttr)
 {
        T_CFLG cflg;
        ER_ID  erid;
 
        /* ロック用セマフォ生成 */
-       cflg.flgatr  = TA_TFIFO | ((iMode & SYSEVT_MODE_AUTOCLEAR) ? TA_CLR : 0);
+       cflg.flgatr  = TA_TFIFO | ((iAttr & SYSEVT_ATTR_AUTOCLEAR) ? TA_CLR : 0);
        cflg.iflgptn = 0;
        erid = acre_flg(&cflg);
        if ( erid < 0 )
index a088c85..c2b2a5b 100755 (executable)
@@ -14,7 +14,7 @@
 
 
 /* システム用ミューテックス生成 */
-SYSMTX_HANDLE SysMtx_Create(void)
+SYSMTX_HANDLE SysMtx_Create(int iAttr)
 {
        T_CSEM csem;
        ER_ID  erid;
index 58979b9..58bddd1 100755 (executable)
@@ -30,7 +30,7 @@ void System_Initialize(void *pMem, MEMSIZE Size)
        SysApi_Initialize(pMem, Size);
        
        /* システムクラスの初期化 */
-       g_System.hEvtProc  = SysEvt_Create(SYSEVT_MODE_AUTOCLEAR);
+       g_System.hEvtProc  = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
        g_System.iProcHead = 0;
        g_System.iProcTail = 0;
        
diff --git a/kernel/build/arm/mx1/armcc/gmake.mak b/kernel/build/arm/mx1/armcc/gmake.mak
new file mode 100755 (executable)
index 0000000..c0bbdf2
--- /dev/null
@@ -0,0 +1,105 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for Freescale MX1 family
+#
+# Copyright (C) 1998-2007 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+
+# ディレクトリ定義
+HOSV4A_DIR        = ../../../../..
+KERNEL_DIR        = $(HOSV4A_DIR)/kernel
+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
+OBJS_DIR          = objs_$(TARGET)
+
+
+# %jp{共通定義読込み}
+include $(KERNEL_MAKINC_DIR)/common.inc
+
+
+# %jp{アーキテクチャ定義}
+ARCH_PROC ?= arm/arm_v4t
+ARCH_IRC  ?= arm/mx1
+ARCH_CC   ?= armcc
+
+# %jp{アーキテクチャパス}
+INC_PROC_DIR    = $(KERNEL_DIR)/include/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR     = $(KERNEL_DIR)/include/arch/irc/$(ARCH_IRC)
+SRC_PROC_DIR    = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)
+SRC_PROC_CC_DIR = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR     = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)
+SRC_IRC_CC_DIR  = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# %jp{パス設定}
+INC_DIRS += $(INC_PROC_DIR) $(INC_IRC_DIR)
+SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_CC_DIR) $(SRC_IRC_DIR) $(SRC_IRC_CC_DIR)
+
+# %jp{オプションフラグ}
+AFLAGS  += --cpu=ARM920T --apcs=inter --thumb
+CFLAGS  += --cpu=ARM920T --apcs=inter --thumb
+ARFLAGS += 
+
+# %jp{コンフィギュレータ定義}
+CFGRTR_DIR = $(HOSV4A_DIR)/cfgrtr/build/gcc
+CFGRTR     = h4acfg-mx1
+
+
+# %jp{コンパイラ依存の設定読込み}
+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_d.inc
+
+
+
+# C言語ファイルの追加
+CSRCS += $(SRC_PROC_DIR)/val_int.c                     \
+         $(SRC_IRC_DIR)/kini_irc.c                     \
+         $(SRC_IRC_DIR)/kexe_irc.c                     \
+         $(SRC_IRC_DIR)/ena_int.c                      \
+         $(SRC_IRC_DIR)/dis_int.c                      \
+         $(SRC_IRC_DIR)/vclr_int.c
+
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_CC_DIR)/kcre_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kdis_int.s         \
+         $(SRC_PROC_CC_DIR)/kena_int.s         \
+         $(SRC_PROC_CC_DIR)/kirq_hdr.s         \
+         $(SRC_PROC_CC_DIR)/kfiq_hdr.s         \
+         $(SRC_PROC_CC_DIR)/krst_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kswi_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kwai_int.s
+
+
+
+# カーネル共通ソースの追加
+include $(KERNEL_MAKINC_DIR)/knlsrc.inc
+
+
+
+# %jp{ALL}
+.PHONY : all
+all: makelib_all
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+# %jp{クリーン}
+.PHONY : clean
+clean: makelib_clean
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+       $(RM) -f *.lst
+
+
+# %jp{ライブラリ生成用設定読込み}
+include $(KERNEL_MAKINC_DIR)/makelib.inc
+
+# %jp{コンパイラ依存ルール定義読込み}
+include $(KERNEL_MAKINC_DIR)/$(ARCH_CC)_r.inc
+
+# %jp{カーネル依存関係読込み}
+include $(KERNEL_MAKINC_DIR)/knldep.inc
+
+
+# end of file
index d81594c..7a94268 100755 (executable)
@@ -119,7 +119,7 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 /* ---------------------------------------------- */
 
 /** %jp{レディーキューのアルゴリズム} */
-#define _KERNEL_CFG_RDQ_ALGORITHM              _KERNEL_RDQ_ALG_SINGLE_QUE
+#define _KERNEL_CFG_RDQ_ALGORITHM              _KERNEL_RDQ_ALG_ARRAYED_QUE
 
 /* %jp{
    _KERNEL_RDQ_ALG_SINGLE_QUE         : シングルキュー(省メモリだが、タスク数が増えると遅い)
index bda012c..1a49a07 100755 (executable)
@@ -91,6 +91,31 @@ typedef _KERNEL_T_FAST_UD            _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグ
 
 
 /* ---------------------------------- */
+/*            Mutex-ID                */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#elif (_KERNEL_TMAX_MTXID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_MTXID;                                                        /**< %jp{ミューテックスIDの型}%en{type of Mutex-ID} */
+#endif
+
+
+
+/* ---------------------------------- */
 /*            Mailbox-ID              */
 /* ---------------------------------- */
 
index 642e0ea..beff7e0 100755 (executable)
 #define __HOS_V4a__knl_rdq_h__
 
 
-/* ------------------------------------------ */
-/*         constant value definition          */
-/* ------------------------------------------ */
-
-#define _KERNEL_RDQ_ALG_SINGLE_QUE                             1
-#define _KERNEL_RDQ_ALG_ARRAYED_QUE                            2
-#define _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE             3
-
-
-
-#if _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_SINGLE_QUE
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_SINGLE_QUE
 
 /* ------------------------------------------ */
 /*             single queue                   */
 /** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */
 typedef struct _kernel_t_rdqcb
 {
-       _KERNEL_T_QUE que;
+       _KERNEL_T_QUE   que;
 } _KERNEL_T_RDQCB;
 
 
-#define _KERNEL_CRE_RDQ(rdqcb)                 _KERNEL_CRE_QUE(&(rdqcb)->que)                                                          /**< %en{create ready-queue}%jp{レディーキューの生成} */
-#define _KERNEL_DEL_RDQ(rdqcb)                 _KERNEL_DEL_QUE(&(rdqcb)->que)                                                          /**< %en{delete ready-queue}%jp{レディーキューの削除} */
-
-#define _KERNEL_ADD_RDQ(rdqcb, tskhdl) _KERNEL_ADP_QUE(&(rdqcb)->que, (tskhdl))                                        /**< %jp{タスクをレディーキューに追加} */
-#define _KERNEL_RMV_RDQ(rdqcb, tskhdl) _KERNEL_RMV_QUE(&(rdqcb)->que, (tskhdl))                                        /**< %jp{タスクをレディーから取り外し} */
-
-#define _KERNEL_RMH_RDQ(rdqcb)                 _KERNEL_RMH_QUE(&(rdqcb)->que)                                                          /**< %jp{キューの先頭タスクの取り外し} */
-#define _KERNEL_REF_RDQ(rdqcb)                 _KERNEL_REF_QUE(&(rdqcb)->que)                                                          /**< %jp{キューの先頭タスクの参照} */
-
-#define _KERNEL_ROT_RDQ(rdqcb, tskpri) _KERNEL_RTP_QUE(&(rdqcb)->que, (tskpri))                                        /**< %jp{レディーキューの回転} */
-
-#if 0
-#define _KERNEL_CRE_RDQ()                      _KERNEL_CRE_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %en{create ready-queue}%jp{レディーキューの生成} */
-#define _KERNEL_DEL_RDQ()                      _KERNEL_DEL_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %en{delete ready-queue}%jp{レディーキューの削除} */
+#define _KERNEL_CRE_RDQ(rdqcb)                 _KERNEL_CRE_QUE(&(rdqcb)->que)                          /**< %en{create ready-queue}%jp{レディーキューの生成} */
+#define _KERNEL_DEL_RDQ(rdqcb)                 _KERNEL_DEL_QUE(&(rdqcb)->que)                          /**< %en{delete ready-queue}%jp{レディーキューの削除} */
 
-#define _KERNEL_ADD_RDQ(tskhdl)                _KERNEL_ADP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl))                  /**< %jp{タスクをレディーキューに追加} */
-#define _KERNEL_RMV_RDQ(tskhdl)                _KERNEL_RMV_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl))                  /**< %jp{タスクをレディーから取り外し} */
+#define _KERNEL_ADD_RDQ(rdqcb, tskhdl) _KERNEL_ADP_QUE(&(rdqcb)->que, (tskhdl))        /**< %jp{タスクをレディーキューに追加} */
+#define _KERNEL_RMV_RDQ(rdqcb, tskhdl) _KERNEL_RMV_QUE(&(rdqcb)->que, (tskhdl))        /**< %jp{タスクをレディーから取り外し} */
 
-#define _KERNEL_RMH_RDQ()                      _KERNEL_RMH_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %jp{キューの先頭タスクの取り外し} */
-#define _KERNEL_REF_RDQ()                      _KERNEL_REF_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %jp{キューの先頭タスクの参照} */
+#define _KERNEL_RMH_RDQ(rdqcb)                 _KERNEL_RMH_QUE(&(rdqcb)->que)                          /**< %jp{キューの先頭タスクの取り外し} */
+#define _KERNEL_REF_RDQ(rdqcb)                 _KERNEL_REF_QUE(&(rdqcb)->que)                          /**< %jp{キューの先頭タスクの参照} */
 
-#define _KERNEL_ROT_RDQ(tskpri)                _KERNEL_RTP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskpri))                  /**< %jp{レディーキューの回転} */
-#endif
+#define _KERNEL_ROT_RDQ(rdqcb, tskpri) _KERNEL_RTP_QUE(&(rdqcb)->que, (tskpri))        /**< %jp{レディーキューの回転} */
 
 
-#elif _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+#elif _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
 
 /* ------------------------------------------ */
 /*               arrayed que                  */
 /* ------------------------------------------ */
 
 /** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */
-typedef struct _kernel_t_rdq
+typedef struct _kernel_t_rdqcb
 {
-       T__KERNEL_QUE que[_KERNEL_TMAX_TSKPRI];
-} _KERNEL_T_RDQ;
+       _KERNEL_T_QUE   que[_KERNEL_TSK_TMAX_TPRI];
+} _KERNEL_T_RDQCB;
+
+
+#define _KERNEL_CRE_RDQ(rdqcb)                 _kernel_cre_rdq((rdqcb))                                        /**< %jp{レディーキューの生成}%en{create ready-queue} */
+#define _KERNEL_DEL_RDQ(rdqcb)                 _kernel_del_rdq((rdqcb))                                        /**< %jp{レディーキューの削除}%en{delete ready-queue} */
 
+#define _KERNEL_ADD_RDQ(rdqcb, tskhdl) _kernel_add_rdq((rdqcb), (tskhdl))                      /**< %jp{タスクをレディーキューに追加} */
+#define _KERNEL_RMV_RDQ(rdqcb, tskhdl) _kernel_rmv_rdq((rdqcb), (tskhdl))                      /**< %jp{タスクをレディーから取り外し} */
 
-#define _kernel_cre_rdq()              _kernel_cre_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %en{create ready-queue}%jp{レディーキューの生成} */
-#define _kernel_del_rdq()              _kernel_del_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %en{delete ready-queue}%jp{レディーキューの削除} */
+#define _KERNEL_RMH_RDQ(rdqcb)                 _kernel_rmh_rdq((rdqcb))                                        /**< %jp{キューの先頭タスクの取り外し} */
+#define _KERNEL_REF_RDQ(rdqcb)                 _kernel_ref_rdq((rdqcb))                                        /**< %jp{キューの先頭タスクの参照} */
+
+#define _KERNEL_ROT_RDQ(rdqcb, tskpri) _kernel_rot_rdq((rdqcb), (tskpri))                      /**< %jp{レディーキューの回転} */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-#define _kernel_add_rdq(tskhdl)        _kernel_adp_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl)                                /**< %jp{タスクをキューに追加} */
-#define _kernel_rmv_rdq(tskhdl)        _kernel_rmv_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl)                                /**< */
+void             _kernel_cre_rdq(_KERNEL_T_RDQCB *rdqcb);                                                      /**< %jp{レディーキューの生成}%en{create ready-queue} */
+void             _kernel_del_rdq(_KERNEL_T_RDQCB *rdqcb);                                                      /**< %jp{レディーキューの削除}%en{delete ready-queue} */
 
-#define _kernel_rmh_rdq()              _kernel_rmh_que(&_KERNEL_SYS_GET_RDQ()->que)
-#define _kernel_ref_rdq()              _kernel_ref_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %jp{キューの先頭タスクの参照(マクロ関数)} */
+void             _kernel_add_rdq(_KERNEL_T_RDQCB *rdqcb, _KERNEL_T_TSKHDL tskhdl);     /**< %jp{タスクをレディーキューに追加} */
+void             _kernel_rmv_rdq(_KERNEL_T_RDQCB *rdqcb, _KERNEL_T_TSKHDL tskhdl);     /**< %jp{タスクをレディーキューから取り外し} */
 
-void    _kernel_rot_rdq(PRI tskpri);                                                                                                                           /**< %jp{レディーキューの回転} */
+_KERNEL_T_TSKHDL _kernel_rmh_rdq(_KERNEL_T_RDQCB *rdqcb);                                                      /**< %jp{レディーキューの先頭タスクの取り外し} */
+_KERNEL_T_TSKHDL _kernel_ref_rdq(_KERNEL_T_RDQCB *rdqcb);                                                      /**< %jp{レディーキューの先頭タスクの参照} */
 
+void             _kernel_rot_rdq(_KERNEL_T_RDQCB *rdqcb, PRI tskpri);                          /**< %jp{レディーキューの回転} */
 
 #ifdef __cplusplus
 }
@@ -96,7 +88,7 @@ void    _kernel_rot_rdq(PRI tskpri);                                                                                                                          /**< %jp{レディーキュ
 
 #else  /* error */
 
-#error Illegal value : _KERNEL_CFG_QUE_ALGORITHM
+#error Illegal value : _KERNEL_QUE_ALGORITHM
 
 #endif
 
index ce8e447..062dfe4 100755 (executable)
@@ -80,7 +80,6 @@
 
 
 
-
 /* ------------------------------------------------------------------ */
 /*  service call support                                              */
 /* ------------------------------------------------------------------ */
 
 
 /* ------------------------------------------------------------------ */
+/*  Ready queue                                                       */
+/* ------------------------------------------------------------------ */
+
+#define _KERNEL_RDQ_ALG_SINGLE_QUE                             1
+#define _KERNEL_RDQ_ALG_ARRAYED_QUE                            2
+#define _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE             3
+
+#define _KERNEL_RDQ_ALGORITHM                  _KERNEL_CFG_RDQ_ALGORITHM
+
+
+/* ------------------------------------------------------------------ */
 /*  Timeout queue                                                     */
 /* ------------------------------------------------------------------ */
 
 /* ---------------------------------- */
 
 #define _KERNEL_TSKHDL_ID                      _KERNEL_CFG_TSKHDL_ID
+#define _KERNEL_MTXHDL_ID                      _KERNEL_CFG_MTXHDL_ID
 #define _KERNEL_ISRHDL_ID                      _KERNEL_CFG_ISRHDL_ID
 
 
diff --git a/kernel/source/arch/irc/arm/mx1/dis_int.c b/kernel/source/arch/irc/arm/mx1/dis_int.c
new file mode 100755 (executable)
index 0000000..b23845c
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dis_int.c
+ * @brief %jp{Freescale MX1用}%en{Freescale MX1}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+/* 割り込みの禁止 */
+ER dis_int(INTNO intno)
+{
+       if ( intno < _KERNEL_IRCATR_TMIN_INTNO || intno > _KERNEL_IRCATR_TMAX_INTNO )
+       {
+               return E_PAR;
+       }
+
+       *_KERNEL_IRC_INTDISNUM = intno;
+       
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/arch/irc/arm/mx1/ena_int.c b/kernel/source/arch/irc/arm/mx1/ena_int.c
new file mode 100755 (executable)
index 0000000..dc0f026
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ena_int.c
+ * @brief %jp{Freescale MX1用}%en{Freescale MX1}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+/* 割り込みの許可 */
+ER ena_int(INTNO intno)
+{
+       if ( intno < _KERNEL_IRCATR_TMIN_INTNO || intno > _KERNEL_IRCATR_TMAX_INTNO )
+       {
+               return E_PAR;
+       }
+
+       *_KERNEL_IRC_INTENNUM = intno;
+       
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/arch/irc/arm/mx1/kexe_irc.c b/kernel/source/arch/irc/arm/mx1/kexe_irc.c
new file mode 100755 (executable)
index 0000000..7e8fe29
--- /dev/null
@@ -0,0 +1,44 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  kexe_irc.c
+ * @brief %jp{Freescale MX1用}%en{Freescale MX1}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+/** %jp{割込みコントローラの割込み処理} */
+void _kernel_exe_irc(INHNO inhno)
+{
+       INTNO intno;
+
+       switch ( inhno )
+       {
+       case _KERNEL_ARM_INHNO_IRQ:
+               intno = (*_KERNEL_IRC_NIVECSR >> 16);
+               break;
+
+       case _KERNEL_ARM_INHNO_FIQ:
+               intno = *_KERNEL_IRC_NIVECSR;
+               break;
+       
+       default:
+               return;
+       }
+
+       /* %jp{割込みサービスルーチン呼び出し} */
+       if ( intno >= _KERNEL_IRCATR_TMIN_INTNO && intno <= _KERNEL_IRCATR_TMAX_INTNO )
+       {
+               _kernel_exe_isr(intno);
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/arch/irc/arm/mx1/kini_irc.c b/kernel/source/arch/irc/arm/mx1/kini_irc.c
new file mode 100755 (executable)
index 0000000..766dca3
--- /dev/null
@@ -0,0 +1,44 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ini_irc.c
+ * @brief %jp{Freescale MX1用}%en{Freescale MX1}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+/** %jp{割込みコントローラの初期化} */
+void _kernel_ini_irc(void)
+{
+       /* 割り込み禁止 */
+       *_KERNEL_IRC_INTENABLEH  = 0x00000000;
+       *_KERNEL_IRC_INTENABLEL  = 0x00000000;
+       
+       *_KERNEL_IRC_NIMASK      = 0x00000000;
+       *_KERNEL_IRC_INTCNTL     = 0x00180000;
+
+       *_KERNEL_IRC_INTTYPEH    = 0x00000000;
+       *_KERNEL_IRC_INTTYPEL    = 0x00000000;
+       
+       *_KERNEL_IRC_NIPRIORITY7 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY6 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY5 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY4 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY3 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY2 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY1 = 0xffffffff;
+       *_KERNEL_IRC_NIPRIORITY0 = 0xffffffff;
+       
+       *_KERNEL_IRC_INTFRCH     = 0x00000000;
+       *_KERNEL_IRC_INTFRCL     = 0x00000000;
+}              
+
+
+/* end of file */
diff --git a/kernel/source/arch/irc/arm/mx1/vclr_int.c b/kernel/source/arch/irc/arm/mx1/vclr_int.c
new file mode 100755 (executable)
index 0000000..41586a3
--- /dev/null
@@ -0,0 +1,24 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ena_int.c
+ * @brief %jp{Freescale MX1用}%en{Freescale MX1}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+/* %jp{割り込みのクリア} */
+ER vclr_int(INTNO intno)
+{
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/add_rdq.c b/kernel/source/core/rdq/add_rdq.c
new file mode 100755 (executable)
index 0000000..74d83b4
--- /dev/null
@@ -0,0 +1,42 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_rdq.c
+ * @brief %jp{タスクをレディーキューに追加}%en{Add the task to the ready-queue}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{タスクをレディーキューに追加}%en{Add the task to the ready-queue}
+ * @param  rdqcb  %jp{追加するレディーキュー}%en{pointer of ready-queue}
+ * @param  tskhdl %jp{追加するタスクのハンドル}%en{handle of task}
+ * @return void
+ */
+void _kernel_add_rdq(_KERNEL_T_RDQCB *rdqcb, _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TCB_PTR       tcb;
+       PRI                                     tskpri;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{タスク優先度を取得} */
+       tskpri = _KERNEL_TSK_GET_TSKPRI(tcb);
+       
+       /* %jp{キューに追加} */
+       _KERNEL_ADP_QUE(&rdqcb->que[tskpri-1], tskhdl);
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/cre_rdq.c b/kernel/source/core/rdq/cre_rdq.c
new file mode 100755 (executable)
index 0000000..73e2100
--- /dev/null
@@ -0,0 +1,36 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cre_rdq.c
+ * @brief %jp{レディーキューの生成}%en{create ready-queue}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{レディーキューの生成}%en{create ready-queue}
+ * @param  rdqcb  %jp{生成するレディーキュー}%en{pointer of ready-queue}
+ * @return void
+ */
+void _kernel_cre_rdq(_KERNEL_T_RDQCB *rdqcb)
+{
+       PRI     tskpri;
+       
+       for ( tskpri = 0; tskpri < _KERNEL_TSK_TMAX_TPRI; tskpri++ )
+       {
+               _KERNEL_CRE_QUE(&rdqcb->que[tskpri]);
+       }
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/del_rdq.c b/kernel/source/core/rdq/del_rdq.c
new file mode 100755 (executable)
index 0000000..6a3b6e2
--- /dev/null
@@ -0,0 +1,36 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  del_rdq.c
+ * @brief %jp{レディーキューの削除}%en{delete ready-queue}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{レディーキューの削除}%en{delete ready-queue}
+ * @param  rdqcb  %jp{削除するレディーキュー}%en{pointer of ready-queue}
+ * @return void
+ */
+void _kernel_del_rdq(_KERNEL_T_RDQCB *rdqcb)
+{
+       PRI     tskpri;
+       
+       for ( tskpri = 0; tskpri < _KERNEL_TSK_TMAX_TPRI; tskpri++ )
+       {
+               _KERNEL_DEL_QUE(&rdqcb->que[tskpri]);
+       }
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/ref_rdq.c b/kernel/source/core/rdq/ref_rdq.c
new file mode 100755 (executable)
index 0000000..b87e221
--- /dev/null
@@ -0,0 +1,43 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ref_rdq.c
+ * @brief %jp{レディーキューの先頭タスクの参照}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{レディーキューの先頭タスクの参照}
+ * @param  rdqcb  %jp{取り外すレディーキュー}%en{pointer of ready-queue}
+ * @return void
+ */
+_KERNEL_T_TSKHDL _kernel_ref_rdq(_KERNEL_T_RDQCB *rdqcb)
+{
+       _KERNEL_T_TSKHDL        tskhdl;
+       PRI                                     tskpri;
+       
+       for ( tskpri = 0; tskpri < _KERNEL_TSK_TMAX_TPRI; tskpri++ )
+       {
+               tskhdl = _KERNEL_REF_QUE(&rdqcb->que[tskpri]);
+               if ( tskhdl != _KERNEL_TSKHDL_NULL )
+               {
+                       return tskhdl;
+               }
+       }
+       
+       return _KERNEL_TSKHDL_NULL;
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/rmh_rdq.c b/kernel/source/core/rdq/rmh_rdq.c
new file mode 100755 (executable)
index 0000000..47a0830
--- /dev/null
@@ -0,0 +1,43 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rmh_rdq.c
+ * @brief %jp{レディーキューの先頭タスクの取り外し}%en{Remove the task to the ready-queue}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{レディーキューの先頭タスクの取り外し}%en{Remove the task to the ready-queue}
+ * @param  rdqcb  %jp{取り外すレディーキュー}%en{pointer of ready-queue}
+ * @return void
+ */
+_KERNEL_T_TSKHDL _kernel_rmh_rdq(_KERNEL_T_RDQCB *rdqcb)
+{
+       _KERNEL_T_TSKHDL        tskhdl;
+       PRI                                     tskpri;
+       
+       for ( tskpri = 0; tskpri < _KERNEL_TSK_TMAX_TPRI; tskpri++ )
+       {
+               tskhdl = _KERNEL_RMH_QUE(&rdqcb->que[tskpri]);
+               if ( tskhdl != _KERNEL_TSKHDL_NULL )
+               {
+                       return tskhdl;
+               }
+       }
+       
+       return _KERNEL_TSKHDL_NULL;
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */
diff --git a/kernel/source/core/rdq/rmv_rdq.c b/kernel/source/core/rdq/rmv_rdq.c
new file mode 100755 (executable)
index 0000000..9e3771a
--- /dev/null
@@ -0,0 +1,42 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rmv_rdq.c
+ * @brief %jp{タスクをレディーキューから削除}%en{Remove the task to the ready-queue}
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/** %jp{タスクをレディーキューから削除}%en{Remove the task to the ready-queue}
+ * @param  rdqcb  %jp{取り外すレディーキュー}%en{pointer of ready-queue}
+ * @param  tskhdl %jp{取り外すタスクのハンドル}%en{handle of task}
+ * @return void
+ */
+void _kernel_rmv_rdq(_KERNEL_T_RDQCB *rdqcb, _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TCB_PTR       tcb;
+       PRI                                     tskpri;
+       
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+       /* %jp{タスク優先度を取得} */
+       tskpri = _KERNEL_TSK_GET_TSKPRI(tcb);
+       
+       /* %jp{キューに追加} */
+       _KERNEL_RMV_QUE(&rdqcb->que[tskpri-1], tskhdl);
+}
+
+
+#endif /* _KERNEL_RDQ_ALGORITHM */
+
+
+
+/* end of file */