RE: ISR gets called although device does not interrup t

Hi,

If, as you said, the bus was faster than the device,
then I think my ISR would never have worked properly
whether the machine was booted or not. Now, even after
booting, if I disable the network adapter card on PCI,
which shares the same interrupt as my device,
then my ISR works fine.

I do not have any DPC, nor have any locks in the ISR.
Basically, this is what my ISR looks like as of now:

BOOLEAN FifoIsr( IN PKINTERRUPT pIntObj, IN PVOID
pServiceContext )
{
PDEVICE_EXTENSION pDevExt ;
ULONG ulFifoState = 0,ulCumWordsHwCnt=0, ulIrqType
= 0;

pDevExt = (PDEVICE_EXTENSION)pServiceContext ;

if ( pDevExt->bStatusFlag)/*This is initialised to
TRUE*/
{
pDevExt->bStatusFlag = FALSE ;
ulFifoState =
MAC_READSTATUS(pDevExt->pMemRegs);/*calls
READ_REGISTER_ULONG to read status register*/
}
if (ulFifoState != ulMyInterrupt)
{
/*Not our interrupt*/
pDevExt->bStatusFlag = TRUE ;
return (FALSE) ;
}
DbgPrint (“FIFO5W: My interrupt \n”);
pDevExt->bStatusFlag = TRUE ;
EnableDeviceInterrupt(pDevExt);/*Enabling the device
to interrupt again by writing to the control
register*/
return TRUE;
}
I use only a flag, bStatusFlag to control access to my
device registers. My device is a FIFO card which
interrupts every time it is half full. In the ISR, I
just read this data to a buffer.

Thanks.
Madhu
— Gary Little wrote:
> Perhaps your device suffers from Alzheimer’s? That’s
> a bit facetious, but it
> does describe a situation that can occur in
> hardware. Case in point,
> attempting to use an ISA card with a Zilog 8530 on
> it that was made in 1989
> for an 8Mhz bus. If you try to use that card in one
> of today’s motherboards,
> you can get into a situation where the bus is faster
> than the 8530, and you
> can loose or miss states in the device. The 8530
> requires a dual IO
> operation to access a register. You write to the
> control register to tell it
> what register you want to access and then read or
> write that register. If
> you do allow enough “settling” time for the data in
> that register to
> “settle”, then you end up accessing garbage and
> confusing the hell out of
> the device. The typical solution was to do NOPs
> between the write to the
> device’s control port and the access of the state
> register.
>
> Now this may not be your problem, but it does sound
> familiar.
>
> I’m not familiar with your hardware, but I would
> look to see if I am safely
> checking the state of the device and not leaving it
> vulnerable when another
> device in the chain causes it to be queried
> unexpectedly, sometimes while I
> am currently checking it. Perhaps you are not at the
> proper IRQL? maybe you
> queued a DpcForIsr but failed to sync to DIRQL to
> access data or strucutes
> or status information? Or you released a lock to
> soon?
>
> Gary G. Little
> Staff Engineer
> Broadband Storage, Inc.
> xxxxx@Broadstor.com
> xxxxx@inland.net
>
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Tuesday, June 12, 2001 10:01 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrupt
>
>
> Hi Tim.
>
> My device is accessing an interrupt that seems to be
> shared by all PCI devices including a network
> adapter.
>
> 1. When I boot the system, my ISR gets a lot of
> interrupts from other devices as well, probably
> because it may be among the the first ISRs available
> in that interrupt vector chain. When my device ( a
> FIFO card which sends an interrupt every time it is
> half full) starts sending interrupts, in between
> these
> interrupts I get interrupts from other devices as
> well. After some time, the machine just freezes
> although the device still is interrupting. It
> freezes
> at the point where I am trying to read a status
> register of the device to determine whether it is my
> interrupt or not.
>
> 2. When I install the driver and then send
> interrupts
> from the device( without rebooting), my ISR gets
> only
> the interrupts that are meant for my device and
> nothing else. Probably this is because my ISR is the
> last in the interrupt vector chain for that
> particular
> interrupt. In this case everything works fine.
>
> Is there any way to make sure that my ISR is the
> last
> ISR available in that interrupt vector chain ? Or is
> there any way to make sure that I use an interrupt
> which is not shared by other devices ?
>
> Thanks for all help
>
> Madhu
> — “Timothy A. Johns” wrote:
> > Madhu,
> >
> > That ‘hang’ sounds like an unhandled PCI
> interrupt.
> > Is your ISR being
> > called repeatedly while this hang is occuring, and
> > if so, can you verify
> > 100% (using a logic analyzer or oscilliscope, if
> > you’re going to have to
> > take your evidence to the proverbial hardware
> > person) that your device is
> > not asserting the interrupt?
> >
> > Also, it could be a PCI bus access problem, or
> > either a master or target
> > abort. It’s also possible that it may be that
> your
> > driver is getting an
> > interrupt that a different device is already
> using,
> > and the ‘other’ device
> > is not sharing it properly, but I’d view that as a
> > last resort, since the
> > driver you added is new and changing the behavior.
> > You can move it to a
> > different slot and if the problem goes away or
> > changes, the problem is very
> > likely in either your driver’s ISR or some other
> > device’s ISR.
> >
> > In any case, the registry entries for Start and
> > LoadOrderGroup that you have
> > below are almost certainly correct for a PnP
> driver.
> >
> > -Tim
> >
> > Timothy A. Johns — xxxxx@driverdev.com
> > Driver Development Corporation — 800.841.0092
> > Bring Up Your Hardware — Fast. www.driverdev.com
> >
> >
> > > -----Original Message-----
> > > From: xxxxx@lists.osr.com
> > > [mailto:xxxxx@lists.osr.com]On
> Behalf
> > Of M V
> > > Sent: Tuesday, June 12, 2001 5:50 AM
> > > To: NT Developers Interest List
> > > Subject: [ntdev] ISR gets called although device
> > does not interrupt
> > >
> > >
> > > In continuation with the last message, my ISR is
> > > working fine now. But I am facing a strange
> > problem. I
> > > install the WDM (without booting after
> > > installation)and send data to my FIFO device so
> > that
> > > it interrupts. I receive all the interrupts and
> > read
> > > all data. Everything is fine. But if I boot my
> > machine
> > > anytime after installation and then send data to
> > the
> > > device so that it interrupts, I receive some
> > > interrupts and after that the machine hangs. Why
> > would
> > > this be happening ? Is there any problem in my
> > > installation ? I have decared my service to be
> of
> > > SERVICE_DEMAND_START and have not specified
> > anything
> > > in the LoadOrderGroup.Can this be a problem ?
> > >
> > > Thanks for all help
> > > Madhu
> > >
> > > > On 06/06/01, ““Roddy, Mark”
> > > > ” wrote:
> > > > > Well that sounds very much like you are not
> > > > looking at the correct location
> > > > > for this status register, or you are looking
> > at
> > > > the correct location and
> > > > > have not interpreted the interrupt reason
> > > > correctly and not done the proper
> > > > > handshaking with your device to convince it
> to
> > > > stop generating an interrupt.
> > > > >
> > > > > The fact that when you return FALSE the
> system
> > > > works correctly argues for
> > > > > the case that you are looking at the wrong
> > > > locations on the PCI bus for your
> > > > > status register. You are of course talking
> > about
> > > > some register located off
> > > > > of BAR0 or BAR1, right? Not some value in
> the
> > > > config space for your device?
> > > > > And you did do all the right things to
> obtain
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail - only $35
a year! http://personal.mail.yahoo.com/


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

