Changeset aecf79f in mainline for kernel/arch/xen32/include/pm.h
- Timestamp:
- 2006-07-24T16:07:15Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c59dd1a2
- Parents:
- 7b0599b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/xen32/include/pm.h
-
Property mode
changed from
120000
to100644
r7b0599b raecf79f 1 ../../ia32/include/pm.h 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 /** @addtogroup xen32 30 * @{ 31 */ 32 /** @file 33 */ 34 35 #ifndef __PM_H__ 36 #define __PM_H__ 37 38 #define IDT_ITEMS 64 39 #define GDT_ITEMS 7 40 41 #define NULL_DES 0 42 #define KTEXT_DES 1 43 #define KDATA_DES 2 44 #define UTEXT_DES 3 45 #define UDATA_DES 4 46 #define TSS_DES 5 47 #define TLS_DES 6 /* Pointer to Thread-Local-Storage data */ 48 49 #define selector(des) ((des) << 3) 50 51 #define PL_KERNEL 1 52 #define PL_USER 3 53 54 #define AR_PRESENT (1<<7) 55 #define AR_DATA (2<<3) 56 #define AR_CODE (3<<3) 57 #define AR_WRITABLE (1<<1) 58 #define AR_INTERRUPT (0xe) 59 #define AR_TSS (0x9) 60 61 #define DPL_KERNEL (PL_KERNEL<<5) 62 #define DPL_USER (PL_USER<<5) 63 64 #define TSS_BASIC_SIZE 104 65 #define TSS_IOMAP_SIZE (16*1024+1) /* 16K for bitmap + 1 terminating byte for convenience */ 66 67 #define IO_PORTS (64*1024) 68 69 #ifndef __ASM__ 70 71 #include <arch/types.h> 72 #include <typedefs.h> 73 #include <arch/context.h> 74 75 struct ptr_16_32 { 76 uint16_t limit; 77 uint32_t base; 78 } __attribute__ ((packed)); 79 typedef struct ptr_16_32 ptr_16_32_t; 80 81 struct descriptor { 82 unsigned limit_0_15: 16; 83 unsigned base_0_15: 16; 84 unsigned base_16_23: 8; 85 unsigned access: 8; 86 unsigned limit_16_19: 4; 87 unsigned available: 1; 88 unsigned unused: 1; 89 unsigned special: 1; 90 unsigned granularity : 1; 91 unsigned base_24_31: 8; 92 } __attribute__ ((packed)); 93 typedef struct descriptor descriptor_t; 94 95 struct idescriptor { 96 unsigned offset_0_15: 16; 97 unsigned selector: 16; 98 unsigned unused: 8; 99 unsigned access: 8; 100 unsigned offset_16_31: 16; 101 } __attribute__ ((packed)); 102 typedef struct idescriptor idescriptor_t; 103 104 struct tss { 105 uint16_t link; 106 unsigned : 16; 107 uint32_t esp0; 108 uint16_t ss0; 109 unsigned : 16; 110 uint32_t esp1; 111 uint16_t ss1; 112 unsigned : 16; 113 uint32_t esp2; 114 uint16_t ss2; 115 unsigned : 16; 116 uint32_t cr3; 117 uint32_t eip; 118 uint32_t eflags; 119 uint32_t eax; 120 uint32_t ecx; 121 uint32_t edx; 122 uint32_t ebx; 123 uint32_t esp; 124 uint32_t ebp; 125 uint32_t esi; 126 uint32_t edi; 127 uint16_t es; 128 unsigned : 16; 129 uint16_t cs; 130 unsigned : 16; 131 uint16_t ss; 132 unsigned : 16; 133 uint16_t ds; 134 unsigned : 16; 135 uint16_t fs; 136 unsigned : 16; 137 uint16_t gs; 138 unsigned : 16; 139 uint16_t ldtr; 140 unsigned : 16; 141 unsigned : 16; 142 uint16_t iomap_base; 143 uint8_t iomap[TSS_IOMAP_SIZE]; 144 } __attribute__ ((packed)); 145 typedef struct tss tss_t; 146 147 extern ptr_16_32_t gdtr; 148 extern ptr_16_32_t bootstrap_gdtr; 149 extern ptr_16_32_t protected_ap_gdtr; 150 extern struct tss *tss_p; 151 152 extern descriptor_t gdt[]; 153 154 extern void pm_init(void); 155 156 extern void gdt_setbase(descriptor_t *d, uintptr_t base); 157 extern void gdt_setlimit(descriptor_t *d, uint32_t limit); 158 159 extern void idt_init(void); 160 extern void idt_setoffset(idescriptor_t *d, uintptr_t offset); 161 162 extern void tss_initialize(tss_t *t); 163 extern void set_tls_desc(uintptr_t tls); 164 165 #endif /* __ASM__ */ 166 167 #endif 168 169 /** @} 170 */ -
Property mode
changed from
Note:
See TracChangeset
for help on using the changeset viewer.