-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PATCH] x86-64: Extract segment descriptor definitions for use outside
Code that wants to use struct desc_struct cannot do so on i386 because desc.h contains other code that will only compile on x86_64. So extract the structure definitions into a asm-x86_64/desc_defs.h. Signed-off-by: Avi Kivity <avi@qumranet.com> Signed-off-by: Andi Kleen <ak@suse.de> include/asm-x86_64/desc.h | 53 ------------------------------- include/asm-x86_64/desc_defs.h | 69 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 52 deletions(-)
- Loading branch information
Avi Kivity
authored and
Andi Kleen
committed
Dec 7, 2006
1 parent
4c7aa6c
commit 249e83f
Showing
2 changed files
with
70 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* Written 2000 by Andi Kleen */ | ||
#ifndef __ARCH_DESC_DEFS_H | ||
#define __ARCH_DESC_DEFS_H | ||
|
||
/* | ||
* Segment descriptor structure definitions, usable from both x86_64 and i386 | ||
* archs. | ||
*/ | ||
|
||
#ifndef __ASSEMBLY__ | ||
|
||
#include <linux/types.h> | ||
|
||
// 8 byte segment descriptor | ||
struct desc_struct { | ||
u16 limit0; | ||
u16 base0; | ||
unsigned base1 : 8, type : 4, s : 1, dpl : 2, p : 1; | ||
unsigned limit : 4, avl : 1, l : 1, d : 1, g : 1, base2 : 8; | ||
} __attribute__((packed)); | ||
|
||
struct n_desc_struct { | ||
unsigned int a,b; | ||
}; | ||
|
||
enum { | ||
GATE_INTERRUPT = 0xE, | ||
GATE_TRAP = 0xF, | ||
GATE_CALL = 0xC, | ||
}; | ||
|
||
// 16byte gate | ||
struct gate_struct { | ||
u16 offset_low; | ||
u16 segment; | ||
unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1; | ||
u16 offset_middle; | ||
u32 offset_high; | ||
u32 zero1; | ||
} __attribute__((packed)); | ||
|
||
#define PTR_LOW(x) ((unsigned long)(x) & 0xFFFF) | ||
#define PTR_MIDDLE(x) (((unsigned long)(x) >> 16) & 0xFFFF) | ||
#define PTR_HIGH(x) ((unsigned long)(x) >> 32) | ||
|
||
enum { | ||
DESC_TSS = 0x9, | ||
DESC_LDT = 0x2, | ||
}; | ||
|
||
// LDT or TSS descriptor in the GDT. 16 bytes. | ||
struct ldttss_desc { | ||
u16 limit0; | ||
u16 base0; | ||
unsigned base1 : 8, type : 5, dpl : 2, p : 1; | ||
unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8; | ||
u32 base3; | ||
u32 zero1; | ||
} __attribute__((packed)); | ||
|
||
struct desc_ptr { | ||
unsigned short size; | ||
unsigned long address; | ||
} __attribute__((packed)) ; | ||
|
||
|
||
#endif /* !__ASSEMBLY__ */ | ||
|
||
#endif |