⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hfctlpmc.c

📁 vxworks下跳频控制的驱动
💻 C
📖 第 1 页 / 共 5 页
字号:

   pHfctlDev->devBusy = 1;
   return((int)pHfctlDev);
}

/******************************************************************************
TITLE:   HFCtlClose
DESC:    routine to close a hop freq control PMC card device
PARAM:   pHfctlDev   - pointer to HFCTL_DEV device structure
RETURN:  OK          - close the device successfully
         ERROR       - close the device failed with error
******************************************************************************/
int HFCtlClose(HFCTL_DEV *pHfctlDev)
{
   if (pHfctlDev->devCreated == 0)
      {
      errnoSet(HFCTL_DRIVER_NOT_CREATED);
      return(ERROR);
      }

   if (!(pHfctlDev->devBusy))
      {
      errnoSet(HFCTL_DRIVER_NOT_IN_USE);
      return(ERROR);
      }

   pHfctlDev->devBusy = 0;

   /* reset the PCI card for next use */

   /* end of card reset */

   return(OK);
}

/******************************************************************************
TITLE:   HFCtlRead
DESC:    routine to read data from hop freq control PMC card
PARAM:   pHfctlDev   - pointer to HFCTL_DEV device structure
         pRevBuf     - pointer to receive buffer
         iNum        - bytes number to read, should be multiple of 4
RETURN:  iNum        - bytes number have been read
******************************************************************************/
int HFCtlRead(HFCTL_DEV *pHfctlDev, char *pRevBuf, int iNum)
{
   int i;
   int iTmpNum;
   register unsigned int *lbuffer = (unsigned int *)pRevBuf;
   register unsigned int *source = (unsigned int *)(pHfctlDev->boardDataSpace0);

   if (pHfctlDev->iWhichSapce == HFCTL_DATASPACE_0)
      {
      source = (unsigned int *)(pHfctlDev->boardDataSpace0);
      }
   else
      {
      source = (unsigned int *)(pHfctlDev->boardDataSpace1);
      }

   iTmpNum = iNum / 4;
   for(i = 0; i < iTmpNum; i++)
      {
         *lbuffer = *source;
         lbuffer++;
         source++;
      }
   return(iNum);
}

/******************************************************************************
TITLE:   HFCtlWrite
DESC:    routine to write data to hop freq control PMC card
PARAM:   pHfctlDev   - pointer to HFCTL_DEV device structure
         pSrcBuf     - pointer to source buffer
         iNum        - bytes number to write, should be multiple of 4
RETURN:  iNum        - bytes number have been written
******************************************************************************/
int HFCtlWrite(HFCTL_DEV *pHfctlDev, char *pSrcBuf, int iNum)
{
   int i;
   int iTmpNum;
   register unsigned int *lbuffer = (unsigned int *)pSrcBuf;
   register unsigned int *destination = (unsigned int *)(pHfctlDev->boardDataSpace0);

   if (pHfctlDev->iWhichSapce == HFCTL_DATASPACE_0)
      {
      destination = (unsigned int *)(pHfctlDev->boardDataSpace0);
      }
   else
      {
      destination = (unsigned int *)(pHfctlDev->boardDataSpace1);
      }

   iTmpNum = iNum / 4;
   for(i = 0; i < iTmpNum; i++)
      {
         *destination = *lbuffer;
         lbuffer++;
         destination++;
      }
   return(iNum);
}

/******************************************************************************
TITLE:   HFCtlIoctl
DESC:    Routine to configure and control hop freq control PMC card
PARAM:   pHfctlDev   - pointer to HFCTL_DEV device structure
         iFunCode    - code for the desired action
         iParam      - data supplied to or from routine
RETURN:  OK          - operation was successful
         ERROR       - operation failed
******************************************************************************/
int HFCtlIoctl (HFCTL_DEV *pHfctlDev, int iFunCode, int iParam)
{
   int      i;
   unsigned long ulTemp = 1;
   int      iTemp = 1;
   int      iTemp1 = 0;
   int      iResult;
   int      iLength;
   UINT32   uiResult;
   unsigned char ucResult;
   unsigned char ucTemp;
   HFCTL_RAM_BLOCK *pHfctlRamBlk;
   unsigned long *pSrcBuffer;
   unsigned long *pDestBuffer;
   unsigned long *pFlagAdrs;

   switch (iFunCode)
      {
      case HFCTL_GET_INT_STATUS:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_INTCSR_PCI));
         return(OK);

      case HFCTL_SET_INT_STATUS:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_INTCSR_PCI), iParam);
         return(OK);
/*   
      case HFCTL_GET_PCI_BASE_ADRS_2:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_PCI_CFG_REG_BAR2_PCI));
         return(OK);

      case HFCTL_SET_PCI_BASE_ADRS_2:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_PCI_CFG_REG_BAR2_PCI), iParam);
         return(OK);

      case HFCTL_GET_PCI_COMMAND:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_PCI_CFG_REG_PCI_CMD_PCI));
         uiResult = uiResult & 0xffff;
         *(UINT32*)iParam = uiResult;
         return(OK);

      case HFCTL_SET_PCI_COMMAND:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_PCI_CFG_REG_PCI_CMD_PCI));
         uiResult = (uiResult & UPPER16) | (iParam & LOWER16);
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_PCI_CFG_REG_PCI_CMD_PCI), uiResult);
         return(OK);
*/     /* comment by chenxuhao at 2004-11-28 */

      case HFCTL_GET_RT_CNTRL:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_CNTRL_PCI));
         return(OK);

      case HFCTL_SET_RT_CNTRL:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_CNTRL_PCI), iParam);
         return(OK);

      case HFCTL_GET_RT_DEVID:
