⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xlog.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
字号:
/* * * Copyright (C) Eicon Technology Corporation, 2000. * * This source file is supplied for the exclusive use with Eicon * Technology Corporation's range of DIVA Server Adapters. * * Eicon File Revision :    1.2   * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *//* * Unix Eicon active card driver * XLOG related functions */#include "sys.h"#include "idi.h"#include "pc.h"#include "pc_maint.h"#include "divalog.h"#include "adapter.h"#include "uxio.h"/* * convert/copy XLOG info into a KLOG entry */staticvoid	xlog_to_klog(byte *b, int size, int card_num){	typedef struct	{		word	code;		word	time_hi;		word	time_lo;		word	xcode;		byte	data[2];	} card_xlog_t;	card_xlog_t	*x;	klog_t		klog;	x = (card_xlog_t *) b;	bzero(&klog, sizeof(klog));	klog.time_stamp = (dword) x->time_hi;	klog.time_stamp = (klog.time_stamp << 16) | (dword) x->time_lo;	klog.length = size > sizeof(klog.buffer) ? sizeof(klog.buffer) : size;	klog.card = card_num;	if (x->code == 1)	{		klog.type = KLOG_XTXT_MSG;		klog.code = 0;		bcopy(&x->xcode, klog.buffer, klog.length);	}	else if (x->code == 2)	{		klog.type = KLOG_XLOG_MSG;		klog.code = x->xcode;		bcopy(&x->data, klog.buffer, klog.length);	}	else	{		char	*c; int i;		klog.type = KLOG_TEXT_MSG;		klog.code = 0;		c = "divas: invalid xlog message code from card";		i = 0;		while (*c)		{			klog.buffer[i] = *c;			c++;			i++;		}		klog.buffer[i] = *c;	}    /* send to the log driver and return */    DivasLogAdd(&klog, sizeof(klog));	return;}/* * send an XLOG request down to specified card * if response available from previous request then read it * if not then just send down new request, ready for next time */void	DivasXlogReq(int card_num){	card_t				*card;	ADAPTER 			*a;	if ((card_num < 0) || (card_num > DivasCardNext))	{		DPRINTF(("xlog: invalid card number"));		return;	}	card = &DivasCards[card_num];	if (DivasXlogRetrieve(card))	{		return;	}	/* send down request for next time */	a = &card->a;	a->ram_out(a, (word *) (card->xlog_offset + 1), 0);	a->ram_out(a, (word *) (dword) (card->xlog_offset), DO_LOG);	return;}/* * retrieve XLOG request from specified card * returns non-zero if new request sent to card */int		DivasXlogRetrieve(card_t *card){	ADAPTER 			*a;	struct mi_pc_maint	pcm;	a = &card->a;	/* get status of last request */	pcm.rc = a->ram_in(a, (word *)(card->xlog_offset + 1));	/* if nothing there from previous request, send down a new one */	if (pcm.rc == OK)	{		/* read in response */		a->ram_in_buffer(a, (word *) (dword) card->xlog_offset, &pcm, sizeof(pcm)); 		xlog_to_klog((byte *) &pcm.data, sizeof(pcm.data), 						(int) (card - DivasCards));	}	/* if any response received from card, re-send request */	if (pcm.rc)	{		a->ram_out(a, (word *) (card->xlog_offset + 1), 0);		a->ram_out(a, (word *) (dword) (card->xlog_offset), DO_LOG);		return 1;	} 	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -