/*----------------------------------------------------------------------------- * FUNCTION: CtcUserInst. * DESCRIPTION: User entry point in driver/simulator installation routine. * It's up to user to set kernel-level errno (by means of * 'pseterr' call). 'proceed' parameter denotes if further * standard execution should be proceed after function returns. * FALSE - means that user-desired operation done all that user * wants and there is no further necessaty to perfom any standard * operations that follow function call. TRUE - means that code * that follows function call will be executed. * RETURNS: return value is the same as in entry point function. * pointer to a statics data structure - if succeed. * SYSERR - in case of failure. *----------------------------------------------------------------------------- */ char* CtcUserInst( int *proceed, /* if standard code execution should be proceed */ register DevInfo_t *info, /* */ register CTCStatics_t *sptr) /* */ { CTCUserStatics_t *usp; /* user statistics table */ int iVec = 0; /* interrupt vector */ usp = sptr->usrst; iVec = info->iVector; /* set up interrupt vector */ #if 0 /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | user-defined code is here. | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Uncomment the following code to register ISR: !WARNING! It's worth to do 'man iointset' before to start. */ if (iVec > 0) { int coco = 0; /* completion code */ DBG_install(("ISR ( vector number [%d] ) installation - ", iVec)); #ifdef __powerpc__ /* in this case we are using CES BSP */ coco = vme_intset(iVec, (int (*)())CtcISR, (char*)sptr, 0); #else /* use standard system call otherwise */ coco = iointset(iVec, (int (*)())CtcISR, (char*)sptr); #endif if (coco < 0) { DBG_install(("Failed.\n")); pseterr(EFAULT); /* TODO. what error to set? */ return((char*)SYSERR); /* -1 */ } DBG_install(("interrupt vector managed.\n")); } #endif if (proceed) *proceed = TRUE; /* continue standard code execution */ return((char*)sptr); /* succeed */ }
/** * @brief User entry point in driver/simulator installation routine. * * @param proceed -- if standard code execution should be proceed * @param info -- driver info table * @param sptr -- statics table * * It's up to user to set kernel-level errno (by means of @e pseterr call). * @e proceed parameter denotes if further standard actions should be proceed * after function returns. @b FALSE - means that user-desired operation done * all that user wants and there is no further necessaty to perfom any standard * operations that follow function call. @b TRUE - means that code that follows * function call will be executed. * * @return return value is the same as in entry point function.\n * pointer to a statics data structure - if succeed.\n * SYSERR - in case of failure. */ char* GfaschannelUserInst(int *proceed, register DevInfo_t *info, register GFASCHANNELStatics_t *sptr) { GFASCHANNELUserStatics_t *usp; /* user statistics table */ int iVec = 0; /* interrupt vector */ usp = sptr->usrst; iVec = info->iVector; /* set up interrupt vector */ /* Uncomment the following code to register ISR */ #if 0 if (iVec > 0) { int cc = 0; /* completion code */ kkprintf("ISR ( vector number [%d] ) installation - ", iVec); #ifdef __Lynx__ #ifdef __powerpc__ /* in this case we are using CES BSP */ cc = vme_intset(iVec, (int (*)())GfaschannelISR, (char*)sptr, 0); #else /* use standard system call otherwise */ cc = iointset(iVec, (int (*)())GfaschannelISR, (char*)sptr); #endif #else /* __linux__ */ cc = vme_request_irq(iVec, (int (*)(void *))GfaschannelISR, (char *)sptr, "GfaschannelD"); #endif /* __Lynx__ */ if (cc < 0) { kkprintf("Failed.\n"); pseterr(EFAULT); /* TODO. what error to set? */ return (char*)SYSERR; /* -1 */ } kkprintf("interrupt vector managed.\n"); } #endif if (proceed) *proceed = TRUE; /* continue standard code execution */ return (char *)sptr; /* succeed */ }
/** * @brief User entry point in driver/simulator installation routine. * * @param proceed -- if standard code execution should be proceed * @param info -- driver info table * @param sptr -- statics table * * It's up to user to set kernel-level errno (by means of @e pseterr call). * @e proceed parameter denotes if further standard actions should be proceed * after function returns. @b FALSE - means that user-desired operation done * all that user wants and there is no further necessaty to perfom any standard * operations that follow function call. @b TRUE - means that code that follows * function call will be executed. * * @return return value is the same as in entry point function.\n * pointer to a statics data structure - if succeed.\n * SYSERR - in case of failure. */ char* CvorbUserInst(int *proceed, register DevInfo_t *info, register CVORBStatics_t *sptr) { CVORBUserStatics_t *usp = sptr->usrst; /* user statistics table */ int iVec = 0; /* interrupt vector */ int m, c; iVec = info->iVector; /* set up interrupt vector */ /* map submodule address pointers */ usp->md = (struct cvorb_module *)sysbrk(sizeof(_m)); usp->md[0].md = (mod *)sptr->card->block00; usp->md[1].md = (mod *)((long)sptr->card->block00 + 0x200); if (!firmware_ok(usp, info->mlun)) { sysfree((char *)usp->md, sizeof(_m)); return (char *)SYSERR; } for (m = 0; m < SMAM; m++) { /* reset subModules */ _wr(m, SOFT_PULSE, SPR_FGR); /* initialize iolock mutex */ cdcm_mutex_init(&usp->md[m].iol); /* set submodule channels addresses */ for (c = 0; c < CHAM; c++) usp->md[m].cd[c] = (chd *) ((long)usp->md[m].md + _ch_offset[c]); } /* init on-board DAC */ ad9516o_init(usp); /* disable on-board clock generator */ _wr(0, CLK_GEN_CNTL, AD9516_OFF); /* set normal mode operation, enable all channels and set recurrent cycles to 1 (i.e. play function once) */ enable_modules(usp); /* Uncomment the following code to register ISR */ #if 0 if (iVec > 0) { int cc = 0; /* completion code */ kkprintf("ISR ( vector number [%d] ) installation - ", iVec); #ifdef __Lynx__ #ifdef __powerpc__ /* in this case we are using CES BSP */ cc = vme_intset(iVec, (int (*)())CvorbISR, (char*)sptr, 0); #else /* use standard system call otherwise */ cc = iointset(iVec, (int (*)())CvorbISR, (char*)sptr); #endif #else /* __linux__ */ cc = vme_request_irq(iVec, (int (*)(void *))CvorbISR, (char *)sptr, "CvorbD"); #endif /* __Lynx__ */ if (cc < 0) { kkprintf("Failed.\n"); pseterr(EFAULT); /* TODO. what error to set? */ return (char*)SYSERR; /* -1 */ } kkprintf("interrupt vector managed.\n"); } #endif if (proceed) *proceed = TRUE; /* continue standard code execution */ return (char *)sptr; /* succeed */ }