[funini.com] -> [kei@sodan] -> Kernel Reading

root/arch/x86/boot/pmjump.S

/* [<][>][^][v][top][bottom][index][help] */
/* ----------------------------------------------------------------------- *
 *
 *   Copyright (C) 1991, 1992 Linus Torvalds
 *   Copyright 2007 rPath, Inc. - All Rights Reserved
 *
 *   This file is part of the Linux kernel, and is made available under
 *   the terms of the GNU General Public License version 2.
 *
 * ----------------------------------------------------------------------- */

/*
 * The actual transition into protected mode
 */

#include <asm/boot.h>
#include <asm/processor-flags.h>
#include <asm/segment.h>

        .text

        .globl  protected_mode_jump
        .type   protected_mode_jump, @function

        .code16

/*
 * void protected_mode_jump(u32 entrypoint, u32 bootparams);
 */
protected_mode_jump:
        movl    %edx, %esi              # Pointer to boot_params table

        xorl    %ebx, %ebx
        movw    %cs, %bx
        shll    $4, %ebx
        addl    %ebx, 2f
        jmp     1f                      # Short jump to serialize on 386/486
1:

        movw    $__BOOT_DS, %cx
        movw    $__BOOT_TSS, %di

        movl    %cr0, %edx
        orb     $X86_CR0_PE, %dl        # Protected mode
        movl    %edx, %cr0

        # Transition to 32-bit mode
        .byte   0x66, 0xea              # ljmpl opcode
2:      .long   in_pm32                 # offset
        .word   __BOOT_CS               # segment

        .size   protected_mode_jump, .-protected_mode_jump

        .code32
        .type   in_pm32, @function
in_pm32:
        # Set up data segments for flat 32-bit mode
        movl    %ecx, %ds
        movl    %ecx, %es
        movl    %ecx, %fs
        movl    %ecx, %gs
        movl    %ecx, %ss
        # The 32-bit code sets up its own stack, but this way we do have
        # a valid stack if some debugging hack wants to use it.
        addl    %ebx, %esp

        # Set up TR to make Intel VT happy
        ltr     %di

        # Clear registers to allow for future extensions to the
        # 32-bit boot protocol
        xorl    %ecx, %ecx
        xorl    %edx, %edx
        xorl    %ebx, %ebx
        xorl    %ebp, %ebp
        xorl    %edi, %edi

        # Set up LDTR to make Intel VT happy
        lldt    %cx

        jmpl    *%eax                   # Jump to the 32-bit entrypoint

        .size   in_pm32, .-in_pm32

/* [<][>][^][v][top][bottom][index][help] */

[funini.com] -> [kei@sodan] -> Kernel Reading