It is really suspicious that it doesn’t hang when you are not sharing the
interrupt. Check you ISR to be sure you are returning FALSE when the
interrupt is not yours. If you return TRUE and the interrupt was not from
you, the interrupt will still be there when the OS issues an EOI. This will
cause the interrupt to be recognized again and you ISR to be called.

Dan

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of M V
Sent: Tuesday, June 12, 2001 4:42 PM
To: NT Developers Interest List
Subject: [ntdev] RE: ISR gets called although device does not interrup t

Hi,

If, as you said, the bus was faster than the device,
then I think my ISR would never have worked properly
whether the machine was booted or not. Now, even after
booting, if I disable the network adapter card on PCI,
which shares the same interrupt as my device,
then my ISR works fine.

I do not have any DPC, nor have any locks in the ISR.
Basically, this is what my ISR looks like as of now:

BOOLEAN FifoIsr( IN PKINTERRUPT pIntObj, IN PVOID
pServiceContext )
{
PDEVICE_EXTENSION pDevExt ;
ULONG ulFifoState = 0,ulCumWordsHwCnt=0, ulIrqType
= 0;

pDevExt = (PDEVICE_EXTENSION)pServiceContext ;

if ( pDevExt->bStatusFlag)/*This is initialised to TRUE*/
{
pDevExt->bStatusFlag = FALSE ;
ulFifoState =
MAC_READSTATUS(pDevExt->pMemRegs);/*calls READ_REGISTER_ULONG to read status
register*/
}
if (ulFifoState != ulMyInterrupt)
{
/*Not our interrupt*/
pDevExt->bStatusFlag = TRUE ;
return (FALSE) ;
}
DbgPrint (“FIFO5W: My interrupt \n”);
pDevExt->bStatusFlag = TRUE ;
EnableDeviceInterrupt(pDevExt);/*Enabling the device
to interrupt again by writing to the control
register*/
return TRUE;
}
I use only a flag, bStatusFlag to control access to my
device registers. My device is a FIFO card which
interrupts every time it is half full. In the ISR, I
just read this data to a buffer.

Thanks.
Madhu
— Gary Little wrote:
> Perhaps your device suffers from Alzheimer’s? That’s
> a bit facetious, but it
> does describe a situation that can occur in
> hardware. Case in point,
> attempting to use an ISA card with a Zilog 8530 on
> it that was made in 1989
> for an 8Mhz bus. If you try to use that card in one
> of today’s motherboards,
> you can get into a situation where the bus is faster
> than the 8530, and you
> can loose or miss states in the device. The 8530
> requires a dual IO
> operation to access a register. You write to the
> control register to tell it
> what register you want to access and then read or
> write that register. If
> you do allow enough “settling” time for the data in
> that register to
> “settle”, then you end up accessing garbage and
> confusing the hell out of
> the device. The typical solution was to do NOPs
> between the write to the
> device’s control port and the access of the state
> register.
>
> Now this may not be your problem, but it does sound
> familiar.
>
> I’m not familiar with your hardware, but I would
> look to see if I am safely
> checking the state of the device and not leaving it
> vulnerable when another
> device in the chain causes it to be queried
> unexpectedly, sometimes while I
> am currently checking it. Perhaps you are not at the
> proper IRQL? maybe you
> queued a DpcForIsr but failed to sync to DIRQL to
> access data or strucutes
> or status information? Or you released a lock to
> soon?
>
> Gary G. Little
> Staff Engineer
> Broadband Storage, Inc.
> xxxxx@Broadstor.com
> xxxxx@inland.net
>
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Tuesday, June 12, 2001 10:01 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrupt
>
>
> Hi Tim.
>
> My device is accessing an interrupt that seems to be
> shared by all PCI devices including a network
> adapter.
>
> 1. When I boot the system, my ISR gets a lot of
> interrupts from other devices as well, probably
> because it may be among the the first ISRs available
> in that interrupt vector chain. When my device ( a
> FIFO card which sends an interrupt every time it is
> half full) starts sending interrupts, in between
> these
> interrupts I get interrupts from other devices as
> well. After some time, the machine just freezes
> although the device still is interrupting. It
> freezes
> at the point where I am trying to read a status
> register of the device to determine whether it is my
> interrupt or not.
>
> 2. When I install the driver and then send
> interrupts
> from the device( without rebooting), my ISR gets
> only
> the interrupts that are meant for my device and
> nothing else. Probably this is because my ISR is the
> last in the interrupt vector chain for that
> particular
> interrupt. In this case everything works fine.
>
> Is there any way to make sure that my ISR is the
> last
> ISR available in that interrupt vector chain ? Or is
> there any way to make sure that I use an interrupt
> which is not shared by other devices ?
>
> Thanks for all help
>
> Madhu
> — “Timothy A. Johns” wrote:
> > Madhu,
> >
> > That ‘hang’ sounds like an unhandled PCI
> interrupt.
> > Is your ISR being
> > called repeatedly while this hang is occuring, and
> > if so, can you verify
> > 100% (using a logic analyzer or oscilliscope, if
> > you’re going to have to
> > take your evidence to the proverbial hardware
> > person) that your device is
> > not asserting the interrupt?
> >
> > Also, it could be a PCI bus access problem, or
> > either a master or target
> > abort. It’s also possible that it may be that
> your
> > driver is getting an
> > interrupt that a different device is already
> using,
> > and the ‘other’ device
> > is not sharing it properly, but I’d view that as a
> > last resort, since the
> > driver you added is new and changing the behavior.
> > You can move it to a
> > different slot and if the problem goes away or
> > changes, the problem is very
> > likely in either your driver’s ISR or some other
> > device’s ISR.
> >
> > In any case, the registry entries for Start and
> > LoadOrderGroup that you have
> > below are almost certainly correct for a PnP
> driver.
> >
> > -Tim
> >
> > Timothy A. Johns — xxxxx@driverdev.com
> > Driver Development Corporation — 800.841.0092
> > Bring Up Your Hardware — Fast. www.driverdev.com
> >
> >
> > > -----Original Message-----
> > > From: xxxxx@lists.osr.com
> > > [mailto:xxxxx@lists.osr.com]On
> Behalf
> > Of M V
> > > Sent: Tuesday, June 12, 2001 5:50 AM
> > > To: NT Developers Interest List
> > > Subject: [ntdev] ISR gets called although device
> > does not interrupt
> > >
> > >
> > > In continuation with the last message, my ISR is
> > > working fine now. But I am facing a strange
> > problem. I
> > > install the WDM (without booting after
> > > installation)and send data to my FIFO device so
> > that
> > > it interrupts. I receive all the interrupts and
> > read
> > > all data. Everything is fine. But if I boot my
> > machine
> > > anytime after installation and then send data to
> > the
> > > device so that it interrupts, I receive some
> > > interrupts and after that the machine hangs. Why
> > would
> > > this be happening ? Is there any problem in my
> > > installation ? I have decared my service to be
> of
> > > SERVICE_DEMAND_START and have not specified
> > anything
> > > in the LoadOrderGroup.Can this be a problem ?
> > >
> > > Thanks for all help
> > > Madhu
> > >
> > > > On 06/06/01, ““Roddy, Mark”
> > > > ” wrote:
> > > > > Well that sounds very much like you are not
> > > > looking at the correct location
> > > > > for this status register, or you are looking
> > at
> > > > the correct location and
> > > > > have not interpreted the interrupt reason
> > > > correctly and not done the proper
> > > > > handshaking with your device to convince it
> to
> > > > stop generating an interrupt.
> > > > >
> > > > > The fact that when you return FALSE the
> system
> > > > works correctly argues for
> > > > > the case that you are looking at the wrong
> > > > locations on the PCI bus for your
> > > > > status register. You are of course talking
> > about
> > > > some register located off
> > > > > of BAR0 or BAR1, right? Not some value in
> the
> > > > config space for your device?
> > > > > And you did do all the right things to
> obtain
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail - only $35
a year! http://personal.mail.yahoo.com/


