#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) {
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];
+}