kern
diff src/intr.c @ 52:fa65b4f45366
picking this up again, let's fix it
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 07 Aug 2011 06:42:00 +0300 |
parents | b1e8c8251884 |
children | 88a6c4e192f9 |
line diff
1.1 --- a/src/intr.c Mon Aug 01 06:45:29 2011 +0300 1.2 +++ b/src/intr.c Sun Aug 07 06:42:00 2011 +0300 1.3 @@ -48,6 +48,8 @@ 1.4 /* table of handler functions for all interrupts */ 1.5 static intr_func_t intr_func[256]; 1.6 1.7 +static struct intr_frame *cur_intr_frame; 1.8 + 1.9 1.10 void init_intr(void) 1.11 { 1.12 @@ -74,6 +76,14 @@ 1.13 init_pic(IRQ_OFFSET); 1.14 } 1.15 1.16 +/* retrieve the current interrupt frame. 1.17 + * returns 0 when called during kernel init. 1.18 + */ 1.19 +struct intr_frame *get_intr_frame(void) 1.20 +{ 1.21 + return cur_intr_frame; 1.22 +} 1.23 + 1.24 /* set an interrupt handler function for a particular interrupt */ 1.25 void interrupt(int intr_num, intr_func_t func) 1.26 { 1.27 @@ -86,8 +96,10 @@ 1.28 */ 1.29 void dispatch_intr(struct intr_frame frm) 1.30 { 1.31 + cur_intr_frame = &frm; 1.32 + 1.33 if(intr_func[frm.inum]) { 1.34 - intr_func[frm.inum](frm.inum, &frm); 1.35 + intr_func[frm.inum](frm.inum); 1.36 } else { 1.37 if(frm.inum < 32) { 1.38 panic("unhandled exception %d, error code: %d\n", frm.inum, frm.err);