Rev 84 | Rev 110 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 84 | Rev 105 | ||
---|---|---|---|
Line 64... | Line 64... | ||
64 | static struct tss tss; |
64 | static struct tss tss; |
65 | 65 | ||
66 | struct tss *tss_p = NULL; |
66 | struct tss *tss_p = NULL; |
67 | 67 | ||
68 | /* gdtr is changed by kmp before next CPU is initialized */ |
68 | /* gdtr is changed by kmp before next CPU is initialized */ |
69 | struct ptr_16_32 gdtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(gdt), .base = (__address) gdt }; |
69 | struct ptr_16_32 gdtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt) }; |
70 | struct ptr_16_32 idtr __attribute__ ((section ("K_DATA_START")))= { .limit = sizeof(idt), .base = (__address) idt }; |
70 | struct ptr_16_32 idtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(idt), .base = KA2PA((__address) idt) }; |
71 | 71 | ||
72 | void gdt_setbase(struct descriptor *d, __address base) |
72 | void gdt_setbase(struct descriptor *d, __address base) |
73 | { |
73 | { |
74 | d->base_0_15 = base & 0xffff; |
74 | d->base_0_15 = KA2PA(base) & 0xffff; |
75 | d->base_16_23 = (base >> 16) & 0xff; |
75 | d->base_16_23 = (KA2PA(base) >> 16) & 0xff; |
76 | d->base_24_31 = (base >> 24) & 0xff; |
76 | d->base_24_31 = (KA2PA(base) >> 24) & 0xff; |
77 | } |
77 | } |
78 | 78 | ||
79 | void gdt_setlimit(struct descriptor *d, __address limit) |
79 | void gdt_setlimit(struct descriptor *d, __u32 limit) |
80 | { |
80 | { |
81 | d->limit_0_15 = limit & 0xffff; |
81 | d->limit_0_15 = limit & 0xffff; |
82 | d->limit_16_19 = (limit >> 16) & 0xf; |
82 | d->limit_16_19 = (limit >> 16) & 0xf; |
83 | } |
83 | } |
84 | 84 | ||
85 | void idt_setoffset(struct idescriptor *d, __address offset) |
85 | void idt_setoffset(struct idescriptor *d, __address offset) |
86 | { |
86 | { |
87 | d->offset_0_15 = offset & 0xffff; |
87 | d->offset_0_15 = KA2PA(offset) & 0xffff; |
88 | d->offset_16_31 = offset >> 16; |
88 | d->offset_16_31 = KA2PA(offset) >> 16; |
89 | } |
89 | } |
90 | 90 | ||
91 | void tss_initialize(struct tss *t) |
91 | void tss_initialize(struct tss *t) |
92 | { |
92 | { |
93 | memsetb((__address) t, sizeof(struct tss), 0); |
93 | memsetb((__address) t, sizeof(struct tss), 0); |