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

VxWorks

开发平台:

C/C++

  1. /*
  2.     Copyright 2001, Broadcom Corporation
  3.     All Rights Reserved.
  4.     
  5.     This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
  6.     the contents of this file may not be disclosed to third parties, copied or
  7.     duplicated in any form, in whole or in part, without the prior written
  8.     permission of Broadcom Corporation.
  9. */
  10. /*
  11.  * vxWorks 5.x OS Independent Layer
  12.  *
  13.  * Copyright(c) 2001 Broadcom Corp.
  14.  * $Id: vx_osl.h,v 1.1 Broadcom SDK $
  15.  */
  16. #ifndef _vx_osl_h_
  17. #define _vx_osl_h_
  18. /* vxworks header files necessary for below */
  19. #include <end.h>
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include <stdlib.h>
  23. #include <hnbutypedefs.h>
  24. #ifdef __mips__
  25. #define OSL_UNCACHED(va) (((uint32)(va) & 0x1fffffff) | 0xa0000000)
  26. #define IS_KSEG2(_x) (((_x) & 0xC0000000) == 0xC0000000)
  27. #else
  28. #define IS_KSEG2(_x) 0
  29. #define OSL_UNCACHED(va) (va)
  30. #endif
  31. /* map/unmap physical to virtual */
  32. /*  - assume a 1:1 mapping if KSEG2 addresses are used */
  33. #define REG_MAP(pa, size) (IS_KSEG2(pa) ? (pa) : OSL_UNCACHED(pa))
  34. #define REG_UNMAP(va) /* nop */
  35. #define BUSPROBE(val, addr)  if (vxMemProbe((char*)addr, VX_READ, sizeof (uint32), (char*)&val) != OK) val = 0;
  36. extern int vxMemProbe(char *adrs, int mode, int length, char *pVal);
  37. #ifdef BCMDBG
  38. #undef ASSERT
  39. #define ASSERT(exp)     do {if (exp) ; else osl_assert(#exp, __FILE__, __LINE__);} while (0)
  40. extern void osl_assert(char *exp, char *file, int line);
  41. #else
  42. #define ASSERT(exp)
  43. #endif
  44. /* register access macros */
  45. #ifdef MSI
  46. #ifdef IL_BIGENDIAN
  47. #define R_REG(r) ((sizeof *(r) == sizeof (uint32))? 
  48. ((uint32)( *(&((volatile uint16*)(r))[0]) | (*(&((volatile uint16*)(r))[1]) << 16))) 
  49. : *(r))
  50. #define W_REG(r, v) ((sizeof *(r) == sizeof (uint32))? 
  51. (*(&((volatile uint16*)r)[0]) = ((v) & 0xffff), *(&((volatile uint16*)r)[1]) = (((v) >> 16) & 0xffff)) 
  52. : (*(r) = (v)))
  53. #else /* LITTLE_ENDIAN */
  54. #define R_REG(r) ((sizeof *(r) == sizeof (uint32))? 
  55. ((uint32)((*(&((volatile uint16*)(r))[0]) << 16) | *(&((volatile uint16*)(r))[1]))) 
  56. : *(r))
  57. #define W_REG(r, v) ((sizeof *(r) == sizeof (uint32))? 
  58. (*(&((volatile uint16*)r)[1]) = ((v) & 0xffff), *(&((volatile uint16*)r)[0]) = (((v) >> 16) & 0xffff)) 
  59. : (*(r) = (v)))
  60. #endif /* BIG_ENDIAN */
  61. #else /* PCI or SB */
  62. #define wreg32(r,v) (*(volatile uint32 *)(r) = (v))
  63. #define rreg32(r) (*(volatile uint32 *)(r))
  64. #ifdef IL_BIGENDIAN
  65. #define wreg8(r,v) (*(volatile uint8 *)((uint32)r^3) = (v))
  66. #define rreg8(r) (*(volatile uint8 *)((uint32)r^3))
  67. #define wreg16(r,v) (*(volatile uint16 *)((uint32)r^2) = (v))
  68. #define rreg16(r) (*(volatile uint16 *)((uint32)r^2))
  69. #else
  70. #define wreg8(r,v) (*(volatile uint8 *)(r) = (v))
  71. #define rreg8(r) (*(volatile uint8 *)(r))
  72. #define wreg16(r,v) (*(volatile uint16 *)(r) = (v))
  73. #define rreg16(r) (*(volatile uint16 *)(r))
  74. #endif
  75. /* register access macros */
  76. #define R_REG(r) ((sizeof *(r) == sizeof (uint32))? rreg32(r): rreg16(r))
  77. #define W_REG(r,v) ((sizeof *(r) == sizeof (uint32))? wreg32(r,(uint32)v): wreg16(r,(uint16)v))
  78. #endif /* MSI */
  79. #define AND_REG(r, v) W_REG((r), R_REG(r) & (v))
  80. #define OR_REG(r, v) W_REG((r), R_REG(r) | (v))
  81. /* Host/Bus architecture specific swap. Noop for little endian systems, possible swap on big endian */
  82. #define BUS_SWAP32(v) (v)
  83. /* shared memory access macros */
  84. #define R_SM(a) *(a)
  85. #define W_SM(a, v) (*(a) = (v))
  86. #define BZERO_SM(a, len) bzero(a, len)
  87. #ifdef MALLOC
  88. #undef MALLOC
  89. #endif 
  90. #define MALLOC(size) malloc(size)
  91. #define MFREE(addr, size) free(addr)
  92. #define DMA_ALLOC_CONSISTENT(dev, size, pap) osl_dma_alloc_consistent(dev, size, pap)
  93. #define DMA_FREE_CONSISTENT(dev, va, size, pa) osl_dma_free_consistent(dev, size, (void*)va, pa)
  94. extern void *osl_dma_alloc_consistent(void *dev, uint size, void **pap);
  95. extern void osl_dma_free_consistent(void *dev, uint size, void *va, void *pa);
  96. #define DMA_TX 0
  97. #define DMA_RX 1
  98. #define DMA_MAP(dev, va, size, direction, p) osl_dma_map(dev, (void*)va, size, direction)
  99. #define DMA_UNMAP(dev, pa, size, direction, p) /* nop */
  100. extern void *osl_dma_map(void *dev, void *va, uint size, uint direction);
  101. #define OSL_DELAY(us) osl_delay(us)
  102. extern void osl_delay(uint us);
  103. typedef struct pciinfo {
  104.     uint bus; /* pci bus */
  105.     uint dev; /* pci device */
  106.     uint func; /* pci function */
  107. } pciinfo_t;
  108. /* packet primitives */
  109. #define PKTGET(drv, len, send) osl_pktget(drv, len, send)
  110. #define PKTFREE(drv, m, send) osl_pktfree(drv, (M_BLK_ID) m, send)
  111. #define PKTDATA(drv, m) (((M_BLK_ID)m)->mBlkHdr.mData)
  112. #define PKTLEN(drv, m) (((M_BLK_ID)m)->mBlkHdr.mLen)
  113. #define PKTNEXT(drv, m) (((M_BLK_ID)m)->mBlkHdr.mNext)
  114. #define PKTSETLEN(drv, m, len) (((M_BLK_ID)m)->mBlkHdr.mLen = (len))
  115. #define PKTPUSH(drv, m, nbytes) osl_pktpush(drv, (M_BLK_ID)m, nbytes)
  116. #define PKTPULL(drv, m, nbytes) osl_pktpull(drv, (M_BLK_ID)m, nbytes)
  117. #define PKTDUP(drv, m) osl_pktdup(drv, m)
  118. #define PKTCOOKIE(m) ((M_BLK_ID)((M_BLK_ID)m)->mBlkPktHdr.len)
  119. #define PKTSETCOOKIE(m, n) (((M_BLK_ID)m)->mBlkPktHdr.len = (int)n)
  120. #define PKTLINK(m) (((M_BLK_ID)m)->mBlkHdr.mNextPkt)
  121. #define PKTSETLINK(m, n) (((M_BLK_ID)m)->mBlkHdr.mNextPkt = (M_BLK_ID)n)
  122. extern void *osl_pktget(void *drv, uint len, bool send);
  123. extern void osl_pktfree(void *drv, M_BLK_ID m, bool send);
  124. extern void *osl_pktdup(void *drv, void *p);
  125. extern uchar *osl_pktpush(void *drv, M_BLK_ID m, uint nbytes);
  126. extern uchar *osl_pktpull(void *drv, M_BLK_ID m, uint nbytes);
  127. extern uint32 osl_pci_read_config(pciinfo_t *pciinfo, uint offset, uint size);
  128. extern void osl_pci_write_config(pciinfo_t *pciinfo, uint offset, uint size, uint val);
  129. extern void osl_pcmcia_read_attr(void *osh, uint offset, void *buf, int size);
  130. extern void osl_pcmcia_write_attr(void *osh, uint offset, void *buf, int size);
  131. #define OSL_PCI_READ_CONFIG(loc, offset, size)    osl_pci_read_config(loc, offset, size) 
  132. #define OSL_PCI_WRITE_CONFIG(loc, offset, size, val)   osl_pci_write_config(loc, offset, size, val) 
  133. #define OSL_PCMCIA_READ_ATTR(osh, offset, buf, size) osl_pcmcia_read_attr((osh), (offset), (buf), (size))
  134. #define OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size) osl_pcmcia_write_attr((osh), (offset), (buf), (size))
  135. /* vx def's used by vx_osl.c */
  136. #define VXCLSIZE 2044
  137. #define M_HEADROOM(m) ((m)->mBlkHdr.mData - (m)->pClBlk->clNode.pClBuf)
  138. #endif /* _vx_osl_h_ */