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

📄 i2o_proc.c

📁 MIZI Research, Inc.发布的嵌入式Linux内核源码
💻 C
📖 第 1 页 / 共 5 页
字号:
		"AUI",		"10BASE5",		"FIORL",		"10BASE2",		"10BROAD36",		"10BASE-T",		"10BASE-FP",		"10BASE-FB",		"10BASE-FL",		"100BASE-TX",		"100BASE-FX",		"100BASE-T4",		"1000BASE-SX",		"1000BASE-LX",		"1000BASE-CX",		"1000BASE-T",		"100VG-ETHERNET",		"100VG-TOKEN RING",		"4MBIT TOKEN RING",		"16 Mb Token Ring",		"125 MBAUD FDDI",		"Point-to-point",		"Arbitrated loop",		"Public loop",		"Fabric",		"Emulation",		"Other",		"HW default"	};	switch(conn)	{	case I2O_LAN_UNKNOWN:		idx = 0;		break;	case I2O_LAN_AUI:		idx = 1;		break;	case I2O_LAN_10BASE5:		idx = 2;		break;	case I2O_LAN_FIORL:		idx = 3;		break;	case I2O_LAN_10BASE2:		idx = 4;		break;	case I2O_LAN_10BROAD36:		idx = 5;		break;	case I2O_LAN_10BASE_T:		idx = 6;		break;	case I2O_LAN_10BASE_FP:		idx = 7;		break;	case I2O_LAN_10BASE_FB:		idx = 8;		break;	case I2O_LAN_10BASE_FL:		idx = 9;		break;	case I2O_LAN_100BASE_TX:		idx = 10;		break;	case I2O_LAN_100BASE_FX:		idx = 11;		break;	case I2O_LAN_100BASE_T4:		idx = 12;		break;	case I2O_LAN_1000BASE_SX:		idx = 13;		break;	case I2O_LAN_1000BASE_LX:		idx = 14;		break;	case I2O_LAN_1000BASE_CX:		idx = 15;		break;	case I2O_LAN_1000BASE_T:		idx = 16;		break;	case I2O_LAN_100VG_ETHERNET:		idx = 17;		break;	case I2O_LAN_100VG_TR:		idx = 18;		break;	case I2O_LAN_4MBIT:		idx = 19;		break;	case I2O_LAN_16MBIT:		idx = 20;		break;	case I2O_LAN_125MBAUD:		idx = 21;		break;	case I2O_LAN_POINT_POINT:		idx = 22;		break;	case I2O_LAN_ARB_LOOP:		idx = 23;		break;	case I2O_LAN_PUBLIC_LOOP:		idx = 24;		break;	case I2O_LAN_FABRIC:		idx = 25;		break;	case I2O_LAN_EMULATION:		idx = 26;		break;	case I2O_LAN_OTHER:		idx = 27;		break;	case I2O_LAN_DEFAULT:		idx = 28;		break;	}	return i2o_connection_type[idx];}/* LAN group 0000h - Device info (scalar) */int i2o_proc_read_lan_dev_info(char *buf, char **start, off_t offset, int len, 			       int *eof, void *data){	struct i2o_device *d = (struct i2o_device*)data;	static u32 work32[56];	static u8 *work8 = (u8*)work32;	static u16 *work16 = (u16*)work32;	static u64 *work64 = (u64*)work32;	int token;	spin_lock(&i2o_proc_lock);	len = 0;	token = i2o_query_scalar(d->controller, d->lct_data.tid,				 0x0000, -1, &work32, 56*4);	if (token < 0) {		len += i2o_report_query_status(buf+len, token, "0x0000 LAN Device Info");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf, "LAN Type            : ");	switch (work16[0])	{	case 0x0030:		len += sprintf(buf+len, "Ethernet, ");		break;	case 0x0040:		len += sprintf(buf+len, "100Base VG, ");		break;	case 0x0050:		len += sprintf(buf+len, "Token Ring, ");		break;	case 0x0060:		len += sprintf(buf+len, "FDDI, ");		break;	case 0x0070:		len += sprintf(buf+len, "Fibre Channel, ");		break;	default:		len += sprintf(buf+len, "Unknown type (0x%04x), ", work16[0]);		break;	}	if (work16[1]&0x00000001)		len += sprintf(buf+len, "emulated LAN, ");	else		len += sprintf(buf+len, "physical LAN port, ");	if (work16[1]&0x00000002)		len += sprintf(buf+len, "full duplex\n");	else		len += sprintf(buf+len, "simplex\n");	len += sprintf(buf+len, "Address format      : ");	switch(work8[4]) {	case 0x00:		len += sprintf(buf+len, "IEEE 48bit\n");		break;	case 0x01:		len += sprintf(buf+len, "FC IEEE\n");		break;	default:		len += sprintf(buf+len, "Unknown (0x%02x)\n", work8[4]);		break;	}	len += sprintf(buf+len, "State               : ");	switch(work8[5])	{	case 0x00:		len += sprintf(buf+len, "Unknown\n");		break;	case 0x01:		len += sprintf(buf+len, "Unclaimed\n");		break;	case 0x02:		len += sprintf(buf+len, "Operational\n");		break;	case 0x03:		len += sprintf(buf+len, "Suspended\n");		break;	case 0x04:		len += sprintf(buf+len, "Resetting\n");		break;	case 0x05:		len += sprintf(buf+len, "ERROR: ");		if(work16[3]&0x0001)			len += sprintf(buf+len, "TxCU inoperative ");		if(work16[3]&0x0002)			len += sprintf(buf+len, "RxCU inoperative ");		if(work16[3]&0x0004)			len += sprintf(buf+len, "Local mem alloc ");		len += sprintf(buf+len, "\n");		break;	case 0x06:		len += sprintf(buf+len, "Operational no Rx\n");		break;	case 0x07:		len += sprintf(buf+len, "Suspended no Rx\n");		break;	default:		len += sprintf(buf+len, "Unspecified\n");		break;	}	len += sprintf(buf+len, "Min packet size     : %d\n", work32[2]);	len += sprintf(buf+len, "Max packet size     : %d\n", work32[3]);	len += sprintf(buf+len, "HW address          : "		       "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",		       work8[16],work8[17],work8[18],work8[19],		       work8[20],work8[21],work8[22],work8[23]);	len += sprintf(buf+len, "Max Tx wire speed   : %d bps\n", (int)work64[3]);	len += sprintf(buf+len, "Max Rx wire speed   : %d bps\n", (int)work64[4]);	len += sprintf(buf+len, "Min SDU packet size : 0x%08x\n", work32[10]);	len += sprintf(buf+len, "Max SDU packet size : 0x%08x\n", work32[11]);	spin_unlock(&i2o_proc_lock);	return len;}/* LAN group 0001h - MAC address table (scalar) */int i2o_proc_read_lan_mac_addr(char *buf, char **start, off_t offset, int len, 			       int *eof, void *data){	struct i2o_device *d = (struct i2o_device*)data;	static u32 work32[48];	static u8 *work8 = (u8*)work32;	int token;	spin_lock(&i2o_proc_lock);		len = 0;	token = i2o_query_scalar(d->controller, d->lct_data.tid,				 0x0001, -1, &work32, 48*4);	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0001 LAN MAC Address");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf,     "Active address          : "		       "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",		       work8[0],work8[1],work8[2],work8[3],		       work8[4],work8[5],work8[6],work8[7]);	len += sprintf(buf+len, "Current address         : "		       "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",		       work8[8],work8[9],work8[10],work8[11],		       work8[12],work8[13],work8[14],work8[15]);	len += sprintf(buf+len, "Functional address mask : "		       "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",		       work8[16],work8[17],work8[18],work8[19],		       work8[20],work8[21],work8[22],work8[23]);	len += sprintf(buf+len,"HW/DDM capabilities : 0x%08x\n", work32[7]);	len += sprintf(buf+len,"    [%s] Unicast packets supported\n",		       (work32[7]&0x00000001)?"+":"-");	len += sprintf(buf+len,"    [%s] Promiscuous mode supported\n",		       (work32[7]&0x00000002)?"+":"-");	len += sprintf(buf+len,"    [%s] Promiscuous multicast mode supported\n",		       (work32[7]&0x00000004)?"+":"-");	len += sprintf(buf+len,"    [%s] Broadcast reception disabling supported\n",		       (work32[7]&0x00000100)?"+":"-");	len += sprintf(buf+len,"    [%s] Multicast reception disabling supported\n",		       (work32[7]&0x00000200)?"+":"-");	len += sprintf(buf+len,"    [%s] Functional address disabling supported\n",		       (work32[7]&0x00000400)?"+":"-");	len += sprintf(buf+len,"    [%s] MAC reporting supported\n",		       (work32[7]&0x00000800)?"+":"-");	len += sprintf(buf+len,"Filter mask : 0x%08x\n", work32[6]);	len += sprintf(buf+len,"    [%s] Unicast packets disable\n",		(work32[6]&0x00000001)?"+":"-");	len += sprintf(buf+len,"    [%s] Promiscuous mode enable\n",		(work32[6]&0x00000002)?"+":"-");	len += sprintf(buf+len,"    [%s] Promiscuous multicast mode enable\n",		(work32[6]&0x00000004)?"+":"-");		len += sprintf(buf+len,"    [%s] Broadcast packets disable\n",		(work32[6]&0x00000100)?"+":"-");	len += sprintf(buf+len,"    [%s] Multicast packets disable\n",		(work32[6]&0x00000200)?"+":"-");	len += sprintf(buf+len,"    [%s] Functional address disable\n",		       (work32[6]&0x00000400)?"+":"-");		       	if (work32[7]&0x00000800) {		len += sprintf(buf+len, "    MAC reporting mode : ");		if (work32[6]&0x00000800)			len += sprintf(buf+len, "Pass only priority MAC packets to user\n");		else if (work32[6]&0x00001000)			len += sprintf(buf+len, "Pass all MAC packets to user\n");		else if (work32[6]&0x00001800)			len += sprintf(buf+len, "Pass all MAC packets (promiscuous) to user\n");		else			len += sprintf(buf+len, "Do not pass MAC packets to user\n");	}	len += sprintf(buf+len, "Number of multicast addresses : %d\n", work32[8]);	len += sprintf(buf+len, "Perfect filtering for max %d multicast addresses\n",		       work32[9]);	len += sprintf(buf+len, "Imperfect filtering for max %d multicast addresses\n",		       work32[10]);	spin_unlock(&i2o_proc_lock);	return len;}/* LAN group 0002h - Multicast MAC address table (table) */int i2o_proc_read_lan_mcast_addr(char *buf, char **start, off_t offset,				 int len, int *eof, void *data){	struct i2o_device *d = (struct i2o_device*)data;	int token;	int i;	u8 mc_addr[8];	struct	{		u16 result_count;		u16 pad;		u16 block_size;		u8  block_status;		u8  error_info_size;		u16 row_count;		u16 more_flag;		u8  mc_addr[256][8];	} result;		spin_lock(&i2o_proc_lock);		len = 0;	token = i2o_query_table(I2O_PARAMS_TABLE_GET,				d->controller, d->lct_data.tid, 0x0002, -1, 				NULL, 0, &result, sizeof(result));	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x002 LAN Multicast MAC Address");		spin_unlock(&i2o_proc_lock);		return len;	}	for (i = 0; i < result.row_count; i++)	{		memcpy(mc_addr, result.mc_addr[i], 8);		len += sprintf(buf+len, "MC MAC address[%d]: "			       "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",			       i, mc_addr[0], mc_addr[1], mc_addr[2],			       mc_addr[3], mc_addr[4], mc_addr[5],			       mc_addr[6], mc_addr[7]);	}	spin_unlock(&i2o_proc_lock);	return len;}/* LAN group 0003h - Batch Control (scalar) */int i2o_proc_read_lan_batch_control(char *buf, char **start, off_t offset,				    int len, int *eof, void *data){	struct i2o_device *d = (struct i2o_device*)data;	static u32 work32[9];	int token;	spin_lock(&i2o_proc_lock);		len = 0;	token = i2o_query_scalar(d->controller, d->lct_data.tid,				 0x0003, -1, &work32, 9*4);	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0003 LAN Batch Control");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf, "Batch mode ");	if (work32[0]&0x00000001)		len += sprintf(buf+len, "disabled");	else		len += sprintf(buf+len, "enabled");	if (work32[0]&0x00000002)		len += sprintf(buf+len, " (current setting)");	if (work32[0]&0x00000004)		len += sprintf(buf+len, ", forced");	else		len += sprintf(buf+len, ", toggle");	len += sprintf(buf+len, "\n");	len += sprintf(buf+len, "Max Rx batch count : %d\n", work32[5]);	len += sprintf(buf+len, "Max Rx batch delay : %d\n", work32[6]);	len += sprintf(buf+len, "Max Tx batch delay : %d\n", work32[7]);	len += sprintf(buf+len, "Max Tx batch count : %d\n", work32[8]);	spin_unlock(&i2o_proc_lock);	return len;}/* LAN group 0004h - LAN Operation (scalar) */int i2o_proc_read_lan_operation(char *buf, char **start, off_t offset, int len,				int *eof, void *data){	struct i2o_device *d = (struct i2o_device*)data;	static u32 work32[5];	int token;	spin_lock(&i2o_proc_lock);		len = 0;	token = i2o_query_scalar(d->controller, d->lct_data.tid,				 0x0004, -1, &work32, 20);	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0004 LAN Operation");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf, "Packet prepadding (32b words) : %d\n", work32[0]);	len += sprintf(buf+len, "Transmission error reporting  : %s\n",		       (work32[1]&1)?"on":"off");	len += sprintf(buf+len, "Bad packet handling           : %s\n",				(work32[1]&0x2)?"by host":"by DDM");	len += sprintf(buf+len, "Packet orphan limit           : %d\n", work32[2]);	len += sprintf(buf+len, "Tx modes : 0x%08x\n", work32[3]);	len += sprintf(buf+len, "    [%s] HW CRC suppression\n",			(work32[3]&0x00000004) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW IPv4 checksum\n",			(work32[3]&0x00000100) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW TCP checksum\n",			(work32[3]&0x00000200) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW UDP checksum\n",			(work32[3]&0x00000400) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW RSVP checksum\n",			(work32[3]&0x00000800) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW ICMP checksum\n",			(work32[3]&0x00001000) ? "+" : "-");	len += sprintf(buf+len, "    [%s] Loopback suppression enable\n",			(work32[3]&0x00002000) ? "+" : "-");	len += sprintf(buf+len, "Rx modes : 0x%08x\n", work32[4]);	len += sprintf(buf+len, "    [%s] FCS in payload\n",			(work32[4]&0x00000004) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW IPv4 checksum validation\n",			(work32[4]&0x00000100) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW TCP checksum validation\n",			(work32[4]&0x00000200) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW UDP checksum validation\n",			(work32[4]&0x00000400) ? "+" : "-");	len += sprintf(buf+len, "    [%s] HW RSVP checksum validation\n",			(wor

⌨️ 快捷键说明

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