/* * COPYRIGHT (c) 1989-1999. * 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.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 */