view src/gpf2/inc/os.h @ 600:8f50b202e81f

board preprocessor conditionals: prep for more FC hw in the future This change eliminates the CONFIG_TARGET_FCDEV3B preprocessor symbol and all preprocessor conditionals throughout the code base that tested for it, replacing them with CONFIG_TARGET_FCFAM or CONFIG_TARGET_FCMODEM. These new symbols are specified as follows: CONFIG_TARGET_FCFAM is intended to cover all hardware designs created by Mother Mychaela under the FreeCalypso trademark. This family will include modem products (repackagings of the FCDEV3B, possibly with RFFE or even RF transceiver changes), and also my desired FreeCalypso handset product. CONFIG_TARGET_FCMODEM is intended to cover all FreeCalypso modem products (which will be firmware-compatible with the FCDEV3B if they use TI Rita transceiver, or will require a different fw build if we switch to one of Silabs Aero transceivers), but not the handset product. Right now this CONFIG_TARGET_FCMODEM preprocessor symbol is used to conditionalize everything dealing with MCSI. At the present moment the future of FC hardware evolution is still unknown: it is not known whether we will ever have any beyond-FCDEV3B hardware at all (contingent on uncertain funding), and if we do produce further FC hardware designs, it is not known whether they will retain the same FIC modem core (triband), if we are going to have a quadband design that still retains the classic Rita transceiver, or if we are going to switch to Silabs Aero II or some other transceiver. If we produce a quadband modem that still uses Rita, it will run exactly the same fw as the FCDEV3B thanks to the way we define TSPACT signals for the RF_FAM=12 && CONFIG_TARGET_FCFAM combination, and the current fcdev3b build target will be renamed to fcmodem. OTOH, if that putative quadband modem will be Aero-based, then it will require a different fw build target, the fcdev3b target will stay as it is, and the two targets will both define CONFIG_TARGET_FCFAM and CONFIG_TARGET_FCMODEM, but will have different RF_FAM numbers. But no matter which way we are going to evolve, it is not right to have conditionals on CONFIG_TARGET_FCDEV3B in places like ACI, and the present change clears the way for future evolution.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 01 Apr 2019 01:05:24 +0000
parents 864b8cc0cf63
children
line wrap: on
line source

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