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

📄 klgraph_hack.c

📁 microwindows移植到S3C44B0的源码
💻 C
字号:
/* $Id$ * * 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-2002 Silicon Graphics, Inc. All rights reserved. *//* * 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/io.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 DEFINE_DUMP_RTNS/* forward declarations */static void dump_ii(void), dump_crossbow(void);static void clear_ii_error(void);#endif /* DEFINE_DUMP_RTNS */#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)voidklgraph_hack_init(void){	/*	 * 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 {		panic("klgraph_hack_init: Unable to locate KLCONFIG TABLE\n");	}}	#ifdef DEFINE_DUMP_RTNS/*  * these were useful for printing out registers etc * during bringup   */static voidxdump(long long *addr, int count){	int ii;	volatile long long *xx = addr;	for ( ii = 0; ii < count; ii++, xx++ ) {		printk("0x%p : 0x%p\n", (void *)xx, (void *)*xx);	}}static voidxdump32(unsigned int *addr, int count){	int ii;	volatile unsigned int *xx = addr;	for ( ii = 0; ii < count; ii++, xx++ ) {		printk("0x%p : 0x%0x\n", (void *)xx, (int)*xx);	}}static voidclear_ii_error(void){	volatile long long *tmp;	printk("... WSTAT ");	xdump((long long *)0xc0000a0001c00008, 1);	printk("... WCTRL ");	xdump((long long *)0xc0000a0001c00020, 1);	printk("... WLCSR ");	xdump((long long *)0xc0000a0001c00128, 1);	printk("... IIDSR ");	xdump((long long *)0xc0000a0001c00138, 1);        printk("... IOPRBs ");	xdump((long long *)0xc0000a0001c00198, 9);	printk("... IXSS ");	xdump((long long *)0xc0000a0001c00210, 1);	printk("... IBLS0 ");	xdump((long long *)0xc0000a0001c10000, 1);	printk("... IBLS1 ");	xdump((long long *)0xc0000a0001c20000, 1);        /* Write IOERR clear to clear the CRAZY bit in the status */        tmp = (long long *)0xc0000a0001c001f8; *tmp = (long long)0xffffffff;	/* dump out local block error registers */	printk("... ");	xdump((long long *)0xc0000a0001e04040, 1);	/* LB_ERROR_BITS */	printk("... ");	xdump((long long *)0xc0000a0001e04050, 1);	/* LB_ERROR_HDR1 */	printk("... ");	xdump((long long *)0xc0000a0001e04058, 1);	/* LB_ERROR_HDR2 */	/* and clear the LB_ERROR_BITS */	tmp = (long long *)0xc0000a0001e04040; *tmp = 0x0;	printk("clr: ");	xdump((long long *)0xc0000a0001e04040, 1);	/* LB_ERROR_BITS */	tmp = (long long *)0xc0000a0001e04050; *tmp = 0x0;	tmp = (long long *)0xc0000a0001e04058; *tmp = 0x0;}static voiddump_ii(void){	printk("===== Dump the II regs =====\n");	xdump((long long *)0xc0000a0001c00000, 2);	xdump((long long *)0xc0000a0001c00020, 1);	xdump((long long *)0xc0000a0001c00100, 37);	xdump((long long *)0xc0000a0001c00300, 98);	xdump((long long *)0xc0000a0001c10000, 6);	xdump((long long *)0xc0000a0001c20000, 6);	xdump((long long *)0xc0000a0001c30000, 2);	xdump((long long *)0xc0000a0000000000, 1);	xdump((long long *)0xc0000a0001000000, 1);	xdump((long long *)0xc0000a0002000000, 1);	xdump((long long *)0xc0000a0003000000, 1);	xdump((long long *)0xc0000a0004000000, 1);	xdump((long long *)0xc0000a0005000000, 1);	xdump((long long *)0xc0000a0006000000, 1);	xdump((long long *)0xc0000a0007000000, 1);	xdump((long long *)0xc0000a0008000000, 1);	xdump((long long *)0xc0000a0009000000, 1);	xdump((long long *)0xc0000a000a000000, 1);	xdump((long long *)0xc0000a000b000000, 1);	xdump((long long *)0xc0000a000c000000, 1);	xdump((long long *)0xc0000a000d000000, 1);	xdump((long long *)0xc0000a000e000000, 1);	xdump((long long *)0xc0000a000f000000, 1);}static voiddump_crossbow(void){	printk("===== Dump the Crossbow regs =====\n");	clear_ii_error();	xdump32((unsigned int *)0xc0000a0000000004, 1);	clear_ii_error();	xdump32((unsigned int *)0xc0000a0000000000, 1);	printk("and again..\n");	xdump32((unsigned int *)0xc0000a0000000000, 1);	xdump32((unsigned int *)0xc0000a0000000000, 1);	clear_ii_error();	xdump32((unsigned int *)0xc000020000000004, 1);	clear_ii_error();	xdump32((unsigned int *)0xc000020000000000, 1);	clear_ii_error();	xdump32((unsigned int *)0xc0000a0000800004, 1);	clear_ii_error();	xdump32((unsigned int *)0xc0000a0000800000, 1);	clear_ii_error();	xdump32((unsigned int *)0xc000020000800004, 1);	clear_ii_error();	xdump32((unsigned int *)0xc000020000800000, 1);	clear_ii_error();}#endif /* DEFINE_DUMP_RTNS */

⌨️ 快捷键说明

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