Exemple #1
0
/*
        KBPD keyboard/ PD real I/O driver entry
*/
EXPORT	ER	LowKbPdDrv(INT ac, UB *av[])
{
	char	*arg;
	W	v[L_DEVCONF_VAL];

        /* effective? */
	if (GetDevConf("LowKbPdDrvEnable", v) > 0 && !v[0]) return E_NOSPT;

	if (ac < 0) return E_OK;	/* no special epilog processor event */

        /* obtain start parameter */
	TaskPri = DEF_PRIORITY;
	if (ac > 1 && (arg = av[1]) != NULL) {
		switch (*arg++) {
		case '!':	/* priority */
			TaskPri = STRTOUL(arg, &arg, 0);
			break;
		default:
			return E_PAR;
		}
	}

        /* driver initialization */
	return kpStartUp();
}
Exemple #2
0
/*
 * Initialization at ROM startup
 *	This function is called before 'main()'.
 *	(same as 'SBOOT' for disk boot)
 */
EXPORT ER ROM_startup( void )
{
	W	val[L_DEVCONF_VAL];
	W	n;

	/* Set SYSCONF/DEVCONF */
	SCInfo.sysconf = ROMInfo->sysconf;
	SCInfo.devconf = ROMInfo->devconf;

	/* Initialize Boot mode/Operation mode */
	SCInfo.bm.w = 0;

	/* Set debug mode */
	n = GetDevConf(DCTAG_DEBUGMODE, val);
	SCInfo.bm.c.debug = ( n >= 1 && val[0] > 0 )? 1: 0;

	/* Set boot device (no boot device) */
	SCInfo.bootdev[0] = '\0';

	return E_OK;
}
Exemple #3
0
/*
        startup
*/
EXPORT	ER	ScreenDrv(INT ac, UB *av[])
{
	ER	er;
	T_IDEV	idev;
	SDefDev	ddev = {
		NULL,		/* exinf */
		"SCREEN",	/* devnm */
		0,		/* drvatr */
		0,		/* devatr */
		0,		/* nsub */
		1,		/* blksz */
		NULL,		/* open */
		NULL,		/* close */
		readfn,		/* read */
		writefn,	/* write */
		eventfn,	/* event */
	};
	W	v[L_DEVCONF_VAL];

        /* effective? */
	if (GetDevConf("ScreenDrvEnable", v) > 0 && !v[0]) return E_NOSPT;

        /* epilog processing */
	if (ac < 0) {
		if (Vinf.attr & NEED_FINPROC) (*(Vinf.fn_setmode))(-1);
		return E_OK;
	}
        /* initialization */
	suspended = FALSE;

        /* device initialization processing */
	if ((er = initSCREEN()) < E_OK) goto EEXIT;

        /* register device */
	er = SDefDevice(&ddev, &idev, &ScrSdi);
	if (er < E_OK) finishSCREEN();

 EEXIT:
	return er;
}
Exemple #4
0
/*
        initial setting at driver start up time
*/
LOCAL	ER	kpStartUp(void)
{
	W	w[L_DEVCONF_VAL];
	W	dd, n;
	ER	er;
	RawEvt	evt;
	T_CMBF	cmbf;
	T_CFLG	cflg;
	ID	datatsk;
	void*	name;
	union {
		FlgInStat	stat;
		UW		uw;
	} u;

        /* extract ID of the mailbox for event notification to KB/PD driver */
	dd = er = tk_opn_dev(devkbpd, TD_READ);
	if (er >= E_OK) {
		er = tk_srea_dev(dd, DN_KPINPUT, (VB*)&EvtMbx,
						sizeof(EvtMbx), &n);
		tk_cls_dev(dd, 0);
	}
	if (er < E_OK) goto EEXIT1;

        /* KBID is extracted from DEVCONF parameter */
	KbdId = (GetDevConf("KBTYPE", w) == 1) ? w[0] : KID_IBM_JP;

        /* input message buffer creation */
	SetOBJNAME(cmbf.exinf, "lkbM");
	cmbf.mbfatr = TA_TFIFO;
	cmbf.bufsz  = sizeof(InMsg) * MAX_INMSG;
	cmbf.maxmsz = sizeof(InMsg);
	if ((er = tk_cre_mbf(&cmbf)) < E_OK) goto EEXIT1;
	InpMbf = er;

        /* creating the event flag for command */
	SetOBJNAME(cflg.exinf, "lkbC");
	cflg.flgatr  = TA_WMUL;
	cflg.iflgptn = 0;
	if ((er = tk_cre_flg(&cflg)) < E_OK) goto EEXIT2;
	CmdFlg = (ID)er;

        /* create and start data processing task */
	SetOBJNAME(name, "lkbD");
	er = kpCreTask((W)name, kpDataTask);
	if (er < E_OK) goto EEXIT3;
	datatsk = (ID)er;

        /* create and start command processing task */
	SetOBJNAME(name, "lkbC");
	er = kpCreTask((W)name, kpCmdTask);
	if (er < E_OK) goto EEXIT4;
	CmdTsk = (ID)er;

        /* registering event flag for commands */
	u.uw = 0;
	evt.f.stat = u.stat;
	evt.f.stat.cmd = INP_FLG;
	evt.f.stat.kb = 1;
	evt.f.stat.kbid = KbdId;
	evt.f.stat.reg = 1;
	evt.f.flgid = CmdFlg;
	if ((er = kpSendMsg(&evt)) < E_OK) goto EEXIT5;

        /* device initialization processing */
	er = hwInit(DC_OPEN);
	if (er < E_OK) goto EEXIT5;

	return E_OK;

EEXIT5:
	tk_ter_tsk(CmdTsk);
	tk_del_tsk(CmdTsk);
EEXIT4:
	tk_ter_tsk(datatsk);
	tk_del_tsk(datatsk);
EEXIT3:
	tk_del_flg(CmdFlg);
EEXIT2:
	tk_del_mbf(InpMbf);
EEXIT1:
	DP(("kpStartUp: err=%#x\n", er));
	return er;
}