FreeCalypso > hg > fc-tourmaline
diff src/gpf/inc/os.h @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gpf/inc/os.h Fri Oct 16 06:23:26 2020 +0000 @@ -0,0 +1,284 @@ +/* ++------------------------------------------------------------------------------ +| File: os.h ++------------------------------------------------------------------------------ +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : Definitions for the OS adaptation layer. ++----------------------------------------------------------------------------- +*/ + +#ifndef __OS_H__ +#define __OS_H__ + +#include "os_const.h" + +/*==== CONSTANTS ===================================================*/ +typedef int OS_HANDLE; +typedef BOOL OS_INT_STATE; +typedef ULONG OS_TIME; +typedef ULONG OS_TICK; + +#define OS_NOTASK 0 + +#define FIRST_ENTRY 0xff +#define NEXT_ENTRY 0xfe + +#define OS_EVENT 0x1 +#define OS_NO_EVENT 0x0 +/* + * pattern to initialize task/osisr stacks + */ +#define INITIAL_STACK_VALUE 0xfe + +/* + * constants to access the object information functions + */ +#define OS_OBJSYS 0 +#define OS_OBJTASK 1 +#define OS_OBJQUEUE 2 +#define OS_OBJPARTITIONGROUP 3 +#define OS_OBJMEMORYPOOL 4 +#define OS_OBJTIMER 5 +#define OS_OBJSEMAPHORE 6 + +/* + * return values + */ +#define OS_OK 0 +#define OS_WAITED 1 +#define OS_NEW_PROCESS 2 +#define OS_PARTITION_FREE 3 +#define OS_ALLOCATED_BIGGER 4 +#define OS_ERROR (-1) +#define OS_TIMEOUT (-2) +#define OS_PARTITION_GUARD_PATTERN_DESTROYED (-3) +#define OS_INVALID_QUEUE (-4) + +/* + * message priorities + */ +#define OS_NORMAL 1 +#define OS_URGENT 2 +#define OS_MIN_PRIORITY OS_NORMAL +#define OS_MAX_PRIORITY OS_URGENT + +/* + * OS ISR priority range + */ +#define OS_ISR_MIN_PRIO 0 +#define OS_ISR_MAX_PRIO 2 + +/* + * flags + */ +#define OS_QFPARTITION 0x01 + +/* + * error codes + */ +#define OS_SYST_ERR 0x8000 +#define OS_SYST_ERR_QUEUE_CREATE 0x8001 +#define OS_SYST_ERR_MAX_TIMER 0x8002 +#define OS_SYST_ERR_MAX_TASK 0x8003 +#define OS_SYST_ERR_STACK_OVERFLOW 0x8004 +#define OS_SYST_ERR_PCB_PATTERN 0x8005 +#define OS_SYST_ERR_NO_PARTITION 0x8006 +#define OS_SYST_ERR_STR_TOO_LONG 0x8007 +#define OS_SYST_ERR_OVERSIZE 0x8008 +#define OS_SYST_ERR_TASK_TIMER 0x8009 +#define OS_SYST_ERR_SIMUL_TIMER 0x800A +#define OS_SYST_ERR_QUEUE_FULL 0x800B +#define OS_SYST_ERR_MAX_SEMA 0x800C +#define OS_SYST_ERR_NO_MEMORY 0x800D +#define OS_SYST_ERR_BIG_PARTITION 0x800E + +/* + * warning codes + */ +#define OS_SYST_WRN 0x0000 +#define OS_SYST_WRN_WAIT_PARTITION 0x0001 +#define OS_SYST_WRN_WAIT_QUEUE 0x0002 +#define OS_SYST_WRN_BIG_PARTITION 0x0003 +#define OS_SYST_WRN_MULTIPLE_FREE 0x0004 +#define OS_SYST_WRN_REQ_TRUNCATED 0x0004 +#define OS_SYST_WRN_FREE_FAILED 0x0005 + +/*==== TYPES =======================================================*/ + +typedef struct +{ + USHORT flags; + USHORT data16; + ULONG data32; +#ifdef _TOOLS_ + ULONG len; +#endif + ULONG time; + LONG e_id; + T_VOID_STRUCT * ptr; +} OS_QDATA; + +/*==== PROTOTYPES ==================================================*/ + +/* Task API */ +GLOBAL LONG os_CreateTask (OS_HANDLE Caller, char *Name, void (*TaskEntry)(OS_HANDLE, ULONG), ULONG StackSize, + USHORT Priority, OS_HANDLE *TaskHandle, OS_HANDLE MemPoolHandle); +GLOBAL LONG os_DestroyTask (OS_HANDLE Caller, OS_HANDLE TaskHandle); +GLOBAL LONG os_StartTask (OS_HANDLE Caller, OS_HANDLE TaskHandle, ULONG Value); +GLOBAL LONG os_StopTask (OS_HANDLE Caller, OS_HANDLE TaskHandle); +GLOBAL LONG os_SuspendTask (OS_HANDLE Caller, ULONG Time); +GLOBAL LONG os_DeferTask (OS_HANDLE task_handle, OS_TIME time); +GLOBAL LONG os_ResumeTask (OS_HANDLE task_handle); +GLOBAL LONG os_Relinquish (void); +GLOBAL LONG os_GetTaskName (OS_HANDLE Caller, OS_HANDLE TaskHandle, char * Name); +GLOBAL LONG os_GetTaskHandle (OS_HANDLE Caller, char * Name, OS_HANDLE *TaskHandle); +GLOBAL LONG os_TaskInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_ProInit (void); +GLOBAL LONG os_ChangePreemption (char preempt); +GLOBAL OS_HANDLE os_MyHandle (void); +#ifdef _NUCLEUS_ +GLOBAL LONG os_CheckTaskStack (OS_HANDLE Handle); +/* Task internal */ +GLOBAL LONG os_GetTaskData (OS_HANDLE Handle, unsigned int **tcb, unsigned char **stackbegin, unsigned char **stackend ); +GLOBAL unsigned char os_GetTaskState (OS_HANDLE Caller, OS_HANDLE Handle); +#endif + +/* Queue API */ +GLOBAL LONG os_CreateQueue (OS_HANDLE Caller, OS_HANDLE ComHandle, char *Name, USHORT Entries, + OS_HANDLE *ActHandle, OS_HANDLE MemPoolHandle ); +GLOBAL LONG os_DestroyQueue (OS_HANDLE Caller, OS_HANDLE ComHandle ); +GLOBAL LONG os_OpenQueue (OS_HANDLE Caller, char *Name, OS_HANDLE *ComHandle); +GLOBAL LONG os_CloseQueue (OS_HANDLE Caller, OS_HANDLE ComHandle); +GLOBAL LONG os_SendToQueue (OS_HANDLE Caller, OS_HANDLE ComHandle, USHORT Priority, + ULONG Suspend, OS_QDATA *Msg ); +GLOBAL LONG os_ReceiveFromQueue (OS_HANDLE Caller, OS_HANDLE ComHandle, OS_QDATA *msg, ULONG Timeout ); +GLOBAL LONG os_GetQueueName (OS_HANDLE Caller, OS_HANDLE ComHandle, char * Name); +GLOBAL LONG os_GetQueueHandle (OS_HANDLE Caller, char *Name, OS_HANDLE *ComHandle); +GLOBAL LONG os_QueueInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_ComInit (void); +/* Queue internal */ +#ifdef _NUCLEUS_ +GLOBAL LONG os_GetQueueState (OS_HANDLE Caller, OS_HANDLE Handle, ULONG *Used, ULONG *Free); +GLOBAL unsigned char *os_FindSuspendingQueue (unsigned int *tcb); +GLOBAL LONG os_GetQueueData (OS_HANDLE Caller, OS_HANDLE Handle, USHORT Index, + USHORT *Type, ULONG *opc, ULONG *ptr, ULONG *time ); +#endif +#ifdef _TOOLS_ +extern LONG os_create_extq (const char* name, OS_HANDLE* comhandle); +extern LONG os_destroy_extq (const char* name); +#endif /* _TOOLS_ */ + +/* Memory API */ +GLOBAL LONG os_CreatePartitionPool (OS_HANDLE Caller, char *GroupName, void *Addr, USHORT Num, ULONG Size, + OS_HANDLE *GroupHandle); +GLOBAL LONG os_CreatePartitionPool_fixed_pool_size (OS_HANDLE TaskHandle, char *GroupName, void *Addr, USHORT PoolSize, + ULONG PartitionSize, OS_HANDLE *GroupHandle, ULONG *NumCreated); +GLOBAL LONG os_AllocatePartition (OS_HANDLE Caller, T_VOID_STRUCT **Buffer, ULONG Size, + ULONG Suspend, OS_HANDLE GroupHandle); +GLOBAL LONG os_DeallocatePartition (OS_HANDLE Caller, T_VOID_STRUCT *Buffer); +GLOBAL LONG os_CreateMemoryPool (OS_HANDLE Caller, char *Name, void *Addr, ULONG PoolSize, + OS_HANDLE *PoolHandle); +GLOBAL LONG os_AllocateMemory (OS_HANDLE Caller, T_VOID_STRUCT **Buffer, ULONG Size, + ULONG Suspend, OS_HANDLE PoolHandle); +GLOBAL LONG os_DeallocateMemory (OS_HANDLE Caller, T_VOID_STRUCT *Buffer); +GLOBAL LONG os_PartitionInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_MemoryInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_MemInit (void); +GLOBAL LONG os_SetPoolHandles (OS_HANDLE ext_pool_handle, OS_HANDLE int_pool_handle); +GLOBAL LONG os_GetPartitionGroupHandle(OS_HANDLE Caller, char *Name, OS_HANDLE *GroupHandle); + +GLOBAL LONG os_GetPartitionPoolStatus (ULONG size, OS_HANDLE gr_hndl, USHORT *free, USHORT *alloc); +/* Memory internal */ +GLOBAL LONG os_is_valid_partition (T_VOID_STRUCT *Buffer); +#ifdef _NUCLEUS_ +GLOBAL LONG os_PartitionCheck (ULONG *ptr); +GLOBAL const ULONG *os_GetPrimpoolCB (int grp,int id); +#endif + +/* Timer API */ +GLOBAL LONG os_CreateTimer (OS_HANDLE TaskHandle, void(*TimeoutProc)(OS_HANDLE,OS_HANDLE,USHORT), + OS_HANDLE *TimerHandle, OS_HANDLE MemPoolHandle); +GLOBAL LONG os_DestroyTimer (OS_HANDLE TaskHandle, OS_HANDLE TimerHandle); +GLOBAL LONG os_StartTimer (OS_HANDLE TaskHandle, OS_HANDLE TimerHandle, USHORT Index, + OS_TIME InitialTime, OS_TIME RescheduleTime ); +GLOBAL LONG os_StopTimer (OS_HANDLE TaskHandle, OS_HANDLE TimerHandle); +GLOBAL LONG os_QueryTimer (OS_HANDLE TaskHandle, OS_HANDLE TimerHandle, OS_TIME *RemainingTime); +GLOBAL LONG os_TimerInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_TimInit (void); +GLOBAL LONG os_set_tick (int os_system_tick); +GLOBAL LONG os_InactivityTicks (int *next_event, OS_TICK *next_event_ticks); +GLOBAL LONG os_IncrementTick (OS_TICK ticks); +GLOBAL LONG os_GetScheduleCount (OS_HANDLE task_handle, int * schedule_count); +GLOBAL LONG os_RecoverTick (OS_TICK ticks); + +/* Semaphore API */ +GLOBAL LONG os_CreateSemaphore (OS_HANDLE TaskHandle, char *Name, USHORT Count, + OS_HANDLE *Semhandle, OS_HANDLE MemPoolHandle); +GLOBAL LONG os_DestroySemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle); +GLOBAL LONG os_ResetSemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle, USHORT Count); +GLOBAL LONG os_OpenSemaphore (OS_HANDLE TaskHandle, char *Name, OS_HANDLE *SemHandle); +GLOBAL LONG os_CloseSemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle); +GLOBAL LONG os_ObtainSemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle, ULONG Timeout); +GLOBAL LONG os_ReleaseSemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle); +GLOBAL LONG os_QuerySemaphore (OS_HANDLE TaskHandle, OS_HANDLE SemHandle, USHORT *Count); +GLOBAL LONG os_SemaphoreInformation (USHORT Handle, char *Buffer); +GLOBAL LONG os_SemInit (void); +/* Semaphore internal */ +#ifdef _NUCLEUS_ +GLOBAL unsigned char *os_FindSuspendingSema (unsigned int *tcb); +#endif + +/* Interrupt API */ +GLOBAL LONG os_CreateOSISR (char *name, void (*OSISR_entry)(void), int stacksize, int priority, + int flags, OS_HANDLE *osisr_handle ); +GLOBAL LONG os_DeleteOSISR (OS_HANDLE osisr_handle); +GLOBAL LONG os_ActivateOSISR (OS_HANDLE osisr_handle); +GLOBAL LONG os_SetInterruptState (OS_INT_STATE new_state, OS_INT_STATE *old_state); +GLOBAL LONG os_EnableInterrupts (OS_INT_STATE *old_state); +GLOBAL LONG os_DisableInterrupts (OS_INT_STATE *old_state); +GLOBAL LONG os_isr_init (void); + +/* Event group API */ +GLOBAL LONG os_CreateEventGroup (char *evt_grp_name, OS_HANDLE *evt_grp_handle); +GLOBAL LONG os_DeleteEventGroup (OS_HANDLE evt_grp_handle); +GLOBAL LONG os_EventGroupInformation (OS_HANDLE evt_grp_handle, char *Name, unsigned* mask_evt, unsigned* tasks_waiting, OS_HANDLE* first_task); +GLOBAL LONG os_SetEvents (OS_HANDLE evt_grp_handle, unsigned event_flags); +GLOBAL LONG os_ClearEvents (OS_HANDLE evt_grp_handle, unsigned event_flags); +GLOBAL LONG os_RetrieveEvents (OS_HANDLE evt_grp_handle, unsigned event_flags, char option, unsigned* retrieved_events, unsigned suspend); +GLOBAL LONG os_EvGrpInit (void); +GLOBAL LONG os_GetEventGroupHandle (char *evt_grp_name, OS_HANDLE *evt_grp_handle); + +/* Miscellaneous */ +GLOBAL LONG os_GetTime (OS_HANDLE TaskHandle, OS_TIME *Time); +GLOBAL LONG os_Initialize (void); +GLOBAL LONG os_ObjectInformation (OS_HANDLE Caller, USHORT Id, USHORT Handle, USHORT len, void *Buffer); +void os_SystemError (OS_HANDLE Caller, USHORT cause, char *buffer ); +LONG os_dar_register (const void *dar_properties); +#ifdef _NUCLEUS_ +LONG os_dar_set_filter (void); +LONG os_read_dar_ffs_data (USHORT entry, char *buffer, USHORT len); +#endif +#if defined (_NUCLEUS_) && defined (_TARGET_) +#include "gdi.h" +GLOBAL LONG os_CreateCallback (void); +GLOBAL LONG os_ExecuteCallback (OS_HANDLE Caller, void (*Callback)(T_DRV_SIGNAL*), T_DRV_SIGNAL *Signal); +#endif +#ifdef CTB +GLOBAL void os_Tick (void); +GLOBAL void os_StartTicking (void); +GLOBAL void os_StopTicking (void); +GLOBAL ULONG os_GetProcessId (void); +#endif + +/*==== END OF OS.H =================================================*/ +#endif