xref: /xnu-8792.41.9/EXTERNAL_HEADERS/architecture/i386/tss.h (revision 5c2921b07a2480ab43ec66f5b9e41cb872bc554f)
1 /*
2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /*
29  * Copyright (c) 1992 NeXT Computer, Inc.
30  *
31  * Intel386 Family:	Task State Segment.
32  *
33  * HISTORY
34  *
35  * 29 March 1992 ? at NeXT
36  *	Created.
37  */
38 
39 #include <architecture/i386/sel.h>
40 
41 /*
42  * Task State segment.
43  */
44 
45 typedef struct tss {
46     sel_t		oldtss;
47     unsigned int		:0;
48     unsigned int	esp0;
49     sel_t		ss0;
50     unsigned int		:0;
51     unsigned int	esp1;
52     sel_t		ss1;
53     unsigned int		:0;
54     unsigned int	esp2;
55     sel_t		ss2;
56     unsigned int		:0;
57     unsigned int	cr3;
58     unsigned int	eip;
59     unsigned int	eflags;
60     unsigned int	eax;
61     unsigned int	ecx;
62     unsigned int	edx;
63     unsigned int	ebx;
64     unsigned int	esp;
65     unsigned int	ebp;
66     unsigned int	esi;
67     unsigned int	edi;
68     sel_t		es;
69     unsigned int		:0;
70     sel_t		cs;
71     unsigned int		:0;
72     sel_t		ss;
73     unsigned int		:0;
74     sel_t		ds;
75     unsigned int		:0;
76     sel_t		fs;
77     unsigned int		:0;
78     sel_t		gs;
79     unsigned int		:0;
80     sel_t		ldt;
81     unsigned int		:0;
82     unsigned int	t	:1,
83     				:15,
84 			io_bmap	:16;
85 } tss_t;
86 
87 #define TSS_SIZE(n)	(sizeof (struct tss) + (n))
88 
89 /*
90  * Task State segment descriptor.
91  */
92 
93 typedef struct tss_desc {
94     unsigned short	limit00;
95     unsigned short	base00;
96     unsigned char	base16;
97     unsigned char	type	:5,
98 #define DESC_TSS	0x09
99 			dpl	:2,
100 			present	:1;
101     unsigned char	limit16	:4,
102 				:3,
103 			granular:1;
104     unsigned char	base24;
105 } tss_desc_t;
106 
107 /*
108  * Task gate descriptor.
109  */
110 
111 typedef struct task_gate {
112     unsigned short		:16;
113     sel_t		tss;
114     unsigned int		:8,
115     			type	:5,
116 #define DESC_TASK_GATE	0x05
117 			dpl	:2,
118 			present	:1,
119 				:0;
120 } task_gate_t;
121