aboutsummaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorGraeme Russ <graeme.russ@gmail.com>2011-12-31 10:24:36 +1100
committerGraeme Russ <graeme.russ@gmail.com>2012-01-04 21:05:09 +1100
commit109ad143f8f2a948dc6628f55dbb6a8905087bfe (patch)
treed56d01c9fb8b6ff3b72d00281de725a2a4669d0a /arch/x86
parent1176a7067a89e68bbb1872b234f67bd2f4651051 (diff)
x86: Remove GDR related magic numbers
-- Changes for v2: - Use an enum - Add defined for GDT size (previously added in patch 7) - Use X86_ namespace (as per Linux headers)
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/cpu/cpu.c8
-rw-r--r--arch/x86/cpu/start.S3
-rw-r--r--arch/x86/include/asm/processor.h23
3 files changed, 25 insertions, 9 deletions
diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c
index 61d0b6941..209ff2989 100644
--- a/arch/x86/cpu/cpu.c
+++ b/arch/x86/cpu/cpu.c
@@ -63,13 +63,13 @@ static void reload_gdt(void)
*/
static const u64 boot_gdt[] __attribute__((aligned(16))) = {
/* CS: code, read/execute, 4 GB, base 0 */
- [GDT_ENTRY_32BIT_CS] = GDT_ENTRY(0xc09b, 0, 0xfffff),
+ [X86_GDT_ENTRY_32BIT_CS] = GDT_ENTRY(0xc09b, 0, 0xfffff),
/* DS: data, read/write, 4 GB, base 0 */
- [GDT_ENTRY_32BIT_DS] = GDT_ENTRY(0xc093, 0, 0xfffff),
+ [X86_GDT_ENTRY_32BIT_DS] = GDT_ENTRY(0xc093, 0, 0xfffff),
/* 16-bit CS: code, read/execute, 64 kB, base 0 */
- [GDT_ENTRY_16BIT_CS] = GDT_ENTRY(0x109b, 0, 0x0ffff),
+ [X86_GDT_ENTRY_16BIT_CS] = GDT_ENTRY(0x109b, 0, 0x0ffff),
/* 16-bit DS: data, read/write, 64 kB, base 0 */
- [GDT_ENTRY_16BIT_DS] = GDT_ENTRY(0x1093, 0, 0x0ffff),
+ [X86_GDT_ENTRY_16BIT_DS] = GDT_ENTRY(0x1093, 0, 0x0ffff),
};
static struct gdt_ptr gdt;
diff --git a/arch/x86/cpu/start.S b/arch/x86/cpu/start.S
index f87633b56..6027f5418 100644
--- a/arch/x86/cpu/start.S
+++ b/arch/x86/cpu/start.S
@@ -29,6 +29,7 @@
#include <config.h>
#include <version.h>
#include <asm/global_data.h>
+#include <asm/processor.h>
#include <asm/processor-flags.h>
#include <generated/asm-offsets.h>
@@ -58,7 +59,7 @@ _start:
/* This is the 32-bit cold-reset entry point */
/* Load the segement registes to match the gdt loaded in start16.S */
- movl $0x18, %eax
+ movl $(X86_GDT_ENTRY_32BIT_DS * X86_GDT_ENTRY_SIZE), %eax
movw %ax, %fs
movw %ax, %ds
movw %ax, %gs
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 1e5dccd34..aa8188e51 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -24,9 +24,24 @@
#ifndef __ASM_PROCESSOR_H_
#define __ASM_PROCESSOR_H_ 1
-#define GDT_ENTRY_32BIT_CS 2
-#define GDT_ENTRY_32BIT_DS (GDT_ENTRY_32BIT_CS + 1)
-#define GDT_ENTRY_16BIT_CS (GDT_ENTRY_32BIT_DS + 1)
-#define GDT_ENTRY_16BIT_DS (GDT_ENTRY_16BIT_CS + 1)
+#define X86_GDT_ENTRY_SIZE 8
+
+#ifndef __ASSEMBLY__
+
+enum {
+ X86_GDT_ENTRY_NULL = 0,
+ X86_GDT_ENTRY_UNUSED,
+ X86_GDT_ENTRY_32BIT_CS,
+ X86_GDT_ENTRY_32BIT_DS,
+ X86_GDT_ENTRY_16BIT_CS,
+ X86_GDT_ENTRY_16BIT_DS,
+ X86_GDT_NUM_ENTRIES
+};
+#else
+/* NOTE: If the above enum is modified, this define must be checked */
+#define X86_GDT_ENTRY_32BIT_DS 3
+#endif
+
+#define X86_GDT_SIZE (X86_GDT_NUM_ENTRIES * X86_GDT_ENTRY_SIZE)
#endif