vxmIfLib.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* vxmIfLib.c - interface library to VxM  */
  2. /* Copyright 1984-1992 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,23aug92,jcf  removed VXM_IF_OPS typedef.
  8. 01a,01aug92,del  created.
  9. */
  10. /*
  11. DESCRIPTION
  12. ------------
  13. This is the interface library for VxE and VxM.
  14. */
  15. #include "vxWorks.h"
  16. #include "private/vxmIfLibP.h"
  17. /* globals */
  18. VXM_IF_OPS vxmIfOps;
  19. VXM_IF_ANCHOR * pVxmIfAnchor;
  20. BOOL vxmIfLibInstalled;
  21. VXM_IF_OPS * pVxmIfOps = &vxmIfOps;
  22. /******************************************************************************
  23. *
  24. * vxmIfInit - initialize the interface
  25. */  
  26. STATUS vxmIfInit 
  27.     (
  28.     VXM_IF_ANCHOR * pAnchor
  29.     )
  30.     {
  31.     FUNCPTR getFunc;
  32.     if (vxmIfLibInstalled)
  33. return (OK);
  34.     pVxmIfAnchor = pAnchor;
  35.     if (pVxmIfAnchor->ifMagic != VXM_IF_MAGIC)
  36. return (ERROR);
  37.     /* the the interface access function from the anchor */
  38.     getFunc = pVxmIfAnchor->ifGetFunc;
  39.     /* initialize the interface operations using the access function */
  40.     vxmIfOps.vxmTblGet    = getFunc;
  41.     vxmIfOps.vxmIntVecSet  = (FUNCPTR) (*getFunc) (VXM_IF_INT_VEC_SET_FUNC);
  42.     vxmIfOps.vxmBufRead    = (FUNCPTR) (*getFunc) (VXM_IF_BUF_RD_FUNC);
  43.     vxmIfOps.vxmBufWrite   = (FUNCPTR) (*getFunc) (VXM_IF_BUF_WRT_FUNC);
  44.     vxmIfOps.vxmWrtBufFlush =(FUNCPTR) (*getFunc) (VXM_IF_WRTBUF_FLUSH_FUNC);
  45.     vxmIfOps.vxmHostQuery  = (FUNCPTR) (*getFunc) (VXM_IF_QUERY_FUNC);
  46.     vxmIfOps.vxmClbkAdd    = (FUNCPTR) (*getFunc) (VXM_IF_CALLBACK_ADD_FUNC);
  47.     vxmIfOps.vxmClbkState  = (FUNCPTR) (*getFunc) (VXM_IF_CALLBACK_STATE_FUNC);
  48.     vxmIfOps.vxmClbkQuery  = (FUNCPTR) (*getFunc) (VXM_IF_CALLBACK_QUERY_FUNC);
  49.     vxmIfLibInstalled = TRUE;
  50.     return (OK);
  51.     }
  52. /******************************************************************************
  53. *
  54. * vxmIfInstalled - check for the presence of the ROM monitor.
  55. */  
  56. BOOL vxmIfInstalled (void)
  57.     {
  58.     return (vxmIfLibInstalled);
  59.     }
  60. /******************************************************************************
  61. *
  62. * vxmIfVecSet - set an interrupt vector via the ROM monitor.
  63. */  
  64. STATUS vxmIfVecSet 
  65.     (
  66.     FUNCPTR *  vector,
  67.     FUNCPTR function
  68.     )
  69.     {
  70.     if (pVxmIfOps->vxmIntVecSet == NULL)
  71. return (ERROR);
  72.     return ((* pVxmIfOps->vxmIntVecSet) (vector, function)); 
  73.     }
  74. /******************************************************************************
  75. *
  76. * vxmIfVecGet - get an interrupt vector via the ROM monitor.
  77. */  
  78. FUNCPTR vxmIfVecGet 
  79.     (
  80.     FUNCPTR *  vector
  81.     )
  82.     {
  83.     if (pVxmIfOps->vxmIntVecGet == NULL)
  84. return (NULL);
  85.     return ((FUNCPTR)(* pVxmIfOps->vxmIntVecGet) (vector)); 
  86.     }
  87. /******************************************************************************
  88. *
  89. * vxmIfHostQuery - query the host via VxM for input data.
  90. */   
  91. BOOL vxmIfHostQuery ()
  92.     {
  93.     if (pVxmIfOps->vxmHostQuery == NULL)
  94. return (FALSE);
  95.     return ((* pVxmIfOps->vxmHostQuery) ());
  96.     }
  97. /******************************************************************************
  98. *
  99. * vxmIfWrtBufFlush - flush the ROM monitor write buffer.
  100. */  
  101. void vxmIfWrtBufFlush ()
  102.     {
  103.     if (pVxmIfOps->vxmWrtBufFlush != NULL)
  104. (* pVxmIfOps->vxmWrtBufFlush) ();
  105.     }
  106. /******************************************************************************
  107. *
  108. * vxmIfBufRead - read a buffer of data from the ROM monitor.
  109. */  
  110. int vxmIfBufRead
  111.     (
  112.     char * pBuf,
  113.     int nBytes
  114.     )
  115.     {
  116.     if (pVxmIfOps->vxmBufRead == NULL)
  117. return (0);
  118.     return ((* pVxmIfOps->vxmBufRead) (pBuf, nBytes));
  119.     }
  120. /******************************************************************************
  121. *
  122. * vxmIfBufWrite - write a buffer of data to the ROM monitor.
  123. */  
  124. int vxmIfBufWrite
  125.     (
  126.     char * pBuf,
  127.     int nBytes
  128.     )
  129.     {
  130.     if (pVxmIfOps->vxmBufWrite == NULL)
  131. return (0);
  132.     return ((* pVxmIfOps->vxmBufWrite) (pBuf, nBytes));
  133.     }
  134. /******************************************************************************
  135. *
  136. * vxmIfCallbackAdd - add a callback to the interface.
  137. */  
  138. STATUS vxmIfCallbackAdd
  139.     (
  140.     int funcNo, /* callback function number */
  141.     FUNCPTR  func, /* callback function */
  142.     UINT32 arg, /* required argument to pass */ 
  143.     UINT32 maxargs, /* max. number of optional args */
  144.     UINT32 state /* initial state of callback */
  145.     )
  146.     {
  147.     if (pVxmIfOps->vxmClbkAdd == NULL)
  148. return (ERROR);
  149.     return ((* pVxmIfOps->vxmClbkAdd) (funcNo, func, arg, maxargs, state));
  150.     }
  151. /******************************************************************************
  152. *
  153. * vxmIfCallbackReady - set the state of the given callback to ready.
  154. *
  155. */  
  156. STATUS vxmIfCallbackReady 
  157.     (
  158.     int funcNo /* number of callback */
  159.     )
  160.     {
  161.     if (pVxmIfOps->vxmClbkState == NULL)
  162. return (ERROR);
  163.     return ((* pVxmIfOps->vxmClbkState) (funcNo));
  164.     }
  165. /******************************************************************************
  166. *
  167. * vxmIfCallbackQuery - query the host for action on the given callback.
  168. */  
  169. STATUS vxmIfCallbackQuery
  170.     (
  171.     int funcNo /* callback to query */
  172.     )
  173.     {
  174.     if (pVxmIfOps->vxmClbkQuery == NULL)
  175. return (ERROR);
  176.     return ((* pVxmIfOps->vxmClbkQuery) (funcNo));
  177.     }