added many initHooks - INITHOOK*<place> argument

This commit is contained in:
Bob Zieman
1992-09-10 19:50:20 +00:00
parent 964d189f63
commit 3ee0539fc8

View File

@@ -49,6 +49,7 @@
* .19 08-14-92 jba included dblinks with maximize severity in lockset
* .20 08-27-92 mrk removed wakeup_init (For old I/O Event scanning)
* .21 09-05-92 rcz changed dbUserExit to initHooks
* .22 09-10-92 rcz added many initHooks - INITHOOK*<place> argument
*
*/
@@ -110,7 +111,7 @@ long initDatabase();
long addToSet();
long initialProcess();
long getResources();
long setMasterTimeToSelf();
void setMasterTimeToSelf();
int iocInit(pResourceFilename)
char * pResourceFilename;
@@ -126,58 +127,77 @@ char * pResourceFilename;
logMsg("iocInit can only be called once\n");
return(-1);
}
coreRelease();
epicsSetEnvParams();
/* if function initHooks exists call it */
strcpy(name,"_");
strcat(name,"initHooks");
rtnval = symFindByName(sysSymTbl,name,(void *)&pinitHooks,&type);
if (!pdbBase) {
logMsg("iocInit aborting because No database loaded by dbLoad\n");
return(-1);
}
if(rtnval==OK && (type&N_TEXT!=0)) {
hookrtn=(*pinitHooks)(SETMASTERTIMETOSELF);
logMsg("initHooks(SETMASTERTIMETOSELF) was called\n");
/* if function initHooks exists setup ptr pinitHooks */
strcpy(name,"_");
strcat(name,"initHooks");
rtnval = symFindByName(sysSymTbl,name,(void *)&pinitHooks,&type);
if(!(rtnval==OK && (type&N_TEXT!=0))) {
logMsg("iocInit - WARNING symbol initHooks has wrong type - skipping all init hooks\n");
pinitHooks=NULL;
}
if (pinitHooks) (*pinitHooks)(INITHOOKatBeginning);
coreRelease();
epicsSetEnvParams();
if (pinitHooks) (*pinitHooks)(INITHOOKafterSetEnvParams);
status=getResources(pResourceFilename);
if(status!=0) {
logMsg("iocInit aborting because getResources failed\n");
return(-1);
}
if (pinitHooks) (*pinitHooks)(INITHOOKafterGetResources);
status = iocLogInit();
if(status!=0){
logMsg("iocInit Failed to Initialize Ioc Log Client \n");
}
if (pinitHooks) (*pinitHooks)(INITHOOKafterLogInit);
initialized = TRUE;
taskwdInit();
callbackInit();
/* wait 1/10 second */
(void)taskDelay(sysClkRateGet()/10);
if (pinitHooks) (*pinitHooks)(INITHOOKafterCallbackInit);
/* added for Channel Access Links */
dbCaLinkInit((int) 1);
if (pinitHooks) (*pinitHooks)(INITHOOKafterCaLinkInit1);
if(initDrvSup()!=0) logMsg("iocInit: Drivers Failed during Initialization\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterInitDrvSup);
if(initRecSup()!=0) logMsg("iocInit: Record Support Failed during Initialization\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterInitRecSup);
if(initDevSup()!=0) logMsg("iocInit: Device Support Failed during Initialization\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterInitDevSup);
ts_init();
if (pinitHooks) (*pinitHooks)(INITHOOKafterTS_init);
if(initDatabase()!=0) logMsg("iocInit: Database Failed during Initialization\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterInitDatabase);
/* added for Channel Access Links */
dbCaLinkInit((int) 2);
if (pinitHooks) (*pinitHooks)(INITHOOKafterCaLinkInit2);
if(finishDevSup()!=0) logMsg("iocInit: Device Support Failed during Finalization\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterFinishDevSup);
#if 0
if(rtnval==OK && (type&N_TEXT!=0)) {
hookrtn=(*pinitHooks)(DBUSEREXIT);
logMsg("initHooks(DBUSEREXIT) was called\n");
}
callbackInit();
#endif
scanInit();
/* wait 1/2 second to make sure all tasks are started*/
(void)taskDelay(sysClkRateGet()/2);
if (pinitHooks) (*pinitHooks)(INITHOOKafterScanInit);
interruptAccept=TRUE;
if (pinitHooks) (*pinitHooks)(INITHOOKafterInterruptAccept);
if(initialProcess()!=0) logMsg("iocInit: initialProcess Failed\n");
if (pinitHooks) (*pinitHooks)(INITHOOKafterInitialProcess);
rsrv_init();
logMsg("iocInit: All initialization complete\n");
if (pinitHooks) (*pinitHooks)(INITHOOKatEnd);
return(0);
}
@@ -826,7 +846,7 @@ char * pfilename;
}
return (0);
}
long setMasterTimeToSelf()
void setMasterTimeToSelf()
{
BOOT_PARAMS bp;
char *pnext;
@@ -844,14 +864,14 @@ long setMasterTimeToSelf()
sprintf(message,
"setMasterTimeToSelf: unable to parse boot params\n");
errMessage(-1L, message);
return (-1);
return;
}
rtnval = symFindByName(sysSymTbl, name, &pSymAddr, &type);
if (rtnval != OK || (type & N_TEXT == 0)) {
sprintf(message,
"setMasterTimeToSelf: symBol EPICS_IOCMCLK_INET not found");
errMessage(-1L, message);
return (-1);
return;
}
ptr = (char*)&bp.ead;
len=strlen((char*)&bp.ead);
@@ -865,5 +885,5 @@ long setMasterTimeToSelf()
ptr = (char*)&bp.ead;
len=strlen(ptr);
strncpy((char*)(pSymAddr + sizeof(void *)), ptr,len+1);
return (0);
return;
}