From 352c9b2035e32e56f10f261d94955d97f4ab0f1c Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 9 Nov 1999 22:07:23 +0000 Subject: This patch adds the basic framework for the ITRON 3.0 API implementation for RTEMS. --- cpukit/itron/include/itronsys/task.h | 295 +++++++++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 cpukit/itron/include/itronsys/task.h (limited to 'cpukit/itron/include/itronsys/task.h') diff --git a/cpukit/itron/include/itronsys/task.h b/cpukit/itron/include/itronsys/task.h new file mode 100644 index 0000000000..fca48c03b8 --- /dev/null +++ b/cpukit/itron/include/itronsys/task.h @@ -0,0 +1,295 @@ +/* + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + */ + +#ifndef __ITRON_TASK_h_ +#define __ITRON_TASK_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Create Task (cre_tsk) Structure + */ + +typedef struct t_ctsk { + VP exinf; /* extended information */ + ATR tskatr; /* task attributes */ + FP task; /* task start address */ + PRI itskpri; /* initial task priority */ + INT stksz; /* stack size */ + /* additional information may be included depending on the implementation */ +} T_CTSK; + +/* + * Values for the tskatr field + */ + +#define TA_ASM 0x00 /* program written in assembly language */ +#define TA_HLNG 0x01 /* program written in high-level language */ +#define TA_COP0 0x8000 /* uses coprocessor having ID = 0 */ +#define TA_COP1 0x4000 /* uses coprocessor having ID = 1 */ +#define TA_COP2 0x2000 /* uses coprocessor having ID = 2 */ +#define TA_COP3 0x1000 /* uses coprocessor having ID = 3 */ +#define TA_COP4 0x0800 /* uses coprocessor having ID = 4 */ +#define TA_COP5 0x0400 /* uses coprocessor having ID = 5 */ +#define TA_COP6 0x0200 /* uses coprocessor having ID = 6 */ +#define TA_COP7 0x0100 /* uses coprocessor having ID = 7 */ + +/* + * Values for the tskid field + */ + +#define TSK_SELF 0 /* task specifies itself */ + +/* XXX is this a mistake in ITRON? FALSE was here and in the types list */ +#if 0 + +#define FALSE 0 /* indicates a task-independent portion (return */ + /* parameters only) */ +#endif + +/* + * Values for the tskpri field + */ + +#define TPRI_INI 0 /* specifies the initial priority on */ + /* task startup (chg_pri) */ +#define TPRI_RUN 0 /* specifies the highest priority during */ + /* execution (rot_rdq) */ + + +/* + * Reference Task (ref_tsk) Structure + */ + +typedef struct t_rtsk { + VP exinf; /* extended information */ + PRI tskpri; /* current priority */ + UINT tskstat; /* task state */ + /* + * The following are represent extended features of support + * [level X] (implementation-dependent). + */ + UINT tskwait; /* cause of wait */ + ID wid; /* ID of object being waited for */ + INT wupcnt; /* wakeup request count */ + INT suscnt; /* SUSPEND request count */ + ATR tskatr; /* task attributes */ + FP task; /* task start address */ + PRI itskpri; /* initial task priority */ + INT stksz; /* stack size */ +} T_RTSK; + +/* + * Values for the tskstat field + */ + + +#define TTS_RUN 0x01 /* RUN */ +#define TTS_RDY 0x02 /* READY */ +#define TTS_WAI 0x04 /* WAIT */ +#define TTS_SUS 0x08 /* SUSPEND */ +#define TTS_WAS 0x0C /* WAIT-SUSPEND */ +#define TTS_DMT 0x10 /* DORMANT */ + +/* + * Values for the tskwait field + */ + +#define TTW_SLP 0x0001 /* wait due to slp_tsk or tslp_tsk */ +#define TTW_DLY 0x0002 /* wait due to dly_tsk */ +#define TTW_NOD 0x0008 /* connection function response wait */ +#define TTW_FLG 0x0010 /* wait due to wai_flg or twai_flg */ +#define TTW_SEM 0x0020 /* wait due to wai_sem or twai_sem */ +#define TTW_MBX 0x0040 /* wait due to rcv_msg or trcv_msg */ +#define TTW_SMBF 0x0080 /* wait due to snd_mbf or tsnd_mbf */ +#define TTW_MBF 0x0100 /* wait due to rcv_mbf or trcv_mbf */ +#define TTW_CAL 0x0200 /* wait for rendezvous call */ +#define TTW_ACP 0x0400 /* wait for rendezvous accept */ +#define TTW_RDV 0x0800 /* wait for rendezvous completion */ +#define TTW_MPL 0x1000 /* wait due to get_blk or tget_blk */ +#define TTW_MPF 0x2000 /* wait due to get_blf or tget_blf */ + +/* + * Since the task states given by tskstat and tskwait are expressed + * by bit correspondences, they are convenient when looking for OR + * conditions (such as whether a task is in WAIT or READY state). + */ + +/* + * Task Management Functions + */ + +/* + * cre_tsk - Create Task + */ + +ER cre_tsk( + ID tskid, + T_CTSK *pk_ctsk +); + +/* + * del_tsk - Delete Task + */ + +ER del_tsk( + ID tskid +); + +/* + * sta_tsk - Start Task + */ + +ER sta_tsk( + ID tskid, + INT stacd +); + +/* + * ext_tsk - Exit Issuing Task + */ + +void ext_tsk( void ); + +/* + * exd_tsk - Exit and Delete Task + */ + +void exd_tsk( void ); + +/* + * ter_tsk - Terminate Other Task + */ + +ER ter_tsk( + ID tskid +); + +/* + * dis_dsp - Disable Dispatch + */ + +ER dis_dsp( void ); + +/* + * ena_dsp - Enable Dispatch + */ + +ER ena_dsp( void ); + +/* + * chg_pri - Change Task Priority + */ + +ER chg_pri( + ID tskid, + PRI tskpri +); + +/* + * rot_rdq - Rotate Tasks on the Ready Queue + */ + +ER rot_rdq( + PRI tskpri +); + +/* + * rel_wai - Release Wait of Other Task + */ + +ER rel_wai( + ID tskid +); + +/* + * get_tid - Get Task Identifier + */ + +ER get_tid( + ID *p_tskid +); + +/* + * ref_tsk - Reference Task Status + */ + +ER ref_tsk( + T_RTSK *pk_rtsk, + ID tskid +); + + +/* + * Task-Dependent Synchronization Functions + */ + +/* + * sus_tsk - Suspend Other Task + */ + +ER sus_tsk( + ID tskid +); + +/* + * rsm_tsk - Resume Suspended Task + */ + +ER rsm_tsk( + ID tskid +); + +/* + * frsm_tsk - Forcibly Resume Suspended Task + */ + +ER frsm_tsk( + ID tskid +); + +/* + * slp_tsk - Sleep Task Sleep Task with Timeout + */ + +ER slp_tsk( void ); + +/* + * tslp_tsk - Sleep Task with Timeout + */ + +ER tslp_tsk( + TMO tmout +); + +/* + * wup_tsk - Wakeup Other Task + */ + +ER wup_tsk( + ID tskid +); + +/* + * can_wup - Cancel Wakeup Request + */ + +ER can_wup( + INT *p_wupcnt, + ID tskid +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ + -- cgit v1.2.3