Esempio n. 1
0
int spw_open(int portnumber)
{
	ER er;
	UW data;
	int asize;
	int dd;
	if(portnumber==1){
		dd = tk_opn_dev((UB*)"spwa", TD_UPDATE);
	}else if(portnumber==2){
		dd = tk_opn_dev((UB*)"spwb", TD_UPDATE);
	}else if(portnumber==3){
		dd = tk_opn_dev((UB*)"spwc", TD_UPDATE);
	}else{
		printf("open error : invalid port number\n");
		return -1;
	}

	er = tk_srea_dev(dd, DN_SIGN, &data, sizeof(data), &asize);

	spw_set_read_timeout(dd,1000);
	spw_set_write_timeout(dd,1000);

	if (er == E_PAR) printf("E_PAR");
	else {
		printf("fpga ver. = 0x%04x\n", (unsigned short)(0x0000ffff & data));
	}

	return dd;
}
int spwr_get_linkstatus(int dd,int portnum,unsigned int* status){
	ER er;
	UW data;
	int asize;

	if(portnum<1 || 6<portnum){
		return E_PAR;
	}

	int address;
	switch(portnum){
	case 1: address=DN_SPW1CSR;break;
	case 2: address=DN_SPW2CSR;break;
	case 3: address=DN_SPW3CSR;break;
	case 4: address=DN_SPW4CSR;break;
	case 5: address=DN_SPW5CSR;break;
	case 6: address=DN_SPW6CSR;break;
	default: return E_PAR;break;
	}

	er = tk_srea_dev(dd, address, &data, sizeof(data), &asize);
	if (asize != 4) {
		tk_cls_dev(dd, 0);
		return E_IO;
	}

	*status=data;
	return er;
}
Esempio n. 3
0
int spw_connect(int dd)
{
	ER er;
	UW data, div;
	int asize;
	int n;

	printf("connecting ...\n");

	data = ((UW)txclk_div << 8) & 0x00003f00;
	data |= 0x00000001;
	er = tk_swri_dev(dd, DN_LINKC, &data, sizeof(data), &asize);

	for (n = 0; n < 100; n ++) {

		slp_tsk(50);
		er = tk_srea_dev(dd, DN_LINKS, &data, sizeof(data), &asize);
		if (er == E_PAR) printf("spw_connect : E_PAR");
		printf("status = 0x%08x\n", data);

		if ((data & 0x0000001c) == 0x0000001c) {
			printf("connected.\n");
			return 0;
		}
		slp_tsk(100);
	}
	return 1;
}
/** reset port
 */
