X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Finterrupt.h;h=5fa67b213062ede957930919958768ee4db8702c;hb=204b629b838dd2b1481887ccf8abcd58e605e8b9;hp=834d796d971feb76ae63fbcc0006bd8f571d0ad8;hpb=750d21936d284127e265d050ccbce76fca1ece1a;p=pintos-anon diff --git a/src/threads/interrupt.h b/src/threads/interrupt.h index 834d796..5fa67b2 100644 --- a/src/threads/interrupt.h +++ b/src/threads/interrupt.h @@ -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); -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 */