Basic disk test code.
[pintos-anon] / src / threads / interrupt.h
index 834d796d971feb76ae63fbcc0006bd8f571d0ad8..5fa67b213062ede957930919958768ee4db8702c 100644 (file)
@@ -15,12 +15,13 @@ enum if_level intr_set_level (enum if_level);
 enum if_level intr_enable (void);
 enum if_level intr_disable (void);
 \f
-struct intr_args
+struct intr_frame
   {
+    /* Pushed by the stubs. */
     uint32_t edi;
     uint32_t esi;
     uint32_t ebp;
-    uint32_t esp;
+    uint32_t esp_dummy;
     uint32_t ebx;
     uint32_t edx;
     uint32_t ecx;
@@ -28,15 +29,26 @@ struct intr_args
     uint16_t es, :16;
     uint16_t ds, :16;
     uint32_t vec_no;
+
+    /* Sometimes pushed by the CPU, otherwise by the stubs. */
     uint32_t error_code;
-    uint32_t eip;
+
+    /* Pushed by the CPU. */
+    void (*eip) (void);
+    uint16_t cs, :16;
+    uint32_t eflags;
+    void *esp;
+    uint16_t ss, :16;
   };
 
-typedef void intr_handler_func (struct intr_args *);
+typedef void intr_handler_func (struct intr_frame *);
 
 void intr_init (void);
-void intr_register (uint8_t vec, int dpl, enum if_level, intr_handler_func *);
+void intr_register (uint8_t vec, int dpl, enum if_level, intr_handler_func *,
+                    const char *name);
 bool intr_context (void);
 void intr_yield_on_return (void);
 
+const char *intr_name (int vec);
+
 #endif /* interrupt.h */