Changeset 39cea6a in mainline for arch/ia32/src/pm.c
- Timestamp:
- 2006-04-13T17:38:03Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e185136
- Parents:
- 897ad60
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/pm.c
r897ad60 r39cea6a 53 53 * structure in it's base. 54 54 */ 55 struct descriptorgdt[GDT_ITEMS] = {55 descriptor_t gdt[GDT_ITEMS] = { 56 56 /* NULL descriptor */ 57 57 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, … … 69 69 }; 70 70 71 static struct idescriptoridt[IDT_ITEMS];72 73 static struct tsstss;74 75 struct tss*tss_p = NULL;71 static idescriptor_t idt[IDT_ITEMS]; 72 73 static tss_t tss; 74 75 tss_t *tss_p = NULL; 76 76 77 77 /* gdtr is changed by kmp before next CPU is initialized */ 78 struct ptr_16_32bootstrap_gdtr = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt) };79 struct ptr_16_32gdtr = { .limit = sizeof(gdt), .base = (__address) gdt };80 81 void gdt_setbase( struct descriptor*d, __address base)78 ptr_16_32_t bootstrap_gdtr = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt) }; 79 ptr_16_32_t gdtr = { .limit = sizeof(gdt), .base = (__address) gdt }; 80 81 void gdt_setbase(descriptor_t *d, __address base) 82 82 { 83 83 d->base_0_15 = base & 0xffff; … … 86 86 } 87 87 88 void gdt_setlimit( struct descriptor*d, __u32 limit)88 void gdt_setlimit(descriptor_t *d, __u32 limit) 89 89 { 90 90 d->limit_0_15 = limit & 0xffff; … … 92 92 } 93 93 94 void idt_setoffset( struct idescriptor*d, __address offset)94 void idt_setoffset(idescriptor_t *d, __address offset) 95 95 { 96 96 /* … … 101 101 } 102 102 103 void tss_initialize( struct tss*t)103 void tss_initialize(tss_t *t) 104 104 { 105 105 memsetb((__address) t, sizeof(struct tss), 0); … … 111 111 void idt_init(void) 112 112 { 113 struct idescriptor*d;113 idescriptor_t *d; 114 114 int i; 115 115 … … 142 142 static void clean_IOPL_NT_flags(void) 143 143 { 144 asm 145 ( 146 "pushfl;" 147 "pop %%eax;" 148 "and $0xffff8fff,%%eax;" 149 "push %%eax;" 150 "popfl;" 151 : 152 : 153 :"%eax" 144 __asm__ volatile ( 145 "pushfl\n" 146 "pop %%eax\n" 147 "and $0xffff8fff, %%eax\n" 148 "push %%eax\n" 149 "popfl\n" 150 : : : "eax" 154 151 ); 155 152 } … … 158 155 static void clean_AM_flag(void) 159 156 { 160 asm 161 ( 162 "mov %%cr0,%%eax;" 163 "and $0xFFFBFFFF,%%eax;" 164 "mov %%eax,%%cr0;" 165 : 166 : 167 :"%eax" 157 __asm__ volatile ( 158 "mov %%cr0, %%eax\n" 159 "and $0xfffbffff, %%eax\n" 160 "mov %%eax, %%cr0\n" 161 : : : "eax" 168 162 ); 169 163 } … … 171 165 void pm_init(void) 172 166 { 173 struct descriptor *gdt_p = (struct descriptor*) gdtr.base;174 struct ptr_16_32idtr;167 descriptor_t *gdt_p = (descriptor_t *) gdtr.base; 168 ptr_16_32_t idtr; 175 169 176 170 /* … … 196 190 } 197 191 else { 198 tss_p = ( struct tss *) malloc(sizeof(struct tss),FRAME_ATOMIC);192 tss_p = (tss_t *) malloc(sizeof(tss_t), FRAME_ATOMIC); 199 193 if (!tss_p) 200 194 panic("could not allocate TSS\n"); … … 208 202 209 203 gdt_setbase(&gdt_p[TSS_DES], (__address) tss_p); 210 gdt_setlimit(&gdt_p[TSS_DES], sizeof( struct tss) - 1);204 gdt_setlimit(&gdt_p[TSS_DES], sizeof(tss_t) - 1); 211 205 212 206 /* … … 222 216 void set_tls_desc(__address tls) 223 217 { 224 struct ptr_16_32cpugdtr;225 struct descriptor *gdt_p = (struct descriptor*) cpugdtr.base;218 ptr_16_32_t cpugdtr; 219 descriptor_t *gdt_p = (descriptor_t *) cpugdtr.base; 226 220 227 221 gdtr_store(&cpugdtr);
Note:
See TracChangeset
for help on using the changeset viewer.