PKUOS - Pintos
Pintos source browser for PKU Operating System course
|
Go to the source code of this file.
Data Structures | |
struct | intr_frame |
Interrupt stack frame. More... | |
Typedefs | |
typedef void | intr_handler_func(struct intr_frame *) |
Enumerations | |
enum | intr_level { INTR_OFF , INTR_ON } |
Interrupts on or off? More... | |
Functions | |
enum intr_level | intr_get_level (void) |
Returns the current interrupt status. More... | |
enum intr_level | intr_set_level (enum intr_level) |
Enables or disables interrupts as specified by LEVEL and returns the previous interrupt status. More... | |
enum intr_level | intr_enable (void) |
Enables interrupts and returns the previous interrupt status. More... | |
enum intr_level | intr_disable (void) |
Disables interrupts and returns the previous interrupt status. More... | |
void | intr_init (void) |
Initializes the interrupt system. More... | |
void | intr_register_ext (uint8_t vec, intr_handler_func *, const char *name) |
Registers external interrupt VEC_NO to invoke HANDLER, which is named NAME for debugging purposes. More... | |
void | intr_register_int (uint8_t vec, int dpl, enum intr_level, intr_handler_func *, const char *name) |
Registers internal interrupt VEC_NO to invoke HANDLER, which is named NAME for debugging purposes. More... | |
bool | intr_context (void) |
Returns true during processing of an external interrupt and false at all other times. More... | |
void | intr_yield_on_return (void) |
During processing of an external interrupt, directs the interrupt handler to yield to a new process just before returning from the interrupt. More... | |
void | intr_dump_frame (const struct intr_frame *) |
Dumps interrupt frame F to the console, for debugging. More... | |
const char * | intr_name (uint8_t vec) |
threads/interrupt.h More... | |
typedef void intr_handler_func(struct intr_frame *) |
Definition at line 58 of file interrupt.h.
enum intr_level |
Interrupts on or off?
Enumerator | |
---|---|
INTR_OFF | Interrupts disabled. |
INTR_ON | Interrupts enabled. |
Definition at line 8 of file interrupt.h.
bool intr_context | ( | void | ) |
Returns true during processing of an external interrupt and false at all other times.
Definition at line 212 of file interrupt.c.
References in_external_intr.
Referenced by acquire_console(), cond_signal(), cond_wait(), console_locked_by_current_thread(), intq_getc(), intq_putc(), intr_enable(), intr_handler(), intr_yield_on_return(), lock_acquire(), release_console(), sema_down(), thread_block(), thread_exit(), thread_yield(), and wait().
enum intr_level intr_disable | ( | void | ) |
Disables interrupts and returns the previous interrupt status.
Definition at line 104 of file interrupt.c.
References intr_get_level().
Referenced by debug_backtrace_all(), debug_panic(), idle(), init_thread(), input_getc(), intr_set_level(), pit_configure_channel(), sema_down(), sema_try_down(), sema_up(), serial_flush(), serial_init_queue(), serial_putc(), speaker_off(), speaker_on(), thread_exit(), thread_unblock(), thread_yield(), timer_ticks(), and vga_putc().
void intr_dump_frame | ( | const struct intr_frame * | f | ) |
Dumps interrupt frame F to the console, for debugging.
Definition at line 411 of file interrupt.c.
References intr_frame::cs, intr_frame::ds, intr_frame::eax, intr_frame::ebp, intr_frame::ebx, intr_frame::ecx, intr_frame::edi, intr_frame::edx, intr_frame::eip, intr_frame::error_code, intr_frame::es, intr_frame::esi, intr_frame::esp, intr_names, printf(), PRIx16, PRIx32, intr_frame::ss, and intr_frame::vec_no.
Referenced by kill().
enum intr_level intr_enable | ( | void | ) |
Enables interrupts and returns the previous interrupt status.
Definition at line 88 of file interrupt.c.
References ASSERT, intr_context(), and intr_get_level().
Referenced by intr_set_level(), kernel_thread(), page_fault(), and thread_start().
enum intr_level intr_get_level | ( | void | ) |
Returns the current interrupt status.
Definition at line 65 of file interrupt.c.
References FLAG_IF, INTR_OFF, and INTR_ON.
Referenced by input_full(), input_putc(), intq_empty(), intq_full(), intq_getc(), intq_putc(), intr_disable(), intr_enable(), intr_handler(), issue_pio_command(), putc_poll(), real_time_sleep(), schedule(), serial_notify(), signal(), speaker_beep(), thread_block(), thread_foreach(), thread_schedule_tail(), timer_calibrate(), timer_sleep(), wait(), and write_ier().
void intr_init | ( | void | ) |
Initializes the interrupt system.
Definition at line 118 of file interrupt.c.
References idt, INTR_CNT, intr_names, intr_stubs, make_idtr_operand(), make_intr_gate(), and pic_init().
Referenced by pintos_init().
const char * intr_name | ( | uint8_t | vec | ) |
Definition at line 435 of file interrupt.c.
References intr_names.
Referenced by kill().
void intr_register_ext | ( | uint8_t | vec_no, |
intr_handler_func * | handler, | ||
const char * | name | ||
) |
Registers external interrupt VEC_NO to invoke HANDLER, which is named NAME for debugging purposes.
The handler will execute with interrupts disabled.
Definition at line 181 of file interrupt.c.
References ASSERT, INTR_OFF, name, and register_handler().
Referenced by ide_init(), kbd_init(), serial_init_queue(), and timer_init().
void intr_register_int | ( | uint8_t | vec_no, |
int | dpl, | ||
enum intr_level | level, | ||
intr_handler_func * | handler, | ||
const char * | name | ||
) |
Registers internal interrupt VEC_NO to invoke HANDLER, which is named NAME for debugging purposes.
The interrupt handler will be invoked with interrupt status LEVEL.
The handler will have descriptor privilege level DPL, meaning that it can be invoked intentionally when the processor is in the DPL or lower-numbered ring. In practice, DPL==3 allows user mode to invoke the interrupts and DPL==0 prevents such invocation. Faults and exceptions that occur in user mode still cause interrupts with DPL==0 to be invoked. See [IA32-v3a] sections 4.5 "Privilege Levels" and 4.8.1.1 "Accessing Nonconforming Code Segments" for further discussion.
Definition at line 202 of file interrupt.c.
References ASSERT, name, and register_handler().
Referenced by exception_init(), and syscall_init().
enum intr_level intr_set_level | ( | enum | intr_level | ) |
Enables or disables interrupts as specified by LEVEL and returns the previous interrupt status.
Definition at line 81 of file interrupt.c.
References intr_disable(), intr_enable(), and INTR_ON.
Referenced by debug_backtrace_all(), init_thread(), input_getc(), pit_configure_channel(), sema_down(), sema_try_down(), sema_up(), serial_flush(), serial_init_queue(), serial_putc(), speaker_off(), speaker_on(), thread_unblock(), thread_yield(), timer_ticks(), and vga_putc().
void intr_yield_on_return | ( | void | ) |
During processing of an external interrupt, directs the interrupt handler to yield to a new process just before returning from the interrupt.
May not be called at any other time.
Definition at line 222 of file interrupt.c.
References ASSERT, intr_context(), and yield_on_return.
Referenced by thread_tick().