Re: GIISR_INFO Struct
- From: "Joe Welfeld" <jwelfeldnospam@xxxxxxxxxxxxx>
- Date: Wed, 5 Mar 2008 10:57:42 -0500
Hi,
not sure I understand what to do when I want my int thread to be called
when my device has multiple isr registers. right now I have it setup
as tho it is the only isr in the chain, (always call my thread) but
ultimately that wont work unless there is some way I can guarantee that I
am the last in the chain ? I see I can either register a second
GIISR_INFO struct with different Addr and MAsk but ultimately both
registrations will call the same thread, perhaps this does not matter,
now for the third method where I can clone the GIISR routine and make my
own routine, how does this work for the "other" devices in the same
interrupt chain ? they will not call my new routine so how is this handled
?
Thanks,
Joe W.
"Andrew at Plextek (www.plextek.co.uk)" <ams@xxxxxxxxxxx> wrote in message
news:cd846da8-58c1-4eb2-a3ff-c46c756ccecc@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hi Joe,
You can see the source for GIISR in the public tree at PUBLIC\COMMON
\OAK\DRIVERS\GIISR. It should clear up a lot of your questions.
Basically, if CheckPort is FALSE then SYSINTR_XXX is always returned
when the interrupt occurs (This means you can only use this on an
unchained interrupt or one on the end of an interrupt chain.)
If CheckPort is TRUE then the ISR reads from the specified port
(usually set to the Int Pending register).
Now, if UseMaskReg is FALSE, the port value is masked with the Mask
value and SYSINTR_XXX is returned if the result is non-zero. If
UseMaskReg is TRUE then the ISR reads the register pointed to by
MaskAddr (usually the Int Enable Register) to get the mask value.
Again, if this mask value ANDed with the port value is non-zero then
SYSINTR_XXX is returned.
In all other cases SYSINTR_CHAIN is returned.
Note that if PortAddr and MaskAddr are memory mapped, then they must
be addressable from Kernel space, ie. a statically mapped virtual
address. Use one of the functions TransBusAddrToStatic(),
BusTransBusAddrToStatic() or CreateStaticMapping() to accomplish this
before calling KernelLibIoControl(IOCTL_GIISR_PORTVALUE).
Regards,
Andrew.
On Mar 4, 9:39 pm, "Joe Welfeld" <jwelfeldnos...@xxxxxxxxxxxxx> wrote:
Hi,
I need some help understanding this structure settings
here is what I think:
set Checkport true if you want isr routine to read interrupt register
from device pointed to by setting PortAddr to interrupt register.
set UseMaskReg True and set MaskAddr to point to the Interrupt register
MASK address register. then the ISR will AND PortAddr and MaskAddr
and if a bit is set it will call isr handler otherwise it will test next
registered chain...
so when/how do I use Mask field (is this in place of MaskAddr, where
if I dont set UseMaksReg it will and Mask field and PortAddr data)?
also what if my device has more then one Interrupt register how can I
check 2 registers ?
Thanks,
Joe W.
.
- Follow-Ups:
- Re: GIISR_INFO Struct
- From: Andrew at Plextek (www.plextek.co.uk)
- Re: GIISR_INFO Struct
- From: Silver
- Re: GIISR_INFO Struct
- References:
- GIISR_INFO Struct
- From: Joe Welfeld
- Re: GIISR_INFO Struct
- From: Andrew at Plextek (www.plextek.co.uk)
- GIISR_INFO Struct
- Prev by Date: Re: KITL and PCI Interrupts
- Next by Date: Re: HOW to disable WLAN driver
- Previous by thread: Re: GIISR_INFO Struct
- Next by thread: Re: GIISR_INFO Struct
- Index(es):
Relevant Pages
|