www.pudn.com > NDKforTIDM642DSP.rar > osif.h


//-------------------------------------------------------------------------- 
// OS Demonstration Software 
//-------------------------------------------------------------------------- 
// OSIF.H 
// 
// OS Interface Functions 
// 
// Author: Michael A. Denio 
// Copyright 1999, 2003 by Texas Instruments Inc. 
//------------------------------------------------------------------------- 
 
#ifndef _C_OSIF_H 
#define _C_OSIF_H 
 
#include  
#include  
#include  
#include  
 
//--------------------------------------------- 
//--------------------------------------------- 
// OS Environment Globals 
//--------------------------------------------- 
//--------------------------------------------- 
 
// Printf Buffer Size 
// Change requires a recompile of the OS library 
#define OS_PRINTFBUFFER         512 
 
// Configuration Structure 
typedef struct _osenvcfg { 
    uint     DbgPrintLevel;     // Debug msg print threshhold 
    uint     DbgAbortLevel;     // Debug msg sys abort theshhold 
    int      TaskPriLow;        // Lowest priority for stack task 
    int      TaskPriNorm;       // Normal priority for stack task 
    int      TaskPriHigh;       // High priority for stack task 
    int      TaskPriKern;       // Kernel-level priority (highest) 
    int      TaskStkLow;        // Minimum stack size 
    int      TaskStkNorm;       // Normal stack size 
    int      TaskStkHigh;       // Stack size for high volume tasks 
    } OSENVCFG; 
 
// Configuration 
extern OSENVCFG _oscfg; 
 
// Equates used in code 
#define DBG_PRINT_LEVEL         (_oscfg.DbgPrintLevel) 
#define DBG_ABORT_LEVEL         (_oscfg.DbgAbortLevel) 
#define OS_TASKPRILOW           (_oscfg.TaskPriLow) 
#define OS_TASKPRINORM          (_oscfg.TaskPriNorm) 
#define OS_TASKPRIHIGH          (_oscfg.TaskPriHigh) 
#define OS_TASKPRIKERN          (_oscfg.TaskPriKern) 
#define OS_TASKSTKLOW           (_oscfg.TaskStkLow) 
#define OS_TASKSTKNORM          (_oscfg.TaskStkNorm) 
#define OS_TASKSTKHIGH          (_oscfg.TaskStkHigh) 
 
// Default values 
#define DEF_DBG_PRINT_LEVEL     DBG_INFO 
#define DEF_DBG_ABORT_LEVEL     DBG_ERROR 
#define OS_TASKPRILOW_DEF       3 
#define OS_TASKPRINORM_DEF      5 
#define OS_TASKPRIHIGH_DEF      7 
#define OS_TASKPRIKERN_DEF      (OS_TASKPRIHIGH_DEF+1) 
#define OS_TASKSTKLOW_DEF       3072 
#define OS_TASKSTKNORM_DEF      4096 
#define OS_TASKSTKHIGH_DEF      5120 
 
extern int stricmp( char *s1, char *s2); 
 
//----------------------------------------------------------------------- 
//----[ PACKET BUFFER MANAGER ]------------------------------------------ 
//----------------------------------------------------------------------- 
 
// Packet Buffer Object 
typedef struct _PBM_Pkt { 
    UINT32          Type;         // Identifier (Read Only) 
    struct _PBM_Pkt *pPrev;       // Previous record 
    struct _PBM_Pkt *pNext;       // Next record 
    UINT8           *pDataBuffer; // Pointer to Data Buffer (Read Only) 
    uint            BufferLen;    // Physical Length of buffer (Read Only) 
    uint            Flags;        // Packet Flags 
    uint            ValidLen;     // Length of valid data in buffer 
    uint            DataOffset;   // Byte offset to valid data 
    uint            EtherType;    // Ether Type Code 
    uint            L2HdrLen;     // Length of L2 Hdr (on 'L3' Rx pkts) 
    uint            IpHdrLen;     // Length of Ip Hdr 
    HANDLE          hIFRx;        // Rx Interface 
    HANDLE          hIFTx;        // Tx Interface 
    HANDLE          hRoute;       // Handle to Route 
    UINT32          Aux1;         // Aux1 Data 
    UINT32          Aux2;         // Aux2 Data 
    } PBM_Pkt; 
 
// PBM Handle 
typedef void * PBM_Handle; 
 
// Packet Buffer Manager Initialization Functions 
_extern uint        PBM_open(); 
_extern void        PBM_close(); 
 
// Packet Buffer Functions (re-entrant and "kernel mode" agnostic) 
_extern PBM_Handle  PBM_alloc( uint MaxSize ); 
_extern PBM_Handle  PBM_copy( PBM_Handle hPkt ); 
_extern void        PBM_free( PBM_Handle hPkt ); 
 
