# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1431  -> 1.1432 
#	               (new)	        -> 1.1     arch/ia64/sn/fakeprom/klgraph_fake.c
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/11/06	jbarnes@tomahawk.engr.sgi.com	1.1432
# new fakeprom file
# --------------------------------------------
#
diff -Nru a/arch/ia64/sn/fakeprom/klgraph_fake.c b/arch/ia64/sn/fakeprom/klgraph_fake.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ia64/sn/fakeprom/klgraph_fake.c	Thu Nov  6 13:41:43 2003
@@ -0,0 +1,373 @@
+/*
+ * 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) 2003 Silicon Graphics, Inc.  All Rights Reserved.
+ */
+
+#include <linux/types.h>
+#include <linux/config.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <asm/sn/sgi.h>
+#include <asm/sn/io.h>
+#include <asm/sn/driver.h>
+#include <asm/sn/iograph.h>
+#include <asm/param.h>
+#include <asm/sn/pio.h>
+#include <asm/sn/xtalk/xwidget.h>
+#include <asm/sn/sn_private.h>
+#include <asm/sn/addrs.h>
+#include <asm/sn/hcl.h>
+#include <asm/sn/hcl_util.h>
+#include <asm/sn/intr.h>
+#include <asm/sn/xtalk/xtalkaddrs.h>
+#include <asm/sn/klconfig.h>
+
+typedef union ia64_nasid_va {
+        struct {
+#if defined(SGI_SN2)
+                unsigned long off   : 36;       /* intra-region offset */
+                unsigned long attr  :  2;
+                unsigned long nasid : 11;       /* NASID */
+                unsigned long off2  : 12;       /* fill */
+                unsigned long reg   :  3;       /* region number */
+#endif
+        } f;
+        unsigned long l;
+        void *p;
+} ia64_nasid_va;
+
+#if defined(SGI_SN2)
+#define __fwtab_pa(n,x)         ({ia64_nasid_va _v; _v.l = (long) (x); _v.f.nasid = (x) ? (n) : 0; _v.f.reg = 0; _v.f.attr = 3; _v.l;})
+#endif
+
+#define brd_widgetnum brd_slot
+void klgraph_fake(void);
+
+/*
+ * If you need to add a new lboard or a compartment, put 
+ * here!
+ */
+kl_config_hdr_t kl_config_hdr;
+int *klconfig_start = (int *)0x30000;
+
+static lboard_t nasid0_lboard_0;
+static klcomp_t nasid0_hub_comp;
+static klcomp_t nasid0_xbow_comp;
+
+static lboard_t nasid0_lboard_1;
+
+static lboard_t nasid0_lboard_2;
+static klcomp_t nasid0_lboard_2_comp0;
+
+static lboard_t nasid0_lboard_3;
+static klcomp_t nasid0_lboard_3_comp0;
+
+static lboard_t nasid1_lboard_0;
+static lboard_t nasid1_lboard_1;
+static klcomp_t nasid1_hub_comp;
+
+/*
+ * klgraph_fake - Initialize dummy klconfig structures for fake prom.
+ */
+void
+klgraph_fake()
+{
+
+	*klconfig_start = (int) __fwtab_pa(0, &kl_config_hdr);
+
+	/*
+  	 * This came from a dump of the klconfig from rappel.
+	 * Nasid 1 is a TIO Module.
+	 */
+
+	kl_config_hdr.ch_magic = 0x00000000beedbabe;       /* set this to KLCFGINFO_MAGIC */
+	kl_config_hdr.ch_board_info = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_0);
+
+
+	/*
+ 	 * Define the lboardsfor Nasid 0.
+	 */
+	nasid0_lboard_0.brd_type           = KLTYPE_SNIA;
+	nasid0_lboard_0.struct_type        = 0x1;
+	nasid0_lboard_0.brd_widgetnum      = 0x0;
+	/* nasid0_lboard_0.brd_geoid          = module/001c11/slab/1/node */
+	nasid0_lboard_0.brd_geoid.node.any.slab = 0;
+	nasid0_lboard_0.brd_geoid.node.any.type = GEO_TYPE_NODE;
+	nasid0_lboard_0.brd_geoid.node.any.module = RBT_TO_MODULE(1, 11, 'c');
+	nasid0_lboard_0.brd_numcompts      = 0x1;
+	nasid0_lboard_0.brd_compts[0] = __fwtab_pa(0, (klconf_off_t)&nasid0_hub_comp);
+	nasid0_lboard_0.brd_compts[1] = 0x0;
+	nasid0_lboard_0.brd_nic            = 0xffffffff;
+	nasid0_lboard_0.brd_nasid          = 0x0;
+	nasid0_lboard_0.brd_name[0] = 'I';
+	nasid0_lboard_0.brd_name[1] = 'P';
+	nasid0_lboard_0.brd_name[2] = '4';
+	nasid0_lboard_0.brd_name[3] = '1';
+	nasid0_lboard_0.brd_flags          = 0x1;
+	nasid0_lboard_0.brd_next_any       = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_1);
+	nasid0_lboard_0.brd_next_same      = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_1);
+	nasid0_lboard_0.brd_next_same_host = 0x0;
+	nasid0_lboard_0.brd_partition      = 0x0;
+
+	/*
+ 	 * Hub definition.
+ 	 */
+	nasid0_hub_comp.kc_hub.hub_info.struct_type = KLSTRUCT_HUB;
+	nasid0_hub_comp.kc_hub.hub_info.revision = 0x2;
+	nasid0_hub_comp.kc_hub.hub_info.nasid    = 0x0;
+	nasid0_hub_comp.kc_hub.hub_info.errinfo  = 0x0;
+	nasid0_hub_comp.kc_hub.hub_info.flags    = 0x1;
+	nasid0_hub_comp.kc_hub.hub_info.virtid   = 0x1;
+	nasid0_hub_comp.kc_hub.hub_info.physid   = 0x0;
+	nasid0_hub_comp.kc_hub.hub_flags     = 0x0;
+	nasid0_hub_comp.kc_hub.hub_box_nic   = 0x0;
+	nasid0_hub_comp.kc_hub.hub_mfg_nic   = 0x41d4230;
+	nasid0_hub_comp.kc_hub.hub_speed     = 0xc8;
+	nasid0_hub_comp.kc_hub.hub_io_module = 0x0;
+	nasid0_hub_comp.kc_hub.hub_port[1].port_nasid      = 0x1; /* Connected to TIO */
+	nasid0_hub_comp.kc_hub.hub_port[1].port_num        = 0x1;
+	nasid0_hub_comp.kc_hub.hub_port[1].port_flag       = 0x0;
+	nasid0_hub_comp.kc_hub.hub_port[1].port_offset     = 0x4194e80; /* Needs to be an address */
+
+	/* connecting geo = module/001c11/slab/1/node */
+
+	nasid0_hub_comp.kc_hub.hub_port[2].port_nasid      = -1;
+	nasid0_hub_comp.kc_hub.hub_port[2].port_num        = 0x0;
+	nasid0_hub_comp.kc_hub.hub_port[2].port_flag       = 0x0;
+	nasid0_hub_comp.kc_hub.hub_port[2].port_offset     = 0x0;
+
+
+	/*
+ 	 * lboard for Xbow.
+ 	 */
+	nasid0_lboard_1.brd_type           = KLTYPE_IOBRICK_XBOW;
+	nasid0_lboard_1.struct_type        = 0x1;
+	nasid0_lboard_1.brd_widgetnum      = 0x0;
+	nasid0_lboard_1.brd_geoid.node.any.slab = 0;
+	nasid0_lboard_1.brd_geoid.node.any.type = GEO_TYPE_NODE;
+	/* nasid0_lboard_0.brd_geoid.node.any.module = ; */
+	nasid0_lboard_1.brd_numcompts      = 0x1;
+	nasid0_lboard_1.brd_compts[0] = __fwtab_pa(0, (klconf_off_t)&nasid0_xbow_comp);
+	nasid0_lboard_1.brd_compts[1] = 0x0;
+	nasid0_lboard_1.brd_nic            = 0xffffffff;
+	nasid0_lboard_1.brd_nasid          = 0x0;
+	nasid0_lboard_1.brd_name[0]         ='I';
+	nasid0_lboard_1.brd_name[0]         ='O';
+	nasid0_lboard_1.brd_name[0]         ='B';
+	nasid0_lboard_1.brd_name[0]         ='R';
+	nasid0_lboard_1.brd_name[0]         ='I';
+	nasid0_lboard_1.brd_name[0]         ='C';
+	nasid0_lboard_1.brd_name[0]         ='K';
+	nasid0_lboard_1.brd_flags          = 0x1;
+	nasid0_lboard_1.brd_next_any       = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_2);
+	nasid0_lboard_1.brd_next_same      = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_2);
+	nasid0_lboard_1.brd_next_same_host = 0x0;
+	nasid0_lboard_1.brd_partition      = 0x1;
+
+	nasid0_xbow_comp.kc_xbow.xbow_info.struct_type = KLSTRUCT_XBOW;
+	nasid0_xbow_comp.kc_xbow.xbow_info.revision = 0x2;
+	nasid0_xbow_comp.kc_xbow.xbow_info.nasid    = 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_info.errinfo  = 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_info.flags    = 0x1;
+	nasid0_xbow_comp.kc_xbow.xbow_info.virtid   = 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_info.physid   = 0xff;
+	nasid0_xbow_comp.kc_xbow.xbow_master_hub_link= 0xa;
+
+		/* XBOW LINK NUMBER a */
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[2].port_nasid= 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[2].port_flag= 0x6;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[2].port_offset= 0x0;
+
+		/* XBOW LINK NUMBER c */
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[4].port_nasid= 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[4].port_flag= 0x5;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[4].port_offset= 0x0;
+
+		/* XBOW LINK NUMBER d */
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[5].port_nasid= 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[5].port_flag= 0x5;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[5].port_offset= 0x0;
+
+		/* XBOW LINK NUMBER f */
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[7].port_nasid= 0x0;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[7].port_flag= 0x5;
+	nasid0_xbow_comp.kc_xbow.xbow_port_info[7].port_offset= 0x0;
+
+	/*
+ 	 * Lboard for Widget C Bus 0
+ 	 */
+	nasid0_lboard_2.brd_type           = KLTYPE_IXBRICK;
+	nasid0_lboard_2.struct_type        = 0x1;
+	nasid0_lboard_2.brd_widgetnum      = 0xc;
+	/* nasid0_lboard_1.brd_geoid          = module/001c11 */
+	nasid0_lboard_2.brd_numcompts      = 0x1;
+	nasid0_lboard_2.brd_nic            = 0x0;
+	nasid0_lboard_2.brd_nasid          = 0x0;
+	nasid0_lboard_2.brd_name[0]        = 'I';
+	nasid0_lboard_2.brd_name[1]        = 'X';
+	nasid0_lboard_2.brd_name[2]        = 'b';
+	nasid0_lboard_2.brd_name[3]        = 'r';
+	nasid0_lboard_2.brd_name[4]        = 'i';
+	nasid0_lboard_2.brd_name[5]        = 'c';
+	nasid0_lboard_2.brd_name[6]        = 'k';
+
+	nasid0_lboard_2.brd_flags          = 0x11;
+	nasid0_lboard_2.brd_next_any       = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_3);
+	nasid0_lboard_2.brd_next_same      = __fwtab_pa(0, (klconf_off_t)&nasid0_lboard_3);
+	nasid0_lboard_2.brd_next_same_host = 0x0;
+	nasid0_lboard_2.brd_partition      = 0x1;
+
+	nasid0_lboard_2_comp0.kc_bri.bri_info.struct_type = KLSTRUCT_BRI;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.revision = 0x2;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.nasid    = 0x0;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.errinfo  = 0x0;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.flags    = 0x1;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.virtid   = 0x2c;
+	nasid0_lboard_2_comp0.kc_bri.bri_info.physid   = 0xc;
+
+#if MAYBE
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.struct_type(Address 0xb004198be8)= Tigon3 GigE(0x27)
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.revision = 0x15
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.nasid    = 0x0
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.errinfo  = 0x41be808
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.flags    = 0x35
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.virtid   = 0x1
+nasid0_lboard_1_comp1.kc_ioc3.ioc3_info.physid   = 0x4
+
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.struct_type(Address 0xb004199080)= SCSI(0x25)
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.revision = 0x6
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.nasid    = 0x0
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.errinfo  = 0x0
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.flags    = 0x31
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.virtid   = 0xffffffff
+nasid0_lboard_1_comp2.kc_ioc3.ioc3_info.physid   = 0x3
+
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.struct_type(Address 0xb004199518)= IOC4(0x29)
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.revision = 0x4f
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.nasid    = 0x0
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.errinfo  = 0x0
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.flags    = 0x11
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.virtid   = 0xffffffff
+nasid0_lboard_1_comp3.kc_ioc3.ioc3_info.physid   = 0x1
+
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.struct_type(Address 0xb0041999b0)= IOC4_ATA(0x2e)
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.revision = 0x4f
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.nasid    = 0x0
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.errinfo  = 0x0
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.flags    = 0x31
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.virtid   = 0xffffffff
+nasid0_lboard_1_comp4.kc_ioc3.ioc3_info.physid   = 0x1
+#endif
+
+	/*
+ 	 * Lboard for Widget C - Bus 1
+ 	 */
+	nasid0_lboard_3.brd_type           = KLTYPE_IXBRICK;
+	nasid0_lboard_3.struct_type        = 0x1;
+	nasid0_lboard_3.brd_widgetnum      = 0x0;
+	/* nasid0_lboard_2.brd_geoid          = module/001c11; */
+	nasid0_lboard_3.brd_numcompts      = 0x1;
+	nasid0_lboard_3.brd_nic            = 0x52082f17;
+	nasid0_lboard_3.brd_nasid          = 0x0;
+	nasid0_lboard_3.brd_name[0]        = 'I';
+	nasid0_lboard_3.brd_name[1]        = 'X';
+	nasid0_lboard_3.brd_name[2]        = 'b';
+	nasid0_lboard_3.brd_name[3]        = 'r';
+	nasid0_lboard_3.brd_name[4]        = 'i';
+	nasid0_lboard_3.brd_name[5]        = 'c';
+	nasid0_lboard_3.brd_name[6]        = 'k';
+	nasid0_lboard_3.brd_flags          = 0x1;
+	nasid0_lboard_3.brd_next_any       = __fwtab_pa(0, (klconf_off_t)&nasid1_lboard_0);
+	nasid0_lboard_3.brd_next_same      = __fwtab_pa(0, (klconf_off_t)&nasid1_lboard_0);
+	nasid0_lboard_3.brd_next_same_host = 0x0;
+	nasid0_lboard_3.brd_partition      = 0x1;
+
+	nasid0_lboard_3_comp0.kc_bri.bri_info.struct_type= KLSTRUCT_BRI;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.revision = 0x2;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.nasid    = 0x0;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.errinfo  = 0x41be7f0;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.flags    = 0x1;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.virtid   = 0x2c;
+	nasid0_lboard_3_comp0.kc_bri.bri_info.physid   = 0xc;
+
+	/* lboard Address 0x3004194e80 */
+
+	nasid1_lboard_0.brd_type           = KLTYPE_TIO;
+	nasid1_lboard_0.struct_type        = 0x1;
+	nasid1_lboard_0.brd_widgetnum      = 0x0;
+	/* nasid1_lboard_0.brd_geoid          = module/001c11/slab/0/node */
+	nasid1_lboard_0.brd_geoid.node.any.slab = 0;
+	nasid1_lboard_0.brd_geoid.node.any.type = GEO_TYPE_NODE;
+	nasid1_lboard_0.brd_geoid.node.any.module = RBT_TO_MODULE(1, 12, '^');
+
+	nasid1_lboard_0.brd_numcompts      = 0x1;
+	nasid1_lboard_0.brd_compts[0] = __fwtab_pa(0, (klconf_off_t)&nasid1_hub_comp);
+	nasid1_lboard_0.brd_compts[1] = 0x0;
+
+	nasid1_lboard_0.brd_nic            = 0xffffffff;
+	nasid1_lboard_0.brd_nasid          = 0x1;
+	nasid1_lboard_0.brd_name[0] = 'I';
+	nasid1_lboard_0.brd_name[1] = 'P';
+	nasid1_lboard_0.brd_name[2] = '4';
+	nasid1_lboard_0.brd_name[3] = '1';
+	nasid1_lboard_0.brd_flags          = 0x1;
+        nasid1_lboard_0.brd_next_any       = __fwtab_pa(0, (klconf_off_t)&nasid1_lboard_1);
+        nasid1_lboard_0.brd_next_same      = __fwtab_pa(0, (klconf_off_t)&nasid1_lboard_1);
+        nasid1_lboard_0.brd_next_same_host = 0x0;
+	nasid1_lboard_0.brd_partition      = 0x0;
+
+	nasid1_hub_comp.kc_hub.hub_info.struct_type = 0x2;
+	nasid1_hub_comp.kc_hub.hub_info.revision = 0x2;
+	nasid1_hub_comp.kc_hub.hub_info.nasid    = 0x1;
+	nasid1_hub_comp.kc_hub.hub_info.errinfo  = 0x0;
+	nasid1_hub_comp.kc_hub.hub_info.flags    = 0x1;
+	nasid1_hub_comp.kc_hub.hub_info.virtid   = 0x0;
+	nasid1_hub_comp.kc_hub.hub_info.physid   = 0x0;
+	nasid1_hub_comp.kc_hub.hub_flags     = 0x0;
+	nasid1_hub_comp.kc_hub.hub_box_nic   = 0x0;
+	nasid1_hub_comp.kc_hub.hub_mfg_nic   = 0x0;
+	nasid1_hub_comp.kc_hub.hub_speed     = 0xc8;
+	nasid1_hub_comp.kc_hub.hub_io_module = 0x0;
+	nasid1_hub_comp.kc_hub.hub_port[1].port_nasid      = 0x1;
+	nasid1_hub_comp.kc_hub.hub_port[1].port_num        = 0x1;
+	nasid1_hub_comp.kc_hub.hub_port[1].port_flag       = 0x0;
+	nasid1_hub_comp.kc_hub.hub_port[1].port_offset     = 0x0;
+
+        /*
+         * Lboard for CP 0
+         */
+        nasid1_lboard_1.brd_type           = KLTYPE_PABRICK;
+        nasid1_lboard_1.struct_type        = 0x0;
+        nasid1_lboard_1.brd_widgetnum      = 0xc;
+        /* nasid0_lboard_1.brd_geoid          = module/001c11 */
+        nasid1_lboard_1.brd_geoid.node.any.slab = 0;
+        nasid1_lboard_1.brd_geoid.node.any.type = GEO_TYPE_NODE;
+        nasid1_lboard_1.brd_geoid.node.any.module = RBT_TO_MODULE(1, 12, '^');
+        nasid1_lboard_1.brd_numcompts      = 0x1;
+        nasid1_lboard_1.brd_nic            = 0x0;
+        nasid1_lboard_1.brd_nasid          = 0x1;
+        nasid1_lboard_1.brd_name[0]        = 'P';
+        nasid1_lboard_1.brd_name[1]        = 'A';
+        nasid1_lboard_1.brd_name[2]        = 'b';
+        nasid1_lboard_1.brd_name[3]        = 'r';
+        nasid1_lboard_1.brd_name[4]        = 'i';
+        nasid1_lboard_1.brd_name[5]        = 'c';
+        nasid1_lboard_1.brd_name[6]        = 'k';
+        nasid1_lboard_1.brd_next_any       = 0x0;
+        nasid1_lboard_1.brd_next_same      = 0x0;
+        nasid1_lboard_1.brd_next_same_host = 0x0;
+
+
+
+#if 0
+/* connecting geo = module/001c11/slab/1/node */
+
+nasid1_hub_comp.hub_port[2].port_nasid      = 0xffffffff
+nasid1_hub_comp.hub_port[2].port_num        = 0x0
+nasid1_hub_comp.hub_port[2].port_flag       = 0x0
+nasid1_hub_comp.hub_port[2].port_offset     = 0x0
+#endif
+}