You are currently subscribed to ntdev as: xxxxx@emulex.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

The interrupt is shared by all PCI devices. But I
disabled only the network card because it generated a
lot of interrupts and hence I suspected it of creating
problems for my ISR. Even after disabling it, the
interrupt is shared by 2 devices but my ISR works fine
since it does not have to handle so many interrupts.
I am sure that I am returning FALSE for all interrupts
other than mine.

— “Sullivan, Daniel T.”
wrote:
> It is really suspicious that it doesn’t hang when
> you are not sharing the
> interrupt. Check you ISR to be sure you are
> returning FALSE when the
> interrupt is not yours. If you return TRUE and the
> interrupt was not from
> you, the interrupt will still be there when the OS
> issues an EOI. This will
> cause the interrupt to be recognized again and you
> ISR to be called.
>
> Dan
>
>
> -----Original Message-----
> From: xxxxx@lists.osr.com
> [mailto:xxxxx@lists.osr.com]On Behalf Of
> M V
> Sent: Tuesday, June 12, 2001 4:42 PM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrup t
>
>
> Hi,
>
> If, as you said, the bus was faster than the device,
> then I think my ISR would never have worked properly
> whether the machine was booted or not. Now, even
> after
> booting, if I disable the network adapter card on
> PCI,
> which shares the same interrupt as my device,
> then my ISR works fine.
>
> I do not have any DPC, nor have any locks in the
> ISR.
> Basically, this is what my ISR looks like as of now:
>
> BOOLEAN FifoIsr( IN PKINTERRUPT pIntObj, IN PVOID
> pServiceContext )
> {
> PDEVICE_EXTENSION pDevExt ;
> ULONG ulFifoState = 0,ulCumWordsHwCnt=0,
> ulIrqType
> = 0;
>
> pDevExt = (PDEVICE_EXTENSION)pServiceContext ;
>
> if ( pDevExt->bStatusFlag)/This is initialised
> to TRUE
/
> {
> pDevExt->bStatusFlag = FALSE ;
> ulFifoState =
> MAC_READSTATUS(pDevExt->pMemRegs);/calls
> READ_REGISTER_ULONG to read status
> register
/
> }
> if (ulFifoState != ulMyInterrupt)
> {
> /Not our interrupt/
> pDevExt->bStatusFlag = TRUE ;
> return (FALSE) ;
> }
> DbgPrint (“FIFO5W: My interrupt \n”);
> pDevExt->bStatusFlag = TRUE ;
> EnableDeviceInterrupt(pDevExt);/Enabling the
> device
> to interrupt again by writing to the control
> register
/
> return TRUE;
> }
> I use only a flag, bStatusFlag to control access to
> my
> device registers. My device is a FIFO card which
> interrupts every time it is half full. In the ISR, I
> just read this data to a buffer.
>
> Thanks.
> Madhu
> — Gary Little wrote:
> > Perhaps your device suffers from Alzheimer’s?
> That’s
> > a bit facetious, but it
> > does describe a situation that can occur in
> > hardware. Case in point,
> > attempting to use an ISA card with a Zilog 8530 on
> > it that was made in 1989
> > for an 8Mhz bus. If you try to use that card in
> one
> > of today’s motherboards,
> > you can get into a situation where the bus is
> faster
> > than the 8530, and you
> > can loose or miss states in the device. The 8530
> > requires a dual IO
> > operation to access a register. You write to the
> > control register to tell it
> > what register you want to access and then read or
> > write that register. If
> > you do allow enough “settling” time for the data
> in
> > that register to
> > “settle”, then you end up accessing garbage and
> > confusing the hell out of
> > the device. The typical solution was to do NOPs
> > between the write to the
> > device’s control port and the access of the state
> > register.
> >
> > Now this may not be your problem, but it does
> sound
> > familiar.
> >
> > I’m not familiar with your hardware, but I would
> > look to see if I am safely
> > checking the state of the device and not leaving
> it
> > vulnerable when another
> > device in the chain causes it to be queried
> > unexpectedly, sometimes while I
> > am currently checking it. Perhaps you are not at
> the
> > proper IRQL? maybe you
> > queued a DpcForIsr but failed to sync to DIRQL to
> > access data or strucutes
> > or status information? Or you released a lock to
> > soon?
> >
> > Gary G. Little
> > Staff Engineer
> > Broadband Storage, Inc.
> > xxxxx@Broadstor.com
> > xxxxx@inland.net
> >
> >
> > -----Original Message-----
> > From: M V [mailto:xxxxx@yahoo.com]
> > Sent: Tuesday, June 12, 2001 10:01 AM
> > To: NT Developers Interest List
> > Subject: [ntdev] RE: ISR gets called although
> device
> > does not interrupt
> >
> >
> > Hi Tim.
> >
> > My device is accessing an interrupt that seems to
> be
> > shared by all PCI devices including a network
> > adapter.
> >
> > 1. When I boot the system, my ISR gets a lot of
> > interrupts from other devices as well, probably
> > because it may be among the the first ISRs
> available
> > in that interrupt vector chain. When my device ( a
> > FIFO card which sends an interrupt every time it
> is
> > half full) starts sending interrupts, in between
> > these
> > interrupts I get interrupts from other devices as
> > well. After some time, the machine just freezes
> > although the device still is interrupting. It
> > freezes
> > at the point where I am trying to read a status
> > register of the device to determine whether it is
> my
> > interrupt or not.
> >
> > 2. When I install the driver and then send
> > interrupts
> > from the device( without rebooting), my ISR gets
> > only
> > the interrupts that are meant for my device and
> > nothing else. Probably this is because my ISR is
> the
> > last in the interrupt vector chain for that
> > particular
> > interrupt. In this case everything works fine.
> >
> > Is there any way to make sure that my ISR is the
> > last
> > ISR available in that interrupt vector chain ? Or
> is
> > there any way to make sure that I use an interrupt
> > which is not shared by other devices ?
> >
> > Thanks for all help
> >
> > Madhu
> > — “Timothy A. Johns”
> wrote:
> > > Madhu,
> > >
> > > That ‘hang’ sounds like an unhandled PCI
> > interrupt.
> > > Is your ISR being
> > > called repeatedly while this hang is occuring,
> and
> > > if so, can you verify
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail - only $35
a year! http://personal.mail.yahoo.com/


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