// 
// The following field Functions can be used by device drivers 
// All other PBM_Pkt fields are reserved 
// 
#define PBM_getBufferLen(hPkt)      (((PBM_Pkt*)hPkt)->BufferLen) 
#define PBM_getDataBuffer(hPkt)     (((PBM_Pkt*)hPkt)->pDataBuffer) 
#define PBM_getValidLen(hPkt)       (((PBM_Pkt*)hPkt)->ValidLen) 
#define PBM_getDataOffset(hPkt)     (((PBM_Pkt*)hPkt)->DataOffset) 
#define PBM_getIFRx(hPkt)           (((PBM_Pkt*)hPkt)->hIFRx) 
 
#define PBM_setValidLen(hPkt,x)     (((PBM_Pkt*)hPkt)->ValidLen=(x)) 
#define PBM_setDataOffset(hPkt,x)   (((PBM_Pkt*)hPkt)->DataOffset=(x)) 
#define PBM_setIFRx(hPkt,x)         (((PBM_Pkt*)hPkt)->hIFRx=(x)) 
 
//----------------------------------------------------------------------- 
//----[ PACKET BUFFER QUEUE ]-------------------------------------------- 
//----------------------------------------------------------------------- 
 
// Packet Buffer Queue Object 
typedef struct _PBMQ { 
  uint              Count;      // Number of packets in queue 
  PBM_Pkt           *pHead;     // Pointer to first packet 
  PBM_Pkt           *pTail;     // Pointer to last packet 
} PBMQ; 
 
// Packet Queue Functions (re-entrant and "kernel mode" agnostic) 
#define            PBMQ_init(pQ)   mmZeroInit( pQ, sizeof(PBMQ) ) 
#define            PBMQ_count(pQ) ((pQ)->Count) 
_extern void       PBMQ_enq( PBMQ *pQ, PBM_Handle hPkt ); 
_extern PBM_Handle PBMQ_deq( PBMQ *pQ ); 
 
//----------------------------------------------------------------------- 
//----[ STACK EVENT OBJECT ]--------------------------------------------- 
//----------------------------------------------------------------------- 
 
// Stack Event Object 
typedef struct _stkevent { 
    SEM_Handle  hSemEvent; 
    uint        EventCodes[3]; 
} STKEVENT; 
 
 
#define STKEVENT_TIMER        0 
#define STKEVENT_ETHERNET     1 
#define STKEVENT_SERIAL       2 
 
// STKEVENT Handle 
typedef void * STKEVENT_Handle; 
 
 
// Packet Queue Functions (kernel mode agnostic 
 
// 
// void STKEVENT_signal( STKEVENT_Handle hEventRec, uint Event, uint Ext ); 
//          hEventRec       Handle to Event Record 
//          Event           Event Code to Signal 
//          Ext             Set to 1 if triggered by an external event (isr) 
//                          Set to 0 if detected by polling function 
#define STKEVENT_signal(h,event,ext) { \ 
                                ((STKEVENT *)h)->EventCodes[event]=1; \ 
                                if( ext && ((STKEVENT *)h)->hSemEvent ) \ 
                                SEM_post( ((STKEVENT *)h)->hSemEvent ); } 
 
#define STKEVENT_init(h,hSem) { \ 
                                mmZeroInit( h, sizeof(STKEVENT) ); \ 
                                ((STKEVENT *)h)->hSemEvent = hSem; } 
 
 
//--------------------------------------------- 
//--------------------------------------------- 
// TASK 
//--------------------------------------------- 
//--------------------------------------------- 
 
// 
// These functions may need to be hooked or ported 
// 
_extern HANDLE TaskCreate( void(*pFun)(), char *Name, 
                          int Priority, uint StackSize, 
                          UINT32 Arg1, UINT32 Arg2, UINT32 Arg3 ); 
_extern void   TaskDestroy( HANDLE h ); 
_extern void   TaskSetEnv( HANDLE h, int Slot, HANDLE hEnv ); 
_extern HANDLE TaskGetEnv( HANDLE h, int Slot ); 
_extern void   TaskExit(); 
 
// 
// These functions map directly to SPOX 
// 
#define TaskBlock( h )          TSK_setpri( (TSK_Handle)h, -1 ) 
#define TaskSelf()              ((HANDLE)TSK_self()) 
#define TaskSetPri( h, p )      TSK_setpri( (TSK_Handle)h, p ) 
#define TaskGetPri( h )         TSK_getpri( (TSK_Handle)h ) 
#define TaskSleep( t )          TSK_sleep( t ) 
#define TaskYield()             TSK_yield() 
 
