Changeset 39cea6a in mainline for arch/amd64/src/pm.c


Ignore:
Timestamp:
2006-04-13T17:38:03Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e185136
Parents:
897ad60
Message:

Cleanup pm.c and pm.h code on ia32 and amd64.
Add before_task_runs() and before_task_runs_arch() for each architecture.
Add ia32 and amd64 code to ensure I/O Permission Bitmap update.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/amd64/src/pm.c

    r897ad60 r39cea6a  
    4747 */
    4848
    49 struct descriptor gdt[GDT_ITEMS] = {
     49descriptor_t gdt[GDT_ITEMS] = {
    5050        /* NULL descriptor */
    5151        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
     
    111111};
    112112
    113 struct idescriptor idt[IDT_ITEMS];
    114 
    115 struct ptr_16_64 gdtr = {.limit = sizeof(gdt), .base= (__u64) gdt };
    116 struct ptr_16_64 idtr = {.limit = sizeof(idt), .base= (__u64) idt };
    117 
    118 static struct tss tss;
    119 struct tss *tss_p = NULL;
    120 
    121 void gdt_tss_setbase(struct descriptor *d, __address base)
    122 {
    123         struct tss_descriptor *td = (struct tss_descriptor *) d;
     113idescriptor_t idt[IDT_ITEMS];
     114
     115ptr_16_64_t gdtr = {.limit = sizeof(gdt), .base= (__u64) gdt };
     116ptr_16_64_t idtr = {.limit = sizeof(idt), .base= (__u64) idt };
     117
     118static tss_t tss;
     119tss_t *tss_p = NULL;
     120
     121void gdt_tss_setbase(descriptor_t *d, __address base)
     122{
     123        tss_descriptor_t *td = (tss_descriptor_t *) d;
    124124
    125125        td->base_0_15 = base & 0xffff;
     
    129129}
    130130
    131 void gdt_tss_setlimit(struct descriptor *d, __u32 limit)
    132 {
    133         struct tss_descriptor *td = (struct tss_descriptor *) d;
     131void gdt_tss_setlimit(descriptor_t *d, __u32 limit)
     132{
     133        struct tss_descriptor *td = (tss_descriptor_t *) d;
    134134
    135135        td->limit_0_15 = limit & 0xffff;
     
    137137}
    138138
    139 void idt_setoffset(struct idescriptor *d, __address offset)
     139void idt_setoffset(idescriptor_t *d, __address offset)
    140140{
    141141        /*
     
    147147}
    148148
    149 void tss_initialize(struct tss *t)
    150 {
    151         memsetb((__address) t, sizeof(struct tss), 0);
     149void tss_initialize(tss_t *t)
     150{
     151        memsetb((__address) t, sizeof(tss_t), 0);
    152152}
    153153
     
    157157void idt_init(void)
    158158{
    159         struct idescriptor *d;
     159        idescriptor_t *d;
    160160        int i;
    161161
     
    184184void pm_init(void)
    185185{
    186         struct descriptor *gdt_p = (struct descriptor *) gdtr.base;
    187         struct tss_descriptor *tss_desc;
     186        descriptor_t *gdt_p = (struct descriptor *) gdtr.base;
     187        tss_descriptor_t *tss_desc;
    188188
    189189        /*
     
    201201        }
    202202        else {
    203                 tss_p = (struct tss *) malloc(sizeof(struct tss),FRAME_ATOMIC);
     203                tss_p = (struct tss *) malloc(sizeof(tss_t), FRAME_ATOMIC);
    204204                if (!tss_p)
    205205                        panic("could not allocate TSS\n");
     
    208208        tss_initialize(tss_p);
    209209
    210         tss_desc = (struct tss_descriptor *) (&gdt_p[TSS_DES]);
     210        tss_desc = (tss_descriptor_t *) (&gdt_p[TSS_DES]);
    211211        tss_desc->present = 1;
    212212        tss_desc->type = AR_TSS;
     
    214214       
    215215        gdt_tss_setbase(&gdt_p[TSS_DES], (__address) tss_p);
    216         gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(struct tss) - 1);
     216        gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(tss_t) - 1);
    217217
    218218        gdtr_load(&gdtr);
Note: See TracChangeset for help on using the changeset viewer.