亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? skproc.c

?? UBOOT 源碼
?? C
字號:
/****************************************************************************** * * Name:    skproc.c * Project:	GEnesis, PCI Gigabit Ethernet Adapter * Version:	$Revision: 1.4 $ * Date:    $Date: 2003/02/25 14:16:37 $ * Purpose:	Funktions to display statictic data * ******************************************************************************//****************************************************************************** * *	(C)Copyright 1998-2003 SysKonnect GmbH. * *	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 of the License, or *	(at your option) any later version. * *	Created 22-Nov-2000 *	Author: Mirko Lindner (mlindner@syskonnect.de) * *	The information in this file is provided "AS IS" without warranty. * ******************************************************************************//****************************************************************************** * * History: * *	$Log: skproc.c,v $ *	Revision 1.4  2003/02/25 14:16:37  mlindner *	Fix: Copyright statement * *	Revision 1.3  2002/10/02 12:59:51  mlindner *	Add: Support for Yukon *	Add: Speed check and setup *	Add: Merge source for kernel 2.2.x and 2.4.x *	Add: Read sensor names directly from VPD *	Fix: Volt values * *	Revision 1.2.2.7  2002/01/14 12:45:15  mlindner *	Fix: Editorial changes * *	Revision 1.2.2.6  2001/12/06 15:26:07  mlindner *	Fix: Return value of proc_read * *	Revision 1.2.2.5  2001/12/06 09:57:39  mlindner *	New ProcFs entries * *	Revision 1.2.2.4  2001/09/05 12:16:02  mlindner *	Add: New ProcFs entries *	Fix: Counter Errors (Jumbo == to long errors) *	Fix: Kernel error compilation *	Fix: too short counters * *	Revision 1.2.2.3  2001/06/25 07:26:26  mlindner *	Add: More error messages * *	Revision 1.2.2.2  2001/03/15 12:50:13  mlindner *	fix: ProcFS owner protection * *	Revision 1.2.2.1  2001/03/12 16:43:48  mlindner *	chg: 2.4 requirements for procfs * *	Revision 1.1  2001/01/22 14:15:31  mlindner *	added ProcFs functionality *	Dual Net functionality integrated *	Rlmt networks added * * ******************************************************************************/#include <config.h>#ifdef CONFIG_SK98#include <linux/proc_fs.h>#include "h/skdrv1st.h"#include "h/skdrv2nd.h"#define ZEROPAD		1		/* pad with zero */#define SIGN		2		/* unsigned/signed long */#define PLUS		4		/* show plus */#define SPACE		8		/* space if plus */#define LEFT		16		/* left justified */#define SPECIALX	32		/* 0x */#define LARGE		64extern SK_AC				*pACList;extern struct net_device 	*SkGeRootDev;extern char * SkNumber(	char * str,	long long num,	int base,	int size,	int precision,	int type);/***************************************************************************** * * 	proc_read - print "summaries" entry * * Description: *  This function fills the proc entry with statistic data about *  the ethernet device. * * * Returns: buffer with statistic data * */int proc_read(char *buffer,char **buffer_location,off_t offset,int buffer_length,int *eof,void *data){	int len = 0;	int t;	int i;	DEV_NET					*pNet;	SK_AC					*pAC;	char 					test_buf[100];	char					sens_msg[50];	unsigned long			Flags;	unsigned int			Size;	struct SK_NET_DEVICE 		*next;	struct SK_NET_DEVICE 		*SkgeProcDev = SkGeRootDev;	SK_PNMI_STRUCT_DATA 	*pPnmiStruct;	SK_PNMI_STAT		*pPnmiStat;	struct proc_dir_entry *file = (struct proc_dir_entry*) data;	while (SkgeProcDev) {		pNet = (DEV_NET*) SkgeProcDev->priv;		pAC = pNet->pAC;		next = pAC->Next;		pPnmiStruct = &pAC->PnmiStruct;		/* NetIndex in GetStruct is now required, zero is only dummy */		for (t=pAC->GIni.GIMacsFound; t > 0; t--) {			if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 1)				t--;			spin_lock_irqsave(&pAC->SlowPathLock, Flags);			Size = SK_PNMI_STRUCT_SIZE;			SkPnmiGetStruct(pAC, pAC->IoBase,				pPnmiStruct, &Size, t-1);			spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);			if (strcmp(pAC->dev[t-1]->name, file->name) == 0) {				pPnmiStat = &pPnmiStruct->Stat[0];				len = sprintf(buffer,					"\nDetailed statistic for device %s\n",					pAC->dev[t-1]->name);				len += sprintf(buffer + len,					"=======================================\n");				/* Board statistics */				len += sprintf(buffer + len,					"\nBoard statistics\n\n");				len += sprintf(buffer + len,					"Active Port                    %c\n",					'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.					Net[t-1].PrefPort]->PortNumber);				len += sprintf(buffer + len,					"Preferred Port                 %c\n",					'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.					Net[t-1].PrefPort]->PortNumber);				len += sprintf(buffer + len,					"Bus speed (MHz)                %d\n",					pPnmiStruct->BusSpeed);				len += sprintf(buffer + len,					"Bus width (Bit)                %d\n",					pPnmiStruct->BusWidth);				len += sprintf(buffer + len,					"Hardware revision              v%d.%d\n",					(pAC->GIni.GIPciHwRev >> 4) & 0x0F,					pAC->GIni.GIPciHwRev & 0x0F);				/* Print sensor informations */				for (i=0; i < pAC->I2c.MaxSens; i ++) {					/* Check type */					switch (pAC->I2c.SenTable[i].SenType) {					case 1:						strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);						strcat(sens_msg, " (C)");						len += sprintf(buffer + len,							"%-25s      %d.%02d\n",							sens_msg,							pAC->I2c.SenTable[i].SenValue / 10,							pAC->I2c.SenTable[i].SenValue % 10);						strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);						strcat(sens_msg, " (F)");						len += sprintf(buffer + len,							"%-25s      %d.%02d\n",							sens_msg,							((((pAC->I2c.SenTable[i].SenValue)							*10)*9)/5 + 3200)/100,							((((pAC->I2c.SenTable[i].SenValue)							*10)*9)/5 + 3200) % 10);						break;					case 2:						strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);						strcat(sens_msg, " (V)");						len += sprintf(buffer + len,							"%-25s      %d.%03d\n",							sens_msg,							pAC->I2c.SenTable[i].SenValue / 1000,							pAC->I2c.SenTable[i].SenValue % 1000);						break;					case 3:						strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);						strcat(sens_msg, " (rpm)");						len += sprintf(buffer + len,							"%-25s      %d\n",							sens_msg,							pAC->I2c.SenTable[i].SenValue);						break;					default:						break;					}				}				/*Receive statistics */				len += sprintf(buffer + len,				"\nReceive statistics\n\n");				len += sprintf(buffer + len,					"Received bytes                 %s\n",					SkNumber(test_buf, pPnmiStat->StatRxOctetsOkCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Received packets               %s\n",					SkNumber(test_buf, pPnmiStat->StatRxOkCts,					10,0,-1,0));#if 0				if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC &&					pAC->HWRevision < 12) {					pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -						pPnmiStat->StatRxShortsCts;					pPnmiStat->StatRxShortsCts = 0;				}#endif				if (pNet->Mtu > 1500)					pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -						pPnmiStat->StatRxTooLongCts;				len += sprintf(buffer + len,					"Receive errors                 %s\n",					SkNumber(test_buf, pPnmiStruct->InErrorsCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Receive drops                  %s\n",					SkNumber(test_buf, pPnmiStruct->RxNoBufCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Received multicast             %s\n",					SkNumber(test_buf, pPnmiStat->StatRxMulticastOkCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Receive error types\n");				len += sprintf(buffer + len,					"   length                      %s\n",					SkNumber(test_buf, pPnmiStat->StatRxRuntCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   buffer overflow             %s\n",					SkNumber(test_buf, pPnmiStat->StatRxFifoOverflowCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   bad crc                     %s\n",					SkNumber(test_buf, pPnmiStat->StatRxFcsCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   framing                     %s\n",					SkNumber(test_buf, pPnmiStat->StatRxFramingCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   missed frames               %s\n",					SkNumber(test_buf, pPnmiStat->StatRxMissedCts,					10, 0, -1, 0));				if (pNet->Mtu > 1500)					pPnmiStat->StatRxTooLongCts = 0;				len += sprintf(buffer + len,					"   too long                    %s\n",					SkNumber(test_buf, pPnmiStat->StatRxTooLongCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   carrier extension           %s\n",					SkNumber(test_buf, pPnmiStat->StatRxCextCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   too short                   %s\n",					SkNumber(test_buf, pPnmiStat->StatRxShortsCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   symbol                      %s\n",					SkNumber(test_buf, pPnmiStat->StatRxSymbolCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   LLC MAC size                %s\n",					SkNumber(test_buf, pPnmiStat->StatRxIRLengthCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   carrier event               %s\n",					SkNumber(test_buf, pPnmiStat->StatRxCarrierCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   jabber                      %s\n",					SkNumber(test_buf, pPnmiStat->StatRxJabberCts,					10, 0, -1, 0));				/*Transmit statistics */				len += sprintf(buffer + len,				"\nTransmit statistics\n\n");				len += sprintf(buffer + len,					"Transmited bytes               %s\n",					SkNumber(test_buf, pPnmiStat->StatTxOctetsOkCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Transmited packets             %s\n",					SkNumber(test_buf, pPnmiStat->StatTxOkCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Transmit errors                %s\n",					SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Transmit dropped               %s\n",					SkNumber(test_buf, pPnmiStruct->TxNoBufCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Transmit collisions            %s\n",					SkNumber(test_buf, pPnmiStat->StatTxSingleCollisionCts,					10,0,-1,0));				len += sprintf(buffer + len,					"Transmit errors types\n");				len += sprintf(buffer + len,					"   excessive collision         %ld\n",					pAC->stats.tx_aborted_errors);				len += sprintf(buffer + len,					"   carrier                     %s\n",					SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   fifo underrun               %s\n",					SkNumber(test_buf, pPnmiStat->StatTxFifoUnderrunCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   heartbeat                   %s\n",					SkNumber(test_buf, pPnmiStat->StatTxCarrierCts,					10, 0, -1, 0));				len += sprintf(buffer + len,					"   window                      %ld\n",					pAC->stats.tx_window_errors);			}		}		SkgeProcDev = next;	}	if (offset >= len) {		*eof = 1;		return 0;	}	*buffer_location = buffer + offset;	if (buffer_length >= len - offset) {		*eof = 1;	}	return (min_t(int, buffer_length, len - offset));}/***************************************************************************** * * SkDoDiv - convert 64bit number * * Description: *	This function "converts" a long long number. * * Returns: *	remainder of division */static long SkDoDiv (long long Dividend, int Divisor, long long *pErg){ long   	Rest; long long 	Ergebnis; long   	Akku; Akku  = Dividend >> 32; Ergebnis = ((long long) (Akku / Divisor)) << 32; Rest = Akku % Divisor ; Akku = Rest << 16; Akku |= ((Dividend & 0xFFFF0000) >> 16); Ergebnis += ((long long) (Akku / Divisor)) << 16; Rest = Akku % Divisor ; Akku = Rest << 16; Akku |= (Dividend & 0xFFFF); Ergebnis += (Akku / Divisor); Rest = Akku % Divisor ; *pErg = Ergebnis; return (Rest);}#if 0#define do_div(n,base) ({ \long long __res; \__res = ((unsigned long long) n) % (unsigned) base; \n = ((unsigned long long) n) / (unsigned) base; \__res; })#endif/***************************************************************************** * * SkNumber - Print results * * Description: *	This function converts a long long number into a string. * * Returns: *	number as string */char * SkNumber(char * str, long long num, int base, int size, int precision	,int type){	char c,sign,tmp[66], *strorg = str;	const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";	int i;	if (type & LARGE)		digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";	if (type & LEFT)		type &= ~ZEROPAD;	if (base < 2 || base > 36)		return 0;	c = (type & ZEROPAD) ? '0' : ' ';	sign = 0;	if (type & SIGN) {		if (num < 0) {			sign = '-';			num = -num;			size--;		} else if (type & PLUS) {			sign = '+';			size--;		} else if (type & SPACE) {			sign = ' ';			size--;		}	}	if (type & SPECIALX) {		if (base == 16)			size -= 2;		else if (base == 8)			size--;	}	i = 0;	if (num == 0)		tmp[i++]='0';	else while (num != 0)		tmp[i++] = digits[SkDoDiv(num,base, &num)];	if (i > precision)		precision = i;	size -= precision;	if (!(type&(ZEROPAD+LEFT)))		while(size-->0)			*str++ = ' ';	if (sign)		*str++ = sign;	if (type & SPECIALX) {		if (base==8)			*str++ = '0';		else if (base==16) {			*str++ = '0';			*str++ = digits[33];		}	}	if (!(type & LEFT))		while (size-- > 0)			*str++ = c;	while (i < precision--)		*str++ = '0';	while (i-- > 0)		*str++ = tmp[i];	while (size-- > 0)		*str++ = ' ';	str[0] = '\0';	return strorg;}#endif /* CONFIG_SK98 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧亚洲嫩模精品一区三区| 一区二区三区免费在线观看| 最新日韩av在线| 青青草97国产精品免费观看无弹窗版| 国产精品香蕉一区二区三区| 欧美片在线播放| 国产精品久久久久久久久搜平片| 日本人妖一区二区| 91国产免费观看| 亚洲欧洲日本在线| 国产美女一区二区三区| 欧美日韩国产片| 亚洲精选视频免费看| 成人免费不卡视频| 久久九九久久九九| 九色综合国产一区二区三区| 欧美高清视频在线高清观看mv色露露十八 | 婷婷综合另类小说色区| 91麻豆蜜桃一区二区三区| 久久品道一品道久久精品| 蜜桃视频在线观看一区| 欧美日本高清视频在线观看| 亚洲卡通动漫在线| 91在线精品一区二区三区| 中文字幕av在线一区二区三区| 精品无人码麻豆乱码1区2区| 91精品国产一区二区人妖| 亚洲国产综合91精品麻豆| 色综合色狠狠天天综合色| 中文字幕一区二区三区在线播放 | 欧美性色黄大片| 亚洲三级在线看| 色狠狠一区二区三区香蕉| 亚洲日本在线视频观看| 日本道色综合久久| 一区二区三区**美女毛片| 色拍拍在线精品视频8848| 一区二区三区在线观看网站| 91久久精品午夜一区二区| 一区二区激情小说| 欧美日韩免费电影| 日韩极品在线观看| 日韩欧美一区在线观看| 经典三级视频一区| 久久精品男人的天堂| 成人av网站免费观看| 亚洲激情自拍视频| 91精品国产日韩91久久久久久| 久久69国产一区二区蜜臀| 久久久久免费观看| 99精品欧美一区二区三区综合在线| 亚洲人成网站精品片在线观看| 色综合久久久久综合| 亚洲妇熟xx妇色黄| 欧美成人一区二区三区| 成人性视频网站| 亚洲黄色免费电影| 欧美一区二区啪啪| 粉嫩高潮美女一区二区三区 | 色婷婷av久久久久久久| 午夜av区久久| 久久久国产精品麻豆| 91福利精品视频| 精品影视av免费| 亚洲图片欧美激情| 精品国产一区二区三区av性色| jlzzjlzz亚洲日本少妇| 亚洲国产精品久久不卡毛片| 精品精品国产高清a毛片牛牛| 成人h动漫精品| 首页欧美精品中文字幕| 国产精品久久毛片a| 欧美精品国产精品| 成人av电影在线| 美女视频黄免费的久久| 亚洲蜜臀av乱码久久精品蜜桃| 日韩欧美黄色影院| 日本精品视频一区二区| 国产激情一区二区三区| 午夜国产不卡在线观看视频| 国产欧美精品一区| 91麻豆精品国产91久久久| av中文字幕在线不卡| 精品一区二区在线播放| 亚洲国产va精品久久久不卡综合| 久久精品人人做人人综合 | av电影在线观看一区| 久久精品国产成人一区二区三区| 亚洲视频一区二区在线观看| xf在线a精品一区二区视频网站| 在线观看免费一区| 成人免费视频播放| 韩国av一区二区三区在线观看| 亚洲成在人线在线播放| 亚洲欧美综合色| 国产视频在线观看一区二区三区| 日韩三区在线观看| 欧美日韩久久一区| 日本道精品一区二区三区 | 777亚洲妇女| 在线视频你懂得一区二区三区| 粉嫩av亚洲一区二区图片| 激情综合网av| 免费观看成人av| 午夜精彩视频在线观看不卡| 亚洲一区中文在线| 一区二区三区四区精品在线视频 | 日韩中文字幕区一区有砖一区| 日韩毛片精品高清免费| 国产精品午夜久久| 中文在线一区二区| 国产精品不卡在线| 欧美极品xxx| 综合久久国产九一剧情麻豆| 一区二区中文字幕在线| 国产精品久久久久aaaa樱花| 国产精品久久久一本精品| 国产精品免费观看视频| 国产精品久久久久久久久搜平片 | 国产欧美精品一区aⅴ影院| 久久精品视频在线看| 欧美精彩视频一区二区三区| 中文字幕一区二区三区不卡| 国产精品久久午夜夜伦鲁鲁| 亚洲美女视频在线| 亚洲在线成人精品| 午夜精品久久久久久久99水蜜桃| 日韩黄色在线观看| 久久爱另类一区二区小说| 欧美日本国产一区| 欧美午夜电影网| 91精品福利在线一区二区三区| 日韩欧美一区中文| 国产三级欧美三级| 一区二区三区国产精品| 日韩av一二三| 国产精品夜夜嗨| 懂色av中文一区二区三区| 精品久久久久香蕉网| 91成人国产精品| 欧美日本乱大交xxxxx| 精品国产在天天线2019| 久久综合国产精品| 樱桃视频在线观看一区| 免费成人在线观看视频| 国产福利一区二区三区视频在线| 91视频免费看| 日韩视频免费观看高清完整版在线观看| 久久精品免费在线观看| 一区二区三区精密机械公司| 久久精品国产亚洲5555| av不卡免费在线观看| 欧美二区三区的天堂| 日本一区二区视频在线观看| 午夜不卡在线视频| 99天天综合性| 欧美电影免费观看高清完整版在线| 国产精品久久久久久久久免费丝袜| 亚洲国产精品久久不卡毛片| 国产福利91精品| 欧美日本一道本在线视频| 欧美极品xxx| 久久精品99国产精品| 91麻豆swag| 国产亚洲欧美一级| 青青国产91久久久久久| 91麻豆国产自产在线观看| 久久综合成人精品亚洲另类欧美 | 91色在线porny| 精品精品欲导航| 午夜精品久久久久久久蜜桃app| 高清shemale亚洲人妖| 欧美一级专区免费大片| 亚洲一区中文日韩| av一本久道久久综合久久鬼色| 欧美成人激情免费网| 亚洲一区二区三区四区在线| 成人免费福利片| 国产欧美综合在线观看第十页| 日本美女一区二区| 精品污污网站免费看| 一区二区三区四区精品在线视频| 成人一级片网址| 日本一区二区三区久久久久久久久不| 免费精品视频最新在线| 欧美精选午夜久久久乱码6080| 一区二区三区欧美| 色婷婷av一区| 亚洲一线二线三线视频| 色综合天天综合网国产成人综合天| 亚洲国产经典视频| 成人性视频免费网站| 亚洲国产高清在线观看视频| 岛国一区二区三区| 日本一区二区三区免费乱视频 | 在线精品视频免费播放| 亚洲免费观看高清| 在线观看日产精品| 亚洲国产欧美在线人成| 欧美综合视频在线观看|