Subversion Repositories HelenOS-historic

Rev

Rev 84 | 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);