smLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* smLib.h - include file for VxWorks shared memory common library */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01t,05mar02,mas  added SM_MAX_WAIT (SPR 73371)
  7. 01s,14nov01,mas  added smLibInit() prototype for future common code base
  8. 01r,16mar99,dat  added SM_INT_USER_1/2 (SPR 25804)
  9. 01q,29jan93,pme  changed SM_ALIGN_BOUNDARY to 16.
  10. 01p,22sep92,rrr  added support for c++
  11. 01o,12sep92,ajm  moved previously redundant define DEFAULT_BEATS_TO_WAIT from
  12.  smObjLib.h, and smPktLib.h
  13. 01n,28jul92,pme  added SM_ALIGN_BOUNDARY.
  14. 01m,24jul92,elh  Moved heartbeat from anchor.
  15. 01l,19jul92,pme  added external declaration of smCurMaxTries.
  16. 01k,23jun92,elh  added SM_ constants from if_bp, cleanup.
  17. 01j,22jun92,rrr  fix decl of smLibInit when __STDC__ is not defined
  18. 01i,02jun92,elh  the tree shuffle
  19. 01h,28may92.elh  General clean up.
  20. 01g,20may92,pme+ Split even further.  Removed USE_OFFSET.
  21.     elh  Moved pkt specific stuff to smPktLib.h.
  22. 01f,13may92,pme  Added smObjHeaderAdrs fields to anchor.
  23. 01e,03may92,elh  Added smNetReserved fields to anchor.
  24. 01d,01apr92,elh  Removed references to shMemHwTasFunc and
  25.  shMemIntGenFunc (now in smUtilLib).
  26.  Removed interrupt types.
  27. 01c,04feb92,elh  ansified
  28. 01b,17dec91,elh  externed hooks, added ifdef around file, changed VOID
  29.  to void.  Added masterCpu, user1 and user2, to SM_ANCHOR.
  30.  Added S_shMemLib_MEMORY_ERROR. Changed copyright.
  31. 01a,15aug90,kdl  written.
  32. */
  33. #ifndef __INCsmLibh
  34. #define __INCsmLibh
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. /* includes */
  39. #include "vwModNum.h"
  40. /* defines */
  41. /* Error codes */
  42. #define S_smLib_MEMORY_ERROR (M_smLib | 1)
  43. #define S_smLib_INVALID_CPU_NUMBER (M_smLib | 2)
  44. #define S_smLib_NOT_ATTACHED (M_smLib | 3)
  45. #define S_smLib_NO_REGIONS (M_smLib | 4)
  46. /* Miscellaneous Constants */
  47. #define SM_READY ((UINT) 0x87654321)
  48. /* value set in anchor when init'd */
  49. #define SM_MASTER 0 /* default CPU 0 is master */
  50. #define SM_ALIGN_BOUNDARY    16  /* shared memory address alignement */
  51. /* default values */
  52. #define SM_REGIONS_MAX 20 /* max number of regions */
  53. #define DEFAULT_ALIVE_TIMEOUT 600 /* default seconds to wait for h'beat */
  54. #define DEFAULT_BEATS_TO_WAIT   5       /* beats to wait 'til believe sm dead */
  55. #define SM_MAX_WAIT 3000 /* max ticks to wait for master boot */
  56. /* Test-and-set type values */
  57. #define SM_TAS_SOFT 0 /* software test-and-set */
  58. #define SM_TAS_HARD 1 /* hardware test-and-set */
  59. /* CPU status values */
  60. #define SM_CPU_ATTACHED        1 /* cpu attached to shared mem */
  61. #define SM_CPU_NOT_ATTACHED    0 /* cpu not attached */
  62. /* backplane interrupt methods */
  63. #define SM_INT_NONE 0 /* no interrupt - poll instead */
  64. /* mailbox write interrupts */
  65. #define SM_INT_MAILBOX_1 1 /* write byte      */
  66. #define SM_INT_MAILBOX_2 2 /* write word      */
  67. #define SM_INT_MAILBOX_4 3 /* write long      */
  68. /* arg1 = bus address space
  69.  * arg2 = bus address
  70.  * arg3 = value
  71.  */
  72. #define SM_INT_BUS 4 /* vme bus interrupt       */
  73. /*    arg1 = interrupt level
  74.  *    arg2 = interrupt vector
  75.  *    arg3 = N/A
  76.  */
  77. /* mailbox read interrupts    */
  78. /*    arg1 = bus address space
  79.  *    arg2 = bus address
  80.  *    arg3 = value
  81.  */
  82. #define SM_INT_MAILBOX_R1 5 /* read byte  */
  83. #define SM_INT_MAILBOX_R2 6 /* read word  */
  84. #define SM_INT_MAILBOX_R4 7 /* read long  */
  85. #define SM_INT_USER_1 8 /* User defined proc #1 */
  86. /* (smUtilUser1Rtn)(arg1,arg2,arg3)*/
  87. #define SM_INT_USER_2 9 /* User defined proc #2 */
  88. /* (smUtilUser2Rtn)(arg1,arg2,arg3)*/
  89. #define SM_OFFSET_TO_LOCAL(offset , baseAddr, typeCast) 
  90. ((typeCast) ((char *) offset +  baseAddr))
  91. #define SM_LOCAL_TO_OFFSET(localAdrs, baseAddr) 
  92. ((int) ((char *) localAdrs - baseAddr))
  93. /* typedefs */
  94. #ifndef _ASMLANGUAGE
  95. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  96. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  97. #endif  /* CPU_FAMILY==I960 */
  98. /* CPU Descriptor */
  99. typedef struct sm_cpu_desc /* SM_CPU_DESC */
  100.     {
  101.     int status; /* CPU status - attached/unattached */
  102.     int intType; /* interrupt type */
  103.     int intArg1; /* interrupt argument #1 */
  104.     int intArg2; /* interrupt argument #2 */
  105.     int intArg3; /* interrupt argument #3 */
  106.     int reserved1; /* (future use) */
  107.     int reserved2; /* (future use) */
  108.     } SM_CPU_DESC;
  109. /* Shared Memory Header */
  110. typedef struct sm_hdr /* SM_HDR */
  111.     {
  112.     int tasType; /* test-and-set type (test-and-set-and-check?)*/
  113.     int maxCpus; /* maximum number of CPU's in table */
  114.     int cpuTable; /* CPU descriptor table (offset) */
  115.     int reserved1; /* (future use) */
  116.     int reserved2; /* (future use) */
  117.     int reserved3; /* (future use) */
  118.     int reserved4; /* (future use) */
  119.     int reserved5; /* (future use) */
  120.     int reserved6; /* (future use) */
  121.     int reserved7; /* (future use) */
  122.     int reserved8; /* (future use) */
  123.     } SM_HDR;
  124. /* Shared Memory Anchor */
  125. typedef struct sm_anchor /* SM_ANCHOR */
  126.     {
  127.     UINT readyValue;     /* set to SM_READY when sh mem init'd */
  128.     int version;        /* version number */
  129.     int masterCpu;      /* shared memory master */
  130.     int smHeader; /* offset of shared mem header */
  131.     int smPktHeader;    /* offset of smPkt header */
  132.     int  smObjHeader;    /* offset of smObj header */
  133.     int user1;          /* user defined space 1 */
  134.     int user2;          /* user defined space 2 */
  135.     int reserved1;      /* (future use) */
  136.     int reserved2;      /* (future use) */
  137.     int reserved3;      /* (future use) */
  138.     } SM_ANCHOR;
  139. /* Shared Memory Descriptor (maintained by each CPU) */
  140. typedef struct sm_desc /* SM_DESC */
  141.     {
  142.     int status; /* cpu status (attached/not attached) */
  143.     SM_ANCHOR *anchorLocalAdrs;/* local addr of sh mem anchor */
  144.     SM_HDR *headerLocalAdrs;/* local addr of sh mem header */
  145.     SM_CPU_DESC *cpuTblLocalAdrs;/* local addr of cpu descriptor tbl */
  146.     int base; /* base address */
  147.     int cpuNum; /* this CPU's number */
  148.     int ticksPerBeat; /* cpu ticks per sh mem heartbeat */
  149.     int intType; /* interrupt type */
  150.     int intArg1; /* interrupt argument #1 */
  151.     int intArg2; /* interrupt argument #2 */
  152.     int intArg3; /* interrupt argument #3 */
  153.     int maxCpus; /* max number of CPU's using sh mem */
  154.     FUNCPTR tasRoutine; /* addr of TAS routine to use */
  155.     FUNCPTR tasClearRoutine;/* addr of TAS clear routine to use */
  156.     } SM_DESC;
  157. /* Shared Memory Information Structure */
  158. typedef struct sm_info /* SM_INFO */
  159.     {
  160.     int version; /* shared memory protocol version */
  161.     int tasType; /* test-and-set method */
  162.     int maxCpus; /* maximum number of cpu's */
  163.     int attachedCpus; /* number of cpu's currently attached */
  164.     } SM_INFO;
  165. /* CPU Information Structure */
  166. typedef struct sm_cpu_info /* SM_CPU_INFO */
  167.     {
  168.     int cpuNum; /* cpu number */
  169.     int status; /* cpu status - attached/unattached */
  170.     int intType; /* interrupt type */
  171.     int intArg1; /* interrupt argument #1 */
  172.     int intArg2; /* interrupt argument #2 */
  173.     int intArg3; /* interrupt argument #3 */
  174.     } SM_CPU_INFO;
  175. typedef struct sm_region /* shared memory region */
  176.     {
  177.     SM_ANCHOR * anchor; /* shared memory anchor */
  178.     } SM_REGION;
  179. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  180. #pragma align 0                 /* turn off alignment requirement */
  181. #endif  /* CPU_FAMILY==I960 */
  182. /* Variable Declaration */
  183. extern int smCurMaxTries;    /* current maximum # of tries to get lock */
  184. extern VOIDFUNCPTR smUtilTasClearRtn;
  185. extern FUNCPTR smUtilUser1Rtn;
  186. extern FUNCPTR smUtilUser2Rtn;
  187. /* Function Declarations */
  188. #if defined(__STDC__) || defined(__cplusplus)
  189. extern void smLibInit (void * pRgnCfgTbl, UINT objSize, UINT netSize);
  190. extern STATUS  smSetup (SM_ANCHOR *anchorLocalAdrs, char *smLocalAdrs,
  191.  int tasType, int maxCpus, int * pMemUsed);
  192. extern STATUS smAttach (SM_DESC *pSmDesc);
  193. extern STATUS  smDetach (SM_DESC *pSmDesc);
  194. extern void  smInit (SM_DESC *pSmDesc, SM_ANCHOR *anchorLocalAdrs,
  195. int ticksPerBeat, int intType, int intArg1,
  196. int intArg2, int intArg3);
  197. extern BOOL  smIsAlive (SM_ANCHOR *pAnchor, int *pHeader, int base,
  198.    int heartBeats, int ticksPerBeat);
  199. extern STATUS  smLockTake (int * lockLocalAdrs, FUNCPTR tasRoutine,
  200.    int numTries, int * pOldLvl);
  201. extern void smLockGive (int *lockLocalAdrs, FUNCPTR tasClearRoutine,
  202.     int oldLvl);
  203. extern STATUS  smInfoGet (SM_DESC *pSmDesc, SM_INFO *pInfo);
  204. extern STATUS  smCpuInfoGet (SM_DESC *pSmDesc, int cpuNum,
  205.       SM_CPU_INFO *pCpuInfo);
  206. #else /* __STDC__ */
  207. extern void smLibInit ();
  208. extern STATUS  smSetup ();
  209. extern STATUS smAttach ();
  210. extern STATUS  smDetach ();
  211. extern void smInit ();
  212. extern BOOL  smIsAlive ();
  213. extern STATUS  smLockTake ();
  214. extern void smLockGive ();
  215. extern STATUS  smInfoGet ();
  216. extern STATUS  smCpuInfoGet ();
  217. #endif /* __STDC__ */
  218. #endif  /* _ASMLANGUAGE */
  219. #ifdef __cplusplus
  220. }
  221. #endif
  222. #endif /* __INCsmLibh */