/* * End segment manager */ EXPORT ER finish_segmgr( void ) { ER ercd, ret = E_OK; /* Finish system exception manager */ ercd = finish_excmgr(); if ( ercd < E_OK ) { ret = ercd; } /* Delete subsystem registration */ ercd = tk_def_ssy(SEG_SVC, NULL); if ( ercd < E_OK ) { ret = ercd; } /* Remove segment manager lock */ DeleteLock(&SegLock); #ifdef DEBUG if ( ret < E_OK ) { TM_DEBUG_PRINT(("finish_segmgr ercd = %d\n", ret)); } #endif return ret; }
/* * Start segment management */ EXPORT ER start_segmgr( void ) { T_DSSY dssy; ER ercd; /* Register manager */ dssy.ssyatr = TA_NULL; dssy.ssypri = SEG_PRI; dssy.svchdr = (FP)SegSVCentry; dssy.breakfn = NULL; dssy.startupfn = NULL; dssy.cleanupfn = NULL; dssy.eventfn = NULL; dssy.resblksz = 0; ercd = tk_def_ssy(SEG_SVC, &dssy); if ( ercd < E_OK ) { goto err_ret; } return E_OK; err_ret: BMS_DEBUG_PRINT(("start_segmgr ercd = %d\n", ercd)); return ercd; }
/* * Calendar functions entry */ EXPORT ER dt_main(INT ac, UB* av[]) { ER er; T_DSSY dssy; if (ac < 0) { /* Stop other tasks from executing SVC */ Lock(&dtLock); /* Unregister subsystem */ tk_def_ssy(DT_SVC, NULL); /* Delete lock */ DeleteLock(&dtLock); return E_OK; } /* Create lock */ er = CreateLock(&dtLock, "dtLk"); if (er < E_OK) { goto err_ret0; } /* Register subsystem */ dssy.ssyatr = TA_NULL; dssy.ssypri = DT_PRI; dssy.svchdr = (FP)svcEntry; dssy.breakfn = NULL; dssy.startupfn = NULL; dssy.cleanupfn = NULL; dssy.eventfn = NULL; dssy.resblksz = 0; er = tk_def_ssy(DT_SVC, &dssy); if (er < E_OK) { goto err_ret1; } return E_OK; err_ret1: DeleteLock(&dtLock); err_ret0: return er; }
/* * End segment manager */ EXPORT ER finish_segmgr( void ) { ER ercd; /* Delete subsystem registration */ ercd = tk_def_ssy(SEG_SVC, NULL); #ifdef DEBUG if ( ercd < E_OK ) { DEBUG_PRINT(("finish_segmgr ercd = %d\n", ercd)); } #endif return ercd; }
/* * Finalization sequence of system management */ EXPORT ER finish_devmgr( void ) { ER ercd; /* Unregister subsystem */ ercd = tk_def_ssy(DEVICE_SVC, NULL); #ifdef DEBUG if ( ercd < E_OK ) { extension_printf(("1. finish_devmgr -> tk_def_ssy ercd = %d\n", ercd)); } #endif /* Unregister device initial setting information */ ercd = delIDev(); #ifdef DEBUG if ( ercd < E_OK ) { extension_printf(("2. finish_devmgr -> delIDev ercd = %d\n", ercd)); } #endif /* Finalization sequence of device input/output-related */ ercd = finishDevIO(); #ifdef DEBUG if ( ercd < E_OK ) { extension_printf(("3. finish_devmgr -> finishDevIO ercd = %d\n", ercd)); } #endif /* Delete device registration information table */ if ( DevCBtbl != NULL ) { Ifree(DevCBtbl); DevCBtbl = NULL; } /* Delete semaphore for device management synchronous control */ if ( DevMgrSync > 0 ) { tk_del_sem(DevMgrSync); DevMgrSync = 0; } /* Delete lock for device management exclusive control */ DeleteMLock(&DevMgrLock); return ercd; }
/* * Start segment management */ EXPORT ER start_segmgr( void ) { T_DSSY dssy; ER ercd; /* Create segment manager lock */ ercd = CreateLock(&SegLock, "Seg"); if ( ercd < E_OK ) { goto err_ret; } /* Start system exception manager */ ercd = start_excmgr(); if ( ercd < E_OK ) { goto err_ret; } /* Register manager */ dssy.ssyatr = TA_NULL; dssy.ssypri = SEG_PRI; dssy.svchdr = (FP)SegSVCentry; dssy.breakfn = NULL; dssy.startupfn = NULL; dssy.cleanupfn = NULL; dssy.eventfn = NULL; dssy.resblksz = 0; ercd = tk_def_ssy(SEG_SVC, &dssy); if ( ercd < E_OK ) { goto err_ret; } return E_OK; err_ret: #ifdef DEBUG TM_DEBUG_PRINT(("start_segmgr ercd = %d\n", ercd)); #endif return ercd; }