📄 system.c
字号:
/* *---------------------------------------------------------------------- * T-Kernel / Standard Extension * * Copyright (C) 2006 by Ken Sakamura. All rights reserved. * T-Kernel / Standard Extension is distributed * under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * * Version: 1.00.00 * Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* * system.c (proc) * * System management function */#include "prcmgr.h"#define TSD_TGV_VAL_1 1#define TSD_TGV_VAL_2 2#define TSD_TGV_VAL_3 3#define TSD_TGV_VAL_4 4#define TSD_TGV_VAL_5 5#define TSD_TGV_POS_0 0#define TSD_TGV_POS_1 1#define TSD_TGV_POS_2 2#define TSD_TGV_POS_3 3#define TSD_TGV_POS_4 4#define TSD_TGV_MAK_0X0000 (UH)0x0000#define TSD_TGV_ID_0X0000 (UH)0x0000#define TSD_TGV_SPV_0X0000 (UH)0x0000#define TSD_TGV_VAR_0X0000 (UH)0x0000#define TSD_TGV_PRV_0X0000 (UH)0x0000#define TSD_TGV_PRN_0X0000 (UH)0x0000/* * Obtain OS version information */EXPORT ER _tkse_get_ver( T_VER *version ){ W w[L_SYSCONF_VAL], n; ER err; /* Parameter check */ err = CheckSpaceRW(version, sizeof(T_VER)); if ( err < E_OK ) { goto err_ret; } version->maker = TSD_TGV_MAK_0X0000; /* Manufacturer */ version->id = TSD_TGV_ID_0X0000; /* Model number */ version->spver = TSD_TGV_SPV_0X0000; /* Specification version */ version->var = TSD_TGV_VAR_0X0000; /* Variation descriptor */ /* Product version */ n = GetSysConf((UB*)"OS-Ver", w); version->prver = ( n >= TSD_TGV_VAL_1 )? (UH)w[TSD_TGV_POS_0]: TSD_TGV_PRV_0X0000; /* Product management information */ version->prno[TSD_TGV_POS_0] = ( n >= TSD_TGV_VAL_2 )? (UH)w[TSD_TGV_POS_1] : TSD_TGV_PRN_0X0000; version->prno[TSD_TGV_POS_1] = ( n >= TSD_TGV_VAL_3 )? (UH)w[TSD_TGV_POS_2] : TSD_TGV_PRN_0X0000; version->prno[TSD_TGV_POS_2] = ( n >= TSD_TGV_VAL_4 )? (UH)w[TSD_TGV_POS_3] : TSD_TGV_PRN_0X0000; version->prno[TSD_TGV_POS_3] = ( n >= TSD_TGV_VAL_5 )? (UH)w[TSD_TGV_POS_4] : TSD_TGV_PRN_0X0000; /* CPU information */ version->cpu = TCPU_MYTYPE; return E_OK;err_ret: DEBUG_PRINT(("_tkse_get_ver err = %d\n", err)); return err;}/* * Loading of system program */EXPORT ER _tkse_lod_spg2( LINK *lnk, TC *arg, VW info[N_SPG_INFO] ){ W progid; ID oldrid; ER err; POBJ_HDR pohdr; /* Parameter check */ err = CheckSpaceR(lnk, sizeof(LINK)); if ( err < E_OK ) { goto err_ret1; } err = CheckStrSpaceR(arg, 0); if ( err < E_OK ) { goto err_ret1; } err = CheckSpaceRW(info, sizeof(VW) * N_SPG_INFO); if ( err < E_OK ) { goto err_ret1; } /* Switch to INIT process */ oldrid = tk_set_rid(TSK_SELF, INIT_PINFO->resid); if ( oldrid < E_OK ) { err = ERtoERR(oldrid); goto err_ret1; } /* Loading of system program */ pohdr.type = TMA_LINK; pohdr.src.lnk = lnk; progid = LoadSysProg(&pohdr, arg, (VP*)info); if ( progid < E_OK ) { err = progid; goto err_ret2; } /* Turn back process */ tk_set_rid(TSK_SELF, oldrid); return progid;err_ret2: tk_set_rid(TSK_SELF, oldrid);err_ret1: DEBUG_PRINT(("_tkse_lod_spg2 err = %d\n", err)); return err;}/* * Loading of system program (from SEIO) */EXPORT ER _tkse_lod_spg( T_LSPG *pk_sysprg, TC *arg, VW info[N_SPG_INFO] ){ W progid; ID oldrid; ATR atr; ER err; POBJ_HDR pohdr; /* Parameter check */ err = CheckSpaceR(pk_sysprg, sizeof(T_LSPG)); if ( err < E_OK ) { goto err_ret1; } err = CheckStrSpaceR(arg, 0); if ( err < E_OK ) { goto err_ret1; } err = CheckSpaceRW(info, sizeof(VW) * N_SPG_INFO); if ( err < E_OK ) { goto err_ret1; } atr = pk_sysprg->spgatr; if ((atr & ~TMA_INPUTMASK) != 0) { err = E_PAR; goto err_ret1; } /* Switch to INIT process */ oldrid = tk_set_rid(TSK_SELF, INIT_PINFO->resid); if ( oldrid < E_OK ) { err = ERtoERR(oldrid); goto err_ret1; } /* Loading of system program */ pohdr.type = (W)(atr & TMA_INPUTMASK); switch (pohdr.type) { case TMA_LINK: pohdr.src.lnk = (LINK*)pk_sysprg->spghdr; break; case TMA_SEIO: pohdr.src.path = (B*)pk_sysprg->spghdr; break; case TMA_PTR: pohdr.src.buf = (VP)pk_sysprg->spghdr; break; default: err = E_PAR; goto err_ret2; } progid = LoadSysProg(&pohdr, (TC *)arg, (VP*)info); if ( progid < E_OK ) { err = progid; goto err_ret2; } /* Turn back process */ tk_set_rid(TSK_SELF, oldrid); return progid;err_ret2: tk_set_rid(TSK_SELF, oldrid);err_ret1: DEBUG_PRINT(("_tkse_lod_spg err = %d\n", err)); return err;}/* * Unloading of system program */EXPORT ER _tkse_unl_spg( ID progid ){ ID oldrid; ER err; /* Switch to INIT process */ oldrid = tk_set_rid(TSK_SELF, INIT_PINFO->resid); if ( oldrid < E_OK ) { err = ERtoERR(oldrid); goto err_ret1; } /* Unloading of system program */ err = UnloadSysProg(progid); if ( err < E_OK ) { goto err_ret2; } /* Turn back process */ tk_set_rid(TSK_SELF, oldrid); return E_OK;err_ret2: tk_set_rid(TSK_SELF, oldrid);err_ret1: DEBUG_PRINT(("_tkse_unl_spg err = %d\n", err)); return err;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -