/* * Copyright 2014, General Dynamics C4 Systems * * This software may be distributed and modified according to the terms of * the GNU General Public License version 2. Note that NO WARRANTY is provided. * See "LICENSE_GPLv2.txt" for details. * * @TAG(GD_GPL) */ #include .section .boot.text BEGIN_FUNC(ia32_install_gdt) movl 4(%esp), %eax lgdt (%eax) # load gdtr register with gdt pointer movw $0x10, %ax # load register ax with seg selector for kernel DS movw %ax, %ds movw %ax, %es movw %ax, %ss movw $0x0, %ax movw %ax, %fs movw %ax, %gs ljmp $0x08, $1f # reload kernel CS with a far jump 1: ret END_FUNC(ia32_install_gdt) BEGIN_FUNC(ia32_install_idt) movl 4(%esp), %eax lidt (%eax) ret END_FUNC(ia32_install_idt) BEGIN_FUNC(ia32_install_ldt) lldt 4(%esp) ret END_FUNC(ia32_install_ldt) BEGIN_FUNC(ia32_install_tss) ltr 4(%esp) ret END_FUNC(ia32_install_tss) BEGIN_FUNC(ia32_load_fs) movl 4(%esp), %eax movw %ax, %fs ret END_FUNC(ia32_load_fs) BEGIN_FUNC(ia32_load_gs) movl 4(%esp), %eax movw %ax, %gs ret END_FUNC(ia32_load_gs) BEGIN_FUNC(getCacheLineSize) pushl %ebx movl $1, %eax cpuid movl %ebx, %eax shrl $8, %eax andl $0xff, %eax shll $3, %eax popl %ebx ret END_FUNC(getCacheLineSize) .section .text BEGIN_FUNC(out8) movb 8(%esp), %al movw 4(%esp), %dx outb %al, %dx ret END_FUNC(out8) BEGIN_FUNC(out16) movw 8(%esp), %ax movw 4(%esp), %dx outw %ax, %dx ret END_FUNC(out16) BEGIN_FUNC(out32) movl 8(%esp), %eax movw 4(%esp), %dx outl %eax, %dx ret END_FUNC(out32) BEGIN_FUNC(in8) movw 4(%esp), %dx inb %dx, %al ret END_FUNC(in8) BEGIN_FUNC(in16) movw 4(%esp), %dx inw %dx, %ax ret END_FUNC(in16) BEGIN_FUNC(in32) movw 4(%esp), %dx inl %dx, %eax ret END_FUNC(in32)