pintos/src/threads/interrupt.c File Reference

#include "threads/interrupt.h"
#include <debug.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include "threads/flags.h"
#include "threads/intr-stubs.h"
#include "threads/io.h"
#include "threads/thread.h"
#include "threads/vaddr.h"
#include "devices/timer.h"

Go to the source code of this file.

Defines

#define PIC0_CTRL   0x20
#define PIC0_DATA   0x21
#define PIC1_CTRL   0xa0
#define PIC1_DATA   0xa1
#define IRQ_CASCADE0   2
#define IRQ_CASCADE1   9
#define PIC0_CTRL   0x20
#define PIC0_DATA   0x21
#define PIC1_CTRL   0xa0
#define PIC1_DATA   0xa1
#define INTR_CNT   256

Functions

static void pic_init (void)
static void pic_end_of_interrupt (int irq)
static uint64_t make_intr_gate (void(*)(void), int dpl)
static uint64_t make_trap_gate (void(*)(void), int dpl)
static uint64_t make_idtr_operand (uint16_t limit, void *base)
void intr_handler (struct intr_frame *args)
enum intr_level intr_get_level (void)
enum intr_level intr_set_level (enum intr_level level)
enum intr_level intr_enable (void)
enum intr_level intr_disable (void)
void intr_init (void)
static void register_handler (uint8_t vec_no, int dpl, enum intr_level level, intr_handler_func *handler, const char *name)
void intr_register_ext (uint8_t vec_no, intr_handler_func *handler, const char *name)
void intr_register_int (uint8_t vec_no, int dpl, enum intr_level level, intr_handler_func *handler, const char *name)
bool intr_context (void)
void intr_yield_on_return (void)
static uint64_t make_gate (void(*function)(void), int dpl, int type)
void intr_dump_frame (const struct intr_frame *f)
const char * intr_name (uint8_t vec)
void intr_irq_mask (int irq)
void intr_irq_unmask (int irq)
bool intr_is_registered (uint8_t vec_no)

Variables

static uint64_t idt [INTR_CNT]
static intr_handler_funcintr_handlers [INTR_CNT]
static const char * intr_names [INTR_CNT]
static uint8_t pic_mask [2]
static bool in_external_intr
static bool yield_on_return


Define Documentation

#define INTR_CNT   256

Definition at line 33 of file interrupt.c.

Referenced by intr_init().

#define IRQ_CASCADE0   2

Definition at line 21 of file interrupt.c.

Referenced by intr_irq_unmask().

#define IRQ_CASCADE1   9

Definition at line 22 of file interrupt.c.

Referenced by intr_irq_unmask().

#define PIC0_CTRL   0x20

Definition at line 27 of file interrupt.c.

#define PIC0_CTRL   0x20

Definition at line 27 of file interrupt.c.

Referenced by pic_init().

#define PIC0_DATA   0x21

Definition at line 28 of file interrupt.c.

#define PIC0_DATA   0x21

Definition at line 28 of file interrupt.c.

Referenced by intr_irq_mask(), intr_irq_unmask(), and pic_init().

#define PIC1_CTRL   0xa0

Definition at line 29 of file interrupt.c.

#define PIC1_CTRL   0xa0

Definition at line 29 of file interrupt.c.

Referenced by pic_init().

#define PIC1_DATA   0xa1

Definition at line 30 of file interrupt.c.

#define PIC1_DATA   0xa1

Definition at line 30 of file interrupt.c.

Referenced by intr_irq_mask(), intr_irq_unmask(), and pic_init().


Function Documentation

bool intr_context ( void   ) 

enum intr_level intr_disable ( void   ) 

void intr_dump_frame ( const struct intr_frame f  ) 

enum intr_level intr_enable ( void   ) 

enum intr_level intr_get_level ( void   ) 

void intr_handler ( struct intr_frame args  ) 

void intr_init ( void   ) 

Definition at line 127 of file interrupt.c.

