Esempio n. 1
0
/*-----------------------------------------------------------------------------
 * 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 */
}
Esempio n. 3
0
/**
 * @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 */
}