When your driver is at the ‘end of the chain’, there could be a ‘long time’
between the interrupt assertion and the read of the status register.

When at the ‘beginning of the chain’, there could be a ‘short time’ between
the interrupt assertion and read of the status register.

Different characteristics that might be very important to the PCI interface
hardware on your device.

-Tim

Timothy A. Johns — xxxxx@driverdev.com
Driver Development Corporation — 800.841.0092
Bring Up Your Hardware — Fast. www.driverdev.com

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of M V
Sent: Tuesday, June 12, 2001 1:42 PM
To: NT Developers Interest List
Subject: [ntdev] RE: ISR gets called although device does not interrup t

Hi,

If, as you said, the bus was faster than the device,
then I think my ISR would never have worked properly
whether the machine was booted or not. Now, even after
booting, if I disable the network adapter card on PCI,
which shares the same interrupt as my device,
then my ISR works fine.

I do not have any DPC, nor have any locks in the ISR.
Basically, this is what my ISR looks like as of now:

BOOLEAN FifoIsr( IN PKINTERRUPT pIntObj, IN PVOID
pServiceContext )
{
PDEVICE_EXTENSION pDevExt ;
ULONG ulFifoState = 0,ulCumWordsHwCnt=0, ulIrqType
= 0;

pDevExt = (PDEVICE_EXTENSION)pServiceContext ;

if ( pDevExt->bStatusFlag)/*This is initialised to
TRUE*/
{
pDevExt->bStatusFlag = FALSE ;
ulFifoState =
MAC_READSTATUS(pDevExt->pMemRegs);/*calls
READ_REGISTER_ULONG to read status register*/
}
if (ulFifoState != ulMyInterrupt)
{
/*Not our interrupt*/
pDevExt->bStatusFlag = TRUE ;
return (FALSE) ;
}
DbgPrint (“FIFO5W: My interrupt \n”);
pDevExt->bStatusFlag = TRUE ;
EnableDeviceInterrupt(pDevExt);/*Enabling the device
to interrupt again by writing to the control
register*/
return TRUE;
}
I use only a flag, bStatusFlag to control access to my
device registers. My device is a FIFO card which
interrupts every time it is half full. In the ISR, I
just read this data to a buffer.

