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

📄 csl_pci.h

📁 SEED的VPM642测试程序-板级支持库
💻 H
字号:
/******************************************************************************\

*           Copyright (C) 2000 Texas Instruments Incorporated.

*                           All Rights Reserved

*------------------------------------------------------------------------------

* FILENAME...... csl_pci.h

* DATE CREATED.. Mon 06/12/2000

* LAST MODIFIED. 02/12/2002  PCI_intClear()

*                04/20/2001  (C64x compatibility)

*				 06/20/2003  TRCTL enhancement

*

\******************************************************************************/

#ifndef _CSL_PCI_H_

#define _CSL_PCI_H_



#include <csl_chip.h>

#include <csl_stdinc.h>

#include <csl_irq.h>

#include <csl_pcihal.h>



#if (PCI_SUPPORT)

/****************************************\

* PCI scope and inline control macros

\****************************************/

#ifdef __cplusplus

#define CSLAPI extern "C" far

#else

#define CSLAPI extern far

#endif



#undef  USEDEFS

#undef  IDECL

#undef  IDEF



#ifdef  _PCI_MOD_

  #define IDECL extern far

  #define USEDEFS

  #define IDEF

#else

  #ifdef  _INLINE

    #define IDECL static inline

    #define USEDEFS

    #define IDEF  static inline

  #else

    #define IDECL extern far

  #endif

#endif



/****************************************\

* PCI global macro declarations

\****************************************/

#define PCI_EVENT_CNT   11



/* eventPci  definitions */

#define PCI_EVT_DMAHALTED    12

#define PCI_EVT_PRST         11

#define PCI_EVT_EERDY	      9

#define PCI_EVT_CFGERR	      8

#define PCI_EVT_CFGDONE	      7

#define PCI_EVT_MASTEROK      6

#define PCI_EVT_PWRHL         5

#define PCI_EVT_PWRLH         4

#define PCI_EVT_HOSTSW	      3

#define PCI_EVT_PCIMASTER     2

#define PCI_EVT_PCITARGET     1

#define PCI_EVT_PWRMGMT	      0





/* mode StarttXfr definitions */

#define	PCI_WRITE	 0x1u

#define PCI_READ_PREF    0x2u

#define	PCI_READ_NOPREF  0x3u



/* EEPROM sizes */

 #define PCI_EEPROM_NONE     0x00000000u

 #define PCI_EEPROM_4K       0x00000011u

#if (!C64_SUPPORT)

 #define PCI_EEPROM_1K       0x00000001u

 #define PCI_EEPROM_2K       0x00000010u

 #define PCI_EEPROM_16K      0x00000100u

#endif



/****************************************\

* PCI global typedef declarations

\****************************************/

#if(!C64_SUPPORT)

typedef struct {

   Uint32 dspma;

   Uint32 pcima;

   Uint32 pcimc;

} PCI_ConfigXfr;

#else

typedef struct {

   Uint32 dspma;

   Uint32 pcima;

   Uint32 pcimc;

   Uint32 trctl;

} PCI_ConfigXfr;

#endif



/****************************************\

* PCI global variable declarations

\****************************************/

extern far Uint32 _PCI_maskTable[13];







/*_PCI_maskTable[PCI_EVT_PWRMGMT]= _PCI_PCIIEN_PWRMGMT_MASK;

_PCI_maskTable[PCI_EVT_PCITARGET]= _PCI_PCIIEN_PCITARGET_MASK;

_PCI_maskTable[PCI_EVT_PCIMASTER]= _PCI_PCIIEN_PCIMASTER_MASK;

_PCI_maskTable[PCI_EVT_HOSTSW]= _PCI_PCIIEN_PWRLH_MASK;

_PCI_maskTable[PCI_EVT_PWRLH]= _PCI_PCIIEN_PWRLH_MASK;

_PCI_maskTable[PCI_EVT_PWRHL]= _PCI_PCIIEN_PWRHL_MASK;

_PCI_maskTable[PCI_EVT_MASTEROK]= _PCI_PCIIEN_MASTEROK_MASK;

_PCI_maskTable[PCI_EVT_CFGDONE]= _PCI_PCIIEN_CFGDONE_MASK;

_PCI_maskTable[PCI_EVT_CFGERR]= _PCI_PCIIEN_CFGERR_MASK;

_PCI_maskTable[PCI_EVT_EERDY]=  _PCI_PCIIEN_EERDY_MASK;

_PCI_maskTable[PCI_EVT_PRST]= _PCI_PCIIEN_PRST_MASK;

_PCI_maskTable[PCI_EVT_DMAHALTED]= _PCI_PCIIS_DMAHALTED_MASK;

 */



