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

📄 hfctlpmc.c

📁 vxworks下跳频控制的驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
#if 0
         logMsg("HFCtlIoctl.HFCTL_WRITE_FIFO: pDestBuffer = 0x%8x.\n", (int)pDestBuffer, 0, 0, 0, 0, 0); 
#endif /* if 0 */

         for(i = 0; i < pHfctlRamBlk->count; i++)
            {
            *pDestBuffer = *pSrcBuffer++;
            }

         return(OK);
         
      case HFCTL_INIT_SEND_FIFO: /* Init TX FIFO */
         pFlagAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_SEND_FIFO_INIT_FLAG_BASE_ADRS);
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_FIFO_OFFSET);
         pSrcBuffer = (unsigned long *)&iTemp;

         *pFlagAdrs = 1;
         
         for(i = 0; i < 5; i++)
            {
            *pDestBuffer = *pSrcBuffer;
            }

         *pFlagAdrs = 0;

         *pDestBuffer = *pSrcBuffer;

         return(OK);

      case HFCTL_READ_RX_FIFO:   /* read RX FIFO */
         pHfctlRamBlk = (HFCTL_RAM_BLOCK *)(iParam);
         pSrcBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_RX_FIFO_OFFSET);
         pDestBuffer = (unsigned long *)(pHfctlRamBlk->buffer);

         for(i = 0; i < pHfctlRamBlk->count; i++)
            {
            *pDestBuffer++ = *pSrcBuffer;
            }

         return(OK);
         
      case HFCTL_WRITE_RX_FIFO:  /* write RX FIFO */
#if 0
         logMsg("HFCtlIoctl.HFCTL_WRITE_RX_FIFO: enter.\n", 0, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pHfctlRamBlk = (HFCTL_RAM_BLOCK *)(iParam);
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_RX_FIFO_OFFSET);
         pSrcBuffer = (unsigned long *)(pHfctlRamBlk->buffer);
#if 0
         logMsg("HFCtlIoctl.HFCTL_WRITE_RX_FIFO: pDestBuffer = 0x%8x.\n", (int)pDestBuffer, 0, 0, 0, 0, 0); 
#endif /* if 0 */

         for(i = 0; i < pHfctlRamBlk->count; i++)
            {
            *pDestBuffer = *pSrcBuffer++;
            }

         return(OK);
         
      case HFCTL_INIT_RX_FIFO: /* Init RX FIFO */
         pFlagAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_RX_FIFO_INIT_FLAG_BASE_ADRS);
         pSrcBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_RX_FIFO_OFFSET);

         *pFlagAdrs = 1;
         
         for(i = 0; i < 5; i++)
            {
            iTemp1 = *pSrcBuffer;
            }

         *pFlagAdrs = 0;

         return(OK);

      case HFCTL_READ_DEHFDATA_FIFO:   /* read DeHFData FIFO */
         pHfctlRamBlk = (HFCTL_RAM_BLOCK *)(iParam);
         pSrcBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEHFDATA_FIFO_OFFSET);
         pDestBuffer = (unsigned long *)(pHfctlRamBlk->buffer);

         for(i = 0; i < pHfctlRamBlk->count; i++)
            {
            *pDestBuffer++ = *pSrcBuffer;
            }

         return(OK);
         
      case HFCTL_WRITE_DEHFDATA_FIFO:  /* write DeHFData FIFO */
#if 0
         logMsg("HFCtlIoctl.HFCTL_WRITE_DEHFDATA_FIFO: enter.\n", 0, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pHfctlRamBlk = (HFCTL_RAM_BLOCK *)(iParam);
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEHFDATA_FIFO_OFFSET);
         pSrcBuffer = (unsigned long *)(pHfctlRamBlk->buffer);
#if 0
         logMsg("HFCtlIoctl.HFCTL_WRITE_DEHFDATA_FIFO: pDestBuffer = 0x%8x.\n", (int)pDestBuffer, 0, 0, 0, 0, 0); 
#endif /* if 0 */

         for(i = 0; i < pHfctlRamBlk->count; i++)
            {
            *pDestBuffer = *pSrcBuffer++;
            }

         return(OK);
         
      case HFCTL_INIT_DEHFDATA_FIFO: /* Init DeHFData FIFO */
         pFlagAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_FIFO_INIT_FLAG_BASE_ADRS);
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEHFDATA_FIFO_OFFSET);
         pSrcBuffer = (unsigned long *)&iTemp;

         *pFlagAdrs = 1;
         
         for(i = 0; i < 5; i++)
            {
            *pDestBuffer = *pSrcBuffer;
            }

         *pFlagAdrs = 0;

         *pDestBuffer = *pSrcBuffer;

         return(OK);
         
      case HFCTL_ENABLE_DEHFDATA_FIFO_OUTPUT: /* Enable DeHFData FIFO Output */
         pFlagAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_FIFO_RD_EN_FLAG_BASE_ADRS);
         *pFlagAdrs = 1;

         return(OK);
         
      case HFCTL_DISABLE_DEHFDATA_FIFO_OUTPUT: /* Disable DeHFData FIFO Output */
         pFlagAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_FIFO_RD_EN_FLAG_BASE_ADRS);
         *pFlagAdrs = 0;

         return(OK);
         
      case HFCTL_WAIT_RXFIFO_DATA:
#if 0
         logMsg("HFCtlIoctl.HFCTL_WAIT_RXFIFO_DATA: Enter.\n", 0, 0, 0, 0, 0, 0); 
         logMsg("HFCtlIoctl.HFCTL_WAIT_RXFIFO_DATA: iParam = %d.\n", iParam, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         iResult = semTake(pHfctlDev->semRxFifoRdy, iParam);
#if 0
         if (iResult == ERROR)
            {
            logMsg("HFCtlIoctl.HFCTL_WAIT_LOCAL_DATA: semTake() ERROR.\n", 0, 0, 0, 0, 0, 0); 
            }
#endif /* if 0 */
         
         return(iResult);

      case HFCTL_QUERY_DEHF_DATA_RDY_FLAG:
#if 0
         logMsg("HFCtlIoctl.HFCTL_QUERY_DEHF_DATA_RDY_FLAG: Enter.\n", 0, 0, 0, 0, 0, 0); 
         logMsg("HFCtlIoctl.HFCTL_QUERY_DEHF_DATA_RDY_FLAG: iParam = %d.\n", iParam, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_RDY_FLAG_BASE_ADRS);
         *(UINT32*)iParam = *pDestBuffer;
         
         return(OK);

      case HFCTL_CLEAR_DEHF_DATA_RDY_FLAG:
#if 0
         logMsg("HFCtlIoctl.HFCTL_CLEAR_DEHF_DATA_RDY_FLAG: Enter.\n", 0, 0, 0, 0, 0, 0); 
         logMsg("HFCtlIoctl.HFCTL_CLEAR_DEHF_DATA_RDY_FLAG: iParam = %d.\n", iParam, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_RDY_FLAG_BASE_ADRS);
         *pDestBuffer = 0;
         
         return(OK);

      case HFCTL_SET_DEHF_DATA_RDY_FLAG:
#if 0
         logMsg("HFCtlIoctl.HFCTL_CLEAR_DEHF_DATA_RDY_FLAG: Enter.\n", 0, 0, 0, 0, 0, 0); 
         logMsg("HFCtlIoctl.HFCTL_CLEAR_DEHF_DATA_RDY_FLAG: iParam = %d.\n", iParam, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_RDY_FLAG_BASE_ADRS);
         *pDestBuffer = 1;
         
         return(OK);

      case HFCTL_QUERY_DEHF_DATA_BUF_FLAG:
#if 0
         logMsg("HFCtlIoctl.HFCTL_QUERY_DEHF_DATA_BUF_FLAG: Enter.\n", 0, 0, 0, 0, 0, 0); 
         logMsg("HFCtlIoctl.HFCTL_QUERY_DEHF_DATA_BUF_FLAG: iParam = %d.\n", iParam, 0, 0, 0, 0, 0); 
#endif /* if 0 */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_BUF_FLAG_BASE_ADRS);
         *(UINT32*)iParam = *pDestBuffer;
         
         return(OK);

      case HFCTL_CLEAR_DEHF_DATA_BUF_FLAG:
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_DEHFDATA_BUF_FLAG_BASE_ADRS);
         *pDestBuffer = 0;
         
         return(OK);

      case HFCTL_CLEAR_PCI_INT:
         /* clear local interrupt */
         pciWriteLong((int)(pHfctlDev->boardDataSpace0 + HFCTL_CARD_LINT_CLR_REG), ulTemp);
            
         return(OK);

      case HFCTL_CLEAR_PCI_INT_VECTOR:
         /* clear local interrupt */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_CARD_LINT_VECTOR_REG_BASE_ADRS);
         *pDestBuffer = 0;
            
         return(OK);

      case HFCTL_GET_WORK_STATUS:
         /* get working status */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_WORK_STATE_FLAG_BASE_ADRS);
         *(UINT32*)iParam = *pDestBuffer;
            
         return(OK);

      case HFCTL_SET_WORK_STATUS:
         /* get working status */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_WORK_STATE_FLAG_BASE_ADRS);
         *pDestBuffer = (unsigned long)iParam;
            
         return(OK);

      case HFCTL_CLEAR_WORK_STATUS:
         /* clear working status */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_WORK_STATE_FLAG_BASE_ADRS);
         *pDestBuffer = 0;
            
         return(OK);

      case HFCTL_SW_RESET_HFCTL_DEV:
         /* reset the HfCtl PMC card */
         pDestBuffer = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_DEV_SW_RESET_CTL_REG_BASE_ADRS);
         *pDestBuffer = 0;
            
         return(OK);

      case HFCTL_DO_DMA:
         
         return(OK);
			break;
      }

   return (ERROR);
   
}

/******************************************************************************
TITLE:   HFCtlIntHandle
DESC:    PCI interrupt handler for hop freq control PMC card
PARAM:   none
RETURN:  none
******************************************************************************/
void HFCtlIntHandle(HFCTL_DEV *pHfctlDev)
{
   int i = 0;
   int iOldLevel;      /* current interrupt level mask */
   unsigned long ulIntCsrValue;
   unsigned long ulIntClrValue = 1;
   unsigned long ulIntVecValue = 0;
   unsigned long ulIntVecRd = 0;
   unsigned long ulIntVecWr = 0;
   unsigned long ulIntVecTempRd = 0;
   unsigned long *pIntVecAdrs = NULL;
   
   iPciIntCount++;
#if 0
   logMsg("HFCtlIntHandle: receive PCI interrupt %d\n", iPciIntCount, 0, 0, 0, 0, 0);
#endif /* if 0 */

   pIntVecAdrs = (unsigned long *)(pHfctlDev->boardDataSpace0 + HFCTL_CARD_LINT_VECTOR_REG_BASE_ADRS);
#if 0
   logMsg("HFCtlIntHandle: pIntVecAdrs = 0x%.8x\n", (int)pIntVecAdrs, 0, 0, 0, 0, 0);
#endif /* if 0 */
	iOldLevel = intLock();
   ulIntCsrValue = pciReadLong((int)(pHfctlDev->pciControllerSpace0 + PLX9656_RT_REG_INTCSR_PCI));
   ulIntVecValue = *pIntVecAdrs;
	intUnlock (iOldLevel);

#if 0
   logMsg("HFCtlIntHandle: PLX9656 INTCSR = 0x%.8x\n", ulIntCsrValue, 0, 0, 0, 0, 0);
   logMsg("HFCtlIntHandle: PLX9656 INTVECTOR = 0x%.8x\n", ulIntVecValue, 0, 0, 0, 0, 0);
#endif /* if 0 */

   if ((ulIntCsrValue & DATA_BIT11) && (ulIntCsrValue & DATA_BIT15))
      {
      i9656LocalIntCount++;

      /* clear local interrupt */
      pciWriteLong((int)(pHfctlDev->boardDataSpace0 + HFCTL_CARD_LINT_CLR_REG), ulIntClrValue);

#if 1
      /* judge local interrupt vector to decide which interrupt source */
      if ((ulIntVecValue & DATA_BIT0) && (ulIntVecValue & DATA_BIT2))
         {
         i9656LintTxHFDataRdyCount++;
         semGive(pHfctlDev->semLocalData);
#if 1
         ulIntVecRd = *pIntVecAdrs;
#if 0
         logMsg("HFCtlIntHandle.LintTxHFDataRdy: ulIntVecRd = 0x%.8x\n", ulIntVecRd, 0, 0, 0, 0, 0);
#endif /* if 0 */
#else
         ulIntVecRd = ulIntVecValue;
#endif /* if 0 */
         ulIntVecWr = ulIntVecRd & ((~DATA_BIT0) & (~DATA_BIT2));
#if 0
         logMsg("HFCtlIntHandle.LintTxHFDataRdy: ulIntVecWr = 0x%.8x\n", ulIntVecWr, 0, 0, 0, 0, 0);
#endif /* if 0 */
         *pIntVecAdrs = ulIntVecWr;
#if 0
         logMsg("HFCtlIntHandle.LintTxHFDataRdy: after set Int Vector\n", 0, 0, 0, 0, 0, 0);
         ulIntVecTempRd = *pIntVecAdrs;
         logMsg("HFCtlIntHandle.LintTxHFDataRdy: ulIntVecTempRd = 0x%.8x\n", ulIntVecTempRd, 0, 0, 0, 0, 0);
#endif /* if 0 */
         }

#if 1
      if ((ulIntVecValue & DATA_BIT1) && (ulIntVecValue & DATA_BIT3))
         {
         i9656LintRxFifoRdyCount++;
         semGive(pHfctlDev->semRxFifoRdy);
#if 1
         ulIntVecRd = *pIntVecAdrs;
#if 0
         logMsg("HFCtlIntHandle.LintRxFifoRdy: ulIntVecRd = 0x%.8x\n", ulIntVecRd, 0, 0, 0, 0, 0);
#endif /* if 0 */
#else
         ulIntVecRd = ulIntVecValue;
#endif /* if 0 */
         ulIntVecWr = ulIntVecRd & ((~DATA_BIT1) & (~DATA_BIT3));
#if 0
         logMsg("HFCtlIntHandle.LintRxFifoRdy: ulIntVecWr = 0x%.8x\n", ulIntVecWr, 0, 0, 0, 0, 0);
#endif /* if 0 */
         *pIntVecAdrs = ulIntVecWr;
#if 0
         logMsg("HFCtlIntHandle.LintRxFifoRdy: after set Int Vector\n", 0, 0, 0, 0, 0, 0);
         ulIntVecTempRd = *pIntVecAdrs;
         logMsg("HFCtlIntHandle.LintRxFifoRdy: ulIntVecTempRd = 0x%.8x\n", ulIntVecTempRd, 0, 0, 0, 0, 0);
#endif /* if 0 */

#if 0
         /* use to detect Vector Write ERROR */
         ulIntVecTempRd = *pIntVecAdrs;

         if (ulIntVecTempRd != ulIntVecWr)
            {
            iPciIntExecCount++;
            }

⌨️ 快捷键说明

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