Thanks.
Madhu
— Gary Little wrote:
> > Perhaps your device suffers from Alzheimer’s? That’s
> > a bit facetious, but it
> > does describe a situation that can occur in
> > hardware. Case in point,
> > attempting to use an ISA card with a Zilog 8530 on
> > it that was made in 1989
> > for an 8Mhz bus. If you try to use that card in one
> > of today’s motherboards,
> > you can get into a situation where the bus is faster
> > than the 8530, and you
> > can loose or miss states in the device. The 8530
> > requires a dual IO
> > operation to access a register. You write to the
> > control register to tell it
> > what register you want to access and then read or
> > write that register. If
> > you do allow enough “settling” time for the data in
> > that register to
> > “settle”, then you end up accessing garbage and
> > confusing the hell out of
> > the device. The typical solution was to do NOPs
> > between the write to the
> > device’s control port and the access of the state
> > register.
> >
> > Now this may not be your problem, but it does sound
> > familiar.
> >
> > I’m not familiar with your hardware, but I would
> > look to see if I am safely
> > checking the state of the device and not leaving it
> > vulnerable when another
> > device in the chain causes it to be queried
> > unexpectedly, sometimes while I
> > am currently checking it. Perhaps you are not at the
> > proper IRQL? maybe you
> > queued a DpcForIsr but failed to sync to DIRQL to
> > access data or strucutes
> > or status information? Or you released a lock to
> > soon?
> >
> > Gary G. Little
> > Staff Engineer
> > Broadband Storage, Inc.
> > xxxxx@Broadstor.com
> > xxxxx@inland.net
> >
> >
> > -----Original Message-----
> > From: M V [mailto:xxxxx@yahoo.com]
> > Sent: Tuesday, June 12, 2001 10:01 AM
> > To: NT Developers Interest List
> > Subject: [ntdev] RE: ISR gets called although device
> > does not interrupt
> >
> >
> > Hi Tim.
> >
> > My device is accessing an interrupt that seems to be
> > shared by all PCI devices including a network
> > adapter.
> >
> > 1. When I boot the system, my ISR gets a lot of
> > interrupts from other devices as well, probably
> > because it may be among the the first ISRs available
> > in that interrupt vector chain. When my device ( a
> > FIFO card which sends an interrupt every time it is
> > half full) starts sending interrupts, in between
> > these
> > interrupts I get interrupts from other devices as
> > well. After some time, the machine just freezes
> > although the device still is interrupting. It
> > freezes
> > at the point where I am trying to read a status
> > register of the device to determine whether it is my
> > interrupt or not.
> >
> > 2. When I install the driver and then send
> > interrupts
> > from the device( without rebooting), my ISR gets
> > only
> > the interrupts that are meant for my device and
> > nothing else. Probably this is because my ISR is the
> > last in the interrupt vector chain for that
> > particular
> > interrupt. In this case everything works fine.
> >
> > Is there any way to make sure that my ISR is the
> > last
> > ISR available in that interrupt vector chain ? Or is
> > there any way to make sure that I use an interrupt
> > which is not shared by other devices ?
> >
> > Thanks for all help
> >
> > Madhu
> > — “Timothy A. Johns” wrote:
> > > Madhu,
> > >
> > > That ‘hang’ sounds like an unhandled PCI
> > interrupt.
> > > Is your ISR being
> > > called repeatedly while this hang is occuring, and
> > > if so, can you verify
> > > 100% (using a logic analyzer or oscilliscope, if
> > > you’re going to have to
> > > take your evidence to the proverbial hardware
> > > person) that your device is
> > > not asserting the interrupt?
> > >
> > > Also, it could be a PCI bus access problem, or
> > > either a master or target
> > > abort. It’s also possible that it may be that
> > your
> > > driver is getting an
> > > interrupt that a different device is already
> > using,
> > > and the ‘other’ device
> > > is not sharing it properly, but I’d view that as a
> > > last resort, since the
> > > driver you added is new and changing the behavior.
> > > You can move it to a
> > > different slot and if the problem goes away or
> > > changes, the problem is very
> > > likely in either your driver’s ISR or some other
> > > device’s ISR.
> > >
> > > In any case, the registry entries for Start and
> > > LoadOrderGroup that you have
> > > below are almost certainly correct for a PnP
> > driver.
> > >
> > > -Tim
> > >
> > > Timothy A. Johns — xxxxx@driverdev.com
> > > Driver Development Corporation — 800.841.0092
> > > Bring Up Your Hardware — Fast. www.driverdev.com
> > >
> > >
> > > > -----Original Message-----
> > > > From: xxxxx@lists.osr.com
> > > > [mailto:xxxxx@lists.osr.com]On
> > Behalf
> > > Of M V
> > > > Sent: Tuesday, June 12, 2001 5:50 AM
> > > > To: NT Developers Interest List
> > > > Subject: [ntdev] ISR gets called although device
> > > does not interrupt
> > > >
> > > >
> > > > In continuation with the last message, my ISR is
> > > > working fine now. But I am facing a strange
> > > problem. I
> > > > install the WDM (without booting after
> > > > installation)and send data to my FIFO device so
> > > that
> > > > it interrupts. I receive all the interrupts and
> > > read
> > > > all data. Everything is fine. But if I boot my
> > > machine
> > > > anytime after installation and then send data to
> > > the
> > > > device so that it interrupts, I receive some
> > > > interrupts and after that the machine hangs. Why
> > > would
> > > > this be happening ? Is there any problem in my
> > > > installation ? I have decared my service to be
> > of
> > > > SERVICE_DEMAND_START and have not specified
> > > anything
> > > > in the LoadOrderGroup.Can this be a problem ?
> > > >
> > > > Thanks for all help
> > > > Madhu
> > > >
> > > > > On 06/06/01, ““Roddy, Mark”
> > > > > ” wrote:
> > > > > > Well that sounds very much like you are not
> > > > > looking at the correct location
> > > > > > for this status register, or you are looking
> > > at
> > > > > the correct location and
> > > > > > have not interpreted the interrupt reason
> > > > > correctly and not done the proper
> > > > > > handshaking with your device to convince it
> > to
> > > > > stop generating an interrupt.
> > > > > >
> > > > > > The fact that when you return FALSE the
> > system
> > > > > works correctly argues for
> > > > > > the case that you are looking at the wrong
> > > > > locations on the PCI bus for your
> > > > > > status register. You are of course talking
> > > about
> > > > > some register located off
> > > > > > of BAR0 or BAR1, right? Not some value in
> > the
> > > > > config space for your device?
> > > > > > And you did do all the right things to
> > obtain
> >
> === message truncated ===
>
>
> __________________________________________________
> Do You Yahoo!?
> Get personalized email addresses from Yahoo! Mail - only $35
> a year! http://personal.mail.yahoo.com/
>
> —
> You are currently subscribed to ntdev as: xxxxx@driverdev.com
> To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com
>


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Hi Mark,

Yes. I understand that the device must be able to
support shared interrupts. But the person who had
designed this card has not taken care of shared
interrupts and there is no way we can fix the card
now. If I try to read from the status register of the
card while it is in the processing of asserting an
interrupt, the card is left in an invalid state and a
call to READ_REGISTER_ULONG to read the status
register results in the machine freezing. Hence I am
looking for a way to have an exclusive interrupt for
my device. Is there any way to disable ACPI ?

Thanks a lot
Madhu

