gonzui


Format: Advanced Search

tkernel_2/kernel/sysinit/src/sysstartup.cbare sourcepermlink (0.05 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    T-Kernel 2.0 Software Package
    4:  *
    5:  *    Copyright 2011 by Ken Sakamura.
    6:  *    This software is distributed under the latest version of T-License 2.x.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by T-Engine Forum(http://www.t-engine.org/) at 2011/05/17.
   10:  *    Modified by TRON Forum(http://www.tron.org/) at 2015/06/01.
   11:  *
   12:  *----------------------------------------------------------------------
   13:  */
   14: 
   15: /*
   16:  *      sysstartup.c (sysinit)
   17:  *      Start/Stop System
   18:  */
   19: 
   20: #include "sysinit.h"
   21: #include "kernel.h"
   22: 
   23: /*
   24:  * Subsystem
   25:  */
   26: IMPORT ER init_subsystems( void );
   27: IMPORT ER start_subsystems( void );
   28: IMPORT ER finish_subsystems( void );
   29: 
   30: /*
   31:  * Manager/Driver
   32:  */
   33: IMPORT ER init_segmgr( void );                  /* Segment management */
   34: IMPORT ER start_segmgr( void );                 /* Segment management */
   35: IMPORT ER finish_segmgr( void );                /* Segment management */
   36: IMPORT ER init_memmgr( void );                  /* Memory management */
   37: IMPORT ER start_memmgr( void );                 /* Memory management */
   38: IMPORT ER finish_memmgr( void );                /* Memory management */
   39: IMPORT ER SystemManager( INT ac, UB *av[] );    /* T-Kernel/SM */
   40: IMPORT ER init_Imalloc( void );                 /* T-Kernel/SM */
   41: IMPORT void _InitLibtk(void);                   /* libtk */
   42: IMPORT void _FinishLibtk(void);                 /* libtk */
   43: IMPORT void t_kernel_exit( void );              /* T-Kernel/OS */
   44: 
   45: /*
   46:  * Initial task priority
   47:  */
   48: #define InitTaskPri     (138)
   49: 
   50: /*
   51:  * Initialize sequence before T-Kernel starts
   52:  */
   53: EXPORT void init_system( void )
   54: {
   55:         ER     ercd;
   56: 
   57:         /* Platform dependent initialize sequence */
   58:         DispProgress(0x10);
   59:         ercd = init_device();
   60:         if ( ercd < E_OK ) {
   61:                 goto err_ret;
   62:         }
   63: 
   64:         /* Initialize subsystem */
   65:         DispProgress(0x11);
   66:         ercd = init_subsystems();
   67:         if ( ercd < E_OK ) {
   68:                 goto err_ret;
   69:         }
   70: 
   71:         /* Initialize segment manager */
   72:         DispProgress(0x12);
   73:         ercd = init_segmgr();
   74:         if ( ercd < E_OK ) {
   75:                 goto err_ret;
   76:         }
   77: 
   78:         /* Initialize memory manager */
   79:         DispProgress(0x13);
   80:         ercd = init_memmgr();
   81:         if ( ercd < E_OK ) {
   82:                 goto err_ret;
   83:         }
   84: 
   85:         /* Initialize Imalloc */
   86:         DispProgress(0x14);
   87:         ercd = init_Imalloc();
   88:         if ( ercd < E_OK ) {
   89:                 goto err_ret;
   90:         }
   91: 
   92:         return;
   93: 
   94: err_ret:
   95: #if USE_KERNEL_MESSAGE
   96:         tm_putstring((UB*)"!ERROR! init_kernel\n");
   97: #endif
   98:         tm_monitor(); /* Stop */
   99: }
  100: 
  101: /*
  102:  * Start system
  103:  */
  104: EXPORT void start_system( void )
  105: {
  106:         ER     ercd;
  107: 
  108:         /* Initialize segment manager */
  109:         DispProgress(0x30);
  110:         ercd = start_segmgr();
  111:         if ( ercd < E_OK ) {
  112:                 goto err_ret;
  113:         }
  114: 
  115:         /* Start memory manager */
  116:         DispProgress(0x31);
  117:         ercd = start_memmgr();
  118:         if ( ercd < E_OK ) {
  119:                 goto err_ret;
  120:         }
  121: 
  122:         /* Initialize system manager */
  123:         DispProgress(0x32);
  124:         ercd = SystemManager(0, NULL);
  125:         if ( ercd < E_OK ) {
  126:                 goto err_ret;
  127:         }
  128: 
  129:         /* Initialize library (libtk)
  130:            V/K/Smalloc is available after this. */
  131:         DispProgress(0x33);
  132:         _InitLibtk();
  133: 
  134:         /* Lower the initial task priority to initialize sequence
  135:            for the subsystem task at first. */
  136:         tk_chg_pri(TSK_SELF, InitTaskPri);
  137: 
  138:         /* Start system dependent sequence */
  139:         DispProgress(0x34);
  140:         ercd = start_device();
  141:         if ( ercd < E_OK ) {
  142:                 goto err_ret;
  143:         }
  144: 
  145:         /* Start subsystem */
  146:         DispProgress(0x35);
  147:         ercd = start_subsystems();
  148:         if ( ercd < E_OK ) {
  149:                 goto err_ret;
  150:         }
  151: 
  152:         return;
  153: 
  154: err_ret:
  155: #if USE_KERNEL_MESSAGE
  156:         tm_putstring((UB*)"!ERROR! start_system\n");
  157: #endif
  158:         tm_monitor();  /* Stop */
  159: }
  160: 
  161: /*
  162:  * Stop system
  163:  */
  164: EXPORT void shutdown_system( INT fin )
  165: {
  166:         /* Stop subsystem */
  167:         finish_subsystems();
  168: 
  169:         /* Platform dependent finalize sequence */
  170:         finish_device();
  171: 
  172:         /* Stop library (libtk) */
  173:         _FinishLibtk();
  174: 
  175:         /* Shutdown message output */
  176: #if USE_KERNEL_MESSAGE
  177:         if ( fin >= 0 ) {
  178:           tm_putstring((UB*)"\n<< SYSTEM SHUTDOWN >>\n");
  179:         }
  180: #endif
  181:         /* Stop T-Kernel/SM */
  182:         SystemManager(-1, NULL);
  183: 
  184:         /* Stop memory manager */
  185:         finish_memmgr();
  186: 
  187:         /* Stop segment manager */
  188:         finish_segmgr();
  189: 
  190:         if ( fin < 0 ) {
  191:                 /* Re-start sequence (platform dependent) */
  192:                 restart_device(fin);
  193:         }
  194: 
  195:         /* Stop system */
  196:         t_kernel_exit();
  197: }