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

📄 i2o_proc.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 5 页
字号:
					case 0x40:						len += sprintf(buf+len, ", 100base VG");						break;					case 0x50:						len += sprintf(buf+len, ", IEEE 802.5/Token-Ring");						break;					case 0x60:						len += sprintf(buf+len, ", ANSI X3T9.5 FDDI");						break;							case 0x70:						len += sprintf(buf+len, ", Fibre Channel");						break;					default:						len += sprintf(buf+len, ", Unknown Sub-Class (0x%02x)",							       lct->lct_entry[i].sub_class & 0xFF);						break;				}				break;			case I2O_CLASS_SCSI_PERIPHERAL:				if(lct->lct_entry[i].sub_class < SCSI_TABLE_SIZE)					len += sprintf(buf+len, ", %s", 								scsi_devices[lct->lct_entry[i].sub_class]);				else					len += sprintf(buf+len, ", Unknown Device Type");				break;			case I2O_CLASS_BUS_ADAPTER_PORT:				if(lct->lct_entry[i].sub_class < BUS_TABLE_SIZE)					len += sprintf(buf+len, ", %s", 								bus_ports[lct->lct_entry[i].sub_class]);				else					len += sprintf(buf+len, ", Unknown Bus Type");				break;		}		len += sprintf(buf+len, "\n");				len += sprintf(buf+len, "  Local TID        : 0x%03x\n", lct->lct_entry[i].tid);		len += sprintf(buf+len, "  User TID         : 0x%03x\n", lct->lct_entry[i].user_tid);		len += sprintf(buf+len, "  Parent TID       : 0x%03x\n", 					lct->lct_entry[i].parent_tid);		len += sprintf(buf+len, "  Identity Tag     : 0x%x%x%x%x%x%x%x%x\n",					lct->lct_entry[i].identity_tag[0],					lct->lct_entry[i].identity_tag[1],					lct->lct_entry[i].identity_tag[2],					lct->lct_entry[i].identity_tag[3],					lct->lct_entry[i].identity_tag[4],					lct->lct_entry[i].identity_tag[5],					lct->lct_entry[i].identity_tag[6],					lct->lct_entry[i].identity_tag[7]);		len += sprintf(buf+len, "  Change Indicator : %0#10x\n", 				lct->lct_entry[i].change_ind);		len += sprintf(buf+len, "  Event Capab Mask : %0#10x\n", 				lct->lct_entry[i].device_flags);	}	spin_unlock(&i2o_proc_lock);	return len;}int i2o_proc_read_status(char *buf, char **start, off_t offset, int len, 			 int *eof, void *data){	struct i2o_controller *c = (struct i2o_controller*)data;	char prodstr[25];	int version;		spin_lock(&i2o_proc_lock);	len = 0;	i2o_status_get(c); // reread the status block	len += sprintf(buf+len,"Organization ID        : %0#6x\n", 				c->status_block->org_id);	version = c->status_block->i2o_version;	/* FIXME for Spec 2.0	if (version == 0x02) {		len += sprintf(buf+len,"Lowest I2O version supported: ");		switch(workspace[2]) {			case 0x00:				len += sprintf(buf+len,"1.0\n");				break;			case 0x01:				len += sprintf(buf+len,"1.5\n");				break;			case 0x02:				len += sprintf(buf+len,"2.0\n");				break;		}		len += sprintf(buf+len, "Highest I2O version supported: ");		switch(workspace[3]) {			case 0x00:				len += sprintf(buf+len,"1.0\n");				break;			case 0x01:				len += sprintf(buf+len,"1.5\n");				break;			case 0x02:				len += sprintf(buf+len,"2.0\n");				break;		}	}*/	len += sprintf(buf+len,"IOP ID                 : %0#5x\n", 				c->status_block->iop_id);	len += sprintf(buf+len,"Host Unit ID           : %0#6x\n",				c->status_block->host_unit_id);	len += sprintf(buf+len,"Segment Number         : %0#5x\n",				c->status_block->segment_number);	len += sprintf(buf+len, "I2O version            : ");	switch (version) {		case 0x00:			len += sprintf(buf+len,"1.0\n");			break;		case 0x01:			len += sprintf(buf+len,"1.5\n");			break;		case 0x02:			len += sprintf(buf+len,"2.0\n");			break;		default:			len += sprintf(buf+len,"Unknown version\n");	}	len += sprintf(buf+len, "IOP State              : ");	switch (c->status_block->iop_state) {		case 0x01:			len += sprintf(buf+len,"INIT\n");			break;		case 0x02:			len += sprintf(buf+len,"RESET\n");			break;		case 0x04:			len += sprintf(buf+len,"HOLD\n");			break;		case 0x05:			len += sprintf(buf+len,"READY\n");			break;		case 0x08:			len += sprintf(buf+len,"OPERATIONAL\n");			break;		case 0x10:			len += sprintf(buf+len,"FAILED\n");			break;		case 0x11:			len += sprintf(buf+len,"FAULTED\n");			break;		default:			len += sprintf(buf+len,"Unknown\n");			break;	}	len += sprintf(buf+len,"Messenger Type         : ");	switch (c->status_block->msg_type) { 		case 0x00:			len += sprintf(buf+len,"Memory mapped\n");			break;		case 0x01:			len += sprintf(buf+len,"Memory mapped only\n");			break;		case 0x02:			len += sprintf(buf+len,"Remote only\n");			break;		case 0x03:			len += sprintf(buf+len,"Memory mapped and remote\n");			break;		default:			len += sprintf(buf+len,"Unknown\n");	}	len += sprintf(buf+len,"Inbound Frame Size     : %d bytes\n", 				c->status_block->inbound_frame_size<<2);	len += sprintf(buf+len,"Max Inbound Frames     : %d\n", 				c->status_block->max_inbound_frames);	len += sprintf(buf+len,"Current Inbound Frames : %d\n", 				c->status_block->cur_inbound_frames);	len += sprintf(buf+len,"Max Outbound Frames    : %d\n", 				c->status_block->max_outbound_frames);	/* Spec doesn't say if NULL terminated or not... */	memcpy(prodstr, c->status_block->product_id, 24);	prodstr[24] = '\0';	len += sprintf(buf+len,"Product ID             : %s\n", prodstr);	len += sprintf(buf+len,"Expected LCT Size      : %d bytes\n", 				c->status_block->expected_lct_size);	len += sprintf(buf+len,"IOP Capabilities\n");	len += sprintf(buf+len,"    Context Field Size Support : ");	switch (c->status_block->iop_capabilities & 0x0000003) {		case 0:			len += sprintf(buf+len,"Supports only 32-bit context fields\n");			break;		case 1:			len += sprintf(buf+len,"Supports only 64-bit context fields\n");			break;		case 2:			len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields, "						"but not concurrently\n");			break;		case 3:			len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields "						"concurrently\n");			break;		default:			len += sprintf(buf+len,"0x%08x\n",c->status_block->iop_capabilities);	}	len += sprintf(buf+len,"    Current Context Field Size : ");	switch (c->status_block->iop_capabilities & 0x0000000C) {		case 0:			len += sprintf(buf+len,"not configured\n");			break;		case 4:			len += sprintf(buf+len,"Supports only 32-bit context fields\n");			break;		case 8:			len += sprintf(buf+len,"Supports only 64-bit context fields\n");			break;		case 12:			len += sprintf(buf+len,"Supports both 32-bit or 64-bit context fields "						"concurrently\n");			break;		default:			len += sprintf(buf+len,"\n");	}	len += sprintf(buf+len,"    Inbound Peer Support       : %s\n",			(c->status_block->iop_capabilities & 0x00000010) ? "Supported" : "Not supported");	len += sprintf(buf+len,"    Outbound Peer Support      : %s\n",			(c->status_block->iop_capabilities & 0x00000020) ? "Supported" : "Not supported");	len += sprintf(buf+len,"    Peer to Peer Support       : %s\n",			(c->status_block->iop_capabilities & 0x00000040) ? "Supported" : "Not supported");	len += sprintf(buf+len, "Desired private memory size   : %d kB\n", 				c->status_block->desired_mem_size>>10);	len += sprintf(buf+len, "Allocated private memory size : %d kB\n", 				c->status_block->current_mem_size>>10);	len += sprintf(buf+len, "Private memory base address   : %0#10x\n", 				c->status_block->current_mem_base);	len += sprintf(buf+len, "Desired private I/O size      : %d kB\n", 				c->status_block->desired_io_size>>10);	len += sprintf(buf+len, "Allocated private I/O size    : %d kB\n", 				c->status_block->current_io_size>>10);	len += sprintf(buf+len, "Private I/O base address      : %0#10x\n", 				c->status_block->current_io_base);	spin_unlock(&i2o_proc_lock);	return len;}int i2o_proc_read_hw(char *buf, char **start, off_t offset, int len, 		     int *eof, void *data){	struct i2o_controller *c = (struct i2o_controller*)data;	static u32 work32[5];	static u8 *work8 = (u8*)work32;	static u16 *work16 = (u16*)work32;	int token;	u32 hwcap;	static char *cpu_table[] =	{		"Intel 80960 series",		"AMD2900 series",		"Motorola 68000 series",		"ARM series",		"MIPS series",		"Sparc series",		"PowerPC series",		"Intel x86 series"	};	spin_lock(&i2o_proc_lock);	len = 0;	token = i2o_query_scalar(c, ADAPTER_TID, 0x0000, -1, &work32, sizeof(work32));	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0000 IOP Hardware");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf+len, "I2O Vendor ID    : %0#6x\n", work16[0]);	len += sprintf(buf+len, "Product ID       : %0#6x\n", work16[1]);	len += sprintf(buf+len, "CPU              : ");	if(work8[16] > 8)		len += sprintf(buf+len, "Unknown\n");	else		len += sprintf(buf+len, "%s\n", cpu_table[work8[16]]);	/* Anyone using ProcessorVersion? */		len += sprintf(buf+len, "RAM              : %dkB\n", work32[1]>>10);	len += sprintf(buf+len, "Non-Volatile Mem : %dkB\n", work32[2]>>10);	hwcap = work32[3];	len += sprintf(buf+len, "Capabilities : 0x%08x\n", hwcap);	len += sprintf(buf+len, "   [%s] Self booting\n",			(hwcap&0x00000001) ? "+" : "-");	len += sprintf(buf+len, "   [%s] Upgradable IRTOS\n",			(hwcap&0x00000002) ? "+" : "-");	len += sprintf(buf+len, "   [%s] Supports downloading DDMs\n",			(hwcap&0x00000004) ? "+" : "-");	len += sprintf(buf+len, "   [%s] Supports installing DDMs\n",			(hwcap&0x00000008) ? "+" : "-");	len += sprintf(buf+len, "   [%s] Battery-backed RAM\n",			(hwcap&0x00000010) ? "+" : "-");	spin_unlock(&i2o_proc_lock);	return len;}/* Executive group 0003h - Executing DDM List (table) */int i2o_proc_read_ddm_table(char *buf, char **start, off_t offset, int len, 			    int *eof, void *data){	struct i2o_controller *c = (struct i2o_controller*)data;	int token;	int i;	typedef struct _i2o_exec_execute_ddm_table {		u16 ddm_tid;		u8  module_type;		u8  reserved;		u16 i2o_vendor_id;		u16 module_id;		u8  module_name_version[28];		u32 data_size;		u32 code_size;	} i2o_exec_execute_ddm_table;	struct	{		u16 result_count;		u16 pad;		u16 block_size;		u8  block_status;		u8  error_info_size;		u16 row_count;		u16 more_flag;		i2o_exec_execute_ddm_table ddm_table[MAX_I2O_MODULES];	} result;	i2o_exec_execute_ddm_table ddm_table;	spin_lock(&i2o_proc_lock);	len = 0;	token = i2o_query_table(I2O_PARAMS_TABLE_GET,				c, ADAPTER_TID, 				0x0003, -1,				NULL, 0,				&result, sizeof(result));	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0003 Executing DDM List");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf+len, "Tid   Module_type     Vendor Mod_id  Module_name             Vrs  Data_size Code_size\n");	ddm_table=result.ddm_table[0];	for(i=0; i < result.row_count; ddm_table=result.ddm_table[++i])	{		len += sprintf(buf+len, "0x%03x ", ddm_table.ddm_tid & 0xFFF);		switch(ddm_table.module_type)		{		case 0x01:			len += sprintf(buf+len, "Downloaded DDM  ");			break;					case 0x22:			len += sprintf(buf+len, "Embedded DDM    ");			break;		default:			len += sprintf(buf+len, "                ");		}		len += sprintf(buf+len, "%-#7x", ddm_table.i2o_vendor_id);		len += sprintf(buf+len, "%-#8x", ddm_table.module_id);		len += sprintf(buf+len, "%-29s", chtostr(ddm_table.module_name_version, 28));		len += sprintf(buf+len, "%9d  ", ddm_table.data_size);		len += sprintf(buf+len, "%8d", ddm_table.code_size);		len += sprintf(buf+len, "\n");	}	spin_unlock(&i2o_proc_lock);	return len;}/* Executive group 0004h - Driver Store (scalar) */int i2o_proc_read_driver_store(char *buf, char **start, off_t offset, int len, 		     int *eof, void *data){	struct i2o_controller *c = (struct i2o_controller*)data;	u32 work32[8];	int token;	spin_lock(&i2o_proc_lock);	len = 0;	token = i2o_query_scalar(c, ADAPTER_TID, 0x0004, -1, &work32, sizeof(work32));	if (token < 0) {		len += i2o_report_query_status(buf+len, token,"0x0004 Driver Store");		spin_unlock(&i2o_proc_lock);		return len;	}	len += sprintf(buf+len, "Module limit  : %d\n"				"Module count  : %d\n"				"Current space : %d kB\n"				"Free space    : %d kB\n", 			work32[0], work32[1], work32[2]>>10, work32[3]>>10);	spin_unlock(&i2o_proc_lock);	return len;}/* Executive group 0005h - Driver Store Table (table) */int i2o_proc_read_drivers_stored(char *buf, char **start, off_t offset,				 int len, int *eof, void *data){	typedef struct _i2o_driver_store {		u16 stored_ddm_index;		u8  module_type;		u8  reserved;		u16 i2o_vendor_id;		u16 module_id;		u8  module_name_version[28];		u8  date[8];		u32 module_size;		u32 mpb_size;		u32 module_flags;	} i2o_driver_store_table;	struct i2o_controller *c = (struct i2o_controller*)data;	int token;	int i;	typedef struct	{		u16 result_count;		u16 pad;		u16 block_size;		u8  block_status;		u8  error_info_size;		u16 row_count;		u16 more_flag;		i2o_driver_store_table dst[MAX_I2O_MODULES];	} i2o_driver_result_table;		i2o_driver_result_table *result;	i2o_driver_store_table *dst;

⌨️ 快捷键说明

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