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

📄 head.s

📁 microwindows移植到S3C44B0的源码
💻 S
字号:
/* * 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) 1994, 1995 Waldorf Electronics * Written by Ralf Baechle and Andreas Busse * Copyright (C) 1995 - 1999 Ralf Baechle * Copyright (C) 1996 Paul M. Antoine * Modified for DECStation and hence R3000 support by Paul M. Antoine * Further modifications by David S. Miller and Harald Koerfgen * Copyright (C) 1999 Silicon Graphics, Inc. * * Kevin Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved. */#include <linux/config.h>#include <linux/init.h>#include <linux/threads.h>#include <asm/asm.h>#include <asm/current.h>#include <asm/offset.h>#include <asm/pgtable-bits.h>#include <asm/processor.h>#include <asm/regdef.h>#include <asm/cachectl.h>#include <asm/mipsregs.h>#include <asm/stackframe.h>		.text		/*		 * Reserved space for exception handlers.		 * Necessary for machines which link their kernels at KSEG0.		 */		.fill	0x400		__INIT		/* Cache Error */		LEAF(except_vec2_generic)		.set	noreorder		.set	noat		.set    mips0		/*		 * This is a very bad place to be.  Our cache error		 * detection has triggered.  If we have write-back data		 * in the cache, we may not be able to recover.  As a		 * first-order desperate measure, turn off KSEG0 cacheing.		 */		mfc0	k0,CP0_CONFIG		li	k1,~CONF_CM_CMASK		and	k0,k0,k1		ori	k0,k0,CONF_CM_UNCACHED		mtc0	k0,CP0_CONFIG		/* Give it a few cycles to sink in... */		nop		nop		nop		j	cache_parity_error		nop		END(except_vec2_generic)		.set	at		/*		 * Special interrupt vector for embedded MIPS.  This is a		 * dedicated interrupt vector which reduces interrupt processing		 * overhead.  The jump instruction will be inserted here at		 * initialization time.  This handler may only be 8 bytes in		 * size!		 */		NESTED(except_vec4, 0, sp)1:		j	1b			/* Dummy, will be replaced */		 nop		END(except_vec4)		/*		 * EJTAG debug exception handler.		 * The EJTAG debug exception entry point is 0xbfc00480, which		 * normally is in the boot PROM, so the boot PROM must do a		 * unconditional jump to this vector.		 */			NESTED(except_vec_ejtag_debug, 0, sp)		j	ejtag_debug_handler		 nop		END(except_vec_ejtag_debug)		/*		 * EJTAG debug exception handler.		 */		NESTED(ejtag_debug_handler, PT_SIZE, sp)		.set	noat		.set	noreorder		mtc0	k0, CP0_DESAVE		mfc0	k0, CP0_DEBUG			sll	k0, k0, 30	# Check for SDBBP.		bgez	k0, ejtag_return		la	k0, ejtag_debug_buffer		sw	k1, 0(k0)		SAVE_ALL		jal	ejtag_exception_handler		 move	a0, sp		RESTORE_ALL		la	k0, ejtag_debug_buffer		lw	k1, 0(k0)	ejtag_return:		mfc0	k0, CP0_DESAVE			.word	0x4200001f     # DERET, return from EJTAG debug exception.		 nop		.set	at		END(ejtag_debug_handler)			/*		* NMI debug exception handler for MIPS reference boards.		* The NMI debug exception entry point is 0xbfc00000, which		* normally is in the boot PROM, so the boot PROM must do a		* unconditional jump to this vector.		*/		NESTED(except_vec_nmi, 0, sp)		j       nmi_handler		 nop		END(except_vec_nmi)		NESTED(nmi_handler, PT_SIZE, sp)		.set    noat		.set    noreorder		.set    mips3		SAVE_ALL		jal     nmi_exception_handler		 move   a0, sp		RESTORE_ALL		eret		.set    at		.set    mips0		END(nmi_handler)			/*		 * Kernel entry point		 */		NESTED(kernel_entry, 16, sp)		.set	noreorder		/* The following two symbols are used for kernel profiling. */		EXPORT(stext)		EXPORT(_stext)		/*		 * Stack for kernel and init, current variable		 */		la	$28, init_task_union		addiu	t0, $28, KERNEL_STACK_SIZE-32		subu	sp, t0, 4*SZREG		sw	t0, kernelsp		/* The firmware/bootloader passes argc/argp/envp		 * to us as arguments.  But clear bss first because		 * the romvec and other important info is stored there		 * by prom_init().		 */		la	t0, _edata		sw	zero, (t0)		la	t1, (_end - 4)1:		addiu	t0, 4		bne	t0, t1, 1b		 sw	zero, (t0)		jal	init_arch		 nop		END(kernel_entry)#ifdef CONFIG_SMP/* * SMP slave cpus entry point.  Board specific code for bootstrap calls this * function after setting up the stack and gp registers.  */		LEAF(smp_bootstrap)		.set push		.set noreorder		mtc0	zero, CP0_WIRED		CLI		mfc0	t0, CP0_STATUS		li	t1, ~(ST0_CU1|ST0_CU2|ST0_CU3|ST0_KX|ST0_SX)		and	t0, t1		or	t0, (ST0_CU0);		jal	start_secondary		mtc0	t0, CP0_STATUS		.set pop		END(smp_bootstrap)#endif		__FINIT		/*		 * This buffer is reserved for the use of the EJTAG debug 		 * handler.		 */		.data		EXPORT(ejtag_debug_buffer)		.fill	4			.comm	kernelsp,    NR_CPUS * 8, 8		.comm	pgd_current, NR_CPUS * 8, 8	.macro	page name, order=0	.globl	\name\name:	.size	\name, (_PAGE_SIZE << \order)	.org	. + (_PAGE_SIZE << \order)	.type	\name, @object	.endm	.data	.align	12	page	swapper_pg_dir, _PGD_ORDER	page	empty_bad_page, 0	page	empty_bad_page_table, 0	page	invalid_pte_table, 0

⌨️ 快捷键说明

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