99 lines · 2.1 KB · Assembly
RawDownload
/* SPDX-License-Identifier: GPL-2.0 *//* * arch/alpha/kernel/head.S * * initial boot stuff.. At this point, the bootloader has already * switched into OSF/1 PAL-code, and loaded us at the correct address * (START_ADDR).  So there isn't much left for us to do: just set up * the kernel global pointer and jump to the kernel entry-point. */ #include <linux/init.h>#include <asm/asm-offsets.h>#include <asm/pal.h>#include <asm/setup.h> __HEAD.globl _stext	.set noreorder	.globl	__start	.ent	__start_stext:__start:	.prologue 0	br	$27,1f1:	ldgp	$29,0($27)	/* We need to get current_task_info loaded up...  */	lda	$8,init_thread_union	/* ... and find our stack ... */	lda	$30,0x4000 - SIZEOF_PT_REGS($8)	/* ... and then we can start the kernel.  */	jsr	$26,start_kernel	call_pal PAL_halt	.end __start #ifdef CONFIG_SMP	.align 3	.globl	__smp_callin	.ent	__smp_callin	/* On entry here from SRM console, the HWPCB of the per-cpu	   slot for this processor has been loaded.  We've arranged	   for the UNIQUE value for this process to contain the PCBB	   of the target idle task.  */__smp_callin:	.prologue 1	ldgp	$29,0($27)	# First order of business, load the GP. 	call_pal PAL_rduniq	# Grab the target PCBB.	mov	$0,$16		# Install it.	call_pal PAL_swpctx 	lda	$8,0x3fff	# Find "current".	bic	$30,$8,$8		jsr	$26,smp_callin	call_pal PAL_halt	.end __smp_callin#endif /* CONFIG_SMP */ 	#	# The following two functions are needed for supporting SRM PALcode	# on the PC164 (at least), since that PALcode manages the interrupt	# masking, and we cannot duplicate the effort without causing problems	# 	.align 3	.globl	cserve_ena	.ent	cserve_enacserve_ena:	.prologue 0	bis	$16,$16,$17	lda	$16,52($31)	call_pal PAL_cserve	ret	($26)	.end	cserve_ena 	.align 3	.globl	cserve_dis	.ent	cserve_discserve_dis:	.prologue 0	bis	$16,$16,$17	lda	$16,53($31)	call_pal PAL_cserve	ret	($26)	.end	cserve_dis 	#	# It is handy, on occasion, to make halt actually just loop. 	# Putting it here means we dont have to recompile the whole	# kernel.	# 	.align 3	.globl	halt	.ent	halthalt:	.prologue 0	call_pal PAL_halt	.end	halt