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

VxWorks

开发平台:

C/C++

  1. /* comKernelSupport.c - COM library (VxDCOM) kernel level support functions */
  2. /* Copyright (c) 2000 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,03jul01,nel  set correct name of comSysSetComLocal.
  7. 01g,27jun01,dbs  fix for T2 build
  8. 01f,22jun01,nel  Add extra headers for WIND_TCB def.
  9. 01e,22jun01,dbs  move some includes into here
  10. 01d,21jun01,nel  Rename interface to conform to new naming standard in COM.
  11. 01c,10apr00,nel  Fix for Solaris and Linux Build.
  12. 01b,05arp00,nel  MAC address detection.
  13. 01a,22mar00,nel  created
  14. */
  15. /*
  16. DESCRIPTION
  17. This library provides low level kernel support for VxDCOM which must run in
  18. an application domain and therefore can't access kernel functions directly.
  19. .NOMANUAL
  20. */
  21. #include <sys/ioctl.h>
  22. #include <netinet/if_ether.h>
  23. #include <stdlib.h>
  24. #include <taskLib.h>
  25. /**************************************************************************
  26. *
  27. * comSysAddressGet - returns the MAC address for the board.
  28. *
  29. * This function returns the MAC address for the board.
  30. *
  31. * RETURNS: 0 if MAC address retrieved, -1 otherwise.
  32. * .NOMANUAL
  33. */
  34. int comSysAddressGet
  35.     (
  36.     unsigned char *  addr /* will hold MAC address on exit */
  37.     )
  38.     {
  39.     FAST struct ifnet       *ifp;
  40.     for (ifp = ifnet;  ifp!= NULL;  ifp = ifp->if_next)
  41. {
  42.     /* if the interface is not LOOPBACK or SLIP, return the link
  43.      * level address.
  44.      */
  45.     if (!(ifp->if_flags & IFF_POINTOPOINT) &&
  46. !(ifp->if_flags & IFF_LOOPBACK))
  47.     {
  48.     memcpy(addr, ((struct arpcom *)ifp)->ac_enaddr, 6);
  49.     return 0;
  50.     }
  51. }
  52.     return -1;
  53.     }
  54. unsigned long comSysLocalGet ()
  55.     {
  56.     WIND_TCB* pTcb = taskTcb (taskIdSelf ());
  57. #if VXDCOM_PLATFORM_VXWORKS == 5
  58.     /* VxWorks 5.x */
  59.     return (unsigned long) pTcb->pComLocal;
  60. #else
  61.     /* VxWorks AE 1.x */
  62.     return (unsigned long) pTcb->pLcb->pComLocal;
  63. #endif
  64.     }
  65. void comSysLocalSet
  66.     (
  67.     unsigned long nextTaskId /* */
  68.     )
  69.     {
  70.     WIND_TCB* pTcb = taskTcb (taskIdSelf ());
  71. #if VXDCOM_PLATFORM_VXWORKS == 5
  72.     /* VxWorks 5.x */
  73.     pTcb->pComLocal = (void*) nextTaskId;
  74. #else
  75.     /* VxWorks AE 1.x */
  76.     pTcb->pLcb->pComLocal = (void*) nextTaskId;
  77. #endif
  78.     }