/****************************************\

* PCI global function declarations

\****************************************/

extern far Uint32 _PCI_eepromEnableWrite();

extern far Uint32 PCI_eepromWrite(Uint32 eeaddr,Uint16 eedata);

extern far Uint32 PCI_eepromWriteAll(Uint16 eedata);

extern far Uint16 PCI_eepromRead(Uint32 eeaddr);

extern far Uint32 PCI_eepromErase(Uint32 eeaddr);

extern far Uint32 PCI_eepromEraseAll();

/****************************************\

* PCI inline function declarations

\****************************************/



/* Master transfer functions */

IDECL void   PCI_xfrStart(Uint32 modeXfr);

IDECL void   PCI_xfrFlush();      // Field START=00  - flush current Transaction

IDECL int    PCI_xfrTest();   // test if the transfer is done - wait the Start field back to 00 */

IDECL void   PCI_xfrByteCntSet(Uint16 nbbyte); // set field CNT - # of bytes to be transfered



/* Halt function (HALT register ) */

#if (!C64_SUPPORT)

IDECL void   PCI_xfrHalt();

IDECL void   PCI_xfrEnable();

#endif





IDECL Uint32 PCI_curDspAddrGet();

IDECL Uint32 PCI_curPciAddrGet();

IDECL Uint32 PCI_curByteCntGet();

#if(!C64_SUPPORT)

IDECL void PCI_xfrConfig(PCI_ConfigXfr *config);

IDECL void PCI_xfrConfigArgs(Uint32 dspma, Uint32 pcima, Uint32 pcimc);

IDECL void PCI_xfrGetConfig(PCI_ConfigXfr *config);

#else

IDECL void PCI_xfrConfig(PCI_ConfigXfr *config);

IDECL void PCI_xfrConfigArgs(Uint32 dspma, Uint32 pcima, Uint32 pcimc , Uint32 trctl);

IDECL void PCI_xfrGetConfig(PCI_ConfigXfr *config);

#endif

/* PCI Interrupt Enable/Reporting functions */

IDECL void   PCI_intEnable(Uint32 eventPci);

IDECL void   PCI_intDisable(Uint32 eventPci);

IDECL Uint32 PCI_intTest(Uint32 eventPci);

IDECL void   PCI_intClear(Uint32 eventPci);



IDECL void PCI_dspIntReqSet();

IDECL void PCI_dspIntReqClear();



/* DSP EEPROM interface functions */

IDECL Uint32 PCI_eepromSize();      /*  reads fieds EESZ of EECTL reg   */

IDECL Uint32 PCI_eepromTest();    /* returns success if EESZ != 0 - EEPROM present */

IDECL Uint32 PCI_eepromIsAutoCfg();  /* reads the EEAI bit status of EECTL- AutoCfgEnable  */



/* Power Management functions */

#if (!C64_SUPPORT)

IDECL void PCI_pwrStatUpdate();

IDECL Uint32 PCI_pwrStatTest();

#endif





/****************************************\

* PCI inline function definitions

\****************************************/

#ifdef USEDEFS

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrStart(Uint32 modeXfr) {

   PCI_FSET(PCIMC,START,modeXfr) ;

}

/*----------------------------------------------------------------------------*/

#if (!C64_SUPPORT)

