845 lines
35 KiB
C
845 lines
35 KiB
C
/*------------------------------------------------------------
|
|
(C) Copyright [2006-2008] Marvell International Ltd.
|
|
All Rights Reserved
|
|
------------------------------------------------------------*/
|
|
|
|
/* ===========================================================================
|
|
File : osa.h
|
|
Description : This file defines the OS wrapper API and definitions for external application use.
|
|
|
|
The OSA API allows applications to be developed independent of
|
|
the target microkernel/hardware environment. It provides the
|
|
facility to add support for multiple independent operating
|
|
systems from different vendors.
|
|
|
|
Copyright (c) 2001 Intel CCD. All Rights Reserved
|
|
=========================================================================== */
|
|
#ifndef _OSA_H
|
|
#define _OSA_H
|
|
|
|
#ifdef PLAT_USE_THREADX
|
|
#include <tx_thread.h>
|
|
#endif
|
|
|
|
#ifdef PLAT_USE_ALIOS
|
|
#include <alios_type.h>
|
|
#endif
|
|
|
|
|
|
#ifndef IMPC
|
|
#define IMPC
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
#ifdef ENV_SYMBIAN
|
|
#include "e32def.h"
|
|
#undef IMPC
|
|
#define IMPC IMPORT_C
|
|
#endif
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "gbl_types.h"
|
|
|
|
|
|
/*****************************************************************************
|
|
* OSA Constants
|
|
****************************************************************************/
|
|
//ICAT EXPORTED ENUM
|
|
typedef enum
|
|
{
|
|
OSA_TASK_READY,
|
|
OSA_TASK_COMPLETED,
|
|
OSA_TASK_TERMINATED,
|
|
OSA_TASK_SUSPENDED,
|
|
OSA_TASK_SLEEP,
|
|
OSA_TASK_QUEUE_SUSP,
|
|
OSA_TASK_SEMAPHORE_SUSP,
|
|
OSA_TASK_EVENT_FLAG,
|
|
OSA_TASK_BLOCK_MEMORY,
|
|
OSA_TASK_MUTEX_SUSP,
|
|
OSA_TASK_STATE_UNKNOWN,
|
|
}OSA_TASK_STATE;
|
|
|
|
//ICAT EXPORTED STRUCT
|
|
typedef struct OSA_TASK_STRUCT
|
|
{
|
|
char *task_name; /* Pointer to thread's name */
|
|
unsigned int task_priority; /* Priority of thread (0-255) */
|
|
unsigned long task_stack_def_val; /* default vaule of thread */
|
|
OSA_TASK_STATE task_state; /* Thread's execution state */
|
|
unsigned long task_stack_ptr; /* Thread's stack pointer */
|
|
unsigned long task_stack_start; /* Stack starting address */
|
|
unsigned long task_stack_end; /* Stack ending address */
|
|
unsigned long task_stack_size; /* Stack size */
|
|
unsigned long task_run_count; /* Thread's run counter */
|
|
|
|
} OSA_TASK;
|
|
|
|
#define OSA_API_VERSION 51 /* this is the OSA API document version*/
|
|
#define OSA_NULL NULL
|
|
#define OSA_TIMER_DEAD 0
|
|
#define OSA_TIMER_CREATED 1
|
|
#define OSA_TIMER_ACTIVE 2
|
|
#define OSA_TIMER_INACTIVE 3
|
|
#define OSA_ENABLED 2
|
|
#define OSA_DISABLED 3
|
|
|
|
#ifdef PLAT_USE_THREADX
|
|
#define OSA_LOWEST_PRIORITY 252
|
|
#define OSA_HIGHEST_PRIORITY 3
|
|
#elif defined(PLAT_USE_ALIOS)
|
|
#define OSA_LOWEST_PRIORITY 251
|
|
#define OSA_HIGHEST_PRIORITY 3
|
|
#else
|
|
#define OSA_LOWEST_PRIORITY 255
|
|
#define OSA_HIGHEST_PRIORITY 0
|
|
#endif
|
|
|
|
#define OSA_MIN_STACK_SIZE 256
|
|
#define OSA_ENABLE_INTERRUPTS 1
|
|
#define OSA_DISABLE_INTERRUPTS 2
|
|
#define OSA_SUSPEND 0xFFFFFFFF
|
|
#define OSA_NO_SUSPEND 0
|
|
#define OSA_FLAG_AND 5
|
|
#define OSA_FLAG_AND_CLEAR 6
|
|
#define OSA_FLAG_OR 7
|
|
#define OSA_FLAG_OR_CLEAR 8
|
|
#define OSA_FIXED 9
|
|
#define OSA_VARIABLE 10
|
|
#define OSA_FIFO 11
|
|
#define OSA_PRIORITY 12
|
|
#define OSA_GLOBAL 13
|
|
#define OSA_OS_INDEPENDENT 14
|
|
|
|
#define OSA_SISR_PRIORITY 1
|
|
|
|
#define OSA_TICK_FREQ_IN_MILLISEC 5
|
|
#define RTI_THREAD_ARRAY_SIZE 256//128
|
|
|
|
/*========================================================================
|
|
* OSA Return Error Codes
|
|
*========================================================================*/
|
|
|
|
enum
|
|
{
|
|
OS_SUCCESS = 0, /* 0x0 -no errors */
|
|
OS_FAIL, /* 0x1 -operation failed code */
|
|
OS_TIMEOUT, /* 0x2 -Timed out waiting for a resource */
|
|
OS_NO_RESOURCES, /* 0x3 -Internal OS resources expired */
|
|
OS_INVALID_POINTER, /* 0x4 -0 or out of range pointer value */
|
|
OS_INVALID_REF, /* 0x5 -invalid reference */
|
|
OS_INVALID_DELETE, /* 0x6 -deleting an unterminated task */
|
|
OS_INVALID_PTR, /* 0x7 -invalid memory pointer */
|
|
OS_INVALID_MEMORY, /* 0x8 -invalid memory pointer */
|
|
OS_INVALID_SIZE, /* 0x9 -out of range size argument */
|
|
OS_INVALID_MODE, /* 0xA, 10 -invalid mode */
|
|
OS_INVALID_PRIORITY, /* 0xB, 11 -out of range task priority */
|
|
OS_UNAVAILABLE, /* 0xC, 12 -Service requested was unavailable or in use */
|
|
OS_POOL_EMPTY, /* 0xD, 13 -no resources in resource pool */
|
|
OS_QUEUE_FULL, /* 0xE, 14 -attempt to send to full messaging queue */
|
|
OS_QUEUE_EMPTY, /* 0xF, 15 -no messages on the queue */
|
|
OS_NO_MEMORY, /* 0x10, 16 -no memory left */
|
|
OS_DELETED, /* 0x11, 17 -service was deleted */
|
|
OS_SEM_DELETED, /* 0x12, 18 -semaphore was deleted */
|
|
OS_MUTEX_DELETED, /* 0x13, 19 -mutex was deleted */
|
|
OS_MSGQ_DELETED, /* 0x14, 20 -msg Q was deleted */
|
|
OS_MBOX_DELETED, /* 0x15, 21 -mailbox Q was deleted */
|
|
OS_FLAG_DELETED, /* 0x16, 22 -flag was deleted */
|
|
OS_INVALID_VECTOR, /* 0x17, 23 -interrupt vector is invalid */
|
|
OS_NO_TASKS, /* 0x18, 24 -exceeded max # of tasks in the system */
|
|
OS_NO_FLAGS, /* 0x19, 25 -exceeded max # of flags in the system */
|
|
OS_NO_SEMAPHORES, /* 0x1A, 26 -exceeded max # of semaphores in the system */
|
|
OS_NO_MUTEXES, /* 0x1B, 27 -exceeded max # of mutexes in the system */
|
|
OS_NO_QUEUES, /* 0x1C, 28 -exceeded max # of msg queues in the system */
|
|
OS_NO_MBOXES, /* 0x1D, 29 -exceeded max # of mbox queues in the system */
|
|
OS_NO_TIMERS, /* 0x1E, 30 -exceeded max # of timers in the system */
|
|
OS_NO_MEM_POOLS, /* 0x1F, 31 -exceeded max # of mem pools in the system */
|
|
OS_NO_INTERRUPTS, /* 0x20, 32 -exceeded max # of isr's in the system */
|
|
OS_FLAG_NOT_PRESENT, /* 0x21, 33 -requested flag combination not present */
|
|
OS_UNSUPPORTED, /* 0x22, 34 -service is not supported by the OS */
|
|
OS_NO_MEM_CELLS, /* 0x23, 35 -no global memory cells */
|
|
OS_DUPLICATE_NAME, /* 0x24, 36 -duplicate global memory cell name */
|
|
OS_INVALID_PARM /* 0x25, 37 -invalid parameter */
|
|
};
|
|
|
|
|
|
/*****************************************************************************
|
|
* OSA Data Types
|
|
****************************************************************************/
|
|
|
|
#define OsaApi
|
|
typedef void *OsaRefT ;
|
|
typedef UINT8 OSA_STATUS;
|
|
|
|
/*========================================================================
|
|
* OSA Initialization:
|
|
*
|
|
* Initializes OSA internal structures, tables, and OS specific services.
|
|
*
|
|
*========================================================================*/
|
|
typedef enum
|
|
{
|
|
OSA_SISR_HIGH_PRIORITY = 0,
|
|
OSA_SISR_MED_PRIORITY = 1,
|
|
OSA_SISR_LOW_PRIORITY = 2,
|
|
OSA_SISR_MAX_PRIORITY // Keep Last.
|
|
}
|
|
OsaSisrPriorityT ;
|
|
|
|
typedef struct
|
|
{
|
|
UINT32 *SisrStackPtr[(int)OSA_SISR_MAX_PRIORITY] ; // [OP,IN] SISR Stack Pointers.
|
|
UINT32 SisrStackSize[(int)OSA_SISR_MAX_PRIORITY] ; // [IN] SISR Stack Size.
|
|
}
|
|
OsaInitParamsT ;
|
|
|
|
|
|
IMPC extern OSA_STATUS OsaInit(
|
|
OsaInitParamsT *pParams // [OP,IN] Initialization parameters.
|
|
) ;
|
|
|
|
IMPC extern void OsaRun( void *pForFutureUse );
|
|
|
|
IMPC extern char *OsaGetVersion( void );
|
|
|
|
/*========================================================================
|
|
* OSA Task Management:
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
void (*entry)(void *) ; // Task entry function.
|
|
UINT32 stackSize ; // Size of stack.
|
|
UINT32 *stackPtr ; // [OP] Memory area for the stack.
|
|
void *argv ; // [OP] A pointer that is passed to the task.
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
UINT8 priority ; // Task priority.
|
|
}
|
|
OsaTaskCreateParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskCreateEx(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaTaskCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaTaskCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskSuspend(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskResume(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern void OsaTaskSleep(
|
|
UINT32 ticks, // [IN] Time to sleep in ticks.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskChangePriority(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT8 newPriority, // [IN] New task priority.
|
|
UINT8 *oldPriority, // [OT] Old task priority.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTaskGetPriority(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT8 *pPriority, // [OT] Task priority.
|
|
void *pForFutureUse
|
|
) ;
|
|
IMPC extern OSA_STATUS OsaHisrCreate(
|
|
OsaRefT* OsaRef,
|
|
CHAR* name,
|
|
VOID (*hisr_entry)(VOID),
|
|
unsigned char priority
|
|
);
|
|
IMPC extern OSA_STATUS OsaHisrActivate(OsaRefT *hisr);
|
|
IMPC extern OSA_STATUS OsaHisrDel(OsaRefT *hisr);
|
|
IMPC extern OSA_STATUS OsaSemaphoreCheck( OsaRefT OsaRef);
|
|
IMPC extern OSA_STATUS OsaHISRGetPriority(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT8 *pPriority, // [OT] Task priority.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern void OsaTaskYield( void *pForFutureUse ) ;
|
|
|
|
IMPC extern OsaRefT OsaCurrentThreadRef(void);
|
|
|
|
IMPC extern OSA_STATUS OsaTaskGetCurrentRef(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaHISRGetCurrentRef(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
IMPC extern OSA_STATUS OsaTaskTerminate( OsaRefT OsaRef, void *pForFutureUse );
|
|
IMPC extern OSA_STATUS OsaGetTaskInfo(OsaRefT OsaRef, OSA_TASK *task_info);
|
|
|
|
IMPC extern OSA_STATUS OsaGetCurrentThreadRef(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
void *pForFutureUse
|
|
);
|
|
IMPC extern OSA_STATUS OsaGetThreadListHead(
|
|
OsaRefT *pListHead, // [OT] Reference.
|
|
void *pForFutureUse
|
|
);
|
|
|
|
IMPC extern OSA_STATUS OsaGetCreatedThreadCount(
|
|
unsigned long *count, // [OT] count
|
|
void *pForFutureUse
|
|
);
|
|
|
|
IMPC extern OSA_STATUS OsaGetMaxThreadCount(
|
|
unsigned long *maxCnt, // [OT] count
|
|
void *pForFutureUse
|
|
);
|
|
IMPC extern unsigned long OsaThreadList(OsaRefT *ptrList, unsigned long maximum_pointers,void *pForFutureUse);
|
|
|
|
/*========================================================================
|
|
* OSA Semaphore Management
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT32 initialCount ; // [OP] Initial count of the semaphore (0 = Lock), (Default = 1).
|
|
UINT32 maximumCount ; // [OP] Maximum tasks that can "pass" through the semaphore, (Default = max(1,initialCount)).
|
|
UINT8 waitingMode ; // [OP] OS_FIFO, OS_PRIORITY, (Default = OS_PRIORITY).
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
}
|
|
OsaSemaphoreCreateParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphoreCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaSemaphoreCreateParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
, UINT32 callerAddress) ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphoreAcquire(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 timeout, // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphorePoll(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 *pCount, // [OT] Current semaphore count.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphoreRelease(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphoreReleaseExt(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaSemaphoreDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*========================================================================
|
|
* OSA Mutex Management
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT8 waitingMode ; // [OP] OS_FIFO, OS_PRIORITY, (Default = OS_PRIORITY).
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
BOOL inherit;
|
|
}
|
|
OsaMutexCreateParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaMutexCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaMutexCreateParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
, UINT32 callerAddress) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMutexLock(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 timeout, // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMutexUnlock(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMutexDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*========================================================================
|
|
* OSA Interrupt Control
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT32 intSource ; // Interrupt number (need to set to OSA_NULL_INT_SOURCE if not used).
|
|
void (*fisrRoutine)(UINT32) ; // [OP] First level ISR to be called.
|
|
void (*sisrRoutine)(void) ; // [OP] Second level ISR routine to be called.
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
UINT32 stackSize ; // [OP] Size of stack.
|
|
OsaSisrPriorityT priority ; // SISR priority.
|
|
}
|
|
OsaIsrCreateParamsT ;
|
|
|
|
#define OSA_NULL_INT_SOURCE ((UINT32)-1)
|
|
|
|
IMPC extern OSA_STATUS OsaIsrCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaIsrCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaIsrNotify(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaIsrDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*===========================================================================
|
|
* OSA Real-Time Access:
|
|
*=========================================================================*/
|
|
|
|
IMPC extern UINT32 OsaGetTicks( void *pForFutureUse ) ;
|
|
|
|
IMPC extern UINT32 OsaGetClockRate( void *pForFutureUse ) ;
|
|
|
|
IMPC extern void OsaTick( void *pForFutureUse ) ;
|
|
|
|
/*========================================================================
|
|
* OSA Sys Context info
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
}
|
|
OsaCriticalSectionCreateParamsT ;
|
|
|
|
IMPC extern OsaRefT OsaCriticalSectionCreate(
|
|
OsaCriticalSectionCreateParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OsaRefT OsaCriticalSectionEnter(
|
|
OsaRefT OsaRef, // [IN] Reference from the Create Function.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern void OsaCriticalSectionExit(
|
|
OsaRefT OsaRef, // [IN] Reference from the Enter Function.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern void OsaCriticalSectionDelete(
|
|
OsaRefT OsaRef, // [IN] Reference from the Create Function.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern UINT32 OsaControlInterrupts(
|
|
UINT32 mask, // [IN] New interrupt mask.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern UINT32 OsaContextLock( void *pForFutureUse ) ;
|
|
|
|
IMPC extern UINT32 OsaContextRestore( void *pForFutureUse ) ;
|
|
|
|
IMPC extern OSA_STATUS OsaContextLockExt( void *pForFutureUse );
|
|
|
|
IMPC extern OSA_STATUS OsaContextRestoreExt( void *pForFutureUse );
|
|
|
|
/*========================================================================
|
|
* OSA Message Passing
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT32 maxSize ; // Max message size the queue supports.
|
|
UINT32 maxMsg ; // Max # of messages in the queue.
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
UINT8 waitingMode ; // OS_FIFO, OS_PRIORITY.
|
|
}
|
|
OsaMsgQCreateParamsT ;
|
|
|
|
typedef struct
|
|
{
|
|
void *msgPtr ; // [IN] Start address of the data.
|
|
UINT32 size ; // [IN] Size of the message.
|
|
UINT32 timeout ; // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
}
|
|
OsaMsgQSendParamsT ;
|
|
|
|
typedef struct
|
|
{
|
|
void *msgPtr ; // [IN] Start address of the data.
|
|
UINT32 size ; // [IN] Size of the message.
|
|
UINT32 timeout ; // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
UINT32 actualSize ; // [OT] Actual bytes read from queue.
|
|
}
|
|
OsaMsgQRecvParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaMsgQCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
,UINT32 callerAddress) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQSend(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaMsgQSendParamsT *pParams // [IN] See datatype.
|
|
) ;
|
|
IMPC extern OSA_STATUS OsaMsgQFrontRelease(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaMsgQSendParamsT *pParams // [IN] See datatype.
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQRecv(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaMsgQRecvParamsT *pParams // [IN] See datatype.
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQPoll(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 *pCount, // [OT] Number of messages in Q.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQFreeRate(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 *pFreeRate // [OT] free Rate of Q.
|
|
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMsgQDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*========================================================================
|
|
* OSA Mailboxes
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT32 maxMsg ; // Max # of messages in the queue.
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
UINT8 waitingMode ; // OS_FIFO, OS_PRIORITY.
|
|
}
|
|
OsaMailboxQCreateParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaMailboxQCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaMailboxQCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMailboxQSend(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 mboxData, // [IN] Data to put in mailbox.
|
|
UINT32 timeout, // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMailboxQRecv(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 *mboxData, // [OT] Data read from mailbox.
|
|
UINT32 timeout, // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMailboxQPoll(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 *pCount, // [OT] Number of messages in Q.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMailboxQDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*========================================================================
|
|
* OSA Event Management:
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
}
|
|
OsaFlagCreateParamsT ;
|
|
|
|
typedef struct
|
|
{
|
|
UINT32 mask ; // [IN] Flag mask.
|
|
UINT32 operation ; // [IN] OSA_FLAG_AND, OSA_FLAG_AND_CLEAR, OSA_FLAG_OR, OSA_FLAG_OR_CLEAR.
|
|
UINT32 timeout ; // [IN] OS_SUSPEND, OS_NO_SUSPEND, or timeout in OS ticks.
|
|
UINT32 *flags ; // [OT] Current value of the flag.
|
|
}
|
|
OsaFlagWaitParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaFlagCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaFlagCreateParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaFlagSet(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
UINT32 mask, // [IN] Flag mask.
|
|
UINT32 operation, // [IN] OSA_FLAG_AND, OSA_FLAG_OR.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaFlagWait(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaFlagWaitParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaFlagDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*========================================================================
|
|
* OSA Timer Management:
|
|
*========================================================================*/
|
|
typedef struct
|
|
{
|
|
UINT32 initialTime ; // [IN] Initial expiration time in clock ticks.
|
|
UINT32 rescheduleTime ; // [IN] Periodic expiration time in clock ticks. 0=One shot timer.
|
|
void (*callBackRoutine)(UINT32) ; // [IN] Routine to call when timer expiers.
|
|
UINT32 timerArgc ; // [IN] Argument to be passed to the callBackRoutine
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
}
|
|
OsaTimerParamsT ;
|
|
|
|
typedef struct
|
|
{
|
|
UINT32 status ; // [O] Timer status OS_ENABLED, OS_DISABLED.
|
|
}
|
|
OsaTimerStatusParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaTimerCreate(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaTimerParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTimerStart(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaTimerParamsT *pParams // [OP,IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTimerStop(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTimerStatus(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
OsaTimerStatusParamsT *pParams // [OT] Output Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaTimerDelete(
|
|
OsaRefT OsaRef, // [IN] Reference.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
/*============================================================================
|
|
* Special memory handling that doesn't use the OS memory services.
|
|
*============================================================================*/
|
|
typedef struct
|
|
{
|
|
void *poolBase ; // Pointer to start of pool memory.
|
|
UINT32 poolSize ; // size of the pool.
|
|
char *name ; // [OP] Pointer to a NULL terminated string.
|
|
BOOL bSharedForIpc ; // [OP] TRUE - The object can be accessed from all processes.
|
|
UINT32 LowWaterMark ; // [OP] Number of bytes left in pool tp trigger the LowWaterMarkCbFunc.
|
|
void (*LowWaterMarkCbFunc)(UINT32) ; // [OP] Routine to call when the LowWaterMark is triggered.
|
|
}
|
|
OsaMemCreateParamsT ;
|
|
|
|
IMPC extern OSA_STATUS OsaMemAddMemoryToPool(
|
|
OsaRefT OsaRef, // [OP,IN] Pool Reference, if NULL, the default pool is used.
|
|
void *memBase, // [IN] Pointer to the memory to be added.
|
|
UINT32 memSize, // [IN] Size of the memory to be added.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern void * OsaMemAlloc(
|
|
OsaRefT OsaRef, // [OP,IN] Pool Reference, if NULL, the default pool is used.
|
|
UINT32 Size // [IN] Number of bytes to be allocated.
|
|
) ;
|
|
|
|
IMPC extern BOOL OsaMemAllocAgain(
|
|
void *pMem // [IN] Pointer to the memory to be allocated again.
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMemCreatePool(
|
|
OsaRefT *pOsaRef, // [OT] Reference.
|
|
OsaMemCreateParamsT *pParams // [IN] Input Parameters (see datatype for details).
|
|
) ;
|
|
|
|
IMPC extern void OsaMemFree(
|
|
void *pMem // [IN] Pointer to the memory to be freed.
|
|
) ;
|
|
|
|
IMPC extern UINT32 OsaMemGetAllocSize(
|
|
void *pMem // [IN] Pointer to the memory.
|
|
) ;
|
|
|
|
IMPC extern OsaRefT OsaMemGetDefaultPoolRef( void ) ;
|
|
|
|
IMPC extern OsaRefT OsaMemGetPoolRef(
|
|
char *poolName, // [OP,IN] Pool's name - can be NULL.
|
|
void *pMem, // [OP,IN] A memory address we need the poolRef for it - can be NULL.
|
|
void *pForFutureUse
|
|
) ;
|
|
|
|
IMPC extern UINT32 OsaMemGetUserParam(
|
|
void *pMem // [IN] Pointer to the allocated memory.
|
|
) ;
|
|
|
|
IMPC extern BOOL OsaMemResizeAlloc(
|
|
void *pMem, // [IN] Pointer to the memory to be re-sized.
|
|
UINT32 NewSize // [IN] New Size.
|
|
) ;
|
|
|
|
IMPC extern void OsaMemSetDefaultPool(
|
|
OsaRefT OsaRef // [IN] Pool Reference.
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaMemSetUserParam(
|
|
void *pMem, // [IN] Pointer to the allocated memory.
|
|
UINT32 Param // [IN] User's parameter.
|
|
) ;
|
|
|
|
IMPC extern OSA_STATUS OsaPartitionAllocate(
|
|
OsaRefT * pOsaRef,
|
|
void ** return_pointer,
|
|
UINT32 suspend
|
|
);
|
|
|
|
IMPC extern OSA_STATUS OsaPartitionFree(
|
|
OsaRefT OsaRef
|
|
);
|
|
|
|
IMPC extern OSA_STATUS OsaPartitionPoolCreate(
|
|
OsaRefT * pOsaRef,
|
|
char * pool_name,
|
|
void * start_address,
|
|
UINT32 pool_size,
|
|
UINT32 partition_size,
|
|
UINT32 suspend_type
|
|
);
|
|
|
|
IMPC extern UINT32 Osa_TimeoutValue(
|
|
UINT32 timeout
|
|
);
|
|
|
|
IMPC extern OSA_STATUS OsaSystemProtectInit(void);
|
|
|
|
IMPC extern OSA_STATUS OsaSystemProtect(void);
|
|
|
|
IMPC extern OSA_STATUS OsaSystemUnProtect(void);
|
|
|
|
IMPC extern UINT32 OsaGetInterruptCount(void);
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedTasks( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedTimers( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedEventFlags( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedMemBlockPools( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedMsgQs( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedSemaphores( void );
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedMutexs( void );
|
|
|
|
|
|
IMPC extern OSA_STATUS OsaListAllCreatedMemBytesPoolsStatus(void);
|
|
|
|
/*=============================================================================
|
|
* Remap old names to new ones to remain backwards compatibility with old names.
|
|
*=============================================================================*/
|
|
#include "osa_old_api.h"
|
|
#include "osa_utils.h"
|
|
#include <bsp_hisr.h>
|
|
#include "nucleus.h"
|
|
#include "osa_internals.h"
|
|
|
|
|
|
#define OS_INTERRUTPT_COUNT ((UINT32)OsaGetInterruptCount())
|
|
|
|
|
|
#ifdef PLAT_USE_THREADX
|
|
|
|
#include <osa_tx.h>
|
|
#include <tx_hisr.h>
|
|
#include "tx_api.h"
|
|
#include "tx_initialize.h"
|
|
#include "osa_um_extr.h"
|
|
|
|
extern volatile unsigned long _tx_thread_system_state;
|
|
|
|
//#define OS_INTERRUTPT_COUNT (_tx_thread_system_state)
|
|
#define OS_MAX_NAME TX_MAX_NAME
|
|
#define OS_POOL_PARTITION_OVERHEAD (sizeof(unsigned char *))
|
|
#define OS_PARTITION_MEM_OVERHEAD (0)
|
|
|
|
#elif defined(PLAT_USE_ALIOS)
|
|
|
|
#define OS_MAX_NAME 9
|
|
#define OS_POOL_PARTITION_OVERHEAD (sizeof(unsigned char *))
|
|
#define OS_PARTITION_MEM_OVERHEAD (0)
|
|
|
|
#include <k_api.h>
|
|
#include <osa_ali.h>
|
|
#include "osa_um_extr.h"
|
|
|
|
#else
|
|
|
|
#include "um_defs.h"
|
|
#include "tc_defs.h"
|
|
#include "nucleus.h"
|
|
|
|
|
|
//extern INT TCD_Interrupt_Count;
|
|
|
|
//#define OS_INTERRUTPT_COUNT (TCD_Interrupt_Count)
|
|
#define OS_MAX_NAME NU_MAX_NAME
|
|
#define OS_POOL_PARTITION_OVERHEAD (PM_OVERHEAD)
|
|
#define OS_PARTITION_MEM_OVERHEAD (0)
|
|
#endif
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* _OSA_H */
|
|
|