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

VxWorks

开发平台:

C/C++

  1. /* smEnd.h - WRS shared memory driver header file */
  2. /* Copyright 1984-1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01a,28jan99,mas  written based on if_sm.h rev 01f,22sep92.
  7. */
  8. #ifndef __INCsmEndh
  9. #define __INCsmEndh
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. /* includes */
  14. #include "etherLib.h"
  15. #include "netinet/if_ether.h"
  16. #include "smPktLib.h"
  17. /* defines */
  18. /* XXXmas should use the following def only as default in future */
  19. #define NSM 1
  20. #define SM_PARAMS_MAX     256
  21. #define SM_END_COOKIE     0xfab0fad0
  22. #define SM_MIN_MBLK_NUM   0x10
  23. #define SM_DFLT_MBLK_NUM  0x30
  24. #define SM_MIN_CLBLK_NUM  0x10
  25. #define SM_DFLT_CLBLK_NUM 0x20
  26. #define SM_END_MIN_FBUF   (1536) /* min first buffer size */
  27. #define SM_PACKET_ROUNDUP(siz) 
  28.     ((16 - (((siz) + SIZEOF_ETHERHEADER) % 16)) + SIZEOF_ETHERHEADER)
  29. #define SM_END_DEV_NAME   "sm"
  30. #define SM_POLL_TASK_NAME "tsmPollTask"
  31. #define SM_NUM_INT_TYPES  8
  32. #define SM_END_MIB2_SPEED -1
  33. #define SM_END_ATTR_CLR  
  34.     (IFF_UP | IFF_NOTRAILERS | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST)
  35. /* ethernet address length */
  36. #define EADDR_LEN         (sizeof(struct ether_addr))
  37. #define SM_END_CLST_SIZ   (ETHERMTU + ENET_HDR_REAL_SIZ + EADDR_LEN)
  38. /*
  39.  * Maximum delay for initial access to sm from slave processor in ticks.
  40.  * At 100 ticks per second, this is about 30 seconds.
  41.  */
  42. #define SM_MAX_WAIT       3000
  43. #define M_BLK_OVERHEAD    4
  44. #define CL_BLK_OVERHEAD   4
  45. #define CL_OVERHEAD       4
  46. #define PKT_TYPE_MULTI 0x1 /* packet with a multicast address */
  47. #define PKT_TYPE_UNI 0x2 /* packet with a unicast address */
  48. #define PKT_TYPE_NONE 0x4 /* address type is not meaningful */
  49. /* Macros */
  50. #undef  deviceValid /* XXXmas temporary */
  51. #define deviceValid(unit)  (((unit >= 0) && (unit < NSM)) ? TRUE : FALSE)
  52. #define etherAddrPtr(eaddr) (u_char *)(eaddr)
  53. #define smEndInputCount(pSmEndDev, cpu)  
  54.     (pSmEndDev)->smPktDesc.cpuLocalAdrs [(cpu)].inputList.count
  55. #define SM_END_ADDR_GET(pEnd)                                          
  56.     ((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)
  57. #define SM_END_ADDR_LEN_GET(pEnd)                                      
  58.     ((pEnd)->mib2Tbl.ifPhysAddress.addrLength)
  59. #define SM_END_COPY_FROM_CLUSTER(mBlkId,pData,len)  
  60.     bcopy ((mBlkId)->mBlkHdr.mData, (pData), (len))
  61. /*    bcopy ((mBlkId)->pClBlk->clNode.pClBuf, (pData), (len))*/
  62. #define SM_END_COPY_TO_CLUSTER(mBlkId,pData,len)  
  63.     bcopy ((pData), (mBlkId)->mBlkHdr.mData, (len))
  64. /*    bcopy ((pData), (mBlkId)->pClBlk->clNode.pClBuf, (len))*/
  65. /* typedefs */
  66. /* The definition of the shared memory device control structure */
  67. typedef struct sm_end_device /* SM_END_DEV */
  68.     {
  69.     END_OBJ end; /* The class we inherit from. */
  70.     UINT cookie; /* sm device validation cookie */
  71.     unsigned localCpu; /* local cpu number */
  72.     int unit; /* unit number */
  73.     ULONG busSpace; /* bus address space for pAnchor/pmem*/
  74.     SM_ANCHOR * pAnchor; /* pointer to shared memory anchor */
  75.     char * pMem; /* pointer to start of shared memory */
  76.     ULONG memSize; /* total shared memory size in bytes */
  77.     unsigned tasType; /* test-and-set type (HARD/SOFT) */
  78.     unsigned maxCpus; /* max #CPUs supported in 'sm' */
  79.     unsigned masterCpu; /* master CPU number */
  80.     ULONG maxPktBytes; /* max #packets in shared memory */
  81.     char * startAddr; /* start of seq addrs (0 = not seq) */
  82.     char * ipAddr; /* non-seq. IP address */
  83.     int maxPackets; /* max #packets CPU can receive */
  84.     int intType; /* interrupt method */
  85.     int intArg1; /* 1st interrupt argument */
  86.     int intArg2; /* 2nd interrupt argument */
  87.     int intArg3; /* 3rd interrupt argument */
  88.     int ticksPerBeat; /* #CPU ticks per heartbeat */
  89.     ULONG mbNum; /* number of mBlks to allocate */
  90.     ULONG cbNum; /* number of clBlks to allocate */
  91.     BOOL smAlloc; /* sm allocated? */
  92.     BOOL isMaster; /* we are master CPU? */
  93.     ULONG flags; /* Our local flags. */
  94.     SM_PKT_MEM_HDR * pSmPktHdr; /* sm packet header */
  95.     CL_POOL_ID clPoolId; /* cluster pool ID */
  96.     M_BLK_ID tupleId; /* receive-ready tuple (mBlk) ID */
  97.     M_BLK_ID pollQ; /* polled tuple queue */
  98.     M_BLK_ID pollQLast; /* polled tuple queue last entry */
  99.     void * pMclBlkCfg; /* mBlk/clBlk config memory */
  100.     void * pClustMem; /* cluster pool memory */
  101.     /* old SM_SOFTC section */
  102.     struct arpcom arpcom; /* common ethernet structure*/
  103.     SM_PKT_DESC smPktDesc; /* shared mem packet desc */
  104.     u_long masterAddr; /* master's IP address */
  105.     } SM_END_DEV;
  106. /* function prototypes */
  107. extern END_OBJ * smEndLoad (char * pParamStr);
  108. extern void      smNetShowInit (void);
  109. extern STATUS    smNetShow (char * ifName, BOOL zero);
  110. #ifdef __cplusplus
  111. }
  112. #endif
  113. #endif /* __INCsmEndh */