/* ----------------------------------------------------------------------- *
 *
 *   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.
 *
 * ----------------------------------------------------------------------- */

/**
 * @file
 * @brief The actual transition into protected mode
 *
 * Note: This function is running in flat and real mode. Due to some
 * other restrictions it must running from an address space below 0x10000
 */

/**
 * @fn void protected_mode_jump(void)
 * @brief Switches the first time from real mode to flat mode
 */

#include <asm/modes.h>
#include "boot.h"

	.file "pmjump.S"
	.code16
	.section .boot.text.protected_mode_jump, "ax"

	.globl	protected_mode_jump
	.type	protected_mode_jump, @function

protected_mode_jump:
	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	/* enable protected mode */
	movl %edx, %cr0

	/* Transition to 32-bit flat mode */
	data32  ljmp $__BOOT_CS, $in_pm32

/* ------------------------------------------------------------------------ */

	.section ".text.in_pm32","ax"
	.code32

	.extern uboot_entry
	.extern __bss_stop

	.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
/*
 * Our flat mode code uses its own stack area behind the bss. With this we
 * are still able to return to real mode temporarely
 */
	movl $__bss_stop + 32768, %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

	jmp uboot_entry

	.size protected_mode_jump, .-protected_mode_jump

