source: mainline/arch/amd64/include/pm.h@ 0b917dd

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 0b917dd was e8194664, checked in by Jakub Vana <jakub.vana@…>, 19 years ago

VESA FB cut unwanted

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*
2 * Copyright (C) 2001-2004 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef __amd64_PM_H__
30#define __amd64_PM_H__
31
32#ifndef __ASM__
33# include <arch/types.h>
34# include <typedefs.h>
35# include <arch/context.h>
36#endif
37
38#define IDT_ITEMS 64
39#define GDT_ITEMS 8
40
41
42#define NULL_DES 0
43/* Warning: Do not reorder next items, unless you look into syscall.c!!! */
44#define KTEXT_DES 1
45#define KDATA_DES 2
46#define UDATA_DES 3
47#define UTEXT_DES 4
48#define KTEXT32_DES 5
49/* EndOfWarning */
50#define TSS_DES 6
51
52
53
54#ifdef CONFIG_FB
55
56#define VESA_INIT_DES 8
57#define VESA_INIT_SEGMENT 0x8000
58#undef GDT_ITEMS
59#define GDT_ITEMS 9
60
61#endif /*CONFIG_FB*/
62
63
64
65#define gdtselector(des) ((des)<<3)
66#define idtselector(des) ((des)<<4)
67
68#define PL_KERNEL 0
69#define PL_USER 3
70
71#define AR_PRESENT (1<<7)
72#define AR_DATA (2<<3)
73#define AR_CODE (3<<3)
74#define AR_WRITABLE (1<<1)
75#define AR_READABLE (1<<1)
76#define AR_TSS (0x9)
77#define AR_INTERRUPT (0xe)
78#define AR_TRAP (0xf)
79
80#define DPL_KERNEL (PL_KERNEL<<5)
81#define DPL_USER (PL_USER<<5)
82
83#define TSS_BASIC_SIZE 104
84#define TSS_IOMAP_SIZE (16*1024+1) /* 16K for bitmap + 1 terminating byte for convenience */
85
86#define IO_PORTS (64*1024)
87
88#ifndef __ASM__
89
90struct descriptor {
91 unsigned limit_0_15: 16;
92 unsigned base_0_15: 16;
93 unsigned base_16_23: 8;
94 unsigned access: 8;
95 unsigned limit_16_19: 4;
96 unsigned available: 1;
97 unsigned longmode: 1;
98 unsigned special: 1;
99 unsigned granularity : 1;
100 unsigned base_24_31: 8;
101} __attribute__ ((packed));
102typedef struct descriptor descriptor_t;
103
104struct tss_descriptor {
105 unsigned limit_0_15: 16;
106 unsigned base_0_15: 16;
107 unsigned base_16_23: 8;
108 unsigned type: 4;
109 unsigned : 1;
110 unsigned dpl : 2;
111 unsigned present : 1;
112 unsigned limit_16_19: 4;
113 unsigned available: 1;
114 unsigned : 2;
115 unsigned granularity : 1;
116 unsigned base_24_31: 8;
117 unsigned base_32_63 : 32;
118 unsigned : 32;
119} __attribute__ ((packed));
120typedef struct tss_descriptor tss_descriptor_t;
121
122struct idescriptor {
123 unsigned offset_0_15: 16;
124 unsigned selector: 16;
125 unsigned ist:3;
126 unsigned unused: 5;
127 unsigned type: 5;
128 unsigned dpl: 2;
129 unsigned present : 1;
130 unsigned offset_16_31: 16;
131 unsigned offset_32_63: 32;
132 unsigned : 32;
133} __attribute__ ((packed));
134typedef struct idescriptor idescriptor_t;
135
136struct ptr_16_64 {
137 __u16 limit;
138 __u64 base;
139} __attribute__ ((packed));
140typedef struct ptr_16_64 ptr_16_64_t;
141
142struct ptr_16_32 {
143 __u16 limit;
144 __u32 base;
145} __attribute__ ((packed));
146typedef struct ptr_16_32 ptr_16_32_t;
147
148struct tss {
149 __u32 reserve1;
150 __u64 rsp0;
151 __u64 rsp1;
152 __u64 rsp2;
153 __u64 reserve2;
154 __u64 ist1;
155 __u64 ist2;
156 __u64 ist3;
157 __u64 ist4;
158 __u64 ist5;
159 __u64 ist6;
160 __u64 ist7;
161 __u64 reserve3;
162 __u16 reserve4;
163 __u16 iomap_base;
164 __u8 iomap[TSS_IOMAP_SIZE];
165} __attribute__ ((packed));
166typedef struct tss tss_t;
167
168extern tss_t *tss_p;
169
170extern descriptor_t gdt[];
171extern idescriptor_t idt[];
172
173extern ptr_16_64_t gdtr;
174extern ptr_16_32_t bootstrap_gdtr;
175extern ptr_16_32_t protected_ap_gdtr;
176
177extern void pm_init(void);
178
179extern void gdt_tss_setbase(descriptor_t *d, __address base);
180extern void gdt_tss_setlimit(descriptor_t *d, __u32 limit);
181
182extern void idt_init(void);
183extern void idt_setoffset(idescriptor_t *d, __address offset);
184
185extern void tss_initialize(tss_t *t);
186
187#endif /* __ASM__ */
188
189#endif
Note: See TracBrowser for help on using the repository browser.