Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!amdcad!sun!pitstop!sundc!seismo!uunet!munnari!otc!metro!basser!natmlab!ditsyda!evans From: evans@ditsyda.oz (Bruce Evans) Newsgroups: comp.os.minix Subject: Re: Help! Minix 1.3 & PS/2 Model 80 Message-ID: <1708@ditsyda.oz> Date: 30 Jan 89 12:22:15 GMT References: <1701@ditsyda.oz> Organization: CSIRO DIT Sydney, Australia Lines: 30 in article <1701@ditsyda.oz>, I said: > > in article <1975@ast.cs.vu.nl>, ast@cs.vu.nl (Andy Tanenbaum) says: >> This still leaves us with the question of how to exit from the interrupt >> handler and not get another interrupt instantly. Whatever solution is > > There is an amazingly simple answer. Do nothing. The reason we get another > [...] > Of course an EOI must still be done in the high level task. It must now be > a specific EOI: > > port_out(int_ctl_port, SPECIFIC_EOI | ((1 << irq_number) & 0x07)); Sorry, (1 << irq_number) should be just irq_number. The bit power is only appropiate for adjusting the mask bits. > interrupts disabled anyway. I'm worried about the AT_WINI interrupt at > level 14. The catch is that it is chained through level 2 on the first > controller. The problem is sidestepped by doing an EOI for level 2 in the low level interrupt handler, leaving only the EOI for level 14 for the high level task. This works well with the current devices (tested reading the hard disk, the floppy, and doing rs232 concurrently. The printer at level 7 might not get much service with this activity). If future device drivers are written for levels 8 to 15 (all cascading through 2), this may be inadequate. So I am leaning towards the slightly more complicated but more flexible method of fiddling the mask bits. Bruce Evans evans@ditsyda.oz.au