gonzui


Format: Advanced Search

mtkernel_3/kernel/sysdepend/cpu/core/armv7a/reset_main.cbare sourcepermlink (0.00 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    micro T-Kernel 3.00.05
    4:  *
    5:  *    Copyright (C) 2006-2021 by Ken Sakamura.
    6:  *    This software is distributed under the T-License 2.2.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by TRON Forum(http://www.tron.org) at 2021/11.
   10:  *
   11:  *----------------------------------------------------------------------
   12:  */
   13: 
   14: #include <sys/machine.h>
   15: #ifdef CPU_CORE_ARMV7A
   16: 
   17: /*
   18:  *      reset_main.c  (ARMv7-A)
   19:  *      Reset handler Main routine (Called from reset_hdl.S)
   20:  */
   21: 
   22: 
   23: #include "kernel.h"
   24: #include "../../../sysdepend.h"
   25: 
   26: #include <tm/tmonitor.h>
   27: 
   28: /* Low level memory manager information */
   29: EXPORT  void     *knl_lowmem_top;            // Head of area (Low address)
   30: EXPORT  void     *knl_lowmem_limit;          // End of area (High address)
   31: 
   32: IMPORT  const void *_data_org;
   33: IMPORT  const void *_data_start;
   34: IMPORT  const void *_data_end;
   35: IMPORT  const void *_bss_start;
   36: IMPORT  const void *_bss_end;
   37: IMPORT  const void *_HeapStart;
   38: 
   39: void L1CacheInit(void);
   40: 
   41: /* ------------------------------------------------------------------------ */
   42: /*
   43:  * Reset Handler Main routine (Called from reset_hdl.S)
   44:  */
   45: 
   46: EXPORT void reset_main(void)
   47: {
   48:         UW     *src, *top, *end;
   49: 
   50:         /* Startup Hardware */
   51:         knl_startup_hw();
   52: 
   53:         /* Load .data to ram */
   54: 
   55:         src = (UW*)&_data_org;;
   56:         top = (UW*)&_data_start;
   57:         end = (UW*)&_data_end;
   58:         while(top < end) {
   59:                 *top++ = *src++;
   60:         }
   61: 
   62:         /* Initialize .bss */
   63:         top = (UW*)&_bss_start;
   64:         end = (UW*)&_bss_end;
   65:         while( top < end) {
   66:                 *top++ = 0;
   67:         }
   68: 
   69: #if USE_IMALLOC
   70:         /* Set System memory area */
   71:         if(INTERNAL_RAM_START > SYSTEMAREA_TOP) {
   72:                 knl_lowmem_top = (UW*)INTERNAL_RAM_START;
   73:         } else {
   74:                 knl_lowmem_top = (UW*)SYSTEMAREA_TOP;
   75:         }
   76:         if((UW)knl_lowmem_top < (UW)&_HeapStart) {
   77:                 knl_lowmem_top = (UW*)&_HeapStart;
   78:         }
   79: 
   80:         if((SYSTEMAREA_END != 0) && (INTERNAL_RAM_END > SYSTEMAREA_END)) {
   81:                 knl_lowmem_limit = (UW*)(SYSTEMAREA_END);
   82:         } else {
   83:                 knl_lowmem_limit = (UW*)(INTERNAL_RAM_END);
   84:         }
   85: #endif  /* USE_IMALLOC */
   86: 
   87:         L1CacheInit();         /* L1 cache initialize */
   88: 
   89:         /* Startup Kernel */
   90:         main();                /**** No return ****/
   91:         while(1);      /* guard - infinite loops */
   92: }
   93: 
   94: 
   95: #endif  /* CPU_CORE_ARMV7A */
   96: