2
* Copyright (c) 2001-2004 Jakub Jermar
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
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.
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.
35
#ifndef KERN_ia32_PM_H_
36
#define KERN_ia32_PM_H_
47
#define TLS_DES 6 /* Pointer to Thread-Local-Storage data */
51
#define VESA_INIT_SEGMENT 0x8000
52
#define VESA_INIT_DES 7
53
#define KTEXT32_DES KTEXT_DES
58
#endif /* CONFIG_FB */
60
#define gdtselector(des) ((des) << 3)
65
#define AR_PRESENT (1 << 7)
66
#define AR_DATA (2 << 3)
67
#define AR_CODE (3 << 3)
68
#define AR_WRITABLE (1 << 1)
69
#define AR_INTERRUPT (0x0e)
72
#define DPL_KERNEL (PL_KERNEL << 5)
73
#define DPL_USER (PL_USER << 5)
75
#define TSS_BASIC_SIZE 104
76
#define TSS_IOMAP_SIZE (16 * 1024 + 1) /* 16K for bitmap + 1 terminating byte for convenience */
78
#define IO_PORTS (64 * 1024)
82
#include <arch/types.h>
83
#include <arch/context.h>
88
} __attribute__ ((packed)) ptr_16_32_t;
91
unsigned limit_0_15: 16;
92
unsigned base_0_15: 16;
93
unsigned base_16_23: 8;
95
unsigned limit_16_19: 4;
96
unsigned available: 1;
99
unsigned granularity : 1;
100
unsigned base_24_31: 8;
101
} __attribute__ ((packed)) descriptor_t;
104
unsigned offset_0_15: 16;
105
unsigned selector: 16;
108
unsigned offset_16_31: 16;
109
} __attribute__ ((packed)) idescriptor_t;
150
uint8_t iomap[TSS_IOMAP_SIZE];
151
} __attribute__ ((packed)) tss_t;
153
extern ptr_16_32_t gdtr;
154
extern ptr_16_32_t bootstrap_gdtr;
155
extern ptr_16_32_t protected_ap_gdtr;
158
extern descriptor_t gdt[];
160
extern void pm_init(void);
162
extern void gdt_setbase(descriptor_t *d, uintptr_t base);
163
extern void gdt_setlimit(descriptor_t *d, uint32_t limit);
165
extern void idt_init(void);
166
extern void idt_setoffset(idescriptor_t *d, uintptr_t offset);
168
extern void tss_initialize(tss_t *t);
169
extern void set_tls_desc(uintptr_t tls);