X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=3sys;a=blobdiff_plain;f=sys1%2Fkern%2Fsrc%2Fdesc.c;fp=sys1%2Fkern%2Fsrc%2Fdesc.c;h=9af939e28c278df6c5ef682bac1520535a313934;hp=d02c5fc2decbaa06fd6acae5660424d1fb3c7c1f;hb=e05574a9511e724651361905620f96666c7acb04;hpb=aac04321fda4094e8623a10ed39d2916ada40ccf diff --git a/sys1/kern/src/desc.c b/sys1/kern/src/desc.c index d02c5fc..9af939e 100644 --- a/sys1/kern/src/desc.c +++ b/sys1/kern/src/desc.c @@ -22,6 +22,11 @@ #define SEG_DEF 0x00400000 +#define GATE_TYPE_INTR 0x0e00 +#define GATE_TYPE_TRAP 0x0f00 +#define GATE_PRESENT 0x8000 + + void desc_seg(struct desc *desc, int type, uint32_t base, uint32_t limit, int dpl) { if(type == SEG_NULL) { @@ -43,3 +48,13 @@ void desc_seg(struct desc *desc, int type, uint32_t base, uint32_t limit, int dp break; } } + + + +void desc_intr(struct desc *desc, int type, uint16_t sel, uint32_t offs, int dpl) +{ + uint32_t gate_type[] = { GATE_TYPE_INTR, GATE_TYPE_TRAP }; + + desc->d[0] = (offs & 0xffff) | ((uint32_t)sel << 16); + desc->d[1] = (offs & 0xffff0000) | GATE_PRESENT | (dpl << 13) | gate_type[type]; +}