bcmutils.h
上传用户:yuanda199
上传日期:2022-06-26
资源大小:412k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.     Copyright 2001, Broadcom Corporation
  3.     All Rights Reserved.
  4.     This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
  5.     the contents of this file may not be disclosed to third parties, copied or
  6.     duplicated in any form, in whole or in part, without the prior written
  7.     permission of Broadcom Corporation.
  8. */
  9. /*
  10.  * Misc useful os-independent macros and functions.
  11.  *
  12.  * Copyright(c) 2001 Broadcom Corporation
  13.  * $Id: bcmutils.h,v 1.1 Broadcom SDK $
  14.  */
  15. #ifndef _bcmutils_h_
  16. #define _bcmutils_h_
  17. #ifndef MIN
  18. #define MIN(a, b) (((a)<(b))?(a):(b))
  19. #endif
  20. #ifndef MAX
  21. #define MAX(a, b) (((a)>(b))?(a):(b))
  22. #endif
  23. #define CEIL(x, y) (((x) + ((y)-1)) / (y))
  24. #define ROUNDUP(x, y) ((((ulong)(x)+((y)-1))/(y))*(y))
  25. #define ISALIGNED(a, x) (((uint)(a) & ((x)-1)) == 0)
  26. #define ISPOWEROF2(x) ((((x)-1)&(x))==0)
  27. #define OFFSETOF(type, member) ((uint) &((type *)0)->member)
  28. #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
  29. /* bit map related macros */
  30. #ifndef setbit
  31. #define NBBY 8 /* 8 bits per byte */
  32. #define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
  33. #define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
  34. #define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
  35. #define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
  36. #endif
  37. /*
  38.  * Spin at most 'us' microseconds while 'exp' is true.
  39.  * Caller should explicitly test 'exp' when this completes
  40.  * and take appropriate error action if 'exp' is still true.
  41.  */
  42. #define SPINWAIT(exp, us) { 
  43. uint countdown = (us) + 9; 
  44. while ((exp) && (countdown >= 10)) {
  45. OSL_DELAY(10); 
  46. countdown -= 10; 
  47. }
  48. /* generic osl packet queue */
  49. struct pktq {
  50. void *head;
  51. void *tail;
  52. uint  len;
  53. uint  maxlen; 
  54. };
  55. #define DEFAULT_QLEN 128
  56. #define pktq_len(q) ((q)->len)
  57. #define pktq_avail(q) ((q)->maxlen - (q)->len)
  58. #define pktq_head(q) ((q)->head)
  59. #define pktq_full(q) ((q)->len >= (q)->maxlen)
  60. /* crc defines */
  61. #define CRC8_INIT_VALUE  0xff /* Initial CRC8 checksum value */
  62. #define CRC8_GOOD_VALUE  0x9f /* Good final CRC8 checksum value */
  63. #define CRC16_INIT_VALUE 0xffff /* Initial CRC16 checksum value */
  64. #define CRC16_GOOD_VALUE 0xf0b8 /* Good final CRC16 checksum value */
  65. #define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
  66. #define CRC32_GOOD_VALUE 0xdebb20e3 /* Good final CRC32 checksum value */
  67. /* externs */
  68. extern uint bcm_atoi(char *s);
  69. extern ulong bcm_strtoul(char *cp, char **endp, uint base);
  70. extern void deadbeef(char *p, uint len);
  71. extern void prhex(char *msg, uchar *buf, uint len);
  72. extern void prpkt(char *msg, void *drv, void *p0);
  73. extern uchar *bcm_ether_ntoa(char *ea, char *buf);
  74. extern void bcm_ether_atoe(char *p, char *ea);
  75. extern int bcm_isprint(uchar c);
  76. extern uint8 crc8(uint8 *p, uint nbytes, uint8 crc);
  77. extern uint16 crc16(uint8 *p, uint nbytes, uint16 crc);
  78. extern uint32 crc32(uint8 *p, uint nbytes, uint32 crc);
  79. #ifdef BCMDBG
  80. extern void testcrc32(void);
  81. #endif
  82. extern uint8 *bcm_parse_tlvs(uint8 *buf, int buflen, uint key);
  83. extern void pktqinit(struct pktq *q, int maxlen);
  84. extern void pktenq(struct pktq *q, void *p, bool lifo);
  85. extern void *pktdeq(struct pktq *q);
  86. #endif /* _bcmutils_h_ */