www.pudn.com > SEEDVPM642_audio.rar > csl_pci.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#include #include #include #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 \******************************************************************************/