📄 dy4mmsmp.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 + -