| #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 |
| |