#if 0
         logMsg("HFCtlIoctl: HFCTL_GET_RT_DEVID = 0x%.8x\n", 
                (pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_PCIHIDR_PCI), 0, 0, 0, 0, 0);
#endif /* if 0 */
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_PCIHIDR_PCI));
#if 0
         logMsg("HFCtlIoctl: HFCTL_GET_RT_DEVID uiResult = 0x%.8x\n", uiResult, 0, 0, 0, 0, 0);
#endif /* if 0 */
         uiResult = (uiResult & UPPER16) >> 16;
#if 0
         logMsg("HFCtlIoctl: HFCTL_GET_RT_DEVID iParam = 0x%.8x\n", iParam, 0, 0, 0, 0, 0);
#endif /* if 0 */
         *(UINT32*)iParam = uiResult;
         return(OK);

      case HFCTL_GET_RT_VENID:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_PCIHIDR_PCI));
         uiResult = uiResult & LOWER16;
         *(UINT32*)iParam = uiResult;
         return(OK);

      case HFCTL_GET_RT_REVID:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_PCIHREV_PCI));
         uiResult = uiResult & BYTE0_IN_WORD;
         *(UINT32*)iParam = uiResult;
         return(OK);

      case HFCTL_GET_MAILBOX0:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX0_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX0:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX0_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX1:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX1_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX1:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX1_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX2:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX2_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX2:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX2_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX3:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX3_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX3:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX3_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX4:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX4_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX4:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX4_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX5:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX5_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX5:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX5_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX6:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX6_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX6:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX6_PCI), iParam);
         return(OK);

      case HFCTL_GET_MAILBOX7:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX7_PCI));
         return(OK);

      case HFCTL_SET_MAILBOX7:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_MBOX7_PCI), iParam);
         return(OK);

      case HFCTL_GET_LAS0RANGE:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LAS0RR_PCI));
         return(OK);

      case HFCTL_SET_LAS0RANGE:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LAS0RR_PCI), iParam);
         return(OK);

      case HFCTL_GET_LAS0BASEADDR:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LAS0BA_PCI));
         return(OK);

      case HFCTL_SET_LAS0BASEADDR:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LAS0BA_PCI), iParam);
         return(OK);

      case HFCTL_GET_MODE_ARBR:
         *(UINT32*)iParam = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_MARBR_PCI));
         return(OK);

      case HFCTL_SET_MODE_ARBR:
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_MARBR_PCI), iParam);
         return(OK);

      case HFCTL_GET_BIG_ENDIAN:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
         uiResult = uiResult & BYTE0_IN_WORD;
         *(unsigned char *)iParam = uiResult;
         return(OK);

      case HFCTL_SET_BIG_ENDIAN:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
         uiResult = (uiResult & BYTE123_IN_WORD) | (iParam & BYTE0_IN_WORD);
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI), uiResult);
         return(OK);

      case HFCTL_GET_LOCAL_MISC1:
#if 0
         ucResult = pciReadByte((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LMISC1_PCI));
         logMsg("HFCtlIoctl: HFCTL_GET_LOCAL_MISC1. ucResult = 0x%.8x\n", ucResult, 0, 0, 0, 0, 0);
         *(unsigned char *)iParam = ucResult;
#endif /* if 0 */
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
#if 0
         logMsg("HFCtlIoctl: HFCTL_GET_LOCAL_MISC1. uiResult = 0x%.8x\n", uiResult, 0, 0, 0, 0, 0);
#endif /* if 0 */
         ucResult = (unsigned char)((uiResult & BYTE1_IN_WORD) >> 8);
#if 0
         logMsg("HFCtlIoctl: HFCTL_GET_LOCAL_MISC1. ucResult = 0x%.2x\n", ucResult, 0, 0, 0, 0, 0);
#endif /* if 0 */
         *(unsigned char *)iParam = ucResult;
         return(OK);

      case HFCTL_SET_LOCAL_MISC1:
#if 0
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. iParam = 0x%.8x\n", iParam, 0, 0, 0, 0, 0);
         ucTemp = (unsigned char)(iParam & 0xff);
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. ucTemp = 0x%.8x\n", ucTemp, 0, 0, 0, 0, 0);
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. pciAddr = 0x%.8x\n", 
                (pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LMISC1_PCI), 0, 0, 0, 0, 0);
         pciWriteByte((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_LMISC1_PCI), ucTemp);
#endif /* if 0 */
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
#if 0
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. uiResult = 0x%.8x\n", uiResult, 0, 0, 0, 0, 0);
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. iParam = 0x%.8x\n", iParam, 0, 0, 0, 0, 0);
#endif /* if 0 */
         uiResult = (uiResult & (~BYTE1_IN_WORD)) | ((iParam & BYTE0_IN_WORD) << 8);
#if 0
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. (~BYTE1_IN_WORD) = 0x%.8x\n", (~BYTE1_IN_WORD), 0, 0, 0, 0, 0);
         logMsg("HFCtlIoctl: HFCTL_SET_LOCAL_MISC1. uiResult = 0x%.8x\n", uiResult, 0, 0, 0, 0, 0);
#endif /* if 0 */
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI), uiResult);
         return(OK);

      case HFCTL_GET_PROT_AREA:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
         ucResult = (unsigned char)((uiResult & BYTE2_IN_WORD) >> 16);
         *(unsigned char *)iParam = ucResult;
         return(OK);

      case HFCTL_SET_PROT_AREA:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));
         uiResult = (uiResult & (~BYTE2_IN_WORD)) | ((iParam & BYTE0_IN_WORD) << 16);
         pciWriteLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI), uiResult);
         return(OK);

      case HFCTL_GET_LOCAL_MISC2:
         uiResult = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_LOCAL_CFG_REG_BIGEND_PCI));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -