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

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 END OS Layer
  12.  *
  13.  * Copyright(c) 2001 Broadcom Corp.
  14.  * $Id: vx_osl.c,v 1.1 Broadcom SDK $
  15.  */
  16. #include <hnbutypedefs.h>
  17. #include <vx_osl.h>
  18. #include <cacheLib.h>
  19. #include <bcmutils.h>
  20. #ifndef MSI
  21. #include <drv/pci/pciConfigLib.h>
  22. #endif
  23. #define PKTRSV 32 /* #bytes to reserve at the front of each cluster buffer */
  24. #define SAMEPAGE(x, y) (((ulong)(x) & ~4095) == ((ulong)(y) & ~4095))
  25. void*
  26. osl_pktget(void *drv, uint len, bool send)
  27. {
  28. END_OBJ *end;
  29. M_BLK_ID m;
  30. /* size requested should fit in our cluster buffer */
  31. ASSERT(len < (VXCLSIZE - sizeof (CL_BUF) - PKTRSV));
  32. /* drv is a pointer to an END_OBJ in disguise */
  33. end = (END_OBJ*)drv;
  34. /* older chips cannot dma address buffers which cross 4Kbyte boundaries */
  35. if ((m = netTupleGet(end->pNetPool, (len + PKTRSV), M_DONTWAIT, MT_DATA, FALSE))) {
  36. ASSERT(SAMEPAGE(m->mBlkHdr.mData, (m->mBlkHdr.mData + len - 1))); 
  37. /* reserve a few bytes */
  38. m->mBlkHdr.mData += PKTRSV;
  39. m->mBlkHdr.mLen = len;
  40. /* ensure the cookie field is cleared */ 
  41. PKTSETCOOKIE(m, NULL);
  42. }
  43. return ((void*) m);
  44. }
  45. void
  46. osl_pktfree(void *drv, M_BLK_ID m, bool send)
  47. {
  48. netMblkClChainFree(m);
  49. }
  50. uchar*
  51. osl_pktpush(void *drv, M_BLK_ID m, uint nbytes)
  52. {
  53. ASSERT(M_HEADROOM(m) >= (int)nbytes);
  54. m->mBlkHdr.mData -= nbytes;
  55. m->mBlkHdr.mLen += nbytes;
  56. return (m->mBlkHdr.mData);
  57. }
  58. uchar*
  59. osl_pktpull(void *drv, M_BLK_ID m, uint nbytes)
  60. {
  61. ASSERT((int)nbytes <= m->mBlkHdr.mLen);
  62. m->mBlkHdr.mData += nbytes;
  63. m->mBlkHdr.mLen -= nbytes;
  64. return (m->mBlkHdr.mData);
  65. }
  66. void*
  67. osl_pktdup(void *drv, void *p)
  68. {
  69. END_OBJ *end;
  70. M_BLK_ID m;
  71. /* drv is a pointer to an END_OBJ in disguise */
  72. end = (END_OBJ*)drv;
  73. m = netMblkChainDup(end->pNetPool, (M_BLK_ID)p, 0, M_COPYALL, M_DONTWAIT);
  74. return (m);
  75. }
  76. void
  77. osl_assert(char *exp, char *file, int line)
  78. {
  79. extern void __assert(char *msg);
  80. char tempbuf[255];
  81. sprintf(tempbuf, "assertion "%s" failed: file "%s", line %dn", exp, file, line);
  82. __assert(tempbuf);
  83. }
  84. void*
  85. osl_dma_alloc_consistent(void *dev, uint size, void **pap)
  86. {
  87. void *va;
  88. va = cacheDmaMalloc(size);
  89. *pap = (void *)CACHE_DMA_VIRT_TO_PHYS(va);
  90. return (va);
  91. }
  92. void
  93. osl_dma_free_consistent(void *dev, uint size, void *va, void *pa)
  94. {
  95. cacheDmaFree(va);
  96. }
  97. void*
  98. osl_dma_map(void *dev, void *va, uint size, uint direction)
  99. {
  100. if (direction == DMA_TX)
  101. cacheFlush(DATA_CACHE, va, size);
  102. else
  103. cacheInvalidate(DATA_CACHE, va, size);
  104. return ((void*)CACHE_DMA_VIRT_TO_PHYS(va));
  105. }
  106. #define DELAY_PER_US 20
  107. void
  108. osl_delay(uint us)
  109. {
  110. volatile uint n;
  111. n = us * DELAY_PER_US;
  112. while (n--)
  113. ;
  114. }
  115. uint32 
  116. osl_pci_read_config(pciinfo_t *pciinfo, uint offset, uint size)
  117. {
  118.     uint32 val;
  119.     ASSERT(size == 4);
  120. pciConfigInLong(pciinfo->bus, pciinfo->dev, pciinfo->func, offset, &val);
  121.     return(val);
  122. }
  123. void 
  124. osl_pci_write_config(pciinfo_t *pciinfo, uint offset, uint size, uint val)
  125. {
  126.     ASSERT(size == 4);
  127. pciConfigOutLong(pciinfo->bus, pciinfo->dev, pciinfo->func, offset, val);
  128. }
  129. void
  130. osl_pcmcia_read_attr(void *shared, uint offset, void *buf, int size)
  131. {
  132. int i;
  133. for (i = 0; i < size; i++)
  134. ((uint8*)buf)[i] = rreg8(((uint8*)shared + (offset + i) * 2));
  135. }
  136. void
  137. osl_pcmcia_write_attr(void *shared, uint offset, void *buf, int size)
  138. {
  139. int i;
  140. for (i = 0; i < size; i++)
  141. wreg8(((uint8*)shared + (offset + i) * 2), ((uint8*)buf)[i]);
  142. }