int spwr_reset_link(int dd,int portnum){
	ER er;
	UW data;
	int asize;

	if(portnum<1 || 6<portnum){
		return E_PAR;
	}

	int address;
	switch(portnum){
	case 1: address=DN_SPW1CSR;break;
	case 2: address=DN_SPW2CSR;break;
	case 3: address=DN_SPW3CSR;break;
	case 4: address=DN_SPW4CSR;break;
	case 5: address=DN_SPW5CSR;break;
	case 6: address=DN_SPW6CSR;break;
	default: return E_PAR;break;
	}

	er = tk_srea_dev(dd, address, &data, sizeof(data), &asize);
	if (asize != 4) {
		return E_IO;
	}
	data = data & 0x00ffffff;
	data = data | SPW_LINKRESET;


	er = tk_swri_dev(dd, address, &data, sizeof(data), &asize);
	if (asize != 4) {
		er = E_IO;
	}

	return er;
}
int spwr_open(int portnum)
{
	ER er;
	UW data;
	int asize;
	int dd;
	if(portnum==4){
		dd = tk_opn_dev((UB*)"spwa", TD_UPDATE);
	}else if(portnum==5){
		dd = tk_opn_dev((UB*)"spwb", TD_UPDATE);
	}else if(portnum==6){
		dd = tk_opn_dev((UB*)"spwc", TD_UPDATE);
	}else{
		printf("open error : invalid port number\n");
		return -1;
	}

	if (dd < 0) {
		printf("open error (er=0x%8x)\n", dd);
		return dd;
	}

	/* Enable Timecode output to Port 1,2,3
	*/
	data=0x0000000e; //enable timecode output to port 1,2,3
	er = tk_swri_dev(dd, DN_TCODEEN, &data, sizeof(data), &asize);

	er = tk_srea_dev(dd, DN_SIGN, &data, sizeof(data), &asize);
	if (er == E_PAR) printf("E_PAR");
	else {
		printf("fpga ver. = 0x%04x\n", (unsigned short)(0x0000ffff & data));
	}

	return dd;
}
Esempio n. 6
0
int spw_get_timecode(int dd,unsigned char* flag_and_timecode){
	ER er;
	UW data;
	int asize;

	er = tk_srea_dev(dd, DN_TIMOUT, &data, 4, &asize);
	*flag_and_timecode=data | 0x000000ff;
	return er;
}
int spwr_get_timecode(int dd,unsigned char* flag_and_timecode){
	ER er;
	unsigned int data;
	int asize;
	int dd;

	er = tk_srea_dev(dd, DN_TCIN, &data, 4, &asize);
	
	*flag_and_timecode=(unsigned char)(data & 0x000000ff);
	return er;
	
}
UW spwr_table_read(int dd,UW index)
{
	ER er;
	int asize, data0;

	data0 = index;
	er = tk_swri_dev(dd, DN_TBLIDX, &data0, sizeof(data0), &asize);
	if (er != E_OK) return 0xffffffff;

	er = tk_srea_dev(dd, DN_TBLDAT, &data0, sizeof(data0), &asize);
	if (er != E_OK) return 0xffffffff;
	return data0;
}
int spwr_set_link3_txspeed(int dd,spwr_txclk_div txclk_div)
{
	ER er;
	UW data;
	int asize;

	er = tk_srea_dev(dd, DN_SPW3CSR, &data, sizeof(data), &asize);
	if (asize != 4) {
		return E_IO;
	}
	data = data | (((UW)txclk_div << 24) & 0x3f000000);
	er = tk_swri_dev(dd, DN_SPW3CSR, &data, sizeof(data), &asize);
	if (asize != 4) {
		return E_IO;
	}
	return er;
}
Esempio n. 10
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;
}
Esempio n. 11
0
/*
	Get from / Set to RTC
*/
LOCAL	void	rtc_get_set(SYSTIM *stm, BOOL set)
{
	ID		dd;
	W		asz;
	ER		er;
	DATE_TIM	dt;
	struct tm	ctm;
	struct tzinfo	tz;

	/* open RTC (CLOCK) driver */
	dd = tk_opn_dev("CLOCK", (set == TRUE) ? TD_WRITE : TD_READ);
	if (dd < E_OK) {
		P("Can't open CLOCK device [%#x]\n", dd);
		goto exit0;
	}

	/* Note: The RTC is set to UTC rather than local time. because UTC
	   is not affected by time zone and daylight saving time. */

	if (set == TRUE) {	/* set date to RTC */

		/* convert system time to UTC date/time */
		dt_gmtime_ms(stm, &ctm);

		/* set local date/time to RTC */
		dt.d_year = ctm.tm_year;
		dt.d_month = ctm.tm_mon + 1;
		dt.d_day = ctm.tm_mday;
		dt.d_hour = ctm.tm_hour;
		dt.d_min = ctm.tm_min;
		dt.d_sec = ctm.tm_sec;
		dt.d_wday = ctm.tm_wday;
		er = tk_swri_dev(dd, DN_CKDATETIME, &dt, sizeof(dt), &asz);
		if (er < E_OK) {
			P("Can't set CLOCK [%#x]\n", er);
			goto exit1;
		}
	} else {		/* get date from RTC */

		/* get timezone of "UTC+0" */
		memset(&tz, 0, sizeof(tz));
		er = dt_tzset(&tz, "UTC+0");
		if (er < E_OK ) {
			P("dt_tzset(UTC+0) ERR [%#x]\n", er);
			goto exit1;
		}

		/* get UTC date/time from RTC */
		er = tk_srea_dev(dd, DN_CKDATETIME, &dt, sizeof(dt), &asz);
		if (er < E_OK) {
			P("Can't get CLOCK [%#x]\n", er);
			goto exit1;
		}

		/* convert to system time */
		ctm.tm_year = dt.d_year;
		ctm.tm_mon = dt.d_month - 1;
		ctm.tm_mday = dt.d_day;
		ctm.tm_hour = dt.d_hour;
		ctm.tm_min = dt.d_min;
		ctm.tm_sec = dt.d_sec;
		ctm.tm_wday = dt.d_wday;
		ctm.tm_usec = 0;
		ctm.tm_wday = -1;
		ctm.tm_isdst = 0;
		ctm.tm_yday = 0;
		dt_mktime_ms(&ctm, &tz, stm);
	}
exit1:
	tk_cls_dev(dd, 0);
exit0:
	return;
}