/**************************************************************************** * Copyright (c) 2006 DST Technologies Inc. All Rights Reserved. * * Module: OS * * Description: Unified APIs for interfacing with different operating systems * * Notes: This module containes defines to interface with the following * operating system's objects: * - Tasks * - Mutexes * - Events * - Timers * - Qeueus * - Semaphores * - Memory * - Persistent Storage (NVM) * - Processes * ***************************************************************************/ #ifndef OS_H_ #define OS_H_ #ifdef __cplusplus extern "C" { #endif #include "oem_opt.h" /*========================== * Global defines *=========================*/ enum { OS_VRTX, OS_LINUX, OS_WINCE, OS_VXWORKS, OS_WIN9X, OS_WINNT, OS_PSOS, OS_QNX, OS_MSDOS, OS_PMON, OS_POWERTV }; #define OS_OK 0 #define OS_TIMEOUT 1 #define OS_FAIL 2 #define OS_NOT_SUPPORTED 3 #ifndef OS_WAIT_FOREVER #define OS_WAIT_FOREVER 0xFFFFFFFF #endif #define CORE_TASK_ID DS_U32 #define CORE_LOCK_ID DS_U32 #define CORE_SEM_ID DS_U32 #define CORE_MUTEX_ID DS_U32 #define CORE_EVENT_ID DS_U32 #define CORE_QUEUE_ID DS_U32 #define CORE_TIMER_ID DS_U32 #define CORE_NOTIFYQ_ID DS_U32 #define CORE_UIRT_ID DS_U32 #define CORE_INVALID_ID 0x0 #define TASK_PRIOR_CALLER 0x01000000 #define TASK_PRIOR_LOWEST 0x00ff0000 #define TASK_PRIOR_LOW 0x00800000 #define TASK_PRIOR_NORMAL 0x00400000 #define TASK_PRIOR_HIGH 0x00100000 #define TASK_PRIOR_HIGHEST 0x00010000 #define TASK_PRIOR_IST 0x02000000 typedef enum { CORE_OK = 0, CORE_ERROR, CORE_TIMEOUT, CORE_INVALID_PARAM, CORE_INVALID_HANDLE, CORE_OPEN_FAILED } CORE_RESULT; //yzyeo #define MSGQ_SIZE typedef void (INTER_PROC_FUNC)(DS_S32, void *); typedef INTER_PROC_FUNC *INTER_PROC_CALL; typedef struct { DS_U32 PhysAddr; DS_U32 VirtAddr; DS_U32 Length; } PHYS_BLOCK; /*========================== * Global prototypes *=========================*/ /*---------------------- * Tasks *---------------------*/ CORE_TASK_ID DstCore_TaskCreate (void (*TaskFuncPtr) (void *), void *Parameter, DS_U32 Priority); DS_U32 DstCore_TaskSuspend (CORE_TASK_ID TaskId); DS_U32 DstCore_TaskResume (CORE_TASK_ID TaskId); DS_U32 DstCore_TaskGetInfo (CORE_TASK_ID *TaskId); DS_U32 DstCore_TaskSetPriority (CORE_TASK_ID TaskId, DS_U32 Priority); DS_U32 DstCore_TaskDelete (CORE_TASK_ID TaskId); /*---------------------- * Task locks *---------------------*/ CORE_LOCK_ID DstCore_TaskLockCreate (void); DS_U32 DstCore_TaskLockSet (CORE_LOCK_ID LockId); DS_U32 DstCore_TaskLockReset (CORE_LOCK_ID LockId); DS_U32 DstCore_TaskLockDelete (CORE_LOCK_ID LockId); /*---------------------- * Mutexes *---------------------*/ CORE_MUTEX_ID DstCore_MutexCreate (DS_U32 MutexName); DS_U32 DstCore_MutexLock (CORE_MUTEX_ID MutexId, DS_U32 Timeout); DS_U32 DstCore_MutexUnlock (CORE_MUTEX_ID MutexId); DS_U32 DstCore_MutexDelete (CORE_MUTEX_ID MutexId); /*---------------------- * Semaphores *---------------------*/ CORE_SEM_ID DstCore_SemCreate (DS_U32 SemName, DS_U32 InitCount); DS_U32 DstCore_SemLock (CORE_SEM_ID SemId, DS_U32 Timeout); DS_U32 DstCore_SemUnlock (CORE_SEM_ID SemId); DS_U32 DstCore_SemDelete (CORE_SEM_ID SemId); /*---------------------- * Events *---------------------*/ CORE_EVENT_ID DstCore_EventCreate (DS_U32 EventName, DS_BOOL Signaled); DS_U32 DstCore_EventSet (CORE_EVENT_ID EventId); DS_U32 DstCore_EventReset (CORE_EVENT_ID EventId); DS_U32 DstCore_EventWait (CORE_EVENT_ID EventId, DS_BOOL AutoReset, DS_U32 Timeout); DS_U32 DstCore_EventDelete (CORE_EVENT_ID EventId); /*---------------------- * Multiple events *---------------------*/ CORE_EVENT_ID DstCore_EvGroupCreate (DS_BOOL Signaled, DS_U32 SubEvents); DS_U32 DstCore_EvGroupSet (CORE_EVENT_ID EventId, DS_U32 Mask); DS_U32 DstCore_EvGroupReset (CORE_EVENT_ID EventId, DS_U32 Mask); DS_U32 DstCore_EvGroupWait (CORE_EVENT_ID EventId, DS_U32 *EventsPtr, DS_BOOL AutoReset, DS_U32 Timeout); DS_U32 DstCore_EvGroupDelete (CORE_EVENT_ID EventId); /*---------------------- * Queues *---------------------*/ CORE_QUEUE_ID DstCore_QueueCreate (DS_U32 QueueName, DS_U32 MaxMsgCount, DS_U32 MsgLen); DS_U32 DstCore_QueuePost (CORE_QUEUE_ID QueueId, DS_U32 *Message //yzyeo #ifdef MSGQ_SIZE , DS_U32 msg_size #endif ); DS_U32 DstCore_QueueWait (CORE_QUEUE_ID QueueId, DS_U32 *Msg, DS_U32 Timeout //yzyeo #ifdef MSGQ_SIZE , DS_U32 *msg_size #endif ); DS_U32 DstCore_QueueReset (CORE_QUEUE_ID QueueId); DS_U32 DstCore_QueueDelete (CORE_QUEUE_ID QueueId); /*---------------------- * Timers and clocks *---------------------*/ CORE_TIMER_ID DstCore_TimerCreate (DS_U32 MsInterval, DS_U32 UserParam, void (*UserFunc) (CORE_TIMER_ID TimerId, DS_U32 TickCount, DS_U32 UsrParam)); DS_U32 DstCore_TimerDelete (CORE_TIMER_ID TimerId); DS_U32 DstCore_SetTimeOfDay (DS_U32 UtcSeconds); DS_U32 DstCore_GetTimeOfDay (DS_U32 *UtcSeconds); DS_U32 DstCore_Get100HzClockTick (void); DS_U32 DstCore_GetSysClockTick (void); DS_U32 DstCore_GetSysClockFreq (void); DS_U32 DstCore_Delay (DS_U32 Delay); DS_U32 DstCore_UsDelay (DS_U32 Delay); /*---------------------- * Memory management *---------------------*/ void *DstCore_MemAlloc (DS_U32 ByteSize); DS_U32 DstCore_MemFree (void *VirtualAddr); void *DstCore_MemSharedAlloc (DS_S8 *BufferName, DS_U32 ByteSize, DS_BOOL *Exist); DS_U32 DstCore_MemSharedFree (DS_S8 *BufferName, void *VirtualAddr); DS_U32 DstCore_RegWrite (DS_U32 Address, DS_U32 Value, int Size); DS_U32 DstCore_RegRead (DS_U32 Address, int Size); DS_U32 DstCore_GetLoaderVer(void); #ifdef __cplusplus } #endif #endif /* OS_H_ */