— “Roddy, Mark” wrote:
> You don’t. The ACPI hal will ignore whatever you try
> to do in the bios. But
> that suggestion was all wrong anyhow. Your PCI
> device absolutely MUST be
> able to share interrupts. You need to figure out
> what you are doing wrong,
> either in your driver or perhaps on your hardware,
> rather than looking for
> hack work arounds.
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Wednesday, June 13, 2001 8:25 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrupt
>
>
> My machine has ACPI installed on it, which I think
> is responsible for
> interrupt sharing by PCI devices. When I call
> IoCOnnectInterrupt(), for the
> ShareVector parameter, I just use the parameter
> pPartialDescriptor->ShareDisposition, which is given
> by the
> PnPManager. How do I reserve an interrupt for myself
> in the BIOS setting ?
>
> Thanks
> Madhu
>
> — xxxxx@att.net wrote:
> > If you suspect that it’s PCI interrupt sharing,
> you
> > can
> > make your driver to use one interrupt that it’s
> not
> > used
> > by other PCI devices in your system and reserve
> that
> >
> > Interrupt in BIOS settings and then when ur driver
> > comes
> > up it would be having exclusive access to that
> > Interrupt.
> > Otherway of achieveing this, not to share the
>
> > interrupt at all. Just check out the API that u
> use
> > to
> > register your ISR and rest with OS. But in
> principle
> > PCI
> > should be able to share interrupts with other PCI
> > peripherals.
> > Please let us know about these.
> > 1. What type of device is this?
> > 2. R u checking status register directly in your
> ISR
> > or
> > in a DPC?
> >
> > thanks
> >
> > –
> > Girish H.
> > > Madhu,
> > >
> > > If this hang is narrowed down such that it only
> > appears exactly on the read
> > > of the status port, I’d recommend going to the
> > hardware folks or looking at
> > > what’s on the PCI bus with a logic analyzer.
> > Sounds like hardware/firmware
> > > to me given that information.
> > >
> > > -Tim
> > >
> > >
> > > Timothy A. Johns — xxxxx@driverdev.com
> > > Driver Development Corporation — 800.841.0092
> > > Bring Up Your Hardware — Fast.
> www.driverdev.com
> > >
> > >
> > > > -----Original Message-----
> > > > From: xxxxx@lists.osr.com
> > > > [mailto:xxxxx@lists.osr.com]On
> > Behalf Of M V
> > > > Sent: Tuesday, June 12, 2001 10:01 AM
> > > > To: NT Developers Interest List
> > > > Subject: [ntdev] RE: ISR gets called although
> > device does not interrupt
> > > >
> > > >
> > > > Hi Tim.
> > > >
> > > > My device is accessing an interrupt that seems
> > to be
> > > > shared by all PCI devices including a network
> > adapter.
> > > >
> > > > 1. When I boot the system, my ISR gets a lot
> of interrupts from
> > > > other devices as well, probably because it may
> be among the the
> > > > first ISRs
> > available
> > > > in that interrupt vector chain. When my device
> (
> > a
> > > > FIFO card which sends an interrupt every time
> it
> > is
> > > > half full) starts sending interrupts, in
> between
> > these
> > > > interrupts I get interrupts from other devices
> > as
> > > > well. After some time, the machine just
> freezes
> > > > although the device still is interrupting. It
> > freezes
> > > > at the point where I am trying to read a
> status
> > > > register of the device to determine whether it
> > is my
> > > > interrupt or not.
> > > >
> > > > 2. When I install the driver and then send
> > interrupts
> > > > from the device( without rebooting), my ISR
> gets
> > only
> > > > the interrupts that are meant for my device
> and
> > > > nothing else. Probably this is because my ISR
> is
> > the
> > > > last in the interrupt vector chain for that
> > particular
> > > > interrupt. In this case everything works fine.
> > > >
> > > > Is there any way to make sure that my ISR is
> the
> > last
> > > > ISR available in that interrupt vector chain ?
> > Or is
> > > > there any way to make sure that I use an
> > interrupt
> > > > which is not shared by other devices ?
> > > >
> > > > Thanks for all help
> > > >
> > > > Madhu
> > > > — “Timothy A. Johns”
> > wrote:
> > > > > Madhu,
> > > > >
> > > > > That ‘hang’ sounds like an unhandled PCI
> > interrupt.
> > > > > Is your ISR being
> > > > > called repeatedly while this hang is
> occuring,
> > and
> > > > > if so, can you verify
> > > > > 100% (using a logic analyzer or
> oscilliscope,
> > if
> > > > > you’re going to have to
> > > > > take your evidence to the proverbial
> hardware
> > > > > person) that your device is
> > > > > not asserting the interrupt?
> > > > >
> > > > > Also, it could be a PCI bus access problem,
> or
> > > > > either a master or target
> > > > > abort. It’s also possible that it may be
> that
> > your
> > > > > driver is getting an
> > > > > interrupt that a different device is already
> > using,
> > > > > and the ‘other’ device
> > > > > is not sharing it properly, but I’d view
> that
> > as a
> > > > > last resort, since the
> > > > > driver you added is new and changing the
> > behavior.
> > > > > You can move it to a
> > > > > different slot and if the problem goes away
> or
> > > > > changes, the problem is very
> > > > > likely in either your driver’s ISR or some
> > other
> > > > > device’s ISR.
> > > > >
> > > > > In any case, the registry entries for Start
> > and
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail - only $35
a year! http://personal.mail.yahoo.com/


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Sorry for the delay in answering. Inserting a delay
would not help because, I might miss the interrupts of

my own device, which sends interrupts quite frequently
and I need to empty the FIFO as soon as possible.

