www.pudn.com > SEEDVPM642_audio.rar > csl_xbus.h


/******************************************************************************\ 
*           Copyright (C) 2000 Texas Instruments Incorporated. 
*                           All Rights Reserved 
*------------------------------------------------------------------------------ 
* FILENAME...... csl_xbus.h 
* DATE CREATED.. 06/12/2000  
* LAST MODIFIED. 10/03/2000  
\******************************************************************************/ 
#ifndef _CSL_XBUS_H_ 
#define _CSL_XBUS_H_ 
 
#include  
#include  
#include  
 
 
#if (XBUS_SUPPORT) 
/******************************************************************************\ 
* 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  _XBUS_MOD_ 
  #define IDECL CSLAPI 
  #define USEDEFS 
  #define IDEF 
#else 
  #ifdef  _INLINE 
    #define IDECL static inline 
    #define USEDEFS 
    #define IDEF  static inline 
  #else 
    #define IDECL CSLAPI 
  #endif 
#endif 
 
 
/******************************************************************************\ 
* global macro declarations 
\******************************************************************************/ 
 
 
/******************************************************************************\ 
* global typedef declarations 
\******************************************************************************/ 
 
/* device configuration structure */ 
typedef struct { 
  Uint32 xbgc; 
  Uint32 xcectl0; 
  Uint32 xcectl1; 
  Uint32 xcectl2; 
  Uint32 xcectl3; 
  Uint32 xbhc; 
  Uint32 xbima; 
  Uint32 xbea; 
} XBUS_Config; 
 
 
/******************************************************************************\ 
* global variable declarations 
\******************************************************************************/ 
 
 
/******************************************************************************\ 
* global function declarations 
\******************************************************************************/ 
 
 
/******************************************************************************\ 
* inline function declarations 
\******************************************************************************/ 
 
IDECL void XBUS_config(XBUS_Config *config); 
IDECL void XBUS_configArgs(Uint32 xbgc, Uint32 xcectl0, Uint32 xcectl1, 
  Uint32 xcectl2, Uint32 xcectl3, Uint32 xbhc, Uint32 xbima, Uint32 xbea); 
IDECL void XBUS_getConfig(XBUS_Config *config); 
 
 
/******************************************************************************\ 
* inline function definitions 
\******************************************************************************/ 
#ifdef USEDEFS 
/*----------------------------------------------------------------------------*/ 
IDEF void XBUS_config(XBUS_Config *config) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *)_XBUS_BASE_GLOBAL; 
  register int x0,x1,x2,x3,x4,x5,x6,x7; 
 
  gie = IRQ_globalDisable(); 
 
  /* the compiler generates more efficient code if the loads */ 
  /* and stores are grouped together raher than intermixed   */ 
  x0 = config->xbgc; 
  x1 = config->xcectl0; 
  x2 = config->xcectl1; 
  x3 = config->xcectl2; 
  x4 = config->xcectl3; 
  x5 = config->xbhc; 
  x6 = config->xbima; 
  x7 = config->xbea; 
 
  base[_XBUS_XBGC_OFFSET]    = x0; 
  base[_XBUS_XCECTL0_OFFSET] = x1; 
  base[_XBUS_XCECTL1_OFFSET] = x2; 
  base[_XBUS_XCECTL2_OFFSET] = x3; 
  base[_XBUS_XCECTL3_OFFSET] = x4; 
  base[_XBUS_XBHC_OFFSET]    = x5; 
  base[_XBUS_XBIMA_OFFSET]   = x6; 
  base[_XBUS_XBEA_OFFSET]    = x7; 
 
  IRQ_globalRestore(gie); 
} 
 
/*----------------------------------------------------------------------------*/ 
IDEF void XBUS_configArgs(Uint32 xbgc, Uint32 xcectl0, Uint32 xcectl1, 
  Uint32 xcectl2, Uint32 xcectl3, Uint32 xbhc, Uint32 xbima, Uint32 xbea) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *)_XBUS_BASE_GLOBAL; 
 
  gie = IRQ_globalDisable(); 
 
  base[_XBUS_XBGC_OFFSET]    = xbgc; 
  base[_XBUS_XCECTL0_OFFSET] = xcectl0; 
  base[_XBUS_XCECTL1_OFFSET] = xcectl1; 
  base[_XBUS_XCECTL2_OFFSET] = xcectl2; 
  base[_XBUS_XCECTL3_OFFSET] = xcectl3; 
  base[_XBUS_XBHC_OFFSET]    = xbhc; 
  base[_XBUS_XBIMA_OFFSET]   = xbima; 
  base[_XBUS_XBEA_OFFSET]    = xbea; 
 
  IRQ_globalRestore(gie); 
} 
 
/*----------------------------------------------------------------------------*/ 
IDEF void XBUS_getConfig(XBUS_Config *config) { 
 
  Uint32 gie; 
  volatile Uint32 *base = (volatile Uint32 *)_XBUS_BASE_GLOBAL; 
  volatile XBUS_Config* cfg = (volatile XBUS_Config*)config; 
  register int x0,x1,x2,x3,x4,x5,x6,x7; 
 
  gie = IRQ_globalDisable(); 
 
  /* the compiler generates more efficient code if the loads */ 
  /* and stores are grouped together raher than intermixed   */ 
 
  x0 = base[_XBUS_XBGC_OFFSET]; 
  x1 = base[_XBUS_XCECTL0_OFFSET]; 
  x2 = base[_XBUS_XCECTL1_OFFSET]; 
  x3 = base[_XBUS_XCECTL2_OFFSET]; 
  x4 = base[_XBUS_XCECTL3_OFFSET]; 
  x5 = base[_XBUS_XBHC_OFFSET]; 
  x6 = base[_XBUS_XBIMA_OFFSET];   
  x7 = base[_XBUS_XBEA_OFFSET]; 
 
  cfg->xbgc    = x0; 
  cfg->xcectl0 = x1; 
  cfg->xcectl1 = x2; 
  cfg->xcectl2 = x3; 
  cfg->xcectl3 = x4; 
  cfg->xbhc    = x5; 
  cfg->xbima   = x6; 
  cfg->xbea    = x7; 
 
  IRQ_globalRestore(gie); 
} 
 
/*----------------------------------------------------------------------------*/ 
#endif /* USEDEFS */ 
 
 
#endif /* XBUS_SUPPORT */ 
#endif /* _CSL_XBUS_H_ */ 
/******************************************************************************\ 
* End of csl_xbus.h 
\******************************************************************************/