summaryrefslogblamecommitdiffstats
path: root/cpukit/itron/include/itronsys/task.h
blob: d4f7a5e470fcee49989c7d9d9e7be61a6e27625c (plain) (tree)
1
2
3
4
  


                                                    





































































































































































































































































































                                                                              
/*
 *  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 */