References idt, INTR_CNT, intr_names, intr_stubs, make_idtr_operand(), make_intr_gate(), and pic_init().

Referenced by main().

void intr_irq_mask ( int  irq  ) 

masks a given IRQ

Definition at line 439 of file interrupt.c.

References outb(), PIC0_DATA, PIC1_DATA, and pic_mask.

Referenced by pci_mask_irq().

void intr_irq_unmask ( int  irq  ) 

unmasks a given IRQ

Definition at line 451 of file interrupt.c.

References IRQ_CASCADE0, IRQ_CASCADE1, outb(), PIC0_DATA, PIC1_DATA, and pic_mask.

Referenced by pci_unmask_irq().

bool intr_is_registered ( uint8_t  vec_no  ) 

Definition at line 474 of file interrupt.c.

References intr_handlers, and NULL.

Referenced by pci_register_irq().

const char* intr_name ( uint8_t  vec  ) 

Definition at line 433 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 
)

Definition at line 190 of file interrupt.c.

References ASSERT, INTR_OFF, and register_handler().

Referenced by ide_init(), kbd_init(), pci_register_irq(), 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 
)

Definition at line 211 of file interrupt.c.

References ASSERT, and register_handler().

Referenced by exception_init(), and syscall_init().

enum intr_level intr_set_level ( enum intr_level  level  ) 

void intr_yield_on_return ( void   ) 

Definition at line 231 of file interrupt.c.

References ASSERT, intr_context(), and yield_on_return.

Referenced by thread_tick().

static uint64_t make_gate ( void(*)(void)  function,
int  dpl,
int  type 
) [static]

Definition at line 305 of file interrupt.c.

References ASSERT, NULL, and SEL_KCSEG.

Referenced by make_intr_gate(), and make_trap_gate().

static uint64_t make_idtr_operand ( uint16_t  limit,
void *  base 
) [inline, static]

Definition at line 344 of file interrupt.c.

Referenced by intr_init().

static uint64_t make_intr_gate ( void(*)(void)  function,
int  dpl 
) [static]

Definition at line 328 of file interrupt.c.

References make_gate().

Referenced by intr_init(), and register_handler().

static uint64_t make_trap_gate ( void(*)(void)  function,
int  dpl 
) [static]

Definition at line 336 of file interrupt.c.

References make_gate().

Referenced by register_handler().

static void pic_end_of_interrupt ( int  irq  )  [static]

Definition at line 276 of file interrupt.c.

References ASSERT, and outb().

Referenced by intr_handler().

static void pic_init ( void   )  [static]

Definition at line 247 of file interrupt.c.

References outb(), PIC0_CTRL, PIC0_DATA, PIC1_CTRL, PIC1_DATA, and pic_mask.

Referenced by intr_init().

static void register_handler ( uint8_t  vec_no,
int  dpl,
enum intr_level  level,
intr_handler_func handler,
const char *  name 
) [static]


Variable Documentation

uint64_t idt[INTR_CNT] [static]

Definition at line 39 of file interrupt.c.

Referenced by intr_init(), and register_handler().

bool in_external_intr [static]

Definition at line 57 of file interrupt.c.

Referenced by intr_context(), and intr_handler().

intr_handler_func* intr_handlers[INTR_CNT] [static]

Definition at line 42 of file interrupt.c.

Referenced by intr_handler(), intr_is_registered(), and register_handler().

const char* intr_names[INTR_CNT] [static]

Definition at line 45 of file interrupt.c.

Referenced by intr_dump_frame(), intr_init(), intr_name(), and register_handler().

uint8_t pic_mask[2] [static]

Definition at line 48 of file interrupt.c.

Referenced by intr_irq_mask(), intr_irq_unmask(), and pic_init().

bool yield_on_return [static]

Definition at line 58 of file interrupt.c.

Referenced by intr_handler(), and intr_yield_on_return().


Generated on Mon Jan 10 16:43:58 2011 for Pintos by  doxygen 1.5.6