Files
OpenCellular/include/task_id.h
Vincent Palatin 16e43a3d0d Initial mutex implementation
They are designed to protect shared hardware resources (e.g. I2C
controller).
Please refrain using them as a general purpose synchronization primitive
for the tasks to avoid unintended slippery effects (e.g. priority inversion),
use the provided message-passing functions instead for that purpose.

The mutex variable (ie the "struct mutex") should be initially filled
with 0, but this is the default compiler behavior if you declare it as a
global variable.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BUG=None
TEST=make qemu-tests

Change-Id: I328f7eadf5257560944dbbbeda0b99d5b24520e8
2012-01-25 18:23:48 +00:00

43 lines
1.2 KiB
C

/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* define the task identifier of all compiled tasks */
#ifndef __TASK_ID_H
#define __TASK_ID_H
/* define the name of the header containing the list of tasks */
#define STRINGIFY0(name) #name
#define STRINGIFY(name) STRINGIFY0(name)
#define TASK_LIST STRINGIFY(TASKFILE)
/* Task identifier (8 bits) */
typedef uint8_t task_id_t;
/**
* enumerate all tasks in the priority order
*
* the identifier of a task can be retrieved using the following constant:
* TASK_ID_<taskname> where <taskname> is the first parameter passed to the
* TASK macro in the TASK_LIST file.
*/
#define TASK(n, r, d) TASK_ID_##n,
#include TASK_LIST
enum {
TASK_ID_IDLE,
/* CONFIG_TASK_LIST is a macro coming from the TASK_LIST file */
CONFIG_TASK_LIST
/* Number of tasks */
TASK_ID_COUNT,
/* Special task identifiers */
TASK_ID_MUTEX = 0x1e, /* signal mutex unlocking */
TASK_ID_TIMER = 0x1f, /* message from an expired timer */
TASK_ID_CURRENT = 0xfe, /* the currently running task */
TASK_ID_INVALID = 0xff /* unable to find the task */
};
#undef TASK
#endif /* __TASK_ID_H */