— “Barila, Phil” wrote:
> You never answered my question. Instead of this
> hackery, is it possible for
> you to simply insert a fixed delay into your ISR,
> such that you will wait
> long enough that even if you are the first ISR on
> the chain, your device
> finishes asserting it’s interrupt? This is only a
> suggestion for getting
> your driver development moving again, your hardware
> must be fixed. But
> it’s less “intrusive” than developing on a different
> HAL.
>
> Phil
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Thursday, June 14, 2001 6:01 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrup t
>
>
> Hi,
>
> I copied the hal.dll from the Win2K CD and things
> seem
> to work fine. But can I do the same thing by making
> use of IRP_MN_FILTER_RESOURCE_REQUIREMENTS?
>
> Thanks for your time answering my questions. I
> appreciate it.
> Madhu
>
> — “Roddy, Mark” wrote:
> > Yes, you can install the non-acpi hal on your
> system
> > and ‘voila’ it is a
> > non-acpi machine.
> >
> > You want to do this EXPERIMENTALLY using the /HAL=
> > boot.ini switch so that
> > in case I am a fool who doesn’t know what he is
> > talking about, you can still
> > boot the system using the original boot
> > configuration. In case this isn’t
> > clear: you need to get the non-acpi hal from the
> > distribution CD and copy it
> > to your test system system32 directory, naming it
> > something like halx86.dll
> > or whatever. You need to copy your current
> boot.ini
> > line for debugging and
> > add the /HAL=halx86.dll. Be very careful to use
> the
> > same hal build type as
> > your kernel (checked or free) or the system will
> > have a hideous bugcheck.
> >
> > However this is all a waste of time. Your hardware
> > is broken, very, very
> > broken, and it has to be fixed.
> >
> > -----Original Message-----
> > From: M V [mailto:xxxxx@yahoo.com]
> > Sent: Wednesday, June 13, 2001 10:24 AM
> > To: NT Developers Interest List
> > Subject: [ntdev] RE: ISR gets called although
> device
> > does not interrup t
> >
> >
> > Hi Mark,
> >
> > Yes. I understand that the device must be able to
> > support shared interrupts. But the person who had
> > designed this card has not taken care of shared
> > interrupts and there is no way we can fix the card
> > now. If I try to read from the status register of
> > the
> > card while it is in the processing of asserting an
> > interrupt, the card is left in an invalid state
> and
> > a
> > call to READ_REGISTER_ULONG to read the status
> > register results in the machine freezing. Hence I
> am
> > looking for a way to have an exclusive interrupt
> for
> > my device. Is there any way to disable ACPI ?
> >
> > Thanks a lot
> > Madhu
> >
> > — “Roddy, Mark” wrote:
> > > You don’t. The ACPI hal will ignore whatever you
> > try
> > > to do in the bios. But
> > > that suggestion was all wrong anyhow. Your PCI
> > > device absolutely MUST be
> > > able to share interrupts. You need to figure out
> > > what you are doing wrong,
> > > either in your driver or perhaps on your
> hardware,
> > > rather than looking for
> > > hack work arounds.
> > >
> > > -----Original Message-----
> > > From: M V [mailto:xxxxx@yahoo.com]
> > > Sent: Wednesday, June 13, 2001 8:25 AM
> > > To: NT Developers Interest List
> > > Subject: [ntdev] RE: ISR gets called although
> > device
> > > does not interrupt
> > >
> > >
> > > My machine has ACPI installed on it, which I
> think
> > > is responsible for
> > > interrupt sharing by PCI devices. When I call
> > IoCOnnectInterrupt(),
> > > for the ShareVector parameter, I just use the
> > parameter
> > > pPartialDescriptor->ShareDisposition, which is
> > given
> > > by the
> > > PnPManager. How do I reserve an interrupt for
> > myself
> > > in the BIOS setting ?
> > >
> > > Thanks
> > > Madhu
> > >
> > > — xxxxx@att.net wrote:
> > > > If you suspect that it’s PCI interrupt
> sharing,
> > > you
> > > > can
> > > > make your driver to use one interrupt that
> it’s
> > > not
> > > > used
> > > > by other PCI devices in your system and
> reserve
> > > that
> > > >
> > > > Interrupt in BIOS settings and then when ur
> > driver
> > > > comes
> > > > up it would be having exclusive access to that
> > > > Interrupt.
> > > > Otherway of achieveing this, not to share
> > the
> > >
> > > > interrupt at all. Just check out the API that
> u
> > > use
> > > > to
> > > > register your ISR and rest with OS. But in
> > > principle
> > > > PCI
> > > > should be able to share interrupts with other
> > PCI
> > > > peripherals.
> > > > Please let us know about these.
> > > > 1. What type of device is this?
> > > > 2. R u checking status register directly in
> your
> > > ISR
> > > > or
> > > > in a DPC?
> > > >
> > > > thanks
> > > >
> > > > –
> > > > Girish H.
> > > > > Madhu,
> > > > >
> > > > > If this hang is narrowed down such that it
> > only
> > > > appears exactly on the read
> > > > > of the status port, I’d recommend going to
> the
> > > > hardware folks or looking at
> > > > > what’s on the PCI bus with a logic analyzer.
> > > > Sounds like hardware/firmware
> > > > > to me given that information.
> > > > >
> > > > > -Tim
> > > > >
> > > > >
> > > > > Timothy A. Johns — xxxxx@driverdev.com
> > > > > Driver Development Corporation —
> > 800.841.0092
> > > > > Bring Up Your Hardware — Fast.
> > > www.driverdev.com
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: xxxxx@lists.osr.com
> > > > > > [mailto:xxxxx@lists.osr.com]On
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Spot the hottest trends in music, movies, and more.
http://buzz.yahoo.com/


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

So does this mean the interrupt is not latched and stay active until you
clear it? If so, it violates one more PCI design rule. In PCI, interrupts
are level triggerred, meaning they stay active until they are cleared by the
driver that is supporting the card.

Also, even if the above is not true and you card is level sensitive, adding
a delay will only shift the window of vulnerablity. If you card is not
interrupting and your ISR is called, there is as much chance of you card
being in the process of generating an interrupt after the delay as without.

Dan

-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com]On Behalf Of M V
Sent: Thursday, June 14, 2001 1:57 PM
To: NT Developers Interest List
Subject: [ntdev] RE: ISR gets called although device does not interrup t

Sorry for the delay in answering. Inserting a delay
would not help because, I might miss the interrupts of

my own device, which sends interrupts quite frequently
and I need to empty the FIFO as soon as possible.

