class.h

説明を見る。
00001 /*
00002  *  TOPPERS/FDMP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Function Distributed Multiprocessor Kernel
00005  *
00006  *  Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory
00007  *              Graduate School of Information Science, Nagoya Univ., JAPAN  
00008  * 
00009  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00010  *  によって公表されている GNU General Public License の Version 2 に記
00011  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00012  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00013  *  利用と呼ぶ)することを無償で許諾する.
00014  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00015  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00016  *      スコード中に含まれていること.
00017  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00018  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00019  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00020  *      の無保証規定を掲載すること.
00021  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00022  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00023  *      と.
00024  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00025  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00026  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00027  *        報告すること.
00028  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00029  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00030  * 
00031  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00032  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00033  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00034  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00035  * 
00036  *  @(#) $Id: class.h,v 1.1 2005/04/03 13:33:19 honda Exp $
00037  */
00038 
00043 #ifndef _CLASS_H_
00044 #define _CLASS_H_
00045 
00046 /*
00047  *  前方参照
00048  */ 
00049 typedef struct class_control_block CCB;
00050 
00051 #include "queue.h"
00052 #include "lock.h"
00053 #include "task.h"
00054 #include "time_event.h"
00055 
00064 #define NUM_CLASS (NO_PROC)
00065 
00073 #define CLS_MY_LOCAL    (PRCID) /* 自プロセッサのローカルクラス */
00074 
00082 typedef struct cb_table_control_block {
00083     void *cb_table;
00084     ID   max_id;
00085 } CBTCB;
00086 
00090 #define CHK_OBJID(cbtcb, id) (0 < (id) && (id) <= (cbtcb)->max_id)
00091 
00102 typedef struct ex_class_control_block {
00103     INT     prcid;  
00104     void    *tsk_lock_ptr;
00105     void    *obj_lock_ptr;
00106 
00107     QUEUE   *p_ready_queue;
00108     UINT    *p_ready_primap;
00109     TCB     **p_runtsk;
00110     TCB     **p_schedtsk;
00111     BOOL    *p_enadsp;
00112     TMEVTN  *p_tmevt_heap;
00113     UINT    *p_last_index;
00114     CBTCB   tsk;
00115     CBTCB   sem;
00116     CBTCB   flg;
00117     CBTCB   dtq;
00118     CBTCB   mbx;
00119     CBTCB   mpf;
00120     CBTCB   cyc;
00121 
00122     FP      p_activate_r;
00123     FP      p_call_cychdr;
00124 } EXCCB;
00125 
00131 extern EXCCB    exported_ccb_table[NUM_CLASS];
00132 
00136 #define get_exccb(clsid) (&exported_ccb_table[(clsid) - 1])
00137 
00145 struct class_control_block {
00146     INT     prcid;  
00147     LOCKOBJ tsk_lock;
00148     LOCKOBJ obj_lock;
00149 
00150     QUEUE   *p_ready_queue;
00151     UINT    *p_ready_primap;
00152     TCB     **p_runtsk;
00153     TCB     **p_schedtsk;
00154     BOOL    *p_enadsp;
00155     TMEVTN  *p_tmevt_heap;
00156     UINT    *p_last_index;
00157     CBTCB   tsk;
00158     CBTCB   sem;
00159     CBTCB   flg;
00160     CBTCB   dtq;
00161     CBTCB   mbx;
00162     CBTCB   mpf;
00163     CBTCB   cyc;
00164 
00165     FP      p_activate_r;
00166     FP      p_call_cychdr;
00167 };
00168 
00174 extern CCB  ccb_table[NUM_CLASS];
00175 
00179 extern CCB  *my_local_ccb;
00180 
00181 
00185 extern EXCCB    *my_local_exccb;
00186 
00187 
00193 #define runccb my_local_ccb
00194 
00204 #define get_clsid(id)       ((ID)((H)((id) >> 16)))
00205 #define remove_clsid(id)    ((ID)((H)(id)))
00206 
00210 #define get_ccb(clsid) (&ccb_table[(clsid) - 1])
00211 
00217 #define t_get_ccb_self(clsid)   \
00218     ((clsid) == TCLS_SELF ? runccb : get_ccb(clsid))
00219 
00220 #define i_get_ccb_self(clsid)   \
00221     ((clsid) == TCLS_SELF ? my_local_ccb : get_ccb(clsid))
00222 
00226 #define VALID_CLSID(clsid) \
00227     (0 < (clsid) && (clsid) <= NUM_CLASS)
00228 
00229 #define CHECK_CLSID_SELF(clsid) { \
00230     if (!(VALID_CLSID(clsid) || (clsid) == TCLS_SELF)) {    \
00231         ercd = E_ID;                    \
00232         goto exit;                  \
00233     }                           \
00234 }
00235 
00239 #define T_CHECK_CLSID_CCB(id) \
00240 ({ \
00241     ID  clsid = get_clsid(id); \
00242     CHECK_CLSID_SELF(clsid);   \
00243     t_get_ccb_self(clsid);       \
00244 })
00245 
00246 #define I_CHECK_CLSID_CCB(id) \
00247 ({ \
00248     ID  clsid = get_clsid(id); \
00249     CHECK_CLSID_SELF(clsid);   \
00250     i_get_ccb_self(clsid);       \
00251 })
00252 
00253 extern void init_my_local_ccb();
00254 extern void exccb_initialize();
00255 extern void ccb_convert();
00256 
00257 #endif /*_CLASS_H_*/

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:11 2006 に Doxygen によって生成されました。