OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uClinux-2.0.x/] [arch/] [i386/] [kernel/] [trampoline.S] - Rev 199

Go to most recent revision | Compare with Previous | Blame | View Log

!
!       Trampoline.S    Derived from Setup.S by Linus Torvalds
!
!       Entry: CS:IP point to the start of our code, we are 
!       in real mode with no stack, but the rest of the 
!       trampoline page to make our stack and everything else
!       is a mystery.
!
!       In fact we don't actually need a stack so we don't
!       set one up.
!
!       We jump into the boot/compressed/head.S code. So you'd
!       better be running a compressed kernel image or you
!       won't get very far.
!
#define __ASSEMBLY__
#include <asm/segment.h>

.text
        extrn startup32

entry start
start:
!       nop
!       jmp start       !       Test
        mov ax,cs       !       Code and data in the same place
        mov ds,ax       !
        mov cx,ax       !       Pass stack info to the 32bit boot
        add cx,cx
        add cx,cx
        add cx,cx
        add cx,cx       !       Segment -> Offset
        add cx, #4096   !       End of page is wanted
        mov     bx,#1   !       Flag an SMP trampoline
        cli             !       We should be safe anyway

        lidt    idt_48  !       load idt with 0,0
        lgdt    gdt_48  !       load gdt with whatever is appropriate

        xor     ax,ax   
        inc     ax      !       protected mode (PE) bit
        lmsw    ax      !       Into protected mode
        jmp     flush_instr
flush_instr:
        jmpi    8192+startup32,KERNEL_CS        !       Jump to the 32bit trampoline code
!       jmpi    0x100000,KERNEL_CS              !       Jump into the 32bit startup
!       .byte   0x66,0x67                       !       32bit
!       .byte   0xea,0x00,0x00,0x10,0x00,0x10,0x00      !jmpi   .0x100000,KERNEL_CS

gdt:
        .word   0,0,0,0         ! dummy

        .word   0,0,0,0         ! unused

        .word   0x07FF          ! 8Mb - limit=2047 (2048*4096=8Mb)
        .word   0x0000          ! base address=0
        .word   0x9A00          ! code read/exec
        .word   0x00C0          ! granularity=4096, 386

        .word   0x07FF          ! 8Mb - limit=2047 (2048*4096=8Mb)
        .word   0x0000          ! base address=0
        .word   0x9200          ! data read/write
        .word   0x00C0          ! granularity=4096, 386

idt_48:
        .word   0                        ! idt limit=0
        .word   0,0                     ! idt base=0L

gdt_48:
        .word   0x800           ! gdt limit=2048, 256 GDT entries
        .word   8192+gdt,0x0    ! gdt base = 8192+gdt (first SMP CPU)
                                ! we load the others with the first table
                                ! saves rewriting gdt_48 for each

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.