You have misunderstood my actual requirement OR I didn’t explain
correctly.
I want to execute DMA transfer and the completion of DMA will be
notified thro Interrupt. The data rate at which data reach the PCI card
is so high and my driver has to be in sync with this rate ; else, it
would miss data.
So, I am exploring the possibilities of running the ISR at highest
possible DIRQL with which I am assured that the
Interrupt will not be
Missed or
Delayed or
interrupted by high priority ISR.
As it is time critical, I am trying these options.
Hope, this is clear now.
I don’t want to raise the IRQL by using KeRaiseIrql, etc.
I want that the DIRQL at which my ISR is going to run should be the
highest possible one.
-±±±±±±±±±±±±±±±±±±+
We are what we repeatedly do.
Excellence, then is not an act. But a habit.
-±±±±±±±±±±±±±±±±±±+
-----Original Message-----
From: Gary G. Little [mailto:xxxxx@aerosurf.net]
Sent: Tuesday, February 25, 2003 10:56 PM
Subject: Re: Forcing DIRQL 26 in IoConnectInterrupt( )
Like my Grandma Barclay used to say “Tain’t what you want that makes you
fat, it’s what you get.”
Wanting that interrupt line without the PCI bus having assigned it to
your
device and getting it is two entirely different things. The problem is
that
the only good it is going to do you, if you get it, is that you can use
the
interrupt object to sync to that level. Given that … HIGH_LEVEL I
believe
can be used with KeRaise/LowerIrql, although I believe VERIFIER will
bitch
about that during testing under XP.
Most likely, you are trying to solve some synchronization and
seralization
problems, and probably on a dual processor. Look long and hard at the
ExInterlocked… and Interlocked… functions. If it is a queue access
problem the ExInterlockedInsert/Remove functions will in all probability
solve most of the problem. XP gives you
KeAcquireReleaseInterruptSpinlock.
Rule of thumb … use the resources that you are given and try not to
justify “inventing” reasons why you need other resources. It’s difficult
enough managing what you get let alone trying to “steal” extra. What
happens
if you install your driver, which steals that IRQL, in a system where
that
IRQL is really used?
You can also “monkey” with the BIOS settings to re-arrange IRQs,
although
that may not affect how the HAL is going to assign your resources.
Gary G. Little
Have Computer, Will Travel …
909-698-3191
909-551-2105
“Sathyanarayanan Srinivasan”
wrote in
message news:xxxxx@ntdev…
Hi Experts,
Environment => Windows XP running in x86 architecture.
Driver => FUNCTIONAL WDM Driver for PCI card
I want to have MAXIMUM possible DIRQL for my driver’s ISR.
I know that IRQLs 3 to 26/27 are assigned to devices (DIRQLs) in x86 NT
based systems.
[1] When calling IoConnectInterrupt( ), for the parameters “Irql” and
“SynchronizeIrql” if I EXPLICITLY pass value 26/27 (not sure which value
is highest for DIRQL) irrespective of value I got from
“u.Interrupt.Level member of CM_PARTIAL_RESOURCE_DESCRIPTOR”, WILL IT BE
ASSIGNED TO MY ISR WITHOUT FAIL ???
{1.1} If not, how to get MAXIMUM DIRQL for my ISR?? (so that preemption
from many other ISRs can be avioded)
I know that, IRQ 9 is maximum priority hardware interrupt line for
peripherals (at least in case of PIC).
[2] Is it true that under the environment specified at the start of this
mail, the DIRQL assigned for this IRQ is maximum than other peripherals?
{2.1} If so, How to connect my PCI card interrupt line to this IRQ 9 ?
Thanks,
Sathya
-±±±±±±±±±±±±±±±±±±+
We are what we repeatedly do.
Excellence, then is not an act. But a habit.
-±±±±±±±±±±±±±±±±±±+