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

📄 pspanlib.c

📁 motorola 8260 CPU上面
💻 C
📖 第 1 页 / 共 5 页
字号:
  printf( "PB_SI0_TADDR  : %08x\r\n", pspan->pb_si[0].taddr );
  printf( "PB_SI0_BADDR  : %08x\r\n", pspan->pb_si[0].baddr );
  printf( "PB_SI1_CTL    : %08x\r\n", pspan->pb_si[1].ctl );
  printf( "PB_SI1_TADDR  : %08x\r\n", pspan->pb_si[1].taddr );
  printf( "PB_SI1_BADDR  : %08x\r\n", pspan->pb_si[1].baddr );
  printf( "PB_SI2_CTL    : %08x\r\n", pspan->pb_si[2].ctl );
  printf( "PB_SI2_TADDR  : %08x\r\n", pspan->pb_si[2].taddr );
  printf( "PB_SI2_BADDR  : %08x\r\n", pspan->pb_si[2].baddr );
  printf( "PB_SI3_CTL    : %08x\r\n", pspan->pb_si[3].ctl );
  printf( "PB_SI3_TADDR  : %08x\r\n", pspan->pb_si[3].taddr );
  printf( "PB_SI3_BADDR  : %08x\r\n", pspan->pb_si[3].baddr );
  printf( "PB_SI4_CTL    : %08x\r\n", pspan->pb_si[4].ctl );
  printf( "PB_SI4_TADDR  : %08x\r\n", pspan->pb_si[4].taddr );
  printf( "PB_SI4_BADDR  : %08x\r\n", pspan->pb_si[4].baddr );
  printf( "PB_SI5_CTL    : %08x\r\n", pspan->pb_si[5].ctl );
  printf( "PB_SI5_TADDR  : %08x\r\n", pspan->pb_si[5].taddr );
  printf( "PB_SI5_BADDR  : %08x\r\n", pspan->pb_si[5].baddr );
  printf( "PB_SI6_CTL    : %08x\r\n", pspan->pb_si[6].ctl );
  printf( "PB_SI6_TADDR  : %08x\r\n", pspan->pb_si[6].taddr );
  printf( "PB_SI6_BADDR  : %08x\r\n", pspan->pb_si[6].baddr );
  printf( "PB_SI7_CTL    : %08x\r\n", pspan->pb_si[7].ctl );
  printf( "PB_SI7_TADDR  : %08x\r\n", pspan->pb_si[7].taddr );
  printf( "PB_SI7_BADDR  : %08x\r\n", pspan->pb_si[7].baddr );
  printf( "PB_REG_BADDR  : %08x\r\n", pspan->pb_reg_baddr );
  printf( "PB_CONF_INFO  : %08x\r\n", pspan->pb_conf_info );
  printf( "PB_ERRCS      : %08x\r\n", pspan->pb_errcs );
  printf( "PB_AERR       : %08x\r\n", pspan->pb_aerr );
  printf( "PB_MISC_CSR   : %08x\r\n", pspan->pb_misc_csr );
  printf( "PB_ARB_CTRL   : %08x\r\n", pspan->pb_arb_ctrl );
  printf( "DMA0_SRC_ADDR : %08x\r\n", pspan->dma[0].src_addr );
  printf( "DMA0_DST_ADDR : %08x\r\n", pspan->dma[0].dst_addr );
  printf( "DMA0_TCR      : %08x\r\n", pspan->dma[0].tcr );
  printf( "DMA0_CPP      : %08x\r\n", pspan->dma[0].cpp );
  printf( "DMA0_GCR      : %08x\r\n", pspan->dma[0].gcsr );
  printf( "DMA0_ATTR     : %08x\r\n", pspan->dma[0].attr );
  printf( "DMA1_SRC_ADDR : %08x\r\n", pspan->dma[1].src_addr );
  printf( "DMA1_DST_ADDR : %08x\r\n", pspan->dma[1].dst_addr );
  printf( "DMA1_TCR      : %08x\r\n", pspan->dma[1].tcr );
  printf( "DMA1_CPP      : %08x\r\n", pspan->dma[1].cpp );
  printf( "DMA1_GCR      : %08x\r\n", pspan->dma[1].gcsr );
  printf( "DMA1_ATTR     : %08x\r\n", pspan->dma[1].attr );
  printf( "DMA2_SRC_ADDR : %08x\r\n", pspan->dma[2].src_addr );
  printf( "DMA2_DST_ADDR : %08x\r\n", pspan->dma[2].dst_addr );
  printf( "DMA2_TCR      : %08x\r\n", pspan->dma[2].tcr );
  printf( "DMA2_CPP      : %08x\r\n", pspan->dma[2].cpp );
  printf( "DMA2_GCR      : %08x\r\n", pspan->dma[2].gcsr );
  printf( "DMA2_ATTR     : %08x\r\n", pspan->dma[2].attr );
  printf( "DMA3_SRC_ADDR : %08x\r\n", pspan->dma[3].src_addr );
  printf( "DMA3_DST_ADDR : %08x\r\n", pspan->dma[3].dst_addr );
  printf( "DMA3_TCR      : %08x\r\n", pspan->dma[3].tcr );
  printf( "DMA3_CPP      : %08x\r\n", pspan->dma[3].cpp );
  printf( "DMA3_GCR      : %08x\r\n", pspan->dma[3].gcsr );
  printf( "DMA3_ATTR     : %08x\r\n", pspan->dma[3].attr );
  printf( "MISC_CSR      : %08x\r\n", pspan->misc_csr );
  printf( "CLOCK_CTL     : %08x\r\n", pspan->clock_ctl );
  printf( "I2C_CSR       : %08x\r\n", pspan->i2c_csr );
  printf( "RST_CSR       : %08x\r\n", pspan->rst_csr );
  printf( "ISR0          : %08x\r\n", pspan->isr0 );
  printf( "ISR1          : %08x\r\n", pspan->isr1 );
  printf( "IER0          : %08x\r\n", pspan->ier0 );
  printf( "IER1          : %08x\r\n", pspan->ier1 );
  printf( "IMR_MBOX      : %08x\r\n", pspan->imr_mbox );
  printf( "IMR_DB        : %08x\r\n", pspan->imr_db );
  printf( "IMR_DMA       : %08x\r\n", pspan->imr_dma );
  printf( "IMR_HW        : %08x\r\n", pspan->imr_hw );
  printf( "IMR_P1        : %08x\r\n", pspan->imr_p1 );
  printf( "IMR_P2        : %08x\r\n", pspan->imr_p2 );
  printf( "IMR_PB        : %08x\r\n", pspan->imr_pb );
  printf( "IMR2_PB       : %08x\r\n", pspan->imr2_pb );
  printf( "IMR_MISC      : %08x\r\n", pspan->imr_misc );
  printf( "IDR           : %08x\r\n", pspan->idr );
  printf( "MBOX0         : %08x\r\n", pspan->mbox[0] );
  printf( "MBOX1         : %08x\r\n", pspan->mbox[1] );
  printf( "MBOX2         : %08x\r\n", pspan->mbox[2] );
  printf( "MBOX3         : %08x\r\n", pspan->mbox[3] );
  printf( "MBOX4         : %08x\r\n", pspan->mbox[4] );
  printf( "MBOX5         : %08x\r\n", pspan->mbox[5] );
  printf( "MBOX6         : %08x\r\n", pspan->mbox[6] );
  printf( "MBOX7         : %08x\r\n", pspan->mbox[7] );
  printf( "SEMA0         : %08x\r\n", pspan->sema[0] );
  printf( "SEMA1         : %08x\r\n", pspan->sema[1] );
  printf( "PCI_TI2O_CTL  : %08x\r\n", pspan->pci_ti2o_ctl );
  printf( "PCI_TI2O_TADDR: %08x\r\n", pspan->pci_ti2o_taddr );
  printf( "I2O_CSR       : %08x\r\n", pspan->i2o_csr );
  printf( "I2O_QUEUE_BS  : %08x\r\n", pspan->i2o_queue_bs );
  printf( "IFL_BOT       : %08x\r\n", pspan->ifl_bot );  
  printf( "IFL_TOP       : %08x\r\n", pspan->ifl_top );  
  printf( "IFL_TOP_INC   : %08x\r\n", pspan->ifl_top_inc );  
  printf( "IPL_BOT       : %08x\r\n", pspan->ipl_bot );  
  printf( "IPL_BOT_INC   : %08x\r\n", pspan->ipl_bot_inc );  
  printf( "IPL_TOP       : %08x\r\n", pspan->ipl_top );  
  printf( "OFL_BOT       : %08x\r\n", pspan->ofl_bot );  
  printf( "OFL_BOT_INC   : %08x\r\n", pspan->ofl_bot_inc );  
  printf( "OFL_TOP       : %08x\r\n", pspan->ofl_top );  
  printf( "OPL_BOT       : %08x\r\n", pspan->opl_bot );  
  printf( "OPL_TOP       : %08x\r\n", pspan->opl_top );  
  printf( "OPL_TOP_INC   : %08x\r\n", pspan->opl_top_inc );  
  printf( "HOST_OIO      : %08x\r\n", pspan->host_oio );  
  printf( "HOST_OIA      : %08x\r\n", pspan->host_oia );  
  printf( "IOP_OI        : %08x\r\n", pspan->iop_oi );  
  printf( "IOP_OI_INC    : %08x\r\n", pspan->iop_oi_inc );  
  printf( "P2_ID         : %08x\r\n", pspan->p2_cfg.id );
  printf( "P2_CSR        : %08x\r\n", pspan->p2_cfg.csr );
  printf( "P2_CLASS      : %08x\r\n", pspan->p2_cfg.pci_class );
  printf( "P2_MISC0      : %08x\r\n", pspan->p2_cfg.misc0 );
  printf( "P2_BSI2O      : %08x\r\n", pspan->p2_cfg.bsi2o );
  printf( "P2_BSREG      : %08x\r\n", pspan->p2_cfg.bsreg );
  printf( "P2_BST0       : %08x\r\n", pspan->p2_cfg.bst[0] );
  printf( "P2_BST1       : %08x\r\n", pspan->p2_cfg.bst[1] );
  printf( "P2_BST2       : %08x\r\n", pspan->p2_cfg.bst[2] );
  printf( "P2_BST3       : %08x\r\n", pspan->p2_cfg.bst[3] );
  printf( "P2_SID        : %08x\r\n", pspan->p2_cfg.sid );
  printf( "P2_CAP        : %08x\r\n", pspan->p2_cfg.cap );
  printf( "P2_MISC1      : %08x\r\n", pspan->p2_cfg.misc1 );
  printf( "P2_HS_CSR     : %08x\r\n", pspan->p2_cfg.hs_csr );
  printf( "P2_VPDC       : %08x\r\n", pspan->p2_cfg.vpdc );
  printf( "P2_VPDD       : %08x\r\n", pspan->p2_cfg.vpdd );
  printf( "P2_TI0_CTL    : %08x\r\n", pspan->p2.ti[0].ctl );
  printf( "P2_TI0_TADDR  : %08x\r\n", pspan->p2.ti[0].taddr );
  printf( "P2_TI1_CTL    : %08x\r\n", pspan->p2.ti[1].ctl );
  printf( "P2_TI1_TADDR  : %08x\r\n", pspan->p2.ti[1].taddr );
  printf( "P2_TI2_CTL    : %08x\r\n", pspan->p2.ti[2].ctl );
  printf( "P2_TI2_TADDR  : %08x\r\n", pspan->p2.ti[2].taddr );
  printf( "P2_TI3_CTL    : %08x\r\n", pspan->p2.ti[3].ctl );
  printf( "P2_TI3_TADDR  : %08x\r\n", pspan->p2.ti[3].taddr );
  printf( "P2_CONF_INFO  : %08x\r\n", pspan->p2.conf_info );
  printf( "P2_ERRCS      : %08x\r\n", pspan->p2.errcs );
  printf( "P2_AERR       : %08x\r\n", pspan->p2.aerr );
  printf( "P2_MISC_CSR   : %08x\r\n", pspan->p2.misc_csr );
  printf( "P2_ARB_CTRL   : %08x\r\n", pspan->p2.arb_ctrl );

  return ( retval );

  } /* PspanRegsDump */

