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

VxWorks

开发平台:

C/C++

  1. /* smPktLib.h - include file for VxWorks shared packets protocol library */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 02f,11mar02,mas  added SM_MAX_PKTS (SPR 73371)
  7. 02e,22sep92,rrr  added support for c++
  8. 02d,11sep92,ajm  moved redundant define of DEFAULT_BEATS_TO_WAIT to smLib.h
  9. 02c,29jul92,pme  changed DEFAULT_CPUS_MAX to 10.
  10. 02b,24jul92,elh  Moved heartbeat to header from anchor.
  11. 02a,04jul92,jcf  cleaned up.
  12. 01h,02jun92,elh  the tree shuffle
  13. 01g,27may92,elh  split from shMemLib, general cleanup.
  14. 01f,13may92,pme  Added smObjHeaderAdrs fiels to anchor.
  15. 01e,03may92,elh  Added smNetReserved fields to anchor.
  16. 01d,01apr92,elh  Removed references to shMemHwTasFunc and
  17.  shMemIntGenFunc (now in smUtilLib).
  18.  Removed interrupt types.
  19. 01c,04feb92,elh  ansified
  20. 01b,17dec91,elh  externed hooks, added ifdef around file, changed VOID
  21.  to void.  Added masterCpu, user1 and user2, to SM_ANCHOR.
  22.  Added S_shMemLib_MEMORY_ERROR. Changed copyright.
  23. 01a,15aug90,kdl  written.
  24. */
  25. #ifndef __INCsmPktLibh
  26. #define __INCsmPktLibh
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. /* includes */
  31. #include "vwModNum.h"
  32. #include "smLib.h"
  33. /* defines */
  34. /* Error codes */
  35. #define S_smPktLib_SHARED_MEM_TOO_SMALL (M_smPktLib | 1)
  36. #define S_smPktLib_MEMORY_ERROR (M_smPktLib | 2)
  37. #define S_smPktLib_DOWN (M_smPktLib | 3)
  38. #define S_smPktLib_NOT_ATTACHED (M_smPktLib | 4)
  39. #define S_smPktLib_INVALID_PACKET (M_smPktLib | 5)
  40. #define S_smPktLib_PACKET_TOO_BIG (M_smPktLib | 6)
  41. #define S_smPktLib_INVALID_CPU_NUMBER (M_smPktLib | 7)
  42. #define S_smPktLib_DEST_NOT_ATTACHED (M_smPktLib | 8)
  43. #define S_smPktLib_INCOMPLETE_BROADCAST (M_smPktLib | 9)
  44. #define S_smPktLib_LIST_FULL (M_smPktLib | 10)
  45. #define S_smPktLib_LOCK_TIMEOUT (M_smPktLib | 11)
  46. /* Miscellaneous Constants */
  47. #define SM_BROADCAST 0xbbbbbbbb /* dest cpu number to send to all cpus*/
  48. #define SM_FLUSH 0 /* dont flush queued packets */
  49. #define SM_NO_FLUSH 1
  50. /* default values */
  51. #define DEFAULT_MEM_SIZE 0x10000 /* default memory size */
  52. #define DEFAULT_PKT_SIZE 2176  /* default packet size */
  53. #define DEFAULT_PKTS_MAX 200 /* max input packets */
  54. #define DEFAULT_CPUS_MAX 10 /* max number of cpus */
  55. #define SM_MAX_PKTS 200 /* max #packets to support */
  56. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  57. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  58. #endif  /* CPU_FAMILY==I960 */
  59. /* Packet List Node */
  60. typedef struct sm_sll_node      /* SM_SLL_NODE */
  61.     {
  62.     int   next;   /* ptr to next node in list */
  63.     } SM_SLL_NODE;
  64. /* Packet Singly-Linked List */
  65. typedef struct sm_sll_list /* SM_SLL_LIST */
  66.     {
  67.     int         lock;           /* mutual exclusion lock (for TAS) */
  68.     int   head;         /* head (first node) of list (offset) */
  69.     int  tail;         /* tail (last node) of list (offset) */
  70.     int         count;          /* number of packets currently in list */
  71.     int         limit;          /* max number of packets allowed in list */
  72.     } SM_SLL_LIST;
  73. /* Packet Header */
  74. typedef struct sm_pkt_hdr /* SM_PKT_HDR */
  75.     {
  76.     SM_SLL_NODE node; /* node header for linked lists */
  77.     int type; /* packet type */
  78.     int nBytes; /* number of bytes of data in packet */
  79.     int srcCpu; /* source CPU number */
  80.     int ownerCpu; /* owner CPU number (future use) */
  81.     int reserved1; /* (future use) */
  82.     int reserved2; /* (future use) */
  83.     } SM_PKT_HDR;
  84. /* Packet */
  85. typedef struct sm_pkt  /* SM_PKT */
  86.     {
  87.     SM_PKT_HDR header; /* packet header */
  88.     char data [1]; /* data buffer (actual size = maxPktBytes) */
  89.     } SM_PKT;
  90. /* per CPU Packet Descriptor */
  91. typedef struct sm_pkt_cpu_desc  /* SM_PKT_CPU_DESC */
  92.     {
  93.     int         status;         /* CPU status - attached/unattached */
  94.     SM_SLL_LIST inputList;      /* input list of packets */
  95.     SM_SLL_LIST freeList;       /* free list of packets (future use) */
  96.     } SM_PKT_CPU_DESC;
  97. /* Shared Memory Packet Memory Header */
  98. typedef struct sm_pkt_mem_hdr /* SM_PKT_MEM_HDR */
  99.     {
  100.     UINT   heartBeat;  /* incremented via smPktBeat() */
  101.     SM_SLL_LIST   freeList; /* global list of free packets */
  102.     int    pktCpuTbl; /* packet descriptor table (offset) */
  103.     int           maxPktBytes; /* max size of packet data (in bytes) */
  104.     int   reserved1; /* (future use) */
  105.     int   reserved2; /* (future use) */
  106.     } SM_PKT_MEM_HDR;
  107. typedef struct sm_pkt_desc /* SM_PKT_DESC */
  108.     {
  109.     int status;
  110.     SM_DESC smDesc; /* shared memory descriptor */
  111.     int          maxPktBytes;    /* max size of packet buffer */
  112.     int          maxInputPkts; /* max packets allowed in queue */
  113.     SM_PKT_MEM_HDR * hdrLocalAdrs; /* pkt memory header local adrs */
  114.     SM_PKT_CPU_DESC * cpuLocalAdrs; /* pkt cpu local adrs */
  115.     } SM_PKT_DESC;
  116. /* Shared Memory Packet Information Structure */
  117. typedef struct sm_pkt_info  /* SM_INFO */
  118.     {
  119.     SM_INFO smInfo;
  120.     int attachedCpus; /* number of cpu's currently attached */
  121.     int maxPktBytes; /* max number of data bytes in packet */
  122.     int totalPkts; /* total number of sh mem packets */
  123.     int freePkts; /* number of packets currently free */
  124.     } SM_PKT_INFO;
  125. /* CPU Information Structure */
  126. typedef struct sm_pkt_cpu_info /* SM_CPU_INFO */
  127.     {
  128.     SM_CPU_INFO smCpuInfo;
  129.     int status; /* cpu status - attached/unattached */
  130.     int maxInputPkts; /* max packets allowed in input queue */
  131.     int inputPkts; /* current count of input pkts queued */
  132.     int totalPkts; /* (future use) */
  133.     int freePkts; /* (future use) */
  134.     } SM_PKT_CPU_INFO;
  135. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  136. #pragma align 0                 /* turn off alignment requirement */
  137. #endif  /* CPU_FAMILY==I960 */
  138. /* Function Declarations */
  139. #if defined(__STDC__) || defined(__cplusplus)
  140. extern STATUS  smPktFreeGet (SM_PKT_DESC *pSmPktDesc, SM_PKT **ppPkt);
  141. extern STATUS  smPktFreePut (SM_PKT_DESC *pSmPktDesc, SM_PKT *pPkt);
  142. extern STATUS  smPktRecv (SM_PKT_DESC *pSmPktDesc, SM_PKT **ppPkt);
  143. extern STATUS  smPktSend (SM_PKT_DESC *pSmPktDesc, SM_PKT *pPkt, int destCpu);
  144. extern STATUS  smPktSetup (SM_ANCHOR * anchorLocalAdrs, char * smLocalAdrs,
  145.     int smSize, int tasType, int maxCpus,
  146.     int maxPktBytes);
  147. extern void  smPktInit (SM_PKT_DESC *pSmPktDesc, SM_ANCHOR *anchorLocalAdrs,
  148.    int maxInputPkts, int ticksPerBeat, int intType,
  149.    int intArg1, int intArg2, int intArg3);
  150. extern STATUS  smPktAttach (SM_PKT_DESC *pSmPktDesc);
  151. extern STATUS  smPktDetach (SM_PKT_DESC *pSmPktDesc, BOOL noFlush);
  152. extern STATUS  smPktInfoGet (SM_PKT_DESC *pSmPktDesc, SM_PKT_INFO *pInfo);
  153. extern STATUS  smPktCpuInfoGet (SM_PKT_DESC *pSmPktDesc, int cpuNum,
  154.          SM_PKT_CPU_INFO *pCpuInfo);
  155. extern void  smPktBeat (SM_PKT_MEM_HDR *pSmPktHdr);
  156. #else /* __STDC__ */
  157. extern STATUS  smPktFreeGet ();
  158. extern STATUS  smPktFreePut ();
  159. extern STATUS  smPktInfoGet ();
  160. extern STATUS  smPktRecv ();
  161. extern STATUS  smPktSend ();
  162. extern STATUS  smPktSetup ();
  163. extern void  smPktInit ();
  164. extern STATUS  smPktDetach ();
  165. extern STATUS  smPktInfoGet ();
  166. extern STATUS  smPktCpuInfoGet ();
  167. extern void  smPktBeat ();
  168. #endif /* __STDC__ */
  169. #ifdef __cplusplus
  170. }
  171. #endif
  172. #endif /* __INCsmPktLibh */