sp1/amd64: cpu: Add GDT sources
Signed-off-by: Ian Moffett <ian@mirocom.org>
This commit is contained in:
@@ -37,9 +37,90 @@ md_cpu_init:
|
|||||||
or $1<<11, %eax // Set NXE
|
or $1<<11, %eax // Set NXE
|
||||||
wrmsr // Write it back
|
wrmsr // Write it back
|
||||||
|
|
||||||
|
lea g_GDTR(%rip), %rdi
|
||||||
|
call md_gdt_load
|
||||||
|
|
||||||
pop %rbx
|
pop %rbx
|
||||||
pop %r15
|
pop %r15
|
||||||
pop %r14
|
pop %r14
|
||||||
pop %r13
|
pop %r13
|
||||||
pop %r12
|
pop %r12
|
||||||
retq
|
retq
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl md_gdt_load
|
||||||
|
md_gdt_load:
|
||||||
|
push %r12
|
||||||
|
push %r13
|
||||||
|
push %r14
|
||||||
|
push %r15
|
||||||
|
push %rbx
|
||||||
|
push %rbp
|
||||||
|
|
||||||
|
lgdt (%rdi) /* Load our own GDT */
|
||||||
|
push $0x08 /* Kernel CS */
|
||||||
|
lea 1f(%rip), %rbx /* Drop point */
|
||||||
|
push %rbx /* RIP */
|
||||||
|
lretq /* Flush prefetch + reload CS */
|
||||||
|
1: mov $0x10, %ax /* Kernel DS */
|
||||||
|
mov %ax, %ds
|
||||||
|
mov %ax, %es
|
||||||
|
mov %ax, %ss
|
||||||
|
mov %ax, %fs
|
||||||
|
xor %ax, %ax
|
||||||
|
mov %ax, %gs
|
||||||
|
|
||||||
|
pop %rbp
|
||||||
|
pop %rbx
|
||||||
|
pop %r15
|
||||||
|
pop %r14
|
||||||
|
pop %r13
|
||||||
|
pop %r12
|
||||||
|
retq
|
||||||
|
|
||||||
|
.section .data
|
||||||
|
.globl g_GDT
|
||||||
|
g_GDT:
|
||||||
|
.NULL:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
.byte 0x00
|
||||||
|
.byte 0b00000000
|
||||||
|
.byte 0b00000000
|
||||||
|
.byte 0x00
|
||||||
|
.CODE:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
.byte 0x00
|
||||||
|
.byte 0b10011010
|
||||||
|
.byte 0b00100000
|
||||||
|
.byte 0x00
|
||||||
|
.DATA:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
.byte 0x00
|
||||||
|
.byte 0b10010010
|
||||||
|
.byte 0b00000000
|
||||||
|
.byte 0x00
|
||||||
|
.UCODE:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
.byte 0x00
|
||||||
|
.byte 0b11111010
|
||||||
|
.byte 0b10101111
|
||||||
|
.byte 0x00
|
||||||
|
.UDATA:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
.byte 0x00
|
||||||
|
.byte 0b11110010
|
||||||
|
.byte 0b00000000
|
||||||
|
.byte 0x00
|
||||||
|
.TSS:
|
||||||
|
.quad 0x00
|
||||||
|
.quad 0x00
|
||||||
|
|
||||||
|
.globl g_GDTR
|
||||||
|
g_GDTR:
|
||||||
|
.word g_GDTR - g_GDT
|
||||||
|
.quad g_GDT
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2026, Mirocom Laboratories
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* The following sources are CONFIDENTIAL and PROPRIETARY
|
||||||
|
* property of Mirocom Laboratories. Unauthorized copying,
|
||||||
|
* use, distribution or modification of this file, in whole
|
||||||
|
* and in part, is strictly prohibited without the prior written
|
||||||
|
* consent from Mirocom Laboratories.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACHINE_GDT_H_
|
||||||
|
#define _MACHINE_GDT_H_ 1
|
||||||
|
|
||||||
|
/* Kernel code/data */
|
||||||
|
#define GDT_KCODE 0x08
|
||||||
|
#define GDT_KDATA 0x10
|
||||||
|
|
||||||
|
/* User code/data */
|
||||||
|
#define GDT_UCODE 0x18
|
||||||
|
#define GDT_UDATA 0x20
|
||||||
|
|
||||||
|
/* Task state segment */
|
||||||
|
#define GDT_TSS 0x28
|
||||||
|
#define GDT_TSS_INDEX 0x05
|
||||||
|
|
||||||
|
#endif /* !_MACHINE_GDT_H_ */
|
||||||
Reference in New Issue
Block a user