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);