From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 24/39] NLKD/i386 - core
Date: Wed, 09 Nov 2005 15:20:11 +0100 [thread overview]
Message-ID: <437213AB.76F0.0078.0@novell.com> (raw)
In-Reply-To: 4372138D.76F0.0078.0@novell.com
[-- Attachment #1: Type: text/plain, Size: 106 bytes --]
The core i386 NLKD additions.
Signed-Off-By: Jan Beulich <jbeulich@novell.com>
(actual patch attached)
[-- Attachment #2: nlkd-i386.patch --]
[-- Type: application/octet-stream, Size: 47522 bytes --]
The core i386 NLKD additions.
Signed-Off-By: Jan Beulich <jbeulich@novell.com>
Index: 2.6.14-nlkd/arch/i386/Kconfig.debug
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/Kconfig.debug 2005-11-09 11:12:40.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/Kconfig.debug 2005-11-04 16:19:32.000000000 +0100
@@ -1,6 +1,7 @@
menu "Kernel hacking"
source "lib/Kconfig.debug"
+source "debug/Kconfig"
config EARLY_PRINTK
bool "Early printk" if EMBEDDED && DEBUG_KERNEL
Index: 2.6.14-nlkd/arch/i386/kernel/asm-offsets.c
===================================================================
--- 2.6.14-nlkd.orig/arch/i386/kernel/asm-offsets.c 2005-11-09 11:12:40.000000000 +0100
+++ 2.6.14-nlkd/arch/i386/kernel/asm-offsets.c 2005-11-04 16:19:32.000000000 +0100
@@ -4,6 +4,7 @@
* to extract and format the required data.
*/
+#include <linux/config.h>
#include <linux/sched.h>
#include <linux/signal.h>
#include <linux/personality.h>
@@ -13,6 +14,13 @@
#include <asm/fixmap.h>
#include <asm/processor.h>
#include <asm/thread_info.h>
+#ifdef CONFIG_NLKD
+# include <asm/fta-frame.h>
+# include <asm/fta-type.h>
+#endif
+#if defined(CONFIG_CDE) || defined(CONFIG_CDE_MODULE)
+# include <../debug/nlkd/cdelock.h>
+#endif
#define DEFINE(sym, val) \
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -70,4 +78,88 @@ void foo(void)
DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
DEFINE(THREAD_SIZE_asm, THREAD_SIZE);
DEFINE(VSYSCALL_BASE, __fix_to_virt(FIX_VSYSCALL));
+
+#ifdef CONFIG_NLKD
+ BLANK();
+# define TSS_DEF(f) DEFINE(TSS_##f, offsetof (struct tss_struct, f))
+ TSS_DEF(back_link);
+ TSS_DEF(esp0);
+ TSS_DEF(ss0);
+ TSS_DEF(esp1);
+ TSS_DEF(ss1);
+ TSS_DEF(esp2);
+ TSS_DEF(ss2);
+ TSS_DEF(__cr3);
+ TSS_DEF(eip);
+ TSS_DEF(eflags);
+ TSS_DEF(eax);
+ TSS_DEF(ecx);
+ TSS_DEF(edx);
+ TSS_DEF(ebx);
+ TSS_DEF(esp);
+ TSS_DEF(ebp);
+ TSS_DEF(esi);
+ TSS_DEF(edi);
+ TSS_DEF(es);
+ TSS_DEF(cs);
+ TSS_DEF(ss);
+ TSS_DEF(ds);
+ TSS_DEF(fs);
+ TSS_DEF(gs);
+ TSS_DEF(ldt);
+# undef TSS_DEF
+
+ BLANK();
+# define FRAME_TYPE(t) DEFINE(IA32_##t, IA32_##t)
+ FRAME_TYPE(DIVIDE_ERROR);
+ FRAME_TYPE(DEBUG);
+ FRAME_TYPE(NMI);
+ FRAME_TYPE(BREAKPOINT);
+ FRAME_TYPE(OVERFLOW);
+ FRAME_TYPE(BOUNDS_CHECK);
+ FRAME_TYPE(ILLEGAL_OPCODE);
+ FRAME_TYPE(DEVICE_NOT_AVAILABLE);
+ FRAME_TYPE(DOUBLE_FAULT);
+ FRAME_TYPE(COPROCESSOR_SEGMENT_OVERRUN);
+ FRAME_TYPE(INVALID_TSS);
+ FRAME_TYPE(SEGMENT_NOT_PRESENT);
+ FRAME_TYPE(STACK_FAULT);
+ FRAME_TYPE(GENERAL_PROTECTION_FAULT);
+ FRAME_TYPE(PAGE_FAULT);
+ FRAME_TYPE(FP_ERROR);
+ FRAME_TYPE(ALIGNMENT_CHECK);
+ FRAME_TYPE(MACHINE_CHECK);
+ FRAME_TYPE(SIMD_FP_ERROR);
+# undef FRAME_TYPE
+ BLANK();
+# define FRAME_DEF(f) DEFINE(FRAME_##f, offsetof (struct ftaInterruptionCtx_s, f))
+ FRAME_DEF(type);
+ FRAME_DEF(sub_type);
+ FRAME_DEF(state);
+ FRAME_DEF(esp);
+ FRAME_DEF(ss);
+ FRAME_DEF(fs);
+ FRAME_DEF(gs);
+ FRAME_DEF(ldtr);
+ FRAME_DEF(tr);
+ FRAME_DEF(cr0);
+ FRAME_DEF(cr2);
+ FRAME_DEF(cr3);
+ FRAME_DEF(cr4);
+ FRAME_DEF(dr7);
+ FRAME_DEF(debugCtl);
+ FRAME_DEF(ec);
+ FRAME_DEF(pt_regs);
+ FRAME_DEF(fp_mmx_xmm);
+# undef FRAME_DEF
+#endif
+
+#if defined(CONFIG_CDE) || defined(CONFIG_CDE_MODULE)
+ BLANK();
+ DEFINE(CDESPINLOCK_signature, offsetof (cdeSpinLock_t, cdeSpinLockSignature));
+ DEFINE(CDESPINLOCK_cpu, offsetof (cdeSpinLock_t, cdeSpinLockCpu));
+ DEFINE(CDE_VALID_SPINLOCK_SIGNATURE_LO, (uint32_t)CDE_VALID_SPINLOCK_SIGNATURE);
+ DEFINE(CDE_VALID_SPINLOCK_SIGNATURE_HI, CDE_VALID_SPINLOCK_SIGNATURE >> 32);
+ DEFINE(CDE_SPINLOCK_NOT_OWNED, CDE_SPINLOCK_NOT_OWNED);
+#endif
}
Index: 2.6.14-nlkd/debug/nlkd/asm-ia32.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/asm-ia32.h 2005-11-07 12:11:32.000000000 +0100
@@ -0,0 +1,121 @@
+/*****************************************************************************
+ *
+ * File Name: asm-ia32.h
+ * Created by: Jan Beulich
+ * %version: 7 %
+ * %derived_by: jbeulich %
+ * %date_modified: Thu Nov 03 04:13:50 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 2002-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ *
+ *****************************************************************************/
+
+#if defined(__ASSEMBLY__) && !defined(ASM_IA32_H)
+#define ASM_IA32_H
+
+#include <linux/config.h>
+#include <linux/version.h>
+
+#ifdef CONFIG_UNWIND_INFO
+.equiv eh.eax, 0
+.equiv eh.ecx, 1
+.equiv eh.edx, 2
+.equiv eh.ebx, 3
+.equiv eh.esp, 4
+.equiv eh.ebp, 5
+.equiv eh.esi, 6
+.equiv eh.edi, 7
+.equiv eh.es, 8
+.equiv eh.cs, 9
+.equiv eh.ss, 10
+.equiv eh.ds, 11
+.equiv eh.fs, 12
+.equiv eh.gs, 13
+
+# define SP esp
+# define BP ebp
+# define FLAGS eflags
+.equiv .eh.stkword, dword
+.equiv .eh.preserved, (1 << eh.ebx) | (1 << eh.ebp) | (1 << eh.esi) | (1 << eh.edi) \
+ | (1 << eh.es) | (1 << eh.cs) | (1 << eh.ds) | (1 << eh.ss) | (1 << eh.fs) | (1 << eh.gs)
+#endif
+
+#include "asm-x86.h"
+
+.ifndef PROCEDURE_ALIGN
+ .equiv PROCEDURE_ALIGN, 0x10
+.endif
+
+.macro load sreg:req, loc:req, aux:req
+ LOCAL set, adj, skip
+set:
+ mov sreg, loc
+skip:
+ .section .fixup, "ax"
+adj:
+ xor aux, aux
+ mov sreg, aux
+ jmp skip
+ .previous
+ .section __ex_table, "a"
+ .align dword
+ .long set, adj
+ .previous
+.endm
+
+.macro fnrstor loc:req
+ frstor loc
+.endm
+
+.macro fxsr what:req, loc:req
+ LOCAL where, fix, done
+where:
+ fx&what loc
+done:
+ .section .fixup, "ax"
+fix:
+ fn&what loc
+ jmp done
+ .previous
+ .section __ex_table, "a"
+ .align dword
+ .long where, fix
+ .previous
+.endm
+
+.macro fxinit mxcsr:req
+ LOCAL where, fix
+where:
+ ldmxcsr mxcsr
+fix:
+ fninit
+ .section __ex_table, "a"
+ .align dword
+ .long where, fix
+ .previous
+.endm
+
+#endif /* ASM_IA32_H */
Index: 2.6.14-nlkd/debug/nlkd/nlkdIA32.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdIA32.S 2005-10-07 17:19:06.000000000 +0200
@@ -0,0 +1,86 @@
+/*****************************************************************************
+ *
+ * File Name: nlkdIA32.S
+ * Created by: jbeulich
+ * %version: 2 %
+ * %derived_by: jbeulich %
+ * %date_modified: Fri Oct 07 09:18:56 2005 %
+ *
+ ****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ *
+ ****************************************************************************/
+
+.equiv PROCEDURE_ALIGN, 1
+#include "asm-ia32.h"
+#include <linux/nlkd.h>
+
+//todo .file "nlkd"
+.text
+
+// void nlkdDebugEvent(nint_t eventCode, ...);
+.pubproc nlkdDebugEvent
+ cmp dword ptr [nlkdAgentCount], 0
+ movsx eax, byte ptr [esp+dword]
+ jg _nlkdEnterDebuggerInstruction_
+ test eax, eax
+ jg 0f
+ .hidentry _nlkdEnterDebuggerInstruction_
+ int 3
+0:
+ jc 1f
+ ret
+1:
+#ifdef CONFIG_UNWIND_INFO
+// Once we get here, the dual frame layout ceases to exist,
+// and hence we can now express the (alternate) frame state.
+ .cfi_def_cfa esp, 2*dword
+ .cfi_offset eip, -2*dword
+#endif
+ ret dword // discard eventCode for special case entries
+.endp nlkdDebugEvent
+// void nlkdEnterDebugger(void);
+.pubproc nlkdEnterDebugger
+ mov eax, DEBUG_EVENT_ENTER_DEBUGGER
+2:
+ push dword ptr [esp] // make stack frame consistent with nlkdDebugEvent
+ // (note that there's no point in using EHpush here
+ // because the .eh_frame unwind information can't
+ // express the dual (conditional upon EFLAGS.CF)
+ // frame layout at _nlkdEnterDebuggerInstruction_.
+ stc
+ mov [esp+dword], eax // store eventCode
+ jmp _nlkdEnterDebuggerInstruction_
+.endp nlkdEnterDebugger
+// void nlkdPanic(const char*string, ...);
+.pubproc nlkdPanic
+ mov eax, DEBUG_EVENT_PANIC
+ jmp 2b
+.endp nlkdPanic
+// void nlkdAssert(const char*string, const char*file, const char*func, nuint_t line);
+.pubproc nlkdAssert
+ mov eax, DEBUG_EVENT_ASSERT
+ jmp 2b
+.endp nlkdAssert
Index: 2.6.14-nlkd/debug/nlkd/nlkdIA32.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/nlkdIA32.h 2005-10-10 14:52:40.000000000 +0200
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ *
+ * File Name: nlkdIA32.h
+ * Created by: Jan Beulich
+ * %version: 1 %
+ * %derived_by: jbeulich %
+ * %date_modified: Mon Oct 10 06:52:33 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ *
+ *****************************************************************************/
+
+#ifndef CONFIG_CDE
+static void _set_debugreg(uintptr_t value, nuint_t regnum) {
+ switch(regnum) {
+ case 0: __asm__("movl %0,%%db0" : : "r" (value)); break;
+ case 1: __asm__("movl %0,%%db1" : : "r" (value)); break;
+ case 2: __asm__("movl %0,%%db2" : : "r" (value)); break;
+ case 3: __asm__("movl %0,%%db3" : : "r" (value)); break;
+ case 6: __asm__("movl %0,%%db6" : : "r" (value)); break;
+ case 7: __asm__("movl %0,%%db7" : : "r" (value)); break;
+ }
+}
+static int _disable_debugreg(struct pt_regs *regs, nuint_t regnum)
+{
+ _set_debugreg(0, 7);
+}
+static int _restore_debugreg(void)
+{
+ _set_debugreg(current->thread.debugreg[7], 7);
+}
+#endif
Index: 2.6.14-nlkd/include/asm-i386/fta-frame.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/fta-frame.h 2005-11-03 11:49:06.000000000 +0100
@@ -0,0 +1,177 @@
+/*****************************************************************************
+ *
+ * File Name: fta-frame.h
+ * Created by: Clyde Griffin
+ * Date created: 1/1/1999
+ *
+ * %version: 7 %
+ * %derived_by: jbeulich %
+ * %date_modified: Thu Nov 03 03:48:54 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ * This module contains the definition of a trap frame.
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_I386_FTA_FRAME_H
+#define _ASM_I386_FTA_FRAME_H
+
+/* values for ftaInterruptionCtx_s.state */
+#ifdef CONFIG_NLKD_FTA
+# define FRAME_COMPLETE_BIT 0
+# define FRAME_COMPLETE (1 << FRAME_COMPLETE_BIT)
+#endif
+
+# ifndef __ASSEMBLY__
+# include <asm/ia_32.h>
+# include <asm/ptrace.h>
+
+struct ftaInterruptionCtx_s {
+ uint16_t type; /* Trap type */
+ int8_t sub_type; /* Extended type */
+ uint8_t state; /* Framework/Debugger only */
+ uint32_t ec; /* Error code */
+ uint32_t cr0;
+ uint32_t cr4;
+ uint32_t cr2;
+ uint32_t cr3;
+ uint64_t debugCtl;
+ uint32_t dr7;
+ union {
+ // fp/mmx/sse state (which requires 16-byte alignment and thus needs to be referenced indirectly)
+ fxsave_t *fp_mmx_xmm;
+ // fp/mmx state
+ fsave_t *fp_mmx;
+ };
+ uint16_t ldtr;
+ uint16_t tr;
+ uint16_t fs;
+ uint16_t gs;
+ union {
+ uint32_t esp;
+ uint16_t sp;
+ };
+ uint16_t ss, _ss_pad;
+ union {
+ struct pt_regs pt_regs;
+ struct {
+ union {
+ uint32_t ebx;
+ uint16_t bx;
+ struct {
+ uint8_t bl;
+ uint8_t bh;
+ };
+ };
+ union {
+ uint32_t ecx;
+ uint16_t cx;
+ struct {
+ uint8_t cl;
+ uint8_t ch;
+ };
+ };
+ union {
+ uint32_t edx;
+ uint16_t dx;
+ struct {
+ uint8_t dl;
+ uint8_t dh;
+ };
+ };
+ union {
+ uint32_t esi;
+ uint16_t si;
+ };
+ union {
+ uint32_t edi;
+ uint16_t di;
+ };
+ union {
+ uint32_t ebp;
+ uint16_t bp;
+ };
+ union {
+ uint32_t eax;
+ uint16_t ax;
+ struct {
+ uint8_t al;
+ uint8_t ah;
+ };
+ };
+ union {
+ struct {
+ uint16_t ds, _ds_pad;
+ };
+# ifdef CONFIG_NLKD_FTA
+ uint32_t _type_raw;
+# endif
+ };
+ union {
+ struct {
+ uint16_t es, _es_pad;
+ };
+# ifdef CONFIG_NLKD_FTA
+ uint32_t _ebx_raw;
+# endif
+ };
+ union {
+ uint32_t orig_eax;
+# ifdef CONFIG_NLKD_FTA
+ uint32_t _ec_raw;
+# endif
+ };
+ union {
+ uint32_t eip;
+ uint16_t ip;
+ };
+ uint16_t cs, _cs_pad;
+ union {
+ uint32_t eflags;
+ uint16_t flags;
+ };
+ /*
+ * From here on field presence dependent on the value in eflags
+ */
+ union {
+ uint32_t r3_esp;
+ uint16_t r3_sp;
+ };
+ uint16_t r3_ss, _r3_ss_pad;
+ };
+# ifdef CONFIG_NLKD_FTA
+ };
+# define FRAME_PTREGS(frame, field) (frame)->field
+# else
+ } *pt_regs;
+# define FRAME_PTREGS(frame, field) (frame)->pt_regs->field
+# endif
+ /* This is only used in cloned frames. */
+ uint32_t _fp_mmx_xmm_area_[(sizeof(fxsave_t) + 0xf) / sizeof(uint32_t)];
+};
+# endif /* __ASSEMBLY__ */
+
+#endif /* _ASM_I386_FTA_FRAME_H */
Index: 2.6.14-nlkd/include/asm-i386/fta-type.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/fta-type.h 2005-06-27 13:56:50.000000000 +0200
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ *
+ * File Name: fta-type.h
+ * Created by: Clyde Griffin
+ * Date created: 1/1/1999
+ *
+ * %version: 5 %
+ * %derived_by: jbeulich %
+ * %date_modified: Mon Jun 27 05:21:26 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ * This module contains the definition of a trap frame.
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_I386_FTA_TYPE_H
+#define _ASM_I386_FTA_TYPE_H
+
+/*
+ * ftaInterruptionId_t
+ *
+ * ftaInterruptionId_t uniquely identifies each type of interruption.
+ *
+ * NOTE:
+ * Interruption frames may be different for faults, traps, external
+ * interrupts and aborts. The consumer of an interruption frame
+ * needs to be aware of which interruption types are associated with
+ * with interruption frame types.
+ */
+enum ftaInterruptionId_e
+{
+ IA32_DIVIDE_ERROR,
+ IA32_DEBUG,
+ IA32_NMI,
+ IA32_BREAKPOINT,
+ IA32_OVERFLOW,
+ IA32_BOUNDS_CHECK,
+ IA32_ILLEGAL_OPCODE,
+ IA32_DEVICE_NOT_AVAILABLE,
+ IA32_DOUBLE_FAULT,
+ IA32_COPROCESSOR_SEGMENT_OVERRUN,
+ IA32_INVALID_TSS,
+ IA32_SEGMENT_NOT_PRESENT,
+ IA32_STACK_FAULT,
+ IA32_GENERAL_PROTECTION_FAULT,
+ IA32_PAGE_FAULT,
+ IA32_RSVD_0F,
+ IA32_FP_ERROR,
+ IA32_ALIGNMENT_CHECK,
+ IA32_MACHINE_CHECK,
+ IA32_SIMD_FP_ERROR,
+ IA32_RSVD_14,
+ IA32_RSVD_15,
+ IA32_RSVD_16,
+ IA32_RSVD_17,
+ IA32_RSVD_18,
+ IA32_RSVD_19,
+ IA32_RSVD_1A,
+ IA32_RSVD_1B,
+ IA32_RSVD_1C,
+ IA32_RSVD_1D,
+ IA32_RSVD_1E,
+ IA32_RSVD_1F
+};
+
+#endif /* _ASM_I386_FTA_TYPE_H */
Index: 2.6.14-nlkd/include/asm-i386/ia_32.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/asm-i386/ia_32.h 2005-06-30 15:54:35.000000000 +0200
@@ -0,0 +1,907 @@
+/*****************************************************************************
+ *
+ * File Name: ia_32.h
+ * Created by: Clyde Griffin, Jan Beulich
+ * Date created: 21Feb2001
+ *
+ * %version: 9 %
+ * %derived_by: jbeulich %
+ * %date_modified: Thu Jun 30 07:54:20 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ * *
+ * Copyright (c) 2001-2005 Novell, Inc. All Rights Reserved. *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public License *
+ * as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, contact Novell, Inc. *
+ * *
+ * To contact Novell about this file by physical or electronic mail, *
+ * you may find current contact information at www.novell.com. *
+ * *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ * File Description:
+ *
+ *****************************************************************************/
+
+#ifndef _ASM_IA_32_H
+#define _ASM_IA_32_H
+
+#ifdef __ASSEMBLY__
+# define UINT64_C(v) (v)
+#else
+# include <linux/types.h>
+#endif
+
+/*
+ * EFLAGS
+ */
+#define EFLAGS_MBZ 0xffc08028
+#define EFLAGS_MBS 0x00000002
+#define EFLAGS_CF 0
+#define EFLAGS_PF 2
+#define EFLAGS_AF 4
+#define EFLAGS_ZF 6
+#define EFLAGS_SF 7
+#define EFLAGS_TF 8
+#define EFLAGS_IF 9
+#define EFLAGS_DF 10
+#define EFLAGS_OF 11
+#define EFLAGS_IOPL 12
+#define EFLAGS_IOPL_LEN 2
+#define EFLAGS_NT 14
+#define EFLAGS_RF 16
+#define EFLAGS_VM 17
+#define EFLAGS_AC 18
+#define EFLAGS_VIF 19
+#define EFLAGS_VIP 20
+#define EFLAGS_ID 21
+
+/*
+ * Privilege levels
+ */
+#define PL_KERNEL 0
+#define PL_USER 3
+
+/*
+ * Selector layout
+ */
+#define SELECTOR_RPL 0
+#define SELECTOR_RPL_LEN 2
+#define SELECTOR_TI 2
+#define SELECTOR_INDEX 3
+#define SELECTOR_INDEX_LEN 13
+
+/*
+ * Descriptor Attributes
+ */
+#define DESCRIPTOR_TYPE 0
+#define DESCRIPTOR_TYPE_LEN 5
+# define DESCRIPTOR_INVALID 0x00
+# define DESCRIPTOR_AVAILTSS16 0x01
+# define DESCRIPTOR_LDT 0x02
+# define DESCRIPTOR_BUSYTSS16 0x03
+# define DESCRIPTOR_CALLGATE16 0x04
+# define DESCRIPTOR_TASKGATE 0x05
+# define DESCRIPTOR_INTGATE16 0x06
+# define DESCRIPTOR_TRAPGATE16 0x07
+# define DESCRIPTOR_AVAILTSS32 0x09
+# define DESCRIPTOR_BUSYTSS32 0x0b
+# define DESCRIPTOR_CALLGATE32 0x0c
+# define DESCRIPTOR_INTGATE32 0x0e
+# define DESCRIPTOR_TRAPGATE32 0x0f
+# define DESCRIPTOR_DATA_RO 0x10
+# define DESCRIPTOR_DATA_RO_ACC 0x11
+# define DESCRIPTOR_DATA_RW 0x12
+# define DESCRIPTOR_DATA_RW_ACC 0x13
+# define DESCRIPTOR_DOWN_RO 0x14
+# define DESCRIPTOR_DOWN_RO_ACC 0x15
+# define DESCRIPTOR_DOWN_RW 0x16
+# define DESCRIPTOR_DOWN_RW_ACC 0x17
+# define DESCRIPTOR_CODE_XO 0x18
+# define DESCRIPTOR_CODE_XO_ACC 0x19
+# define DESCRIPTOR_CODE_XR 0x1a
+# define DESCRIPTOR_CODE_XR_ACC 0x1b
+# define DESCRIPTOR_CONF_XO 0x1c
+# define DESCRIPTOR_CONF_XO_ACC 0x1d
+# define DESCRIPTOR_CONF_XR 0x1e
+# define DESCRIPTOR_CONF_XR_ACC 0x1f
+#define DESCRIPTOR_A 0
+#define DESCRIPTOR_W 1
+#define DESCRIPTOR_R 1
+#define DESCRIPTOR_E 2
+#define DESCRIPTOR_C 2
+#define DESCRIPTOR_CODE 3
+#define DESCRIPTOR_S 4
+#define DESCRIPTOR_DPL 5
+#define DESCRIPTOR_DPL_LEN 2
+#define DESCRIPTOR_P 7
+
+#define DESCRIPTOR_AVL 12
+#define DESCRIPTOR_D 14
+#define DESCRIPTOR_B 14
+#define DESCRIPTOR_G 15
+
+/*
+ * Error code layout (different for Page Fault)
+ */
+#define EC_EXT 0
+#define EC_IDT 1
+#define EC_TI 2
+#define EC_SELECTOR_INDEX 3
+#define EC_SELECTOR_INDEX_LEN 13
+
+/*
+ * Control Register 0
+ */
+#define CR0_MBZ 0x1ffaffc0
+#define CR0_PE 0
+#define CR0_MP 1
+#define CR0_EM 2
+#define CR0_TS 3
+#define CR0_ET 4
+#define CR0_NE 5
+#define CR0_WP 16
+#define CR0_AM 18
+#define CR0_NW 29
+#define CR0_CD 30
+#define CR0_PG 31
+
+/*
+ * Control Register 3
+ */
+#define CR3_MBZ 0x00000fe7
+#define CR3_PWT 3
+#define CR3_PCD 4
+#define CR3_PHYS 12
+#define CR3_PHYS_LEN 20
+
+#define PDBR_MBZ CR3_MBZ
+#define PDBR_PWT CR3_PWT
+#define PDBR_PCD CR3_PCD
+#define PDBR_PHYS CR3_PHYS
+#define PDBR_PHYS_LEN CR3_PHYS_LEN
+
+#define PDPTR_MBZ 0x00000007
+#define PDPTR_PWT CR3_PWT
+#define PDPTR_PCD CR3_PCD
+#define PDPTR_PHYS 5
+#define PDPTR_PHYS_LEN 27
+
+/*
+ * Control Register 4
+ */
+#define CR4_MBZ 0xfffff800
+#define CR4_VME 0
+#define CR4_PVI 1
+#define CR4_TSD 2
+#define CR4_DE 3
+#define CR4_PSE 4
+#define CR4_PAE 5
+#define CR4_MCE 6
+#define CR4_PGE 7
+#define CR4_PCE 8
+#define CR4_OSFXSR 9
+#define CR4_OSXMMEXCPT 10
+
+/*
+ * Page Directory Pointer Table Entry
+ */
+#define PDPTE_MBZ 0x000001e6
+#define PDPTE_MBS 0x00000001
+#define PDPTE_PWT 3
+#define PDPTE_PCD 4
+#define PDPTE_AVL 9
+#define PDPTE_AVL_LEN 3
+#define PDPTE_PHYS 12
+#define PDPTE_PHYS_LEN 40
+
+/*
+ * Page Directory Entry
+ */
+#define PDE_MBZ 0x000001c0
+#define PDE_P 0
+#define PDE_W 1
+#define PDE_U 2
+#define PDE_PWT 3
+#define PDE_PCD 4
+#define PDE_A 5
+#define PDE_LARGE_PTE 7
+#define PDE_AVL 9
+#define PDE_AVL_LEN 3
+#define PDE_PHYS 12
+#define PDE_PHYS_LEN 40
+#define PDE_NX 63
+
+/*
+ * Page Table Entry
+ */
+#define PTE4K_MBZ 0x00000080
+#define PTE2M_MBZ 0x001fe000
+#define PTE2M_MBS (1U << PDE_LARGE_PTE)
+#define PTE4M_MBZ 0x00000000
+#define PTE4M_MBS (1U << PDE_LARGE_PTE)
+#define PTE_P 0
+#define PTE_W 1
+#define PTE_U 2
+#define PTE_PWT 3
+#define PTE_PCD 4
+#define PTE_A 5
+#define PTE_D 6
+#define PTE4K_PAT 7
+#define PTE_G 8
+#define PTE_AVL 9
+#define PTE_AVL_LEN 3
+#define PTE2M_PAT 12
+#define PTE4M_PAT 12
+#define PTE4K_PHYS 12
+#define PTE4K_PHYS_LEN 40
+#define PTE2M_PHYS 21
+#define PTE2M_PHYS_LEN 31
+#define PTE4M_PHYS1 13
+#define PTE4M_PHYS1_LEN 9
+#define PTE4M_PHYS 22
+#define PTE4M_PHYS_LEN 10
+#define PTE_NX 63
+
+/*
+ * Debug Register 6
+ */
+#define DR6_B0 0
+#define DR6_B1 1
+#define DR6_B2 2
+#define DR6_B3 3
+#define DR6_BD 13
+#define DR6_BS 14
+#define DR6_BT 15
+
+/*
+ * Debug Register 7
+ */
+#define DR7_RW_LEN 2
+# define DR7_RW_X 0U
+# define DR7_RW_W 1U
+# define DR7_RW_IO 2U
+# define DR7_RW_RW 3U
+#define DR7_LEN_LEN 2
+# define DR7_LEN_1 0U
+# define DR7_LEN_2 1U
+# define DR7_LEN_4 3U
+#define DR7_L0 0
+#define DR7_G0 1
+#define DR7_L1 2
+#define DR7_G1 3
+#define DR7_L2 4
+#define DR7_G2 5
+#define DR7_L3 6
+#define DR7_G3 7
+#define DR7_LE 8
+#define DR7_GE 9
+#define DR7_GD 13
+#define DR7_RW0 16
+#define DR7_RW0_LEN DR7_RW_LEN
+#define DR7_LEN0 18
+#define DR7_LEN0_LEN DR7_LEN_LEN
+#define DR7_RW1 20
+#define DR7_RW1_LEN DR7_RW_LEN
+#define DR7_LEN1 22
+#define DR7_LEN1_LEN DR7_LEN_LEN
+#define DR7_RW2 24
+#define DR7_RW2_LEN DR7_RW_LEN
+#define DR7_LEN2 26
+#define DR7_LEN2_LEN DR7_LEN_LEN
+#define DR7_RW3 28
+#define DR7_RW3_LEN DR7_RW_LEN
+#define DR7_LEN3 30
+#define DR7_LEN3_LEN DR7_LEN_LEN
+
+/*
+ * CPUID return values
+ */
+#define CPUID1_EAX_STEPPING 0
+#define CPUID1_EAX_STEPPING_LEN 4
+#define CPUID1_EAX_MODEL 4
+#define CPUID1_EAX_MODEL_LEN 4
+#define CPUID1_EAX_FAMILY 8
+#define CPUID1_EAX_FAMILY_LEN 4
+#define CPUID1_EAX_TYPE 12
+#define CPUID1_EAX_TYPE_LEN 2
+#define CPUID1_EAX_XMODEL 16
+#define CPUID1_EAX_XMODEL_LEN 4
+#define CPUID1_EAX_XFAMILY 20
+#define CPUID1_EAX_XFAMILY_LEN 4
+#define CPUID1_EBX_BRAND 0
+#define CPUID1_EBX_BRAND_LEN 8
+#define CPUID1_EBX_CLFLSHSZ 8
+#define CPUID1_EBX_CLFLSHSZ_LEN 8
+#define CPUID1_EBX_LPPP 16
+#define CPUID1_EBX_LPPP_LEN 8
+#define CPUID1_EBX_LAPIC_ID 24
+#define CPUID1_EBX_LAPIC_ID_LEN 8
+#define CPUID1_ECX_SSE3 0
+#define CPUID1_ECX_MONITOR 3
+#define CPUID1_ECX_DSCPL 4
+#define CPUID1_ECX_EIST 7
+#define CPUID1_ECX_TM2 8
+#define CPUID1_ECX_CID 10
+#define CPUID1_ECX_CX16 13
+#define CPUID1_ECX_xTPR 14
+#define CPUID1_EDX_FPU 0
+#define CPUID1_EDX_VME 1
+#define CPUID1_EDX_DE 2
+#define CPUID1_EDX_PSE 3
+#define CPUID1_EDX_TSC 4
+#define CPUID1_EDX_MSR 5
+#define CPUID1_EDX_PAE 6
+#define CPUID1_EDX_MCE 7
+#define CPUID1_EDX_CX8 8
+#define CPUID1_EDX_APIC 9
+#define CPUID1_EDX_SEP 11
+#define CPUID1_EDX_MTRR 12
+#define CPUID1_EDX_PGE 13
+#define CPUID1_EDX_MCA 14
+#define CPUID1_EDX_CMOV 15
+#define CPUID1_EDX_PAT 16
+#define CPUID1_EDX_PSE36 17
+#define CPUID1_EDX_PSN 18
+#define CPUID1_EDX_CLFSH 19
+#define CPUID1_EDX_DS 21
+#define CPUID1_EDX_ACPI 22
+#define CPUID1_EDX_MMX 23
+#define CPUID1_EDX_FXSR 24
+#define CPUID1_EDX_SSE 25
+#define CPUID1_EDX_SSE2 26
+#define CPUID1_EDX_SS 27
+#define CPUID1_EDX_HTT 28
+#define CPUID1_EDX_TM 29
+#define CPUID1_EDX_IA64 30
+#define CPUID1_EDX_PBE 31
+
+#define CPUID2_RESERVED 31
+
+#define CPUIDx1_AMD_EAX_STEPPING CPUID1_EAX_STEPPING
+#define CPUIDx1_AMD_EAX_STEPPING_LEN CPUID1_EAX_STEPPING_LEN
+#define CPUIDx1_AMD_EAX_MODEL CPUID1_EAX_MODEL
+#define CPUIDx1_AMD_EAX_MODEL_LEN CPUID1_EAX_MODEL_LEN
+#define CPUIDx1_AMD_EAX_FAMILY CPUID1_EAX_FAMILY
+#define CPUIDx1_AMD_EAX_FAMILY_LEN CPUID1_EAX_FAMILY_LEN
+#define CPUIDx1_AMD_EAX_TYPE CPUID1_EAX_TYPE
+#define CPUIDx1_AMD_EAX_TYPE_LEN CPUID1_EAX_TYPE_LEN
+#define CPUIDx1_AMD_EAX_XMODEL CPUID1_EAX_XMODEL
+#define CPUIDx1_AMD_EAX_XMODEL_LEN CPUID1_EAX_XMODEL_LEN
+#define CPUIDx1_AMD_EAX_XFAMILY CPUID1_EAX_XFAMILY
+#define CPUIDx1_AMD_EAX_XFAMILY_LEN CPUID1_EAX_XFAMILY_LEN
+#define CPUIDx1_AMD_EBX_BRAND 0
+#define CPUIDx1_AMD_EBX_BRAND_LEN 16
+#define CPUIDx1_ECX_LAHF 0
+#define CPUIDx1_ECX_CMP_LEGACY 1
+#define CPUIDx1_ECX_SVM 2
+#define CPUIDx1_ECX_EXT_APIC 3
+#define CPUIDx1_ECX_LOCK_MOV_CR 4
+#define CPUIDx1_ECX_3DNOW_PREFETCH 8
+#define CPUIDx1_EDX_FPU 0
+#define CPUIDx1_EDX_VME 1
+#define CPUIDx1_EDX_DE 2
+#define CPUIDx1_EDX_PSE 3
+#define CPUIDx1_EDX_TSC 4
+#define CPUIDx1_EDX_MSR 5
+#define CPUIDx1_EDX_PAE 6
+#define CPUIDx1_EDX_MCE 7
+#define CPUIDx1_EDX_CX8 8
+#define CPUIDx1_EDX_APIC 9
+#define CPUIDx1_EDX_SCR 11
+#define CPUIDx1_EDX_MTRR 12
+#define CPUIDx1_EDX_PGE 13
+#define CPUIDx1_EDX_MCA 14
+#define CPUIDx1_EDX_CMOV 15
+#define CPUIDx1_EDX_PAT 16
+#define CPUIDx1_EDX_PSE36 17
+#define CPUIDx1_EDX_NX 20
+#define CPUIDx1_EDX_MMX 22
+#define CPUIDx1_EDX_AMDMMX 23
+#define CPUIDx1_EDX_FXSR 24
+#define CPUIDx1_EDX_FXSROPT 25
+#define CPUIDx1_EDX_RDTSCP 27
+#define CPUIDx1_EDX_LM 29
+#define CPUIDx1_EDX_AMD3DNOW 30
+#define CPUIDx1_EDX_3DNOW 31
+
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_NUM 0
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_NUM_LEN 8
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_ASSOC 8
+#define CPUIDx5_AMD_EAX_L1ITLB_2M_ASSOC_LEN 8
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_NUM 16
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_NUM_LEN 8
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_ASSOC 24
+#define CPUIDx5_AMD_EAX_L1DTLB_2M_ASSOC_LEN 8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_NUM 0
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_NUM_LEN 8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_ASSOC 8
+#define CPUIDx5_AMD_EBX_L1ITLB_4K_ASSOC_LEN 8
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_NUM 16
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_NUM_LEN 8
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_ASSOC 24
+#define CPUIDx5_AMD_EBX_L1DTLB_4K_ASSOC_LEN 8
+#define CPUIDx5_AMD_ECX_L1IC_LINESIZE 0
+#define CPUIDx5_AMD_ECX_L1IC_LINESIZE_LEN 8
+#define CPUIDx5_AMD_ECX_L1IC_ASSOC 8
+#define CPUIDx5_AMD_ECX_L1IC_ASSOC_LEN 8
+#define CPUIDx5_AMD_ECX_L1IC_LPT 16
+#define CPUIDx5_AMD_ECX_L1IC_LPT_LEN 8
+#define CPUIDx5_AMD_ECX_L1IC_SIZE 24
+#define CPUIDx5_AMD_ECX_L1IC_SIZE_LEN 8
+#define CPUIDx5_AMD_EDX_L1DC_LINESIZE 0
+#define CPUIDx5_AMD_EDX_L1DC_LINESIZE_LEN 8
+#define CPUIDx5_AMD_EDX_L1DC_ASSOC 8
+#define CPUIDx5_AMD_EDX_L1DC_ASSOC_LEN 8
+#define CPUIDx5_AMD_EDX_L1DC_LPT 16
+#define CPUIDx5_AMD_EDX_L1DC_LPT_LEN 8
+#define CPUIDx5_AMD_EDX_L1DC_SIZE 24
+#define CPUIDx5_AMD_EDX_L1DC_SIZE_LEN 8
+
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_NUM 0
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_NUM_LEN 12
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_ASSOC 12
+#define CPUIDx6_AMD_EAX_L2ITLB_2M_ASSOC_LEN 4
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_NUM 16
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_NUM_LEN 12
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_ASSOC 28
+#define CPUIDx6_AMD_EAX_L2DTLB_2M_ASSOC_LEN 4
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_NUM 0
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_NUM_LEN 12
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_ASSOC 12
+#define CPUIDx6_AMD_EBX_L2ITLB_4K_ASSOC_LEN 4
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_NUM 16
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_NUM_LEN 12
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_ASSOC 28
+#define CPUIDx6_AMD_EBX_L2DTLB_4K_ASSOC_LEN 4
+#define CPUIDx6_AMD_ECX_L2UC_LINESIZE 0
+#define CPUIDx6_AMD_ECX_L2UC_LINESIZE_LEN 8
+#define CPUIDx6_AMD_ECX_L2UC_ASSOC 8
+#define CPUIDx6_AMD_ECX_L2UC_ASSOC_LEN 4
+#define CPUIDx6_AMD_ECX_L2UC_LPT 12
+#define CPUIDx6_AMD_ECX_L2UC_LPT_LEN 4
+#define CPUIDx6_AMD_ECX_L2UC_SIZE 16
+#define CPUIDx6_AMD_ECX_L2UC_SIZE_LEN 16
+
+#define CPUIDx7_AMD_EDX_TS 0
+#define CPUIDx7_AMD_EDX_FID 1
+#define CPUIDx7_AMD_EDX_VID 2
+#define CPUIDx7_AMD_EDX_TTP 3
+#define CPUIDx7_AMD_EDX_TM 4
+#define CPUIDx7_AMD_EDX_STC 5
+#define CPUIDx7_AMD_EDX_100MHZ 6
+
+#define CPUIDx8_EAX_PA_BITS 0
+#define CPUIDx8_EAX_PA_BITS_LEN 8
+#define CPUIDx8_EAX_VA_BITS 8
+#define CPUIDx8_EAX_VA_BITS_LEN 16
+#define CPUIDx8_ECX_MAX_CORE 0
+#define CPUIDx8_ECX_MAX_CORE_LEN 8
+
+#define CPUIDxA_EAX_SVMREV 0
+#define CPUIDxA_EAX_SVMREV_LEN 8
+#define CPUIDxA_EAX_0 8
+#define CPUIDxA_EDX_NP 0
+
+#ifndef __ASSEMBLY__
+
+typedef union {
+ uint64_t q;
+ uint32_t d[2];
+ uint16_t w[4];
+ uint8_t b[8];
+} mmxreg_t;
+
+typedef union {
+ double dbl[2];
+ float flt[4];
+ uint64_t q[2];
+ uint32_t d[4];
+ uint16_t w[8];
+ uint8_t b[16];
+} xmmreg_t;
+
+/*
+ * FXSAVE / FXRSTOR layout
+ */
+typedef struct {
+ uint16_t fcw;
+ uint16_t fsw;
+ uint8_t ftw;
+ uint8_t _rsrvd1_;
+ uint16_t fop;
+ uint32_t fip;
+ uint16_t fcs;
+ uint16_t _rsrvd2_;
+ uint32_t fdp;
+ uint16_t fds;
+ uint16_t _rsrvd3_;
+ uint32_t mxcsr;
+ uint32_t mxcsr_mask;
+ union {
+ struct {
+ uint64_t mant;
+ uint32_t exp:15;
+ int32_t sign:1;
+ uint32_t _pad_;
+ } fp;
+ mmxreg_t mmx;
+ } reg[8];
+ xmmreg_t xmm[8];
+ uint8_t _rsrvd5_[14*16];
+} fxsave_t __attribute__((__aligned__(16)));
+
+#pragma pack(push, 2)
+
+/*
+ * FSAVE / FRSTOR layout
+ */
+typedef struct {
+ uint16_t fcw;
+ uint16_t _rsrvd1_;
+ uint16_t fsw;
+ uint16_t _rsrvd2_;
+ uint16_t ftw;
+ uint16_t _rsrvd3_;
+ uint32_t fip;
+ uint16_t fcs;
+ uint16_t fop:11;
+ uint16_t :5;
+ uint32_t fdp;
+ uint16_t fds;
+ uint16_t _rsrvd4_;
+ union {
+ struct {
+ uint64_t mant;
+ uint16_t exp:15;
+ int16_t sign:1;
+ } fp;
+ mmxreg_t mmx;
+ } reg[8];
+} fsave_t;
+
+/*
+ * Descriptor Attributes
+ */
+typedef struct {
+ uint8_t type:5;
+ uint8_t dpl:2;
+ uint8_t p:1;
+} DescriptorAttributes_t;
+
+/*
+ * Descriptor Table Entry
+ */
+typedef union {
+ struct {
+ uint16_t limitLow;
+ uint16_t baseLow;
+ uint8_t baseMid;
+ union {
+ uint8_t attrLow;
+ DescriptorAttributes_t attr;
+ };
+ union {
+ uint8_t attrHigh;
+ struct {
+ uint8_t limitHigh:4;
+ uint8_t avl:1;
+ uint8_t :1;
+ uint8_t d:1;
+ uint8_t g:1;
+ };
+ };
+ uint8_t baseHigh;
+ } segment;
+ struct {
+ uint16_t offsetLow;
+ uint16_t selector;
+ union {
+ uint16_t control;
+ struct {
+ uint8_t numParms:5;
+ uint8_t :3;
+ DescriptorAttributes_t attr;
+ };
+ };
+ uint16_t offsetHigh;
+ } gate;
+} DescriptorTableEntry_t;
+
+#define IS_SEGMENT(d) (((d).segment.attrLow & 0x14) != 0x04)
+#define IS_SEGMENT_EXEC(d) (((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE))) \
+ == ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE)))
+#define IS_SEGMENT_READ(d) (((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE))) \
+ == (1U << DESCRIPTOR_S) \
+ || ((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_R))) \
+ == ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_R)))
+#define IS_SEGMENT_WRITE(d) (((d).segment.attrLow & ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_CODE) | (1U << DESCRIPTOR_W))) \
+ == ((1U << DESCRIPTOR_S) | (1U << DESCRIPTOR_W)))
+#define SEGMENT_BASE(d) ((d).segment.baseLow | ((uint32_t)(d).segment.baseMid << 16) | ((uint32_t)(d).segment.baseHigh << 24))
+#define SEGMENT_LIMIT(d) ((d).segment.g \
+ ? ((uint32_t)(d).segment.limitLow << 12) | ((uint32_t)(d).segment.limitHigh << 28) | 0xfff \
+ : (d).segment.limitLow | ((uint32_t)(d).segment.limitHigh << 16))
+
+#define IS_GATE(d) (((d).gate.control & 0x1400) == 0x0400)
+#define GATE_SELECTOR(d) ((d).gate.selector)
+#define GATE_OFFSET(d) ((d).gate.offsetLow | ((uint32_t)(d).gate.offsetHigh << 16))
+
+/*
+ * GDTR/IDTR memory format
+ */
+typedef struct {
+ uint16_t limit;
+ uint32_t base;
+} PseudoDescriptor_t;
+
+#pragma pack(pop)
+
+#endif /* __ASSEMBLY__ */
+
+/*
+ * FPU Control Word
+ */
+#define FCW_MBZ 0xe0c0
+#define FCW_IM 0
+#define FCW_DM 1
+#define FCW_ZM 2
+#define FCW_OM 3
+#define FCW_UM 4
+#define FCW_PM 5
+#define FCW_PC 8
+#define FCW_PC_LEN 2
+# define FCW_PC_SINGLE 0U
+# define FCW_PC_DOUBLE 2U
+# define FCW_PC_EXTENDED 3U
+#define FCW_RC 10
+#define FCW_RC_LEN 2
+/* The rounding control values are used for both FCW and MXCSR. */
+# define RC_NEAREST 0U
+# define RC_DOWN 1U
+# define RC_UP 2U
+# define RC_CHOP 3U
+# define RC_TRUNCATE RC_CHOP
+#define FCW_X 12
+
+/*
+ * FPU Status Word
+ */
+#define FSW_IE 0
+#define FSW_DE 1
+#define FSW_ZE 2
+#define FSW_OE 3
+#define FSW_UE 4
+#define FSW_PE 5
+#define FSW_SF 6
+#define FSW_ES 7
+#define FSW_C0 8
+#define FSW_C1 9
+#define FSW_C2 10
+#define FSW_TOP 11
+#define FSW_TOP_LEN 3
+#define FSW_C3 14
+#define FSW_B 15
+
+/*
+ * FPU Tag Word
+ */
+#define FTW_TAG_LEN 2
+# define FTW_VALID 0U
+# define FTW_ZERO 1U
+# define FTW_SPECIAL 2U
+# define FTW_EMPTY 3U
+
+/*
+ * MMX Control and Status Register
+ */
+#define MXCSR_IE 0
+#define MXCSR_DE 1
+#define MXCSR_ZE 2
+#define MXCSR_OE 3
+#define MXCSR_UE 4
+#define MXCSR_PE 5
+#define MXCSR_DAZ 6
+#define MXCSR_IM 7
+#define MXCSR_DM 8
+#define MXCSR_ZM 9
+#define MXCSR_OM 10
+#define MXCSR_UM 11
+#define MXCSR_PM 12
+#define MXCSR_RC 13
+#define MXCSR_RC_LEN 2
+#define MXCSR_FZ 15
+
+#ifndef __ASSEMBLY__
+
+/*
+ * 32-bit Task State Segment layout
+ */
+typedef struct {
+ uint16_t backlink, _backlink_pad;
+ uint32_t esp0;
+ uint16_t ss0, _ss0_pad;
+ uint32_t esp1;
+ uint16_t ss1, _ss1_pad;
+ uint32_t esp2;
+ uint16_t ss2, _ss2_pad;
+ union {
+ uint32_t cr3;
+ uint32_t pdbr;
+ uint32_t pdptr;
+ };
+ uint32_t eip;
+ uint32_t eflags;
+ uint32_t eax;
+ uint32_t ecx;
+ uint32_t edx;
+ uint32_t ebx;
+ uint32_t esp;
+ uint32_t ebp;
+ uint32_t esi;
+ uint32_t edi;
+ uint16_t es, _es_pad;
+ uint16_t cs, _cs_pad;
+ uint16_t ss, _ss_pad;
+ uint16_t ds, _ds_pad;
+ uint16_t fs, _fs_pad;
+ uint16_t gs, _gs_pad;
+ uint16_t ldtr, _ldtr_pad;
+ uint16_t t:1;
+ uint16_t iobase;
+} tss32_t;
+
+#endif
+
+/*
+ * MSR indexes
+ */
+#define IA32_TIMESTAMP_COUNTER 0x10
+#define IA32_PLATFORM_ID 0x17
+#define IA32_APIC_BASE 0x1b
+#define IA32_BIOS_UPDATE_TRIG 0x79
+#define IA32_BIOS_SIGN_ID 0x8b
+#define IA32_MTRRCAP 0xfe
+#define IA32_MISC_CTL 0x119
+#define IA32_SYSENTER_CS 0x174
+#define IA32_SYSENTER_ESP 0x175
+#define IA32_SYSENTER_EIP 0x176
+#define IA32_MCG_CAP 0x179
+#define IA32_MCG_STATUS 0x17a
+#define IA32_MCG_CTL 0x17b
+#define IA32_MCG_EAX 0x180
+#define IA32_MCG_EBX 0x181
+#define IA32_MCG_ECX 0x182
+#define IA32_MCG_EDX 0x183
+#define IA32_MCG_ESI 0x184
+#define IA32_MCG_EDI 0x185
+#define IA32_MCG_EBP 0x186
+#define IA32_MCG_ESP 0x187
+#define IA32_MCG_EFLAGS 0x188
+#define IA32_MCG_EIP 0x189
+#define IA32_MCG_MISC 0x18a
+#define IA32_TERM_CONTROL 0x19a
+#define IA32_TERM_INTERRUPT 0x19b
+#define IA32_TERM_STATUS 0x19c
+#define IA32_MISC_ENAB 0x1a0
+#define IA32_DEBUGCTL 0x1d9
+#define IA32_MTRR_PHYSBASE0 0x200
+#define IA32_MTRR_PHYSMASK0 0x201
+#define IA32_MTRR_FIX64K_00000 0x250
+#define IA32_MTRR_FIX16K_80000 0x258
+#define IA32_MTRR_FIX16K_A0000 0x259
+#define IA32_MTRR_FIX4K_C0000 0x268
+#define IA32_MTRR_FIX4K_C8000 0x269
+#define IA32_MTRR_FIX4K_D0000 0x26a
+#define IA32_MTRR_FIX4K_D8000 0x26b
+#define IA32_MTRR_FIX4K_E0000 0x26c
+#define IA32_MTRR_FIX4K_E8000 0x26d
+#define IA32_MTRR_FIX4K_F0000 0x26e
+#define IA32_MTRR_FIX4K_F8000 0x26f
+#define IA32_CR_PAT 0x277
+#define IA32_MTRR_DEFTYPE 0x2ff
+#define IA32_PEBS_ENABLE 0x3f1
+#define IA32_MCi_START 0x400
+# define IA32_MCi_STEP 4
+# define IA32_MCi_CTL_OFFSET 0
+# define IA32_MCi_STATUS_OFFSET 1
+# define IA32_MCi_ADDR_OFFSET 2
+# define IA32_MCi_MISC_OFFSET 3
+#define IA32_DTES_AREA 0x600
+
+/*
+ * IA32_APIC_BASE
+ */
+#define APIC_BASE_BSP 8
+#define APIC_BASE_ENABLE 11
+#define APIC_BASE_BASE 12
+#define APIC_BASE_BASE_LEN 24
+
+/*
+ * IA32_MTRRCAP
+ */
+#define MTRRCAP_VCNT 0
+#define MTRRCAP_VCNT_LEN 8
+#define MTRRCAP_FIX 8
+#define MTRRCAP_WC 10
+
+/*
+ * IA32_DEBUGCTL
+ */
+#define DEBUGCTL_LBR 0
+#define DEBUGCTL_BTF 1
+
+/*
+ * IA32_MTRR_DEFTYPE
+ */
+#define MTRR_DEFTYPE_TYPE 0
+#define MTRR_DEFTYPE_TYPE_LEN 8
+#define MTRR_DEFTYPE_FE 10
+#define MTRR_DEFTYPE_E 11
+
+/*
+ * IA32_MTRR_PHYSBASEx
+ */
+#define MTRR_PHYSBASE_TYPE 0
+#define MTRR_PHYSBASE_TYPE_LEN 8
+#define MTRR_PHYSBASE_BASE 12
+#define MTRR_PHYSBASE_BASE_LEN 24
+
+/*
+ * IA32_MTRR_PHYSMASKx
+ */
+#define MTRR_PHYSMASK_V 11
+#define MTRR_PHYSMASK_MASK 12
+#define MTRR_PHYSMASK_MASK_LEN 24
+
+/*
+ * Memory Attributes (MTRRs & PAT)
+ */
+#define IA32_MA_UC 0x00
+#define IA32_MA_WC 0x01
+#define IA32_MA_WT 0x04
+#define IA32_MA_WP 0x05
+#define IA32_MA_WB 0x06
+#define IA32_MA_UC_MINUS 0x07 /* PAT only */
+
+/*
+ * IA32_MCG_CAP
+ */
+#define IA32_MCG_CAP_COUNT 0
+#define IA32_MCG_CAP_COUNT_LEN 8
+#define IA32_MCG_CTL_P 8
+
+/*
+ * IA32_MCG_STATUS
+ */
+#define IA32_MCG_STATUS_RIPV 0
+#define IA32_MCG_STATUS_EIPV 1
+#define IA32_MCG_STATUS_MCIP 2
+
+/*
+ * IA32_MCi
+ */
+#define IA32_MCi_STATUS_MCA_EC 0
+#define IA32_MCi_STATUS_MCA_EC_LEN 16
+#define IA32_MCi_STATUS_MOD_EC 16
+#define IA32_MCi_STATUS_MOD_EC_LEN 16
+#define IA32_MCi_STATUS_PCC 57
+#define IA32_MCi_STATUS_ADDRV 58
+#define IA32_MCi_STATUS_MISCV 59
+#define IA32_MCi_STATUS_EN 60
+#define IA32_MCi_STATUS_UC 61
+#define IA32_MCi_STATUS_OVER 62
+#define IA32_MCi_STATUS_VAL 63
+
+#endif /* _ASM_IA_32_H */
next prev parent reply other threads:[~2005-11-09 14:19 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-09 13:54 [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jan Beulich
2005-11-09 13:56 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Jan Beulich
2005-11-09 13:57 ` [PATCH 2/39] NLKD - an alternative early ioremap approach Jan Beulich
2005-11-09 13:58 ` [PATCH 3/39] NLKD - early/late CPU up/down notification Jan Beulich
2005-11-09 13:59 ` [PATCH 4/39] NLKD/i386 " Jan Beulich
2005-11-09 14:01 ` [PATCH 5/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:10 ` Andi Kleen
2005-11-14 8:04 ` [discuss] " Jan Beulich
2005-11-14 12:37 ` Andi Kleen
2005-11-09 14:01 ` [PATCH 6/39] NLKD - early panic notification Jan Beulich
2005-11-09 14:02 ` [PATCH 7/39] NLKD - task create/destroy notification Jan Beulich
2005-11-09 14:03 ` [PATCH 8/39] NLKD - rmmod notification Jan Beulich
2005-11-09 14:04 ` [PATCH 9/39] NLKD - hotkey notification Jan Beulich
2005-11-09 14:05 ` [PATCH 10/39] NLKD - console layout change notification Jan Beulich
2005-11-09 14:06 ` [PATCH 11/39] NLKD - time adjustment Jan Beulich
2005-11-09 14:06 ` [PATCH 12/39] NLKD/i386 " Jan Beulich
2005-11-09 19:10 ` George Anzinger
2005-11-10 8:12 ` Jan Beulich
2005-11-11 0:17 ` George Anzinger
2005-11-09 14:08 ` [PATCH 13/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:13 ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Jan Beulich
2005-11-09 14:14 ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Jan Beulich
2005-11-09 14:15 ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Jan Beulich
2005-11-09 14:16 ` [PATCH 21/39] NLKD/x86-64 - core adjustments Jan Beulich
2005-11-10 13:24 ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Andi Kleen
2005-11-10 14:07 ` Jan Beulich
2005-11-10 13:23 ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Andi Kleen
2005-11-10 14:25 ` Jan Beulich
2005-11-10 13:21 ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Andi Kleen
2005-11-10 14:07 ` Jan Beulich
2005-11-10 14:25 ` Andi Kleen
2005-11-10 15:00 ` Jan Beulich
2005-11-11 3:39 ` [discuss] " Andi Kleen
2005-11-10 13:19 ` [PATCH 13/39] NLKD/x86-64 - time adjustment Andi Kleen
2005-11-10 14:23 ` Jan Beulich
2005-11-11 2:12 ` Andi Kleen
2005-11-12 9:22 ` Vojtech Pavlik
2005-11-12 17:21 ` Andi Kleen
2005-11-12 20:44 ` Vojtech Pavlik
2005-11-15 0:38 ` George Anzinger
2005-11-15 1:05 ` [discuss] " Andi Kleen
2005-11-15 7:50 ` Vojtech Pavlik
2005-11-15 8:24 ` Jan Beulich
2005-11-10 14:43 ` Vojtech Pavlik
2005-11-09 14:09 ` [PATCH 14/39] NLKD - kernel trace buffer access Jan Beulich
2005-11-09 14:09 ` [PATCH 15/39] NLKD - early pseudo-fs Jan Beulich
2005-11-09 14:11 ` [PATCH 16/39] NLKD - core adjustments Jan Beulich
2005-11-09 14:11 ` [PATCH 17/39] NLKD/i386 " Jan Beulich
2005-11-09 19:00 ` Adrian Bunk
2005-11-10 8:04 ` Jan Beulich
2005-11-10 10:29 ` Adrian Bunk
2005-11-10 11:52 ` Jan Beulich
2005-11-10 12:36 ` Lars Marowsky-Bree
2005-11-09 14:18 ` [PATCH 22/39] NLKD - core Jan Beulich
2005-11-09 14:19 ` [PATCH 23/39] NLKD/x86 " Jan Beulich
2005-11-09 14:20 ` Jan Beulich [this message]
2005-11-09 14:21 ` [PATCH 25/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:30 ` Andi Kleen
2005-11-09 14:22 ` [PATCH 26/39] NLKD - run time library Jan Beulich
2005-11-09 14:23 ` [PATCH 27/39] NLKD/i386 " Jan Beulich
2005-11-09 14:23 ` [PATCH 28/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:32 ` Andi Kleen
[not found] ` <437214B7.76F0.0078.0@novell.com>
[not found] ` <4372156A.76F0.0078.0@novell.com>
2005-11-09 14:28 ` [PATCH 34/39] NLKD/x86 - Console Debug Agent Jan Beulich
[not found] ` <43721600.76F0.0078.0@novell.com>
2005-11-09 14:30 ` [PATCH 38/39] NLKD/i386 - Remote " Jan Beulich
2005-11-09 14:31 ` [PATCH 39/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:29 ` [PATCH 15/39] NLKD - early pseudo-fs Al Viro
2005-11-09 14:37 ` Jan Beulich
2005-11-09 15:00 ` Al Viro
2005-11-09 16:00 ` Jan Beulich
2005-11-10 5:44 ` [PATCH 14/39] NLKD - kernel trace buffer access Keith Owens
2005-11-10 8:02 ` Jan Beulich
2005-11-09 18:51 ` [PATCH 11/39] NLKD - time adjustment George Anzinger
2005-11-09 16:50 ` [PATCH 6/39] NLKD - early panic notification Greg KH
2005-11-09 16:45 ` [PATCH 3/39] NLKD - early/late CPU up/down notification Greg KH
2005-11-09 17:09 ` Jan Beulich
2005-11-09 17:19 ` Greg KH
2005-11-10 7:41 ` Jan Beulich
2005-11-10 20:59 ` Sam Ravnborg
2005-11-11 7:52 ` Jan Beulich
2005-11-12 20:52 ` Randy.Dunlap
2005-11-10 23:01 ` Greg KH
2005-11-11 10:06 ` [PATCH 2/39] NLKD - an alternative early ioremap approach Pavel Machek
2005-11-11 10:19 ` Jan Beulich
2005-11-09 16:50 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Randy.Dunlap
2005-11-09 16:57 ` Greg KH
2005-11-09 17:20 ` Jan Beulich
2005-11-09 16:59 ` [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jeff Garzik
2005-11-09 17:06 ` Randy.Dunlap
2005-11-09 17:14 ` Jan Beulich
2005-11-09 17:56 ` Alan Cox
2005-11-09 18:05 ` Greg KH
2005-11-09 18:54 ` Paul Jackson
2005-11-10 12:41 ` Christoph Hellwig
2005-11-13 1:09 ` Andi Kleen
2005-11-13 2:53 ` jmerkey
2005-11-13 3:44 ` Andi Kleen
2005-11-13 3:26 ` Jeff V. Merkey
2005-11-13 3:32 ` Jeff V. Merkey
2005-11-09 17:53 ` Alan Cox
2005-11-09 16:25 ` Jeffrey V. Merkey
2005-11-10 14:48 ` Mark Lord
2005-11-10 15:28 ` Tom Rini
2005-11-10 16:37 ` Alan Cox
2005-11-13 1:11 ` Andi Kleen
[not found] ` <437214E4.76F0.0078.0@novell.com>
[not found] ` <4372153C.76F0.0078.0@novell.com>
2005-11-10 13:33 ` [PATCH 32/39] NLKD/x86-64 - Core Debug Engine Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=437213AB.76F0.0078.0@novell.com \
--to=jbeulich@novell.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.