/*=========================================================================
 *  Function Name:      PspanDirectModeDma
 *
 *  Arguments:
 *    pspan             pointer to PowerSpan register space structure
 *    src_addr          source address 
 *    dst_addr          destination address
 *    src_port          source port (PB/PCI1/PCI2)
 *    dst_port          destination port (PB/PCI1/PCI2)
 *    byte_count        byte count (>0)
 *    channel           DMA channel number 0-3
 *
 *  Description:
 *    Perform a direct mode DMA transfer with the specified channel.
 *  
 *  Return Value:       SUCCESS/FAILURE
 *    
 =========================================================================*/
UINT32 PspanDirectModeDma
  ( 
  PPSPAN pspan,
  UINT32 src_addr,
  UINT32 dst_addr,
  UINT32 src_port,
  UINT32 dst_port,
  UINT32 byte_count,
  UINT32 channel 
  )
  {
  UINT32 retval;
  UINT32 read_val;
  UINT32 temp;

  retval = SUCCESS;

  /* make sure DMA channel x is not active */
  switch ( channel )
    {
    case 0:
      read_val = pspan->dma[0].gcsr;
      break;
    case 1:
      read_val = pspan->dma[1].gcsr;
      break;
    case 2:
      read_val = pspan->dma[2].gcsr;
      break;
    case 3:
      read_val = pspan->dma[3].gcsr;
      break;
    default:
      read_val = DMA_GCSR_DACT;
      break;
    }
  temp     = read_val & DMA_GCSR_DACT;

  if ( temp != 0 )
    retval = FAILURE;
  else
    {
      /* DMA is not active */

      /* program source/dest ports and byte count, little endian - no swap */
      temp = 0;
      if ( src_port == PCI1 )
	temp = temp | DMAx_TCR_SRC_PORT_P1_VAL;
      else if ( src_port == PCI2 )
	temp = temp | DMAx_TCR_SRC_PORT_P2_VAL;
      else if ( src_port == PB )
	temp = temp | DMAx_TCR_SRC_PORT_PB_VAL;

      if ( dst_port == PCI1 )
	temp = temp | DMAx_TCR_DST_PORT_P1_VAL;
      else if ( dst_port == PCI2 )
	temp = temp | DMAx_TCR_DST_PORT_P2_VAL;
      else if ( dst_port == PB )
	temp = temp | DMAx_TCR_DST_PORT_PB_VAL;
      
      temp = temp | ( DMA_TCR_BC & byte_count );

      DBG2( "DMA%d_SRC_ADDR  : %08x\r\n", channel, src_addr );
      DBG2( "DMA%d_DST_ADDR  : %08x\r\n", channel, dst_addr );
      DBG2( "DMA%d_TCR  : %08x\r\n", channel, temp );

      /* source and destination addresses, tcr register and
	 zero out DMAx_CPP */
      switch ( channel )
	{
	case 0:
	  pspan->dma[0].src_addr = src_addr;
	  pspan->dma[0].dst_addr = dst_addr;
	  pspan->dma[0].tcr      = temp;
	  pspan->dma[0].cpp      = 0;
	  pspan->dma[0].attr    |= DMA_ATTR_CI_;
	  break;
	case 1:
	  pspan->dma[1].src_addr = src_addr;
	  pspan->dma[1].dst_addr = dst_addr;
	  pspan->dma[1].tcr      = temp;
	  pspan->dma[1].cpp      = 0;
	  pspan->dma[1].attr    |= DMA_ATTR_CI_;
	  break;
	case 2:
	  pspan->dma[2].src_addr = src_addr;
	  pspan->dma[2].dst_addr = dst_addr;
	  pspan->dma[2].tcr      = temp;
	  pspan->dma[2].cpp      = 0;
	  pspan->dma[2].attr    |= DMA_ATTR_CI_;
	  break;
	case 3:
	  pspan->dma[3].src_addr = src_addr;
	  pspan->dma[3].dst_addr = dst_addr;
	  pspan->dma[3].tcr      = temp;
	  pspan->dma[3].cpp      = 0;
	  pspan->dma[3].attr    |= DMA_ATTR_CI_;
	  break;
	}

      /* set GO bit and clear all status bits at the same time */
      temp = 0;
      temp = DMA_GCSR_GO | 
	     DMA_GCSR_P1_ERR | 
	     DMA_GCSR_P2_ERR | 
	     DMA_GCSR_PB_ERR | 
	     DMA_GCSR_STOP | 
	     DMA_GCSR_HALT | 
	     DMA_GCSR_DONE ;

      DBG1( "Setting DMA%d GO bit ...\r\n", channel );

      switch ( channel )
	{
	case 0:
	  pspan->dma[0].gcsr = temp;
	  /*
	  for ( i = 0; i < 100; i++ );
	  */
	  temp = pspan->dma[0].gcsr;
	  break;
	case 1:
	  pspan->dma[1].gcsr = temp;
	  /*
	  for ( i = 0; i < 100; i++ );
	  */
	  temp = pspan->dma[1].gcsr;
	  break;
	case 2:
	  pspan->dma[2].gcsr = temp;
	  /*
	  for ( i = 0; i < 100; i++ );
	  */
	  temp = pspan->dma[2].gcsr;
	  break;
	case 3:
	  pspan->dma[3].gcsr = temp;
	  /*
	  for ( i = 0; i < 100; i++ );
	  */
	  temp = pspan->dma[3].gcsr;
	  break;
	}

      DBG2( "DMA%d_GCSR  : %08x\r\n", channel, temp );

      /*
      temp = temp & DMA_GCSR_DACT;
      if ( 0 == temp )
	{
	  DBG1( "WARNING:  DMA%d_GCSR[DACT] NOT set after a while!!\r\n", channel );
	}
	*/

    }

  return ( retval );

  } /* PspanDirectModeDma */

