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

📄 klgraph_hack.c

📁 上传linux-jx2410的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* $Id: klgraph_hack.c,v 1.1.1.1 2004/02/04 12:55:33 laputa Exp $ * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam *//* * This is a temporary file that statically initializes the expected  * initial klgraph information that is normally provided by prom. */#include <linux/types.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <asm/sn/sgi.h>#include <asm/sn/klconfig.h>void * real_port;void * real_io_base;void * real_addr;char *BW0 = NULL;kl_config_hdr_t *linux_klcfg;#ifdef BRINGUP/* forward declarations */extern void dump_ii(void), dump_lb(void), dump_crossbow(void);extern void clear_ii_error(void);#endif /* BRINGUP */#define SYNERGY_WIDGET          ((char *)0xc0000e0000000000)#define SYNERGY_SWIZZLE         ((char *)0xc0000e0000000400)#define HUBREG                  ((char *)0xc0000a0001e00000)#define WIDGET0                 ((char *)0xc0000a0000000000)#define WIDGET4                 ((char *)0xc0000a0000000004)#define SYNERGY_WIDGET          ((char *)0xc0000e0000000000)#define SYNERGY_SWIZZLE         ((char *)0xc0000e0000000400)#define HUBREG                  ((char *)0xc0000a0001e00000)#define WIDGET0                 ((char *)0xc0000a0000000000)int test = 0;/* * Hack to loop for test. */voidtest_io_regs(void){	uint32_t reg_32bits;	uint64_t reg_64bits;	while (test) {		reg_32bits = (uint32_t)(*(volatile uint32_t *) SYNERGY_WIDGET);		reg_64bits = (uint64_t) (*(volatile uint64_t *) SYNERGY_WIDGET);	}        printk("Synergy Widget Address = 0x%p, Value = 0x%lx\n", SYNERGY_WIDGET, (uint64_t)*(SYNERGY_WIDGET));        printk("Synergy swizzle Address = 0x%p, Value = 0x%lx\n", SYNERGY_SWIZZLE, (uint64_t)*(SYNERGY_SWIZZLE));        printk("HUBREG  Address = 0x%p, Value = 0x%lx\n",  HUBREG, (uint64_t)*(HUBREG));        printk("WIDGET0 Address = 0x%p, Value = 0x%lx\n", WIDGET0, (uint64_t)*(WIDGET0));        printk("WIDGET4 Address = 0x%p, Value = 0x%x\n", WIDGET4, (uint32_t)*(WIDGET4));}voidklgraph_hack_init(void){	kl_config_hdr_t *kl_hdr_ptr;	lboard_t	*lb_ptr;	lboard_t	*temp_ptr;	klhub_t		*klhub_ptr;	klioc3_t	*klioc3_ptr;	klbri_t		*klbri_ptr;	klxbow_t	*klxbow_ptr;	klinfo_t	*klinfo_ptr;	klcomp_t	*klcomp_ptr;#if 0	uint64_t	*tmp;	volatile u32	*tmp32;	/* Preset some values */	/* Write IOERR clear to clear the CRAZY bit in the status */	tmp = (uint64_t *)0xc0000a0001c001f8; *tmp = (uint64_t)0xffffffff;	/* set widget control register...setting bedrock widget id to b */	/* tmp = (uint64_t *)0xc0000a0001c00020; *tmp = (uint64_t)0x801b; */	/* set io outbound widget access...allow all */	tmp = (uint64_t *)0xc0000a0001c00110; *tmp = (uint64_t)0xff01;	/* set io inbound widget access...allow all */	tmp = (uint64_t *)0xc0000a0001c00118; *tmp = (uint64_t)0xff01;	/* set io crb timeout to max */	tmp = (uint64_t *)0xc0000a0001c003c0; *tmp = (uint64_t)0xffffff;	tmp = (uint64_t *)0xc0000a0001c003c0; *tmp = (uint64_t)0xffffff;		/* set local block io permission...allow all */	tmp = (uint64_t *)0xc0000a0001e04010; *tmp = (uint64_t)0xfffffffffffffff;	/* clear any errors */	clear_ii_error();	/* set default read response buffers in bridge */	tmp32 = (volatile u32 *)0xc0000a000f000280L;	*tmp32 = 0xba98;	tmp32 = (volatile u32 *)0xc0000a000f000288L;	*tmp32 = 0xba98;printk("Widget ID Address 0x%p Value 0x%lx\n", (uint64_t *)0xc0000a0001e00000, *( (volatile uint64_t *)0xc0000a0001e00000) );printk("Widget ID Address 0x%p Value 0x%lx\n", (uint64_t *)0xc0000a0001c00000, *( (volatile uint64_t *)0xc0000a0001c00000) );printk("Widget ID Address 0x%p Value 0x%lx\n", (uint64_t *)0xc000020001e00000, *( (volatile uint64_t *)0xc000020001e00000) );printk("Widget ID Address 0x%p Value 0x%lx\n", (uint64_t *)0xc000020001c00000, *( (volatile uint64_t *)0xc000020001c00000) );printk("Widget ID Address 0x%p Value 0x%lx\n", (uint64_t *)0xc0000a0001e00000, *( (volatile uint64_t *)0xc0000a0001e00000) );printk("Xbow ID Address 0x%p Value 0x%x\n", (uint64_t *)0xc0000a0000000000, *( (volatile uint32_t *)0xc0000a0000000000) );printk("Xbow ID Address 0x%p Value 0x%x\n", (uint64_t *)0xc000020000000004, *( (volatile uint32_t *)0xc000020000000004) );#endif	if ( test )		test_io_regs();	/*	 * Klconfig header.	 */	kl_hdr_ptr = kmalloc(sizeof(kl_config_hdr_t), GFP_KERNEL);        kl_hdr_ptr->ch_magic = 0xbeedbabe;        kl_hdr_ptr->ch_version = 0x0;        kl_hdr_ptr->ch_malloc_hdr_off = 0x48;        kl_hdr_ptr->ch_cons_off = 0x18;        kl_hdr_ptr->ch_board_info = 0x0;        kl_hdr_ptr->ch_cons_info.uart_base = 0x920000000f820178;        kl_hdr_ptr->ch_cons_info.config_base = 0x920000000f024000;        kl_hdr_ptr->ch_cons_info.memory_base = 0x920000000f800000;        kl_hdr_ptr->ch_cons_info.baud = 0x2580;        kl_hdr_ptr->ch_cons_info.flag = 0x1;        kl_hdr_ptr->ch_cons_info.type = 0x300fafa;        kl_hdr_ptr->ch_cons_info.nasid = 0x0;        kl_hdr_ptr->ch_cons_info.wid = 0xf;        kl_hdr_ptr->ch_cons_info.npci = 0x4;        kl_hdr_ptr->ch_cons_info.baseio_nic = 0x0;	/*	 * We need to know whether we are booting from PROM or 	 * boot from disk.	 */	linux_klcfg = (kl_config_hdr_t *)0xe000000000030000;	if (linux_klcfg->ch_magic == 0xbeedbabe) {		return;	} else {		linux_klcfg = kl_hdr_ptr;	}	/*	 * lboard KLTYPE_IP35	 */	lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);	kl_hdr_ptr->ch_board_info = (klconf_off_t) lb_ptr;	temp_ptr = lb_ptr;	printk("First Lboard = %p\n", temp_ptr);        lb_ptr->brd_next = 0;        lb_ptr->struct_type = 0x1;        lb_ptr->brd_type  = 0x11;        lb_ptr->brd_sversion = 0x3;        lb_ptr->brd_brevision = 0x1;        lb_ptr->brd_promver = 0x1;        lb_ptr->brd_promver = 0x1;        lb_ptr->brd_slot = 0x0;        lb_ptr->brd_debugsw = 0x0;        lb_ptr->brd_module = 0x145;        lb_ptr->brd_partition = 0x0;        lb_ptr->brd_diagval = 0x0;        lb_ptr->brd_diagparm = 0x0;        lb_ptr->brd_inventory = 0x0;        lb_ptr->brd_numcompts = 0x5;        lb_ptr->brd_nic = 0x2a0aed35;        lb_ptr->brd_nasid = 0x0;        lb_ptr->brd_errinfo = 0x0;        lb_ptr->brd_parent = 0x0;        lb_ptr->brd_graph_link  = (devfs_handle_t)0x26;        lb_ptr->brd_owner = 0x0;        lb_ptr->brd_nic_flags = 0x0;	memcpy(&lb_ptr->brd_name[0], "IP35", 4);	/*	 * Hub Component	 */	klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);	klhub_ptr = (klhub_t *)klcomp_ptr;	klinfo_ptr = (klinfo_t *)klcomp_ptr;	lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;	printk("hub info = %p lboard = %p\n", klhub_ptr, lb_ptr);	klinfo_ptr = (klinfo_t *)klhub_ptr;        klinfo_ptr->struct_type = 0x2;        klinfo_ptr->struct_version = 0x1;        klinfo_ptr->flags = 0x1;        klinfo_ptr->revision = 0x1;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0x2a0aed35;        klinfo_ptr->physid = 0x0;        klinfo_ptr->virtid = 0x0;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;        klhub_ptr->hub_flags = 0x0;        klhub_ptr->hub_port.port_nasid = (nasid_t)0x0ffffffff;        klhub_ptr->hub_port.port_flag = 0x0;        klhub_ptr->hub_port.port_offset = 0x0;        klhub_ptr->hub_box_nic = 0x0;        klhub_ptr->hub_mfg_nic = 0x3f420;        klhub_ptr->hub_speed = 0xbebc200;	/*	 * Memory Component	 */        klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);        klinfo_ptr = (klinfo_t *)klcomp_ptr;	lb_ptr->brd_compts[1] = (klconf_off_t)klcomp_ptr;        klinfo_ptr->struct_type = 0x3;        klinfo_ptr->struct_version = 0x2;        klinfo_ptr->flags = 0x1;        klinfo_ptr->revision = 0xff;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0xffffffffffffffff;        klinfo_ptr->physid = 0xff;        klinfo_ptr->virtid = 0xffffffff;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;	/*	 * KLSTRUCT_HUB_UART Component	 */	klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);	klinfo_ptr = (klinfo_t *)klcomp_ptr;	lb_ptr->brd_compts[2] = (klconf_off_t)klcomp_ptr;        klinfo_ptr->struct_type = 0x11;        klinfo_ptr->struct_version = 0x1;        klinfo_ptr->flags = 0x31;        klinfo_ptr->revision = 0xff;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0xffffffffffffffff;        klinfo_ptr->physid = 0x0;        klinfo_ptr->virtid = 0x0;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;	/*	 * KLSTRUCT_CPU Component	 */	klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);        klinfo_ptr = (klinfo_t *)klcomp_ptr;	lb_ptr->brd_compts[3] = (klconf_off_t)klcomp_ptr;        klinfo_ptr->struct_type = 0x1;        klinfo_ptr->struct_version = 0x2;        klinfo_ptr->flags = 0x1;        klinfo_ptr->revision = 0xff;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0xffffffffffffffff;        klinfo_ptr->physid = 0x0;        klinfo_ptr->virtid = 0x0;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;	/*	 * KLSTRUCT_CPU Component	 */	klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);        klinfo_ptr = (klinfo_t *)klcomp_ptr;	lb_ptr->brd_compts[4] = (klconf_off_t)klcomp_ptr;        klinfo_ptr->struct_type = 0x1;        klinfo_ptr->struct_version = 0x2;        klinfo_ptr->flags = 0x1;        klinfo_ptr->revision = 0xff;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0xffffffffffffffff;        klinfo_ptr->physid = 0x1;        klinfo_ptr->virtid = 0x1;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;	lb_ptr->brd_compts[5] = 0; /* Set the next one to 0 .. end */	lb_ptr->brd_numcompts = 5; /* 0 to 4 */	/*	 * lboard(0x42) KLTYPE_PBRICK_XBOW	 */	lb_ptr = kmalloc(sizeof(lboard_t), GFP_KERNEL);	temp_ptr->brd_next = (klconf_off_t)lb_ptr; /* Let the previous point at the new .. */	temp_ptr = lb_ptr;	printk("Second Lboard = %p\n", temp_ptr);        lb_ptr->brd_next = 0;        lb_ptr->struct_type = 0x1;        lb_ptr->brd_type  = 0x42;        lb_ptr->brd_sversion = 0x2;        lb_ptr->brd_brevision = 0x0;        lb_ptr->brd_promver = 0x1;        lb_ptr->brd_promver = 0x1;        lb_ptr->brd_slot = 0x0;        lb_ptr->brd_debugsw = 0x0;        lb_ptr->brd_module = 0x145;        lb_ptr->brd_partition = 0x1;        lb_ptr->brd_diagval = 0x0;        lb_ptr->brd_diagparm = 0x0;        lb_ptr->brd_inventory = 0x0;        lb_ptr->brd_numcompts = 0x1;        lb_ptr->brd_nic = 0xffffffffffffffff;        lb_ptr->brd_nasid = 0x0;        lb_ptr->brd_errinfo = 0x0;        lb_ptr->brd_parent = (struct lboard_s *)0x9600000000030070;        lb_ptr->brd_graph_link  = (devfs_handle_t)0xffffffff;        lb_ptr->brd_owner = 0x0;        lb_ptr->brd_nic_flags = 0x0;        memcpy(&lb_ptr->brd_name[0], "IOBRICK", 7);	/*	 * KLSTRUCT_XBOW Component	 */        klcomp_ptr = kmalloc(sizeof(klcomp_t), GFP_KERNEL);	memset(klcomp_ptr, 0, sizeof(klcomp_t));        klxbow_ptr = (klxbow_t *)klcomp_ptr;        klinfo_ptr = (klinfo_t *)klcomp_ptr;        lb_ptr->brd_compts[0] = (klconf_off_t)klcomp_ptr;	printk("xbow_p 0x%p\n", klcomp_ptr);        klinfo_ptr->struct_type = 0x4;        klinfo_ptr->struct_version = 0x1;        klinfo_ptr->flags = 0x1;        klinfo_ptr->revision = 0x2;        klinfo_ptr->diagval = 0x0;        klinfo_ptr->diagparm = 0x0;        klinfo_ptr->inventory = 0x0;        klinfo_ptr->partid = 0x0;        klinfo_ptr->nic = 0xffffffffffffffff;        klinfo_ptr->physid = 0xff;        klinfo_ptr->virtid = 0x0;        klinfo_ptr->widid = 0x0;        klinfo_ptr->nasid = 0x0;        klxbow_ptr->xbow_master_hub_link = 0xb;        klxbow_ptr->xbow_port_info[0].port_nasid = 0x0;        klxbow_ptr->xbow_port_info[0].port_flag = 0x0;        klxbow_ptr->xbow_port_info[0].port_offset = 0x0;        klxbow_ptr->xbow_port_info[1].port_nasid = 0x401;        klxbow_ptr->xbow_port_info[1].port_flag = 0x0;        klxbow_ptr->xbow_port_info[1].port_offset = 0x0;        klxbow_ptr->xbow_port_info[2].port_nasid = 0x0;        klxbow_ptr->xbow_port_info[2].port_flag = 0x0;        klxbow_ptr->xbow_port_info[2].port_offset = 0x0;        klxbow_ptr->xbow_port_info[3].port_nasid = 0x0; /* ffffffff */        klxbow_ptr->xbow_port_info[3].port_flag = 0x6;        klxbow_ptr->xbow_port_info[3].port_offset = 0x30070;        klxbow_ptr->xbow_port_info[4].port_nasid = 0x0; /* ffffff00; */        klxbow_ptr->xbow_port_info[4].port_flag = 0x0;        klxbow_ptr->xbow_port_info[4].port_offset = 0x0;        klxbow_ptr->xbow_port_info[5].port_nasid = 0x0;        klxbow_ptr->xbow_port_info[5].port_flag = 0x0;        klxbow_ptr->xbow_port_info[5].port_offset = 0x0;        klxbow_ptr->xbow_port_info[6].port_nasid = 0x0;

⌨️ 快捷键说明

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