usrStartup.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usrStartup.c - first routine called from usrInit */
  2. /* Copyright 1984-1999 Wind River Systems, Inc. */ 
  3. /*
  4. modification history
  5. --------------------
  6. 01f,04apr02,pch  SPR 74348: Enable PPC Machine Check exception ASAP
  7. 01e,20jan99,jpd  moved FREE_RAM_START_ADRS definition to usrKernel.c.
  8. 01d,19jan99,jgn  add sysHwInit0() facility
  9. 01c,29oct98,ms   added I960 hack.
  10. 01b,14jul98,ms   moved "IMPORT char end[]" to generated sysConfig.c.
  11. 01a,20apr98,ms   written from usrConfig.c
  12. */ 
  13. /*
  14. DESCRIPTION
  15. This routine performs critical early system initialization.
  16. */  
  17. /******************************************************************************
  18. *
  19. * sysStart - first c-code executed from usrInit
  20. */ 
  21. void sysStart (startType)
  22.     {
  23. #if     (CPU_FAMILY == SPARC)
  24.     excWindowInit ();                           /* SPARC window management */
  25. #endif
  26. #ifdef INCLUDE_SYS_HW_INIT_0
  27.     /*
  28.      * Perform any BSP-specific initialisation that must be done before
  29.      * cacheLibInit() is called and/or BSS is cleared.
  30.      */
  31.     SYS_HW_INIT_0 ();
  32. #endif /* INCLUDE_SYS_HW_INIT_0 */
  33. #ifdef CLEAR_BSS
  34. #if (CPU_FAMILY==I960)
  35.     /* All 960 BSPs set the initialSP to "supervisorStack", - a BSS variable.
  36.      * This is a problem, since clearing the BSS will trash the stack
  37.      * frame, and so things might crash when this routine returns.
  38.      * So we avoid clearing the variable.
  39.      * The right solution is to put supervisorStack in the .data segment,
  40.      * but then all BSPs (including 3rd party) would have to be updated.
  41.      */
  42.     /* perform hack iff supervisorStack variable is in BSS segment */
  43.     extern UINT32 supervisorStack[];
  44.     if ((UINT)supervisorStack > (UINT)edata)
  45. {
  46. UINT stackOffset = (UINT)supervisorStack + 400;
  47. bzero (edata, (UINT)supervisorStack - (UINT)edata);
  48. bzero ((char *)stackOffset, (UINT)end - (UINT)stackOffset);
  49. }
  50.     else
  51. #endif /* CPU_FAMILY==I960 */
  52. bzero (edata, end - edata);
  53. #endif /* CLEAR_BSS */
  54. #if (CPU_FAMILY == PPC)
  55.     /*
  56.      * Immediately after clearing the bss, ensure global stdin
  57.      * etc. are ERROR until set to real values.  This is used in
  58.      * target/src/arch/ppc/excArchLib.c to improve diagnosis of
  59.      * exceptions which occur before I/O is set up.
  60.      */
  61.     ioGlobalStdSet (STD_IN,  ERROR);
  62.     ioGlobalStdSet (STD_OUT, ERROR);
  63.     ioGlobalStdSet (STD_ERR, ERROR);
  64. #endif  /* CPU_FAMILY == PPC */
  65.     sysStartType = startType;
  66.     intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS);
  67. #if (CPU_FAMILY == PPC) && defined(INCLUDE_EXC_SHOW)
  68.     /*
  69.      * Do this ahead of excVecInit() to set up _func_excPanicHook, in case
  70.      * the enabling of Machine Check there allows a pending one to occur.
  71.      * excShowInit() will be called again later, harmlessly.
  72.      */
  73.     excShowInit ();
  74. #endif  /* CPU_FAMILY == PPC && defined(INCLUDE_EXC_SHOW) */
  75.     }