IDEF void PCI_xfrHalt(){

  PCI_FSET(HALT,HALT,1);

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrEnable(){

  PCI_FSET(HALT,HALT,0);

}

#endif /* !C64_SUPPORT */

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrFlush(){

  PCI_FSET(PCIMC,START,0);

}

/*----------------------------------------------------------------------------*/

IDEF int PCI_xfrTest(){

  return PCI_FGET(PCIMC,START);

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrByteCntSet(Uint16 nbbyte){

  PCI_FSET(PCIMC,CNT,nbbyte);

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_curDspAddrGet() {

  return PCI_FGET(CDSPA,CDSPA);

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_curPciAddrGet() {

  return PCI_FGET(CPCIA,CPCIA);

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_curByteCntGet() {

  return PCI_FGET(CCNT,CCNT);

}

/*----------------------------------------------------------------------------*/

#if(!C64_SUPPORT)

IDEF void PCI_xfrConfig(PCI_ConfigXfr *config) {



  Uint32 gie;

  volatile Uint32 *base = (volatile Uint32 *) _PCI_BASE1_GLOBAL;

  register int x0,x1,x2;



  gie = IRQ_globalDisable();



  x0 = config->dspma;

  x1 = config->pcima;

  x2 = config->pcimc;



  base[_PCI_PCIMC_OFFSET] = 0x00000000;

  base[_PCI_DSPMA_OFFSET] = x0;

  base[_PCI_PCIMA_OFFSET] = x1;

  base[_PCI_PCIMC_OFFSET] = x2;



  IRQ_globalRestore(gie);

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrConfigArgs(Uint32 dspma,Uint32 pcima,Uint32 pcimc) {



  Uint32 gie;

  volatile Uint32 *base = (volatile Uint32 *) _PCI_BASE1_GLOBAL;



  gie = IRQ_globalDisable();



  base[_PCI_PCIMC_OFFSET] = 0x00000000u;

  base[_PCI_DSPMA_OFFSET] = dspma;

  base[_PCI_PCIMA_OFFSET] = pcima;

  base[_PCI_PCIMC_OFFSET] = pcimc;



 IRQ_globalRestore(gie);

}



/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrGetConfig(PCI_ConfigXfr *config) {



  Uint32 gie;

  volatile Uint32 *base = (volatile Uint32 *) _PCI_BASE1_GLOBAL;

  volatile PCI_ConfigXfr *cfg = (volatile PCI_ConfigXfr*)config;

  register int x0,x1,x2;



  gie = IRQ_globalDisable();



  x0 = base[_PCI_DSPMA_OFFSET];

  x1 = base[_PCI_PCIMA_OFFSET];

  x2 = base[_PCI_PCIMC_OFFSET];



  cfg->dspma = x0;

  cfg->pcima = x1;

  cfg->pcimc = x2;



  IRQ_globalRestore(gie);

}

#else

IDEF void PCI_xfrConfig(PCI_ConfigXfr *config) {



  Uint32 gie;

  volatile Uint32 *base1 = (volatile Uint32 *) _PCI_BASE1_GLOBAL;

  volatile Uint32 *base2 = (volatile Uint32 *) _PCI_BASE3_GLOBAL;



  register int x0,x1,x2,x3;



  gie = IRQ_globalDisable();



  x0 = config->dspma;

  x1 = config->pcima;

  x2 = config->pcimc;

  x3 = config->trctl;



  base1[_PCI_PCIMC_OFFSET] = 0x00000000;

  base1[_PCI_DSPMA_OFFSET] = x0;

  base1[_PCI_PCIMA_OFFSET] = x1;

  base1[_PCI_PCIMC_OFFSET] = x2;

  base2[_PCI_TRCTL_OFFSET] = x3;





  IRQ_globalRestore(gie);

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrConfigArgs(Uint32 dspma,Uint32 pcima,Uint32 pcimc,Uint32 trctl) {



  Uint32 gie;

  volatile Uint32 *base1 = (volatile Uint32 *) _PCI_BASE1_GLOBAL;

  volatile Uint32 *base2 = (volatile Uint32 *) _PCI_BASE3_GLOBAL;



  gie = IRQ_globalDisable();



  base1[_PCI_PCIMC_OFFSET] = 0x00000000u;

  base1[_PCI_DSPMA_OFFSET] = dspma;

  base1[_PCI_PCIMA_OFFSET] = pcima;

  base1[_PCI_PCIMC_OFFSET] = pcimc;

  base2[_PCI_TRCTL_OFFSET] = trctl;



 IRQ_globalRestore(gie);

}



/*----------------------------------------------------------------------------*/

IDEF void PCI_xfrGetConfig(PCI_ConfigXfr *config) {



  Uint32 gie;

  volatile Uint32 *base1 = (volatile Uint32 *) _PCI_BASE1_GLOBAL;

  volatile Uint32 *base2 = (volatile Uint32 *) _PCI_BASE3_GLOBAL;

  volatile PCI_ConfigXfr *cfg = (volatile PCI_ConfigXfr*)config;

  register int x0,x1,x2,x3;



  gie = IRQ_globalDisable();



  x0 = base1[_PCI_DSPMA_OFFSET];

  x1 = base1[_PCI_PCIMA_OFFSET];

  x2 = base1[_PCI_PCIMC_OFFSET];

  x3 = base2[_PCI_TRCTL_OFFSET];



  cfg->dspma = x0;

  cfg->pcima = x1;

  cfg->pcimc = x2;

  cfg->trctl = x3;



  IRQ_globalRestore(gie);

}

#endif

/*----------------------------------------------------------------------------*/

IDEF void PCI_intEnable(Uint32 eventPci) {

  volatile Uint32 value ;

  value=  PCI_RGET(PCIIEN);

  /* Set bit of eventPCi */

  PCI_RSET(PCIIEN,(value | _PCI_maskTable[eventPci]));

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_intDisable(Uint32 eventPci) {

   volatile Uint32 value;

   value =( PCI_RGET(PCIIEN) &= ~_PCI_maskTable[eventPci]);            /* Set the opposite mask of eventPci    */

  PCI_RSET(PCIIEN,value);

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_intTest(Uint32 eventPci) {

    return ( ( PCI_RGET(PCIIS) & _PCI_maskTable[eventPci]) >> eventPci );

}

/*----------------------------------------------------------------------------*/

IDEF void  PCI_intClear(Uint32 eventPci) {

    PCI_RSET(PCIIS, PCI_RGET(PCIIS) & _PCI_maskTable[eventPci]) ;

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_dspIntReqSet(){

 PCI_FSET(RSTSRC,INTREQ,1);

}

/*----------------------------------------------------------------------------*/

IDEF void PCI_dspIntReqClear(){

 PCI_FSET(RSTSRC,INTRST,1);

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_eepromSize(){

  return (PCI_FGET(EECTL,EESZ));

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_eepromTest(){

  volatile Uint32 test = 0;

   if ( (PCI_FGET(EECTL,EESZ) != 0))

    {

     test = 1;

    }

   return test;

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_eepromIsAutoCfg() {

  return((Uint32) PCI_FGET(EECTL,EEAI));

}

/*----------------------------------------------------------------------------*/

#if (!C64_SUPPORT)

IDEF void PCI_pwrStatUpdate() {

    PCI_FSET(PMDCSR,CURSTATE,PCI_FGET(PMDCSR,REQSTATE));   /* update value  */

}

/*----------------------------------------------------------------------------*/

IDEF Uint32 PCI_pwrStatTest() {

    volatile Uint32 status;

      status= PCI_FGET(PCIIS,PWRMGMT) | (PCI_FGET(PMDCSR,D2WARMONWKP)<<1) \

              | ((PCI_FGET(PMDCSR,D3WARMONWKP)<<1) + 1);

     return( status );

}

#endif /* !C64_SUPPORT */



/*----------------------------------------------------------------------------*/

#endif /* USEDEFS */



#endif /* PCI_SUPPORT */

#endif /* _PCI_H_ */

/******************************************************************************\

* End of csl_pci.h

\******************************************************************************/



⌨️ 快捷键说明

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