t2ex/t2ex_source/lib/libtk/src_t2ex/libinit.c | bare source | permlink (0.04 seconds) |
1: /* 2: *---------------------------------------------------------------------- 3: * T2EX Software Package 4: * 5: * Copyright 2012 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 2012/12/12. 10: * Modified by TRON Forum(http://www.tron.org/) at 2015/06/04. 11: * 12: *---------------------------------------------------------------------- 13: */ 14: /* 15: * This software package is available for use, modification, 16: * and redistribution in accordance with the terms of the attached 17: * T-License 2.x. 18: * If you want to redistribute the source code, you need to attach 19: * the T-License 2.x document. 20: * There's no obligation to publish the content, and no obligation 21: * to disclose it to the TRON Forum if you have modified the 22: * software package. 23: * You can also distribute the modified source code. In this case, 24: * please register the modification to T-Kernel traceability service. 25: * People can know the history of modifications by the service, 26: * and can be sure that the version you have inherited some 27: * modification of a particular version or not. 28: * 29: * http://trace.tron.org/tk/?lang=en 30: * http://trace.tron.org/tk/?lang=ja 31: * 32: * As per the provisions of the T-License 2.x, TRON Forum ensures that 33: * the portion of the software that is copyrighted by Ken Sakamura or 34: * the TRON Forum does not infringe the copyrights of a third party. 35: * However, it does not make any warranty other than this. 36: * DISCLAIMER: TRON Forum and Ken Sakamura shall not be held 37: * responsible for any consequences or damages caused directly or 38: * indirectly by the use of this software package. 39: * 40: * The source codes in bsd_source.tar.gz in this software package are 41: * derived from NetBSD or OpenBSD and not covered under T-License 2.x. 42: * They need to be changed or redistributed according to the 43: * representation of each source header. 44: */ 45: 46: /* 47: * @(#)libinit.c (libtk) 48: * 49: * libker library initialization 50: * 51: * _InitLibtk() is always linked as it is called from the 52: * startup part. 53: * Note that adding too many processing can make the program 54: * quite large. 55: */ 56: 57: #include "libtk.h" 58: #include <sys/util.h> 59: #include <sys/memalloc.h> 60: #include <t2ex/util.h> 61: 62: EXPORT MACB _Kmacb; /* Kmalloc management information */ 63: EXPORT MACB _Vmacb; /* Vmalloc management information */ 64: IMPORT MACB _Smacb; /* Smalloc management information */ 65: #ifdef T2EX_MM 66: IMPORT FastULock _SmacbLock; /* Smalloc lock */ 67: #endif 68: 69: #ifdef T2EX 70: EXPORT INT t2ex_call_limit; 71: #endif 72: LOCAL BOOL libtk_init_done = FALSE; 73: 74: /* 75: * Library initialization 76: */ 77: EXPORT void _InitLibtk( void ) 78: { 79: INT rng; 80: 81: if ( libtk_init_done ) { 82: return; /* Initialized */ 83: } 84: 85: /* Kernel utility initialization */ 86: KnlInit(); 87: 88: #ifdef T2EX 89: /* T2EX API protected level */ 90: if ( tk_get_cfn("TSVCLimit", &t2ex_call_limit, 1) < 1 ) { 91: t2ex_call_limit = 2; 92: } 93: 94: /* Kmalloc/Vmalloc memory protection level */ 95: if ( tk_get_cfn("TKmallocLvl", &rng, 1) < 1 ) { 96: rng = t2ex_call_limit; 97: } 98: #else 99: /* Lowest protection level where system calls can be issued */ 100: if ( tk_get_cfn("TSVCLimit", &rng, 1) < 1 ) { 101: rng = 2; 102: } 103: #endif 104: rng <<= 8; 105: 106: /* Create exclusive control lock for library sharing */ 107: _init_liblock(); 108: #ifdef T2EX_MM 109: CreateULock(&_SmacbLock, "ultk"); 110: #endif 111: 112: /* malloc initialization */ 113: _tkm_init((UINT)rng, &_Kmacb); /* Kmalloc init */ 114: _tkm_init((UINT)rng|TA_NORESIDENT, &_Vmacb); /* Vmalloc init */ 115: _tkm_init(TA_RNG3|TA_NORESIDENT, &_Smacb); /* Smalloc init */ 116: 117: libtk_init_done = TRUE; /* Initialization complete */ 118: } 119: 120: /* 121: * Library finalization 122: */ 123: EXPORT void _FinishLibtk( void ) 124: { 125: if ( !libtk_init_done ) { 126: return; 127: } 128: 129: DeleteULock(&_SmacbLock); 130: _delete_liblock(); 131: }