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

📄 i2o_proc.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 4 页
字号:
	struct i2o_controller *c = (struct i2o_controller *)seq->private;	char prodstr[25];	int version;	i2o_status_block *sb = c->status_block.virt;	i2o_status_get(c);	// reread the status block	seq_printf(seq, "Organization ID        : %0#6x\n", sb->org_id);	version = sb->i2o_version;/* FIXME for Spec 2.0	if (version == 0x02) {		seq_printf(seq, "Lowest I2O version supported: ");		switch(workspace[2]) {			case 0x00:				seq_printf(seq, "1.0\n");				break;			case 0x01:				seq_printf(seq, "1.5\n");				break;			case 0x02:				seq_printf(seq, "2.0\n");				break;		}		seq_printf(seq, "Highest I2O version supported: ");		switch(workspace[3]) {			case 0x00:				seq_printf(seq, "1.0\n");				break;			case 0x01:				seq_printf(seq, "1.5\n");				break;			case 0x02:				seq_printf(seq, "2.0\n");				break;		}	}*/	seq_printf(seq, "IOP ID                 : %0#5x\n", sb->iop_id);	seq_printf(seq, "Host Unit ID           : %0#6x\n", sb->host_unit_id);	seq_printf(seq, "Segment Number         : %0#5x\n", sb->segment_number);	seq_printf(seq, "I2O version            : ");	switch (version) {	case 0x00:		seq_printf(seq, "1.0\n");		break;	case 0x01:		seq_printf(seq, "1.5\n");		break;	case 0x02:		seq_printf(seq, "2.0\n");		break;	default:		seq_printf(seq, "Unknown version\n");	}	seq_printf(seq, "IOP State              : ");	switch (sb->iop_state) {	case 0x01:		seq_printf(seq, "INIT\n");		break;	case 0x02:		seq_printf(seq, "RESET\n");		break;	case 0x04:		seq_printf(seq, "HOLD\n");		break;	case 0x05:		seq_printf(seq, "READY\n");		break;	case 0x08:		seq_printf(seq, "OPERATIONAL\n");		break;	case 0x10:		seq_printf(seq, "FAILED\n");		break;	case 0x11:		seq_printf(seq, "FAULTED\n");		break;	default:		seq_printf(seq, "Unknown\n");		break;	}	seq_printf(seq, "Messenger Type         : ");	switch (sb->msg_type) {	case 0x00:		seq_printf(seq, "Memory mapped\n");		break;	case 0x01:		seq_printf(seq, "Memory mapped only\n");		break;	case 0x02:		seq_printf(seq, "Remote only\n");		break;	case 0x03:		seq_printf(seq, "Memory mapped and remote\n");		break;	default:		seq_printf(seq, "Unknown\n");	}	seq_printf(seq, "Inbound Frame Size     : %d bytes\n",		   sb->inbound_frame_size << 2);	seq_printf(seq, "Max Inbound Frames     : %d\n",		   sb->max_inbound_frames);	seq_printf(seq, "Current Inbound Frames : %d\n",		   sb->cur_inbound_frames);	seq_printf(seq, "Max Outbound Frames    : %d\n",		   sb->max_outbound_frames);	/* Spec doesn't say if NULL terminated or not... */	memcpy(prodstr, sb->product_id, 24);	prodstr[24] = '\0';	seq_printf(seq, "Product ID             : %s\n", prodstr);	seq_printf(seq, "Expected LCT Size      : %d bytes\n",		   sb->expected_lct_size);	seq_printf(seq, "IOP Capabilities\n");	seq_printf(seq, "    Context Field Size Support : ");	switch (sb->iop_capabilities & 0x0000003) {	case 0:		seq_printf(seq, "Supports only 32-bit context fields\n");		break;	case 1:		seq_printf(seq, "Supports only 64-bit context fields\n");		break;	case 2:		seq_printf(seq, "Supports 32-bit and 64-bit context fields, "			   "but not concurrently\n");		break;	case 3:		seq_printf(seq, "Supports 32-bit and 64-bit context fields "			   "concurrently\n");		break;	default:		seq_printf(seq, "0x%08x\n", sb->iop_capabilities);	}	seq_printf(seq, "    Current Context Field Size : ");	switch (sb->iop_capabilities & 0x0000000C) {	case 0:		seq_printf(seq, "not configured\n");		break;	case 4:		seq_printf(seq, "Supports only 32-bit context fields\n");		break;	case 8:		seq_printf(seq, "Supports only 64-bit context fields\n");		break;	case 12:		seq_printf(seq, "Supports both 32-bit or 64-bit context fields "			   "concurrently\n");		break;	default:		seq_printf(seq, "\n");	}	seq_printf(seq, "    Inbound Peer Support       : %s\n",		   (sb->		    iop_capabilities & 0x00000010) ? "Supported" :		   "Not supported");	seq_printf(seq, "    Outbound Peer Support      : %s\n",		   (sb->		    iop_capabilities & 0x00000020) ? "Supported" :		   "Not supported");	seq_printf(seq, "    Peer to Peer Support       : %s\n",		   (sb->		    iop_capabilities & 0x00000040) ? "Supported" :		   "Not supported");	seq_printf(seq, "Desired private memory size   : %d kB\n",		   sb->desired_mem_size >> 10);	seq_printf(seq, "Allocated private memory size : %d kB\n",		   sb->current_mem_size >> 10);	seq_printf(seq, "Private memory base address   : %0#10x\n",		   sb->current_mem_base);	seq_printf(seq, "Desired private I/O size      : %d kB\n",		   sb->desired_io_size >> 10);	seq_printf(seq, "Allocated private I/O size    : %d kB\n",		   sb->current_io_size >> 10);	seq_printf(seq, "Private I/O base address      : %0#10x\n",		   sb->current_io_base);	return 0;}static int i2o_seq_show_hw(struct seq_file *seq, void *v){	struct i2o_controller *c = (struct i2o_controller *)seq->private;	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"	};	token =	    i2o_parm_field_get(c->exec, 0x0000, -1, &work32, sizeof(work32));	if (token < 0) {		i2o_report_query_status(seq, token, "0x0000 IOP Hardware");		return 0;	}	seq_printf(seq, "I2O Vendor ID    : %0#6x\n", work16[0]);	seq_printf(seq, "Product ID       : %0#6x\n", work16[1]);	seq_printf(seq, "CPU              : ");	if (work8[16] > 8)		seq_printf(seq, "Unknown\n");	else		seq_printf(seq, "%s\n", cpu_table[work8[16]]);	/* Anyone using ProcessorVersion? */	seq_printf(seq, "RAM              : %dkB\n", work32[1] >> 10);	seq_printf(seq, "Non-Volatile Mem : %dkB\n", work32[2] >> 10);	hwcap = work32[3];	seq_printf(seq, "Capabilities : 0x%08x\n", hwcap);	seq_printf(seq, "   [%s] Self booting\n",		   (hwcap & 0x00000001) ? "+" : "-");	seq_printf(seq, "   [%s] Upgradable IRTOS\n",		   (hwcap & 0x00000002) ? "+" : "-");	seq_printf(seq, "   [%s] Supports downloading DDMs\n",		   (hwcap & 0x00000004) ? "+" : "-");	seq_printf(seq, "   [%s] Supports installing DDMs\n",		   (hwcap & 0x00000008) ? "+" : "-");	seq_printf(seq, "   [%s] Battery-backed RAM\n",		   (hwcap & 0x00000010) ? "+" : "-");	return 0;}/* Executive group 0003h - Executing DDM List (table) */static int i2o_seq_show_ddm_table(struct seq_file *seq, void *v){	struct i2o_controller *c = (struct i2o_controller *)seq->private;	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[I2O_MAX_MODULES];	} *result;	i2o_exec_execute_ddm_table ddm_table;	result = kmalloc(sizeof(*result), GFP_KERNEL);	if (!result)		return -ENOMEM;	token = i2o_parm_table_get(c->exec, I2O_PARAMS_TABLE_GET, 0x0003, -1,				   NULL, 0, result, sizeof(*result));	if (token < 0) {		i2o_report_query_status(seq, token,					"0x0003 Executing DDM List");		goto out;	}	seq_printf(seq,		   "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]) {		seq_printf(seq, "0x%03x ", ddm_table.ddm_tid & 0xFFF);		switch (ddm_table.module_type) {		case 0x01:			seq_printf(seq, "Downloaded DDM  ");			break;		case 0x22:			seq_printf(seq, "Embedded DDM    ");			break;		default:			seq_printf(seq, "                ");		}		seq_printf(seq, "%-#7x", ddm_table.i2o_vendor_id);		seq_printf(seq, "%-#8x", ddm_table.module_id);		seq_printf(seq, "%-29s",			   chtostr(ddm_table.module_name_version, 28));		seq_printf(seq, "%9d  ", ddm_table.data_size);		seq_printf(seq, "%8d", ddm_table.code_size);		seq_printf(seq, "\n");	}      out:	kfree(result);	return 0;}/* Executive group 0004h - Driver Store (scalar) */static int i2o_seq_show_driver_store(struct seq_file *seq, void *v){	struct i2o_controller *c = (struct i2o_controller *)seq->private;	u32 work32[8];	int token;	token =	    i2o_parm_field_get(c->exec, 0x0004, -1, &work32, sizeof(work32));	if (token < 0) {		i2o_report_query_status(seq, token, "0x0004 Driver Store");		return 0;	}	seq_printf(seq, "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);	return 0;}/* Executive group 0005h - Driver Store Table (table) */static int i2o_seq_show_drivers_stored(struct seq_file *seq, void *v){	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 *)seq->private;	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[I2O_MAX_MODULES];	} i2o_driver_result_table;	i2o_driver_result_table *result;	i2o_driver_store_table *dst;	result = kmalloc(sizeof(i2o_driver_result_table), GFP_KERNEL);	if (result == NULL)		return -ENOMEM;	token = i2o_parm_table_get(c->exec, I2O_PARAMS_TABLE_GET, 0x0005, -1,				   NULL, 0, result, sizeof(*result));	if (token < 0) {		i2o_report_query_status(seq, token,					"0x0005 DRIVER STORE TABLE");		kfree(result);		return 0;	}	seq_printf(seq,		   "#  Module_type     Vendor Mod_id  Module_name             Vrs"		   "Date     Mod_size Par_size Flags\n");	for (i = 0, dst = &result->dst[0]; i < result->row_count;	     dst = &result->dst[++i]) {		seq_printf(seq, "%-3d", dst->stored_ddm_index);		switch (dst->module_type) {		case 0x01:			seq_printf(seq, "Downloaded DDM  ");			break;		case 0x22:			seq_printf(seq, "Embedded DDM    ");			break;		default:			seq_printf(seq, "                ");		}		seq_printf(seq, "%-#7x", dst->i2o_vendor_id);		seq_printf(seq, "%-#8x", dst->module_id);		seq_printf(seq, "%-29s", chtostr(dst->module_name_version, 28));		seq_printf(seq, "%-9s", chtostr(dst->date, 8));		seq_printf(seq, "%8d ", dst->module_size);		seq_printf(seq, "%8d ", dst->mpb_size);		seq_printf(seq, "0x%04x", dst->module_flags);		seq_printf(seq, "\n");	}	kfree(result);	return 0;}/* Generic group F000h - Params Descriptor (table) */static int i2o_seq_show_groups(struct seq_file *seq, void *v){	struct i2o_device *d = (struct i2o_device *)seq->private;	int token;	int i;	u8 properties;	typedef struct _i2o_group_info {		u16 group_number;		u16 field_count;		u16 row_count;		u8 properties;		u8 reserved;	} i2o_group_info;	struct {		u16 result_count;		u16 pad;		u16 block_size;		u8 block_status;		u8 error_info_size;		u16 row_count;		u16 more_flag;		i2o_group_info group[256];	} *result;	result = kmalloc(sizeof(*result), GFP_KERNEL);	if (!result)		return -ENOMEM;	token = i2o_parm_table_get(d, I2O_PARAMS_TABLE_GET, 0xF000, -1, NULL, 0,				   result, sizeof(*result));	if (token < 0) {		i2o_report_query_status(seq, token, "0xF000 Params Descriptor");		goto out;	}	seq_printf(seq,		   "#  Group   FieldCount RowCount Type   Add Del Clear\n");	for (i = 0; i < result->row_count; i++) {		seq_printf(seq, "%-3d", i);		seq_printf(seq, "0x%04X ", result->group[i].group_number);		seq_printf(seq, "%10d ", result->group[i].field_count);		seq_printf(seq, "%8d ", result->group[i].row_count);		properties = result->group[i].properties;		if (properties & 0x1)			seq_printf(seq, "Table  ");		else			seq_printf(seq, "Scalar ");		if (properties & 0x2)			seq_printf(seq, " + ");		else			seq_printf(seq, " - ");		if (properties & 0x4)			seq_printf(seq, "  + ");		else			seq_printf(seq, "  - ");		if (properties & 0x8)			seq_printf(seq, "  + ");		else			seq_printf(seq, "  - ");		seq_printf(seq, "\n");	}	if (result->more_flag)		seq_printf(seq, "There is more...\n");      out:	kfree(result);	return 0;}/* Generic group F001h - Physical Device Table (table) */static int i2o_seq_show_phys_device(struct seq_file *seq, void *v){	struct i2o_device *d = (struct i2o_device *)seq->private;	int token;	int i;	struct {		u16 result_count;		u16 pad;		u16 block_size;		u8 block_status;		u8 error_info_size;		u16 row_count;		u16 more_flag;		u32 adapter_id[64];	} result;	token = i2o_parm_table_get(d, I2O_PARAMS_TABLE_GET, 0xF001, -1, NULL, 0,				   &result, sizeof(result));	if (token < 0) {		i2o_report_query_status(seq, token,					"0xF001 Physical Device Table");

⌨️ 快捷键说明

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