|  | #include <linux/linkage.h> | 
|  |  | 
|  | #include <asm/entry.h> | 
|  | #include <asm/page.h> | 
|  | #include <asm/contregs.h> | 
|  | #include <asm/sun3-head.h> | 
|  |  | 
|  | PSL_HIGHIPL     = 0x2700 | 
|  | NBSG            = 0x20000 | 
|  | ICACHE_ONLY	= 0x00000009 | 
|  | CACHES_OFF	= 0x00000008	| actually a clear and disable --m | 
|  | #define MAS_STACK INT_STACK | 
|  | ROOT_TABLE_SIZE = 128 | 
|  | PAGESIZE	= 8192 | 
|  | SUN3_INVALID_PMEG = 255 | 
|  | .globl bootup_user_stack | 
|  | .globl bootup_kernel_stack | 
|  | .globl pg0 | 
|  | .globl swapper_pg_dir | 
|  | .globl kernel_pmd_table | 
|  | .globl availmem | 
|  | .global m68k_pgtable_cachemode | 
|  | .global kpt | 
|  | | todo: all these should be in bss! | 
|  | swapper_pg_dir:                .skip 0x2000 | 
|  | pg0:                           .skip 0x2000 | 
|  | kernel_pmd_table:              .skip 0x2000 | 
|  |  | 
|  | .globl kernel_pg_dir | 
|  | .equ    kernel_pg_dir,kernel_pmd_table | 
|  |  | 
|  | .section .head | 
|  | ENTRY(_stext) | 
|  | ENTRY(_start) | 
|  |  | 
|  | /* Firstly, disable interrupts and set up function codes. */ | 
|  | movew	#PSL_HIGHIPL, %sr | 
|  | moveq	#FC_CONTROL, %d0 | 
|  | movec	%d0, %sfc | 
|  | movec	%d0, %dfc | 
|  |  | 
|  | /* Make sure we're in context zero. */ | 
|  | moveq	#0, %d0 | 
|  | movsb	%d0, AC_CONTEXT | 
|  |  | 
|  | /* map everything the bootloader left us into high memory, clean up the | 
|  | excess later */ | 
|  | lea	(AC_SEGMAP+0),%a0 | 
|  | lea	(AC_SEGMAP+KERNBASE),%a1 | 
|  | 1: | 
|  | movsb	%a0@, %d1 | 
|  | movsb	%d1, %a1@ | 
|  | cmpib	#SUN3_INVALID_PMEG, %d1 | 
|  | beq	2f | 
|  | addl	#NBSG,%a0 | 
|  | addl	#NBSG,%a1 | 
|  | jmp	1b | 
|  |  | 
|  | 2: | 
|  |  | 
|  | /* Disable caches and jump to high code. */ | 
|  | moveq	#ICACHE_ONLY,%d0	| Cache disabled until we're ready to enable it | 
|  | movc	%d0, %cacr	|   is this the right value? (yes --m) | 
|  | jmp	1f:l | 
|  |  | 
|  | /* Following code executes at high addresses (0xE000xxx). */ | 
|  | 1:	lea	init_task,%curptr			| get initial thread... | 
|  | lea	init_thread_union+THREAD_SIZE,%sp	| ...and its stack. | 
|  |  | 
|  | /* copy bootinfo records from the loader to _end */ | 
|  | lea	_end, %a1 | 
|  | lea	BI_START, %a0 | 
|  | /* number of longs to copy */ | 
|  | movel	%a0@, %d0 | 
|  | 1:	addl	#4, %a0 | 
|  | movel   %a0@, %a1@ | 
|  | addl	#4, %a1 | 
|  | dbf	%d0, 1b | 
|  |  | 
|  | /* Point MSP at an invalid page to trap if it's used. --m */ | 
|  | movl	#(PAGESIZE),%d0 | 
|  | movc	%d0,%msp | 
|  | moveq	#-1,%d0 | 
|  | movsb	%d0,(AC_SEGMAP+0x0) | 
|  |  | 
|  | jbsr	sun3_init | 
|  |  | 
|  | jbsr	base_trap_init | 
|  |  | 
|  | jbsr    start_kernel | 
|  | trap	#15 | 
|  |  | 
|  | .data | 
|  | .even | 
|  | kpt: | 
|  | .long 0 | 
|  | availmem: | 
|  | .long 0 | 
|  | | todo: remove next two. --m | 
|  | is_medusa: | 
|  | .long 0 | 
|  | m68k_pgtable_cachemode: | 
|  | .long 0 | 
|  |  |