// 
// Kernel Level Gateway Functions 
// 
_extern void  llEnter(); 
_extern void  llExit(); 
 
// Low Resource Flag (for use by Kernel functions) 
extern uint   _TaskFlagLowResource; 
 
//--------------------------------------------- 
//--------------------------------------------- 
// SEM 
//--------------------------------------------- 
//--------------------------------------------- 
 
// 
// These functions map directly to SPOX 
// 
#define SEM_FOREVER SYS_FOREVER 
#define SemCreate( c )          ((HANDLE *)SEM_create( c, 0 )) 
#define SemDelete( h )          SEM_delete( (SEM_Handle)h ) 
#define SemCount( h )           SEM_count( (SEM_Handle)h ) ) 
#define SemPend( h, t )         SEM_pend( (SEM_Handle)h, t ) 
#define SemPost( h )            SEM_post( (SEM_Handle)h ) 
#define SemReset( h, c )        SEM_reset( (SEM_Handle)h, c ) 
 
//--------------------------------------------- 
//--------------------------------------------- 
// MEMORY 
//--------------------------------------------- 
//--------------------------------------------- 
 
_extern void   *mmAlloc( uint Size ); 
_extern void   mmFree( void* pv ); 
_extern void   mmCopy( void* pDst, void* pSrc, uint Size ); 
_extern void   mmZeroInit( void* pDst, uint Size ); 
_extern void   *mmBulkAlloc( INT32 Size ); 
_extern void   mmBulkFree( void *pMemory ); 
 
//--------------------------------------------- 
//--------------------------------------------- 
// DEBUG 
//--------------------------------------------- 
//--------------------------------------------- 
// Debug Log 
#define LL_DEBUG_LOG_MAX        1024 
extern int   DebugCritError;                // Set on critical error 
extern int   DebugLogSize;                  // Size of data in DebugLog 
extern char far DebugLog[LL_DEBUG_LOG_MAX]; // Buffer holding debug messages 
 
_extern void    DbgPrintf(uint Level, char *fmt, ... ); 
#define DBG_INFO        1 
#define DBG_WARN        2 
#define DBG_ERROR       3 
#define DBG_NONE        4 
 
//--------------------------------------------- 
//--------------------------------------------- 
// Fast Crit Sections 
//--------------------------------------------- 
//--------------------------------------------- 
_extern uint OEMSysCritOn(); 
_extern void OEMSysCritOff( uint enable ); 
 
//--------------------------------------------- 
//--------------------------------------------- 
// Cache 
//--------------------------------------------- 
//--------------------------------------------- 
_extern void OEMCacheClean( void *pAddr, uint Length ); 
_extern void OEMCacheCleanSynch(); 
 
//--------------------------------------------- 
//--------------------------------------------- 
// PRINTF 
//--------------------------------------------- 
//--------------------------------------------- 
 
_extern int  printf(const char *format, ...); 
_extern int  sprintf(char *s, const char *format, ...); 
_extern int  vprintf(const char *format, va_list arg); 
_extern int  vsprintf(char *s, const char *format, va_list arg); 
 
//--------------------------------------------- 
//--------------------------------------------- 
// Embedded File System 
//--------------------------------------------- 
//--------------------------------------------- 
 
// File system equates 
#define EFS_FILENAME_MAX    80 
 
// File type equates 
#define EFS_SEEK_SET        0 
#define EFS_SEEK_CUR        1 
#define EFS_SEEK_END        2 
#define EFS_FILE            void 
 
// Executable function 
typedef void (*EFSFUN)(); 
 
// Functions 
_extern void      efs_createfile( char *name, INT32 length, UINT8 *pData ); 
_extern void      efs_createfilecb( char *name, INT32 length, UINT8 *pData, 
                                    EFSFUN pllDestroyFun, UINT32 MemMgrArg ); 
 
_extern void      efs_destroyfile( char *name ); 
_extern EFSFUN    efs_loadfunction( char *name ); 
 
_extern EFS_FILE *efs_fopen( char *name, char *mode ); 
_extern int       efs_fclose( EFS_FILE *stream ); 
_extern int       efs_feof( EFS_FILE *stream ); 
_extern size_t    efs_fread( void *ptr, size_t size, size_t nobj, 
                            EFS_FILE *stream ); 
_extern size_t    efs_fwrite( void *ptr, size_t size, size_t nobj, 
                             EFS_FILE *stream ); 
_extern INT32     efs_fseek( EFS_FILE *stream, INT32 offset, int origin ); 
_extern INT32     efs_ftell( EFS_FILE *stream ); 
_extern void      efs_rewind( EFS_FILE *stream ); 
_extern INT32     efs_getfilesize( EFS_FILE *f ); 
 
 
#endif