Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/pm.c

    r149d14e5 rf4946de  
    3535#include <arch/pm.h>
    3636#include <config.h>
    37 #include <arch/types.h>
     37#include <typedefs.h>
    3838#include <arch/interrupt.h>
    3939#include <arch/asm.h>
     
    130130                d->selector = gdtselector(KTEXT_DES);
    131131
    132                 d->access = AR_PRESENT | AR_INTERRUPT;  /* masking interrupt */
    133 
    134132                if (i == VECTOR_SYSCALL) {
    135133                        /*
    136                          * The syscall interrupt gate must be calleable from
    137                          * userland.
     134                         * The syscall trap gate must be callable from
     135                         * userland. Interrupts will remain enabled.
    138136                         */
    139                         d->access |= DPL_USER;
     137                        d->access = AR_PRESENT | AR_TRAP | DPL_USER;
     138                } else {
     139                        /*
     140                         * Other interrupts use interrupt gates which
     141                         * disable interrupts.
     142                         */
     143                        d->access = AR_PRESENT | AR_INTERRUPT;
    140144                }
    141                
    142                 idt_setoffset(d, ((uintptr_t) interrupt_handlers) +
    143                     i * interrupt_handler_size);
    144145        }
    145 }
    146 
     146
     147        d = &idt[0];
     148        idt_setoffset(d++, (uintptr_t) &int_0);
     149        idt_setoffset(d++, (uintptr_t) &int_1);
     150        idt_setoffset(d++, (uintptr_t) &int_2);
     151        idt_setoffset(d++, (uintptr_t) &int_3);
     152        idt_setoffset(d++, (uintptr_t) &int_4);
     153        idt_setoffset(d++, (uintptr_t) &int_5);
     154        idt_setoffset(d++, (uintptr_t) &int_6);
     155        idt_setoffset(d++, (uintptr_t) &int_7);
     156        idt_setoffset(d++, (uintptr_t) &int_8);
     157        idt_setoffset(d++, (uintptr_t) &int_9);
     158        idt_setoffset(d++, (uintptr_t) &int_10);
     159        idt_setoffset(d++, (uintptr_t) &int_11);
     160        idt_setoffset(d++, (uintptr_t) &int_12);
     161        idt_setoffset(d++, (uintptr_t) &int_13);
     162        idt_setoffset(d++, (uintptr_t) &int_14);
     163        idt_setoffset(d++, (uintptr_t) &int_15);
     164        idt_setoffset(d++, (uintptr_t) &int_16);
     165        idt_setoffset(d++, (uintptr_t) &int_17);
     166        idt_setoffset(d++, (uintptr_t) &int_18);
     167        idt_setoffset(d++, (uintptr_t) &int_19);
     168        idt_setoffset(d++, (uintptr_t) &int_20);
     169        idt_setoffset(d++, (uintptr_t) &int_21);
     170        idt_setoffset(d++, (uintptr_t) &int_22);
     171        idt_setoffset(d++, (uintptr_t) &int_23);
     172        idt_setoffset(d++, (uintptr_t) &int_24);
     173        idt_setoffset(d++, (uintptr_t) &int_25);
     174        idt_setoffset(d++, (uintptr_t) &int_26);
     175        idt_setoffset(d++, (uintptr_t) &int_27);
     176        idt_setoffset(d++, (uintptr_t) &int_28);
     177        idt_setoffset(d++, (uintptr_t) &int_29);
     178        idt_setoffset(d++, (uintptr_t) &int_30);
     179        idt_setoffset(d++, (uintptr_t) &int_31);
     180        idt_setoffset(d++, (uintptr_t) &int_32);
     181        idt_setoffset(d++, (uintptr_t) &int_33);
     182        idt_setoffset(d++, (uintptr_t) &int_34);
     183        idt_setoffset(d++, (uintptr_t) &int_35);
     184        idt_setoffset(d++, (uintptr_t) &int_36);
     185        idt_setoffset(d++, (uintptr_t) &int_37);
     186        idt_setoffset(d++, (uintptr_t) &int_38);
     187        idt_setoffset(d++, (uintptr_t) &int_39);
     188        idt_setoffset(d++, (uintptr_t) &int_40);
     189        idt_setoffset(d++, (uintptr_t) &int_41);
     190        idt_setoffset(d++, (uintptr_t) &int_42);
     191        idt_setoffset(d++, (uintptr_t) &int_43);
     192        idt_setoffset(d++, (uintptr_t) &int_44);
     193        idt_setoffset(d++, (uintptr_t) &int_45);
     194        idt_setoffset(d++, (uintptr_t) &int_46);
     195        idt_setoffset(d++, (uintptr_t) &int_47);
     196        idt_setoffset(d++, (uintptr_t) &int_48);
     197        idt_setoffset(d++, (uintptr_t) &int_49);
     198        idt_setoffset(d++, (uintptr_t) &int_50);
     199        idt_setoffset(d++, (uintptr_t) &int_51);
     200        idt_setoffset(d++, (uintptr_t) &int_52);
     201        idt_setoffset(d++, (uintptr_t) &int_53);
     202        idt_setoffset(d++, (uintptr_t) &int_54);
     203        idt_setoffset(d++, (uintptr_t) &int_55);
     204        idt_setoffset(d++, (uintptr_t) &int_56);
     205        idt_setoffset(d++, (uintptr_t) &int_57);
     206        idt_setoffset(d++, (uintptr_t) &int_58);
     207        idt_setoffset(d++, (uintptr_t) &int_59);
     208        idt_setoffset(d++, (uintptr_t) &int_60);
     209        idt_setoffset(d++, (uintptr_t) &int_61);
     210        idt_setoffset(d++, (uintptr_t) &int_62);
     211        idt_setoffset(d++, (uintptr_t) &int_63);
     212
     213        idt_setoffset(&idt[VECTOR_SYSCALL], (uintptr_t) &int_syscall);
     214}
    147215
    148216/* Clean IOPL(12,13) and NT(14) flags in EFLAGS register */
Note: See TracChangeset for help on using the changeset viewer.