— “Barila, Phil” wrote:
> You never answered my question. Instead of this
> hackery, is it possible for
> you to simply insert a fixed delay into your ISR,
> such that you will wait
> long enough that even if you are the first ISR on
> the chain, your device
> finishes asserting it’s interrupt? This is only a
> suggestion for getting
> your driver development moving again, your hardware
> must be fixed. But
> it’s less “intrusive” than developing on a different
> HAL.
>
> Phil
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Thursday, June 14, 2001 6:01 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrup t
>
>
> Hi,
>
> I copied the hal.dll from the Win2K CD and things
> seem
> to work fine. But can I do the same thing by making
> use of IRP_MN_FILTER_RESOURCE_REQUIREMENTS?
>
> Thanks for your time answering my questions. I
> appreciate it.
> Madhu
>
> — “Roddy, Mark” wrote:
> > Yes, you can install the non-acpi hal on your
> system
> > and ‘voila’ it is a
> > non-acpi machine.
> >
> > You want to do this EXPERIMENTALLY using the /HAL=
> > boot.ini switch so that
> > in case I am a fool who doesn’t know what he is
> > talking about, you can still
> > boot the system using the original boot
> > configuration. In case this isn’t
> > clear: you need to get the non-acpi hal from the
> > distribution CD and copy it
> > to your test system system32 directory, naming it
> > something like halx86.dll
> > or whatever. You need to copy your current
> boot.ini
> > line for debugging and
> > add the /HAL=halx86.dll. Be very careful to use
> the
> > same hal build type as
> > your kernel (checked or free) or the system will
> > have a hideous bugcheck.
> >
> > However this is all a waste of time. Your hardware
> > is broken, very, very
> > broken, and it has to be fixed.
> >
> > -----Original Message-----
> > From: M V [mailto:xxxxx@yahoo.com]
> > Sent: Wednesday, June 13, 2001 10:24 AM
> > To: NT Developers Interest List
> > Subject: [ntdev] RE: ISR gets called although
> device
> > does not interrup t
> >
> >
> > Hi Mark,
> >
> > Yes. I understand that the device must be able to
> > support shared interrupts. But the person who had
> > designed this card has not taken care of shared
> > interrupts and there is no way we can fix the card
> > now. If I try to read from the status register of
> > the
> > card while it is in the processing of asserting an
> > interrupt, the card is left in an invalid state
> and
> > a
> > call to READ_REGISTER_ULONG to read the status
> > register results in the machine freezing. Hence I
> am
> > looking for a way to have an exclusive interrupt
> for
> > my device. Is there any way to disable ACPI ?
> >
> > Thanks a lot
> > Madhu
> >
> > — “Roddy, Mark” wrote:
> > > You don’t. The ACPI hal will ignore whatever you
> > try
> > > to do in the bios. But
> > > that suggestion was all wrong anyhow. Your PCI
> > > device absolutely MUST be
> > > able to share interrupts. You need to figure out
> > > what you are doing wrong,
> > > either in your driver or perhaps on your
> hardware,
> > > rather than looking for
> > > hack work arounds.
> > >
> > > -----Original Message-----
> > > From: M V [mailto:xxxxx@yahoo.com]
> > > Sent: Wednesday, June 13, 2001 8:25 AM
> > > To: NT Developers Interest List
> > > Subject: [ntdev] RE: ISR gets called although
> > device
> > > does not interrupt
> > >
> > >
> > > My machine has ACPI installed on it, which I
> think
> > > is responsible for
> > > interrupt sharing by PCI devices. When I call
> > IoCOnnectInterrupt(),
> > > for the ShareVector parameter, I just use the
> > parameter
> > > pPartialDescriptor->ShareDisposition, which is
> > given
> > > by the
> > > PnPManager. How do I reserve an interrupt for
> > myself
> > > in the BIOS setting ?
> > >
> > > Thanks
> > > Madhu
> > >
> > > — xxxxx@att.net wrote:
> > > > If you suspect that it’s PCI interrupt
> sharing,
> > > you
> > > > can
> > > > make your driver to use one interrupt that
> it’s
> > > not
> > > > used
> > > > by other PCI devices in your system and
> reserve
> > > that
> > > >
> > > > Interrupt in BIOS settings and then when ur
> > driver
> > > > comes
> > > > up it would be having exclusive access to that
> > > > Interrupt.
> > > > Otherway of achieveing this, not to share
> > the
> > >
> > > > interrupt at all. Just check out the API that
> u
> > > use
> > > > to
> > > > register your ISR and rest with OS. But in
> > > principle
> > > > PCI
> > > > should be able to share interrupts with other
> > PCI
> > > > peripherals.
> > > > Please let us know about these.
> > > > 1. What type of device is this?
> > > > 2. R u checking status register directly in
> your
> > > ISR
> > > > or
> > > > in a DPC?
> > > >
> > > > thanks
> > > >
> > > > –
> > > > Girish H.
> > > > > Madhu,
> > > > >
> > > > > If this hang is narrowed down such that it
> > only
> > > > appears exactly on the read
> > > > > of the status port, I’d recommend going to
> the
> > > > hardware folks or looking at
> > > > > what’s on the PCI bus with a logic analyzer.
> > > > Sounds like hardware/firmware
> > > > > to me given that information.
> > > > >
> > > > > -Tim
> > > > >
> > > > >
> > > > > Timothy A. Johns — xxxxx@driverdev.com
> > > > > Driver Development Corporation —
> > 800.841.0092
> > > > > Bring Up Your Hardware — Fast.
> > > www.driverdev.com
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: xxxxx@lists.osr.com
> > > > > > [mailto:xxxxx@lists.osr.com]On
>
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Spot the hottest trends in music, movies, and more.
http://buzz.yahoo.com/


You are currently subscribed to ntdev as: xxxxx@emulex.com
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

Hi,

Actually, I tried to do what you suggested by calling
IoConnectInterrupt only after all the drivers are
loaded. Everything seems to work fine then. This is
definitely a method for making the driver work until
we fix the hardware.

Thanks
Madhu
— “Barila, Phil” wrote:
> Madhu,
>
> OK, I see where you might have difficulty sharing
> interrupts when you are
> not the last device on the ISR chain, and you don’t
> have the problem when
> you reside at the very end. If this is a product,
> and not a lab tool, you
> have to fix the hardware.
>
> I don’t remember if anyone has suggested this, but
> is it possible to coerce
> the load order such that you can end up as the last
> ISR on the chain?
> Perhaps you could achieve that by not loading the
> driver at boot time, but
> on demand from an app or something?
>
> Phil
>
> -----Original Message-----
> From: M V [mailto:xxxxx@yahoo.com]
> Sent: Thursday, June 14, 2001 10:57 AM
> To: NT Developers Interest List
> Subject: [ntdev] RE: ISR gets called although device
> does not interrup t
>
>
> Sorry for the delay in answering. Inserting a delay
> would not help because, I might miss the interrupts
> of
>
> my own device, which sends interrupts quite
> frequently
> and I need to empty the FIFO as soon as possible.
>
> — “Barila, Phil” wrote:
> > You never answered my question. Instead of this
> > hackery, is it possible for
> > you to simply insert a fixed delay into your ISR,
> > such that you will wait
> > long enough that even if you are the first ISR on
> > the chain, your device
> > finishes asserting it’s interrupt? This is only a
> > suggestion for getting
> > your driver development moving again, your
> hardware
> > must be fixed. But
> > it’s less “intrusive” than developing on a
> different
> > HAL.
>
>
>
> > > -----Original Message-----
> > > From: M V [mailto:xxxxx@yahoo.com]
> > > Sent: Wednesday, June 13, 2001 10:24 AM
> > > To: NT Developers Interest List
> > > Subject: [ntdev] RE: ISR gets called although
> > device
> > > does not interrup t
> > >
> > >
> > > Hi Mark,
> > >
> > > Yes. I understand that the device must be able
> to
> > > support shared interrupts. But the person who
> had
> > > designed this card has not taken care of shared
> > > interrupts and there is no way we can fix the
> card
> > > now. If I try to read from the status register
> of
> > > the
> > > card while it is in the processing of asserting
> an
> > > interrupt, the card is left in an invalid state
> > and
> > > a
> > > call to READ_REGISTER_ULONG to read the status
> > > register results in the machine freezing. Hence
> I
> > am
> > > looking for a way to have an exclusive interrupt
> > for
> > > my device. Is there any way to disable ACPI ?
> > >
> > > Thanks a lot
> > > Madhu
>
>
> —
> You are currently subscribed to ntdev as:
> xxxxx@yahoo.com
> To unsubscribe send a blank email to
leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com

__________________________________________________
Do You Yahoo!?
Spot the hottest trends in music, movies, and more.
http://buzz.yahoo.com/


You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com