/*=========================================================================
 *  Function Name:      PspanIsDmaDone
 *
 *  Arguments:
 *    channel           DMA channel number 0-3
 *
 *  Description:
 *    Check to see if DMA in specified channel is done.
 *  
 *  Return Value:       SUCCESS/FAILURE
 *    
 =========================================================================*/
UINT32 PspanIsDmaDone
  ( 
  PPSPAN pspan,
  UINT32 channel 
  )
  {
  UINT32 retval = FAILURE;
  UINT32 read_val = 0;
  UINT32 temp;

  switch ( channel )
    {
    case 0:
      read_val = pspan->dma[0].gcsr;
      break;
    case 1:
      read_val = pspan->dma[1].gcsr;
      break;
    case 2:
      read_val = pspan->dma[2].gcsr;
      break;
    case 3:
      read_val = pspan->dma[3].gcsr;
      break;
    }
  temp = read_val & DMA_GCSR_DACT;

  if ( 0 == temp )
    retval = SUCCESS;
  else
    retval = FAILURE;

  return ( retval );

} /* PspanIsDmaDone */

/*=========================================================================
 *  Function Name:      PspanCheckDmaStatus
 *
 *  Arguments:
 *    channel           DMA channel number 0-3
 *
 *  Description:
 *    Check to see if the error status bits in the specified channel are set.
 *  
 *  Return Value:       SUCCESS/FAILURE
 *    
 =========================================================================*/
