⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dy4mmsmp.h

📁 Curtiss-Wright Controls Embedded Computing公司的cw183板bsp源代码
💻 H
字号:
/********************************************************************** * *   Copyright (c) 2003-2005, Dy 4 Systems All rights reserved. *   This Source Code is the Property of Dy 4 Systems Inc. and can *   only be used in accordance with Source Code License *   Agreement of Dy 4 Systems Inc. dba (doing business as) *   CURTISS-WRIGHT CONTROLS EMBEDDED COMPUTING, "CWCEC". * **********************************************************************//*********************************************************************************  Filename: dy4mmsMP.h**  Copyright 2005 by DY4 Systems.  All Rights Reserved.**  Project Name: Multi-processor Message Service (MMS)**  Target:  182/183/145/146**  Description: Shared memory, shared memory semaphores, message passing queues**  Usage:**  Log:********************************************************************************//* Copyright 1984 - 1997 Wind River Systems, Inc. *//*modification history--------------------May 06, 2005 tis  add support for CCA-146Apr 21, 2005 sch  CR # 2662 - added MMS_WAIT_FOREVER Oct 30, 2003 -JS- Created for dy4MMS project01a,02jun03, rgs        Standard file header added.*//*DESCRIPTION:Inter-CPU communications library header file.INCLUDE FILES: dy4182.h, cwv183.h, cca145.h, or cca146.h               dy4mmsHeap.hSEE ALSO:*/#ifndef __INCdy4mmsMPh#define __INCdy4mmsMPh#ifdef __cplusplusextern "C" {#endif#include <vxWorks.h>#include <semLib.h>#include "h/drv/dy4/boardName.h"#ifdef VME_182#include "dy4182.h"#endif#ifdef CCA_145#include "cca145.h"#endif#ifdef CCA_146#include "cca146.h"#endif#ifdef VME_183#include "cwv183.h"#endif#include "dy4mmsHeap.h"/* * Error codes returned by user level functions in errno */#define M_dy4mmsLib                            (200 << 16)#define S_dy4mmsLib_INVALID_ARGUMENT           (M_dy4mmsLib | 0x01)#define S_dy4mmsLib_NOT_OWNER                  (M_dy4mmsLib | 0x02)#define S_dy4mmsLib_TIMEOUT                    (M_dy4mmsLib | 0x03)#define S_dy4mmsLib_DOORBELL_INUSE             (M_dy4mmsLib | 0x04)#define S_dy4mmsLib_DOORBELL_NOTRUNG           (M_dy4mmsLib | 0x05)#define S_dy4mmsLib_SEMCREATE_FAILED           (M_dy4mmsLib | 0x06)#define S_dy4mmsLib_SEMTAKE_FAILED             (M_dy4mmsLib | 0x07)#define S_dy4mmsLib_INTCONNECT_FAILED          (M_dy4mmsLib | 0x08)#define S_dy4mmsLib_INTDISCONNECT_FAILED       (M_dy4mmsLib | 0x09)#define S_dy4mmsLib_INTENABLE_FAILED           (M_dy4mmsLib | 0x0A)#define S_dy4mmsLib_INTDISABLE_FAILED          (M_dy4mmsLib | 0x0B)#define S_dy4mmsLib_INSUFFICIENT_RESOURCES     (M_dy4mmsLib | 0x0C)#ifndef PPC_CACHE_LINE_SIZE    #define PPC_CACHE_LINE_SIZE    32#endif#undef MMS_CACHED_MEMORY_NO_SNOOP#ifdef MMS_CACHED_MEMORY_NO_SNOOP    #define MMS_CACHE_FLUSH( p, s )  \        cacheFlush( DATA_CACHE, p, s );                \        cachePipeFlush( );    #define MMS_CACHE_INVALIDATE( p, s )        \        cacheInvalidate( DATA_CACHE, p, s )#else    #define MMS_CACHE_FLUSH( p, s )    #define MMS_CACHE_INVALIDATE( p, s )#endif/* * CPU identification defines */#define DY4MMS_NUM_CPUS            2#define DY4MMS_CPU0                0#define DY4MMS_CPU1                1#define DY4MMS_CPU0_MASK           (1 << DY4MMS_CPU0)#define DY4MMS_CPU1_MASK           (1 << DY4MMS_CPU1)/* * Semaphore type defines */#define DY4MMS_SEM_NONE            0#define DY4MMS_SEM_BINARY          1#define DY4MMS_SEM_COUNTING        2#define DY4MMS_SEM_RAW             3/* * Internal shared semaphore resource identifiers */#define DY4MMS_NUM_SEMS            8#define DY4MMS_HEAP_SEM            0#define DY4MMS_QUEUE_ACCESS_SEM    1#define DY4MMS_QUEUE_NOTIFY_SEM    2/* * Identifiers for semaphores for user application */#define DY4MMS_USER_SEM_0          3#define DY4MMS_USER_SEM_1          4#define DY4MMS_USER_SEM_2          5#define DY4MMS_USER_SEM_3          6#define DY4MMS_USER_SEM_4          7/* * Queue defines */#define DY4MMS_LOW_PRIORITY        1#define DY4MMS_HIGH_PRIORITY       2#define MMS_WAIT_FOREVER           0xFFFFFFFF/* * dy4mms Init structure */typedef struct _dy4mmsInit    {    int  semType[DY4MMS_NUM_SEMS];     int  numQueues;    int  queueSize;     void (*callback)(int);    int  callbackArg;    } DY4MMS_INIT;/* * internal semaphore structure */typedef struct _dy4mmsSem    {    unsigned long  type;         /* is it RAW BINARY or COUNTING      */    unsigned long  count;        /* if it is COUNTING whats the count */    unsigned long  cpuOwner;     /* which CPU owns BINARY or RAW sem  */    int            reserved[5];  /* round up to cache alignment       */    } DY4MMS_SEM;typedef struct _dy4mmsSemLocal    {    SEM_ID         access;   /* local access control sem        */    SEM_ID         notify;   /* local notification sem (db give)*/    } DY4MMS_SEM_LOCAL;/* * internal message structure */typedef struct _dy4mmsQEntry    {    dy4DllHdr link;    void      *buf;    int       len;    int       priority;    int       reserved[5];  /* round up to cache alignment */    } DY4MMS_Q_ENTRY;typedef struct _dy4mmsQHeader    {    dy4DllHdr  msgs;    dy4DllHdr  free;    int        numMsgs;    int        freeCount;    int        highWater;    int        reserved[5];  /* round up to cache alignment             */    } DY4MMS_Q_HEADER;/* * internal queue structure */typedef struct _dy4mmsQueue    {    DY4MMS_Q_HEADER perProcQueue[DY4MMS_NUM_CPUS];    DY4MMS_Q_ENTRY  blks[1];      /* place holder for array of variable size */    } DY4MMS_QUEUE;typedef struct _dy4mmsQueueLocal    {    SEM_ID          msgsNotify;    SEM_ID          freeNotify;    } DY4MMS_QUEUE_LOCAL;/* * base hardware semaphore identification enum */typedef enum dy4mmsSemId{    DY4MMS_SEM_START = -1,    DY4MMS_SEM_0,    DY4MMS_SEM_1,    DY4MMS_SEM_2,    DY4MMS_SEM_3,    DY4MMS_SEM_4,    DY4MMS_SEM_5,    DY4MMS_SEM_6,    DY4MMS_SEM_7,    DY4MMS_SEM_END} DY4MMS_SEM_ID;/* * base hardware doorbell identification enum */typedef enum dy4mmsDoorbellId{    DY4MMS_DOORBELL_START = -1,    DY4MMS_DOORBELL_0,    DY4MMS_DOORBELL_1,    DY4MMS_DOORBELL_2,    DY4MMS_DOORBELL_3,    DY4MMS_DOORBELL_4,    DY4MMS_DOORBELL_5,    DY4MMS_DOORBELL_6,    DY4MMS_DOORBELL_7,    DY4MMS_DOORBELL_END} DY4MMS_DOORBELL_ID;/* -----------------------------------------------------------*//* ---------------low level external Function prototypes -----*//* -----------------------------------------------------------*/STATUS dy4mmsDoorbellRing(CPU_ID          cpuId,                        DY4MMS_DOORBELL_ID doorbellId);STATUS dy4mmsDoorbellIntEnable(DY4MMS_DOORBELL_ID doorbellId);STATUS dy4mmsDoorbellIntDisable(DY4MMS_DOORBELL_ID doorbellId);STATUS dy4mmsDoorbellIntConnect(DY4MMS_DOORBELL_ID doorbellId,                              VOIDFUNCPTR     routine,                              int             arg);/* -----------------------------------------------------------*//* ---------------high level external Function prototypes -----*//* -----------------------------------------------------------*/STATUS dy4mmsInit(DY4MMS_INIT *initStuct);STATUS dy4mmsSemCreate(DY4MMS_SEM_ID semId,                        int           type);STATUS dy4mmsSemDelete(DY4MMS_SEM_ID semId);STATUS dy4mmsSemTake(DY4MMS_SEM_ID semId,                      int           timeout);STATUS dy4mmsSemGive(DY4MMS_SEM_ID semId);STATUS dy4mmsMsgSend(int          qId,                     void         *msg,                      unsigned int size,                      unsigned int timeout,                      unsigned int priority);STATUS dy4mmsMsgRecv(int          qId,                     void         **msg,                      unsigned int *size,                      unsigned int timeout);STATUS dy4mmsMalloc(void         **ptr,                     unsigned int size);STATUS dy4mmsMemalign(void         **ptr,                       unsigned int size,                      unsigned int align);STATUS dy4mmsCalloc(void         **ptr,                     unsigned int nitmes,                    unsigned int nbytes);STATUS dy4mmsFree(void *ptr);long   dy4mmsMemCheck( unsigned long *nRegions_p,                       unsigned long *freeBytes_p,                       unsigned long *largest_p);void dy4mmsShow(void);void dy4mmsClearStats(void);#ifdef __cplusplus}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -