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

VxWorks

开发平台:

C/C++

  1. /* unixLib.h - UNIX kernel compatability library header file */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01f,05oct97,vin  added DATA_TO_MBLK macro
  7. 01e,31mar97,vin  added LIST macros for protocol control blocks.
  8. 01d,05dec96,vin  redefined MALLOC and FREE so that they use network buffers.
  9.  removed unnecessary macros M_WAITOK, M_NOWAIT, M_....
  10. 01c,22sep92,rrr  added support for c++
  11. 01b,26may92,rrr  the tree shuffle
  12. 01a,01apr92,elh  written.
  13. */
  14. #ifndef __INCunixLibh
  15. #define __INCunixLibh
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. #include "semLib.h"
  20. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  21. #pragma align 1                 /* tell gcc960 not to optimize alignments */
  22. #endif  /* CPU_FAMILY==I960 */
  23. /* linked list macros */
  24. #define LIST_HEAD(name, type)
  25. struct name
  26.             {
  27.             struct type *lh_first; /* first element */
  28.             }
  29. #define LIST_ENTRY(type)
  30. struct {
  31. struct type *le_next; /* next element */
  32. struct type **le_prev; /* address of previous next element */
  33. }
  34. #if ((CPU_FAMILY==I960) && (defined __GNUC__))
  35. #pragma align 0                 /* turn off alignment requirement */
  36. #endif  /* CPU_FAMILY==I960 */
  37. /*
  38.  * List functions.
  39.  */
  40. #define LIST_INIT(head) {
  41. (head)->lh_first = NULL;
  42. }
  43. #define LIST_INSERT_HEAD(head, elm, field) {
  44. if (((elm)->field.le_next = (head)->lh_first) != NULL)
  45. (head)->lh_first->field.le_prev = &(elm)->field.le_next;
  46. (head)->lh_first = (elm);
  47. (elm)->field.le_prev = &(head)->lh_first;
  48. }
  49. #define LIST_REMOVE(elm, field) {
  50. if ((elm)->field.le_next != NULL)
  51. (elm)->field.le_next->field.le_prev = 
  52.     (elm)->field.le_prev;
  53. *(elm)->field.le_prev = (elm)->field.le_next;
  54. }
  55. #define MALLOC(space, cast, size, type, flags) { 
  56. (space) = (cast)_netMalloc((size), (type), (flags)); 
  57. }  
  58. #define FREE(addr, type) { 
  59.             _netFree((caddr_t)(addr)); 
  60. }    
  61. #define DATA_TO_MBLK(pBuf)
  62.      (*((struct mbuf **)((char *)(pBuf) - sizeof(struct mbuf **))))
  63.             
  64. /* Function declarations */
  65. #if defined(__STDC__) || defined(__cplusplus)
  66. extern int  splnet (void);
  67. extern int  splimp (void);
  68. extern void  splx (int x);
  69. extern void  panic (char *msg);
  70. extern void  wakeup (SEM_ID semId);
  71. extern void  ksleep (SEM_ID semId);
  72. extern char * _netMalloc (int bufSize, UCHAR type, int canWait); 
  73. extern void _netFree (char * pBuf); 
  74. extern void *  hashinit (int  elements, int type, u_long * hashmask);
  75. #else /* __STDC__ */
  76. extern int splnet ();
  77. extern int splimp ();
  78. extern void splx ();
  79. extern void  panic ();
  80. extern void  wakeup ();
  81. extern void  ksleep();
  82. extern char * _netMalloc ();
  83. extern void _netFree ();
  84. extern void *  hashinit ();
  85. #endif /* __STDC__ */
  86. #ifdef __cplusplus
  87. }
  88. #endif
  89. #endif /* __INCunixLibh */