UINT32 PspanCheckDmaStatus
  ( 
  PPSPAN pspan,
  UINT32 channel 
  )
  {
  UINT32 retval = FAILURE;
  UINT32 read_val = 0;

  retval = SUCCESS;
  switch ( channel )
    {
    case 0:
      read_val = pspan->dma[0].gcsr;
      break;
    case 1:
      read_val = pspan->dma[1].gcsr;
      break;
    case 2:
      read_val = pspan->dma[2].gcsr;
      break;
    case 3:
      read_val = pspan->dma[3].gcsr;
      break;
    }

  if ( (read_val & DMA_GCSR_P1_ERR) == 0 &&
       (read_val & DMA_GCSR_P2_ERR) == 0 &&
       (read_val & DMA_GCSR_PB_ERR) == 0 &&
       (read_val & DMA_GCSR_DONE) == DMA_GCSR_DONE)
    {
      DBG1( "\r\nDMA%d ended sucessfully!!\r\n", channel );
      retval = SUCCESS;
    }
  else
    {
      DBG1( "\r\nDMA%d ended unsucessfully ...\r\n", channel );
      DBG2( "DMA%d_GCSR  : %08x\r\n", channel, read_val );
      retval = FAILURE;  /* DMA ended with errors */
    }

  return ( retval );

  } /* PspanCheckDmaStatus */

/*=========================================================================
 *  Function Name:      PspanProgramI2cLoadBits
 *
 *  Arguments:
 *    def_mem           0=default 1=memory resident 3=copy default to memory
 *
 *  Description:
 *    Load I2C bits into EEPROM.
 *  
 *  Return Value:       SUCCESS/FAILURE
 *    
 *=========================================================================*/
unsigned char i2c_load_table_default[] = {

  0x02, /*  00h     0x01=short load  0x02=long load  0x04=tune bits load */
  0x00, /*  01h */
  0x00, /*  02h */
  0x00, /*  03h */
  0x00, /*  04h */
  0x0f, /*  05h     P1_CSR_[BM_EN],P1_CSR[MS],P2_CSR[BM_EN],P2_CSR[MS] */
  0x0f, /*  06h     P1_BSI2O[PRFTCH],P1_BSTx[PRFTCH] */
  0x88, /*  07h     P1_SID[SID[15:8]] */
  0x88, /*  08h     P1_SID[SID[7:0]] */
  0x10, /*  09h     P1_SID[SVID[15:8]] */
  0xe3, /*  0ah     P1_SID[SVID[7:0]] */
  0x03, /*  0bh     P1_MISC1[INT_PIN[0]],P2_MISC1[INT_PIN[0]] */
  0x1c, /*  0ch     P1_MISC_CSR[BSREG_BAR

⌨️ 快捷键说明

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