Disabling PCI steering in Win 2000

neirbo

New member
I've been having trouble with my sound card locking up on me. I think that the trouble is an IRQ conflict with my video card, which shares the same IRQ. In Win 98, this was easily fixed, but now I have Windows 2000 which won't allow me to assign IRQs manually. I know there is some way to disable PCI steering in 2000 so I can assign the IRQs in BIOS, but I'm not sure of the exact procedure, and the Windows 2000 support webpage is useless (they just say it can't be done, which is BS). Can anyone help?

My system:
Aardvark Q10
Athlon 1.4
Asus A7m266 mobo
256 DDR ram
Matrox g450 video
Windows 2000 professsional
 
I think if you set the IRQ values in the BIOS, then that's what Win2k will use.

If that doesn't work you can try the following. Open up your Device Manager, expand Computer, and right click on Standard PC*. Click Properties and select the IRQ Steering tab. The rest should be self explanatory.

*If you don't have 'Standard PC' under Computer (ie, you have ACPI or some variant), then you can switch to Standard PC by right clicking whatever you do have and going to Properties. Click the Driver tab and then click Update Driver. Select 'Display a list of the known drivers....', click Next, then select 'Show all hardware of this device class.' Standard PC should be in the list.

I haven't tried doing this, but it should work (ie - don't come crying to me when your computer bursts into flames ;)). I would try adjusting some BIOS settings or rearranging the PCI cards before trying to disable IRQ steering.
 
If Win 2K is using the ACPI HAL, which it does by default, then it totally ignores any IRQ setting you make in the BIOS and makes it's own. It also has a tendancy to stack all your PCI devices on one IRQ. Sound crazy... well...

Here is an interesting artcle I ran across related to this. It apparently was written by someone from Microsoft, and from the way he talks it seems to be the guy who wrote the interrupt code for Win 2K. As someone who has written plenty of interrupt handlers myself I can tell you it makes perfect technical sense, so I tend to believe him.

The early ACPI machines were mostly laptops. And the laptops of that generation had most of their devices either embedded in the chipset or on the ISA bus. The PCI or AGP buses were used only for video, and to connect the north bridge with the south bridge. (In Intel's chipset terms, the North bridge has all the fast gates of the chipset, including the memory controller, AGP and in that generation, the PCI bus generation logic. The south bridge contains all the slow gates, including the IDE controller, the ISA bridge, all the PC legacy stuff and probably a USB controller. Today, the south bridge probably also has audio and a few other random odds and ends.) Because the laptops of that era had all of their devices on the ISA bus, interrupt sharing worked poorly. If you bought a mid-'90s laptop from IBM or Toshiba, the serial port and possibly IR would be disabled. There would be a utility packaged with the machine that allowed you to turn on your serial or IR, but at the cost of the bi-directional parallel port, or one of the PCMCIA slots, since there just weren't enough IRQs in the machine to guarantee that all of the peripherals worked, especially if you filled both PCMCIA slots with combo cards.
I once debugged a Toshiba 750CDT in a docking station that had two PCMCIA cards plugged into the machine, two PCMCIA cards plugged into the slots in dock, two ISA cards in the dock and an extra IDE device in the dock, too. This meant that the total demand on the machine was 20 IRQs, when only 16 were actually available.

(As an aside, I've been trying to convince Intel to put APIC interrupt controllers, which would allow many more IRQs, in their laptop chipsets since 1997. My predecessor had been trying since '94. They may actually manage it soon.)

Along comes ACPI. When you turn on ACPI in a machine, it suddenly switches all the power management logic in the machine from delivering its interrupts as BIOS-visible, non-vectored System Management Interrupts over to OS-visible, vectored interrupts. And that interrupt is delivered level-triggered, active-low, which means that it can be shared with a PCI interrupt.

Now consider that these early ACPI machines were already over-committed in terms of interrupts. There was no way to make them work with PCI devices spread out on lots of IRQs. So I just made the code collapse all the sharable devices onto the ACPI interrupt, which was fixed in the chipset by Intel at IRQ 9. By doing it this way, I could hide the fact that ACPI had just created a demand for one more IRQ. (If you use a non-Intel chipset that has ACPI coming in on some other IRQ, you'll see all the PCI devices in Win2K go to that IRQ, not 9.)

Further complicating this story was that I was trying to get ACPI machines to work back in 1997, when the people working on Plug and Play in Win2K hadn't yet gotten their stuff going yet. At time, it wasn't possible to move a device from one set of resources to another after it had been started. This meant that any IRQ solution that I came up with had to work from the first try, so it had to be conservative.

The everything-on-IRQ-9 solution worked. It got the machines to run, as long as none of the device drivers mis-handled their ISRs. (Later, this turned out to be a huge debugging problem, since when you chain eight or nine devices, you'll get somebody who fails.) The solution wasn't optimal, but it did work. I meant to go back and change it later, before we shipped Windows 2000.

A couple of years passed. I had been working on multi-processor problems and on other aspects of ACPI. It got close to the time to ship Windows 2000 and somebody brought up the old question of IRQ stacking. I worked up a more-elegant solution, one that spread out interrupts on most machines. By that time, Plug and Play had been mostly completed, and that wasn't a bottleneck any more. But the test team told me that they wouldn't let me put it into the product, since they didn't have time to re-test the thousands of machines that had already been tested with the old algorithm.

At the time, I thought that this was somewhat ridiculous. I thought that my code would work just fine. I thought that their fears were un-justified. But I was overruled, and I just put the code into what became Windows XP, letting Windows 2000 ship with the simple, safe, yet frustrating stacking.

This is a good point in the story to explain that, in ACPI machines, the IRQ steering is accomplished by interpreting BIOS-supplied P-code called ASL. The IRQ routers are completely abstracted by the BIOS. The OS doesn't need to know about the actual hardware. The old IRQ steering code in Win9x, which was dropped into the non-ACPI HAL in Win2K, had to have code specific to each chipset, which meant that it didn't work when new chipsets were shipped. It was also written in a way that it assumed that there were exactly four IRQs coming from PCI. ACPI machines sometimes have many more. (This is the reason that you don't see the IRQ steering tab in ACPI machines. It just wasn't flexible enough and we didn't have time to re-do it.)

What we discovered with Windows XP was that all of those ACPI machines that had been tested with their IRQs stacked on IRQ 9 tended to fail when you spread the IRQs out. A typical example of a failure would work like this: WinXP doesn't need the IRQ for the parallel port unless you're using one of the extended modes. So the parallel driver releases its IRQ until it's needed. The IRQ choosing logic (called an IRQ "arbiter") would move a PCI device onto the parallel IRQ. This action depends on re-programming the chipset so that the parallel port isn't actually triggering the IRQ. This is supposed to happen by interpreting even more BIOS P-code that manipulates the chipset, since there is no standard for parallel port configuration.

If your chipset comes from Intel, this probably works, since the mere act of setting a PCI device to an IRQ also disconnects that IRQ from the ISA bus. But if your chipset comes from VIA or ALi, there is another step involved. The problem is that nearly all of the BIOS P-code out there is copied from old Intel example code. So they are almost all missing the extra step necessary in VIA and ALi machines.

If the BIOS fails to stop the IRQ coming from the parallel port, the machine hangs, since the parallel port, which sends its IRQs active-high, edge-triggered, will ground the interrupt signal in the passive state. And grounding an interrupt which is enabled active-low, level-triggered will cause an endless stream of interrupts. The parallel port is just an example. Pick any device that is in the legacy SuperIO chip and the story repeats itself.

In Windows XP, I made a bunch of changes. In machines without cardbus controllers, (which don't have the IRQ problems created by PCMCIA,) it will try to keep the PCI devices on the IRQs that the BIOS used during boot. If the BIOS didn't set the device up, then any IRQ may be chosen. But if your machine has a VIA chipset, or if it has a BIOS that we know to be broken, then we fall back to the Win2K-style stacking behavior. The unfortunate truth is that you guys on this list mostly build your own machines, rather than buying them from reputable manufacturers, which means that you guys own the machines with broken BIOSes and VIA chipsets. So even with WindowsXP, you'll see the same old stacking behavior.

One notable addendum is that any machine with an APIC interrupt controller, and thus more than 16 IRQs, will spread interrupts out, even in Win2K. In the past, this was mostly limited to SMP machines. But any desktop machine shipping today that gets the Windows logo has to have an APIC. (This was another reason that I hadn't gone back to re-write this code earlier. Intel had promised that all machines would have APICs by 1998. If this had materialized, then none of you would have had any complaints by now.) I'm actually currently working on software for some future NT that will let an administrator configure the
machine in any way he or she desires.
 
Last edited:
Opps, forgot to include anything truely helpful. The good news is you can configure Win 2K so that you control interrupt sterring. You do this by disabling the ACPI HAL. The bad news is the only method I've heard to do this is to rebuild Win 2K, using the Standard PC HAL. This is done by hitting F5 during install and selecting the Standard PC HAL Here's some more info.

On interrupt steering in Win 2K:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q252420

On how to choose a different HAL during setup:

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q216251

BTW: I know all this stuff because I upgraded to Win XP yesterday and was ticked when I couldn't select my own IRQs, so I went searching for more info. Sharing interrupts is a horrible, horrible idea for any real time application like audio. It results in a N squared degradation in interrupt service performance (i.e. sharing two IRQs makes interrupt servicing 4 times slower, 3 sharred IRQs makes it 9 times slower, 4 makes it 16 times slower and so on). This is something no real time programmer would put up with. It makes no sense for an OS trying to handle a time critical interrupt to have to run through gobs of video, usb, firewire, etc interrupt code on each audio interrupt. Grrr.
 
I use 2000 and the sharing of resources is crazy. I changed up every Pci and its always the same. 2000 overrides
IRQ Bios setting.

System Information report written at: 04/16/2002 11:22:33 PM
[Conflicts/Sharing]

Resource Device
IRQ 11 Microsoft ACPI-Compliant System
IRQ 11 WinFast GeForce2 MX
IRQ 11 VIA USB Universal Host Controller
IRQ 11 VIA USB Universal Host Controller
IRQ 11 Linksys LNE100TX Fast Ethernet Adapter(LNE100TX v4)
IRQ 11 Creative SB Audigy
IRQ 11 OHCI Compliant IEEE 1394 Host Controller
IRQ 11 HPT370 UDMA/ATA100 RAID Controller


my computer seems to run normal though. Microsoft site says its normal... it doesnt look normal to me because my sound card has to run at the same time as my video controller
I wish I could break windows 2000's legs
 
Thanks all!

Kaydis, I think you nailed it. I knew there was some way to do this at the installation phase, but I couldn't remember what key to hit when. I'll give that a try. Thanks man.

Elevate, what you wrote sounds perfectly logical, and you would think that would work. But, the Windows fools decided otherwise. Even if I disable Plug and Play, assign IRQs in BIOS and even force them to use resource exclusion, 2000 puts the sound card and video card on the same IRQ.

Jmarcomb, just be glad your system works! Mine has been variably inoperable for months.

Ya know, I used to consider myself a musician, now I've become a tech weenie. If I spent as much time practicing as I have tweaking my computer these past months, I might actually get somewhere musically :)
 
I had the same problem........

and as elevate suggested earlier in this post, I switched PCI slots and Win2K assigned a new, solo, IRP to my SB Audigy Platinum.

rpe
 
I really should learn to read more carefully before I write. From Elevate's post it sounds like I can change to the "standard PC" HAL without reintalling 2K. I'll try that first. Thanks.

RPE, that sounds strange. I thought that PCI steering applied to all the PCI slots, so that switching cards around would not matter. But, it is certainly worth a shot if changing to "standard PC" doesn't work. It is easier than reinstalling 2K.
 
It worked for me.......

you're right, it's easier than reinstalling.
 
RPE, that sounds strange. I thought that PCI steering applied to all the PCI slots, so that switching cards around would not matter.
It seems that Win2k is consistently inconsistent about assigning IRQ's. I had an IRQ conflict when I installed my Audiophile, but I too was able to resolve it by rearranging my PCI cards. Though, I can now only use one of my NIC's, but that's not a big deal.
 
I think elevate is right. I found this for Windows XP last night. I've run through this with Windows 2000 up to a point and it seems to have the same arrangement. I haven't tried it, so who knows if it works. Here's what I see when I try this on a Windows 2000 PC. I've only taken this up to a point because I don't want to mess with the particular PC I'm doing this on.

1) Go to "Start Menu->Settings->Control Pannel"
2) Select "System->Hardware->Device Manager"
3) Click on the "+" in front of "Computer" to get a drop down list.
4) Under Computer you should see "Advanced Configuration and Power Interface (ACPI) PC"
5) Right clock on it and select "Properties"
6) Click on the "Driver" tab, then "Update Driver" to bring up the "Update Device Driver Wizard"
7) Click "Next" then select "Display a list of the known drivers for this device so I can choose a specific driver."
8) Click "Next" then select "Show all Hardware of this device class"
9) You should now get a list of possible drivers. Select the one named "Standard PC" then "Next"

From here on your on your own :) Apparently under Windows XP this then leads to re-loading all your device drivers so don't be surprised if it starts asking you to load drivers you've already loaded.

I hope this works, because I'm going to give it a try tonight.
 
Kaydis said:
From here on your on your own :) Apparently under Windows XP this then leads to re-loading all your device drivers so don't be surprised if it starts asking you to load drivers you've already loaded.

I hope this works, because I'm going to give it a try tonight.

I'll try it too. Diving into the realm of unknown IRQs. If I'm not back in 24 hours, save yourselves. Wish me luck.....
 
Ok it worked, kind of. Using Elevate's suggestion, I got my computer to stop steering my IRQs all over the place. My sound card and video are now firmly on two different IRQs that are not shared by any other device.

The bad news is that my problem still exists. I keep getting errors that the sound card is either in use or does not support the samle rate. I know sample rate is not a problem since I have Sonar set to 16 bit, 44.1 and my Q10 is more than capable of that. Not only does Sonar not work, trying to play Windows sounds gives a similar error.

I am now 90% sure it is a MoBo problem, since just about everything else I've tried. I think the PCI bus is getting bogged down by something (video card maybe), and is making the sound card inoperable. I know it isn't the Q10 itself since Aardvark sent me a second PCI card to try out that gave me the same trouble.

Can anyone think of anything else I could try before I shell out more $$$ for a new MoBo? Anyone know of some good diagnostic software I can get to track this problem down?

What I've done:
manually assign IRQs
turn off all non-essential devices in BIOS (USB, modem, second sound card, ports)
disable CD-RW
swapping PCI slots
new PCI sound card
upgrade 2K with service pack 2
new drivers installed for sound, video, MoBo
flashed BIOS with new version
increased core voltage to 1.85
 
Do you have a good number of PCI cards in there? If so, remove all of them except video and sound and see if the problem still ocurrs. If it doesn't happen again, then you have some PCI problem somewhere. Also, I'd reinstall Windows before getting a new mobo, just to make sure.
 
Elevate,

I have only the video and sound cards. I've disabled everything non-essential I can think of. I have reinstalled both 98 and 2K many times now with different configurations, and always get similar problems. So, I'm pretty sure it is a hardware issue at this point.

I may try a new and more powerful power supply before I get a new MoBo. Mine is 300 watt, which I hear can do strange things. I'm not sure if this kind of apparent conflict can arise from low power. But, it might be worth a shot since I can always return it. Thanks for you help.
 
Sounds like the power supply shouldn't be an issue, unless it's just a bad power supply. If you had said you had your PCI slots full and one of them is a SCSI card and you've got 4 SCSI drives hooked up, then power might be an issue, but it doesn't seem like your system should be starved for power.
 
I agree, which is why I think my board is the problem. Still, it might be worth a shot since it is a lot easier to install a new poser supply than a new board. I'm still hoping that someone can think of a magic bullet for me that I had not thought of, but it's looking like I'm shelling out $100 for a new MoBo.
 
I don't suppose you have a friend nearby with a compatible mobo. That sucks man. You have any idea what mobo you'll be switching to? I'm building an AMD rig for a friend and I'm using a Gigabyte GA7DX+, and I'll probably use the same mobo when I upgrade in a month or two. Lots of good reviews for it.
 
IRQ problems

I feel a little better knowing that I am not the only one having this problem. It go to me so much that I tried call Intel (makers of my motherboard). I called M-Audio and they walked me setting it up but I still did not solve the problem. Reading you'll post has given me new direction, I will try this and hope it solve. I am a techie but I have to tell you I am tired of having to spend more time fixing computer problems and not creating music.


THANK YOU'LL
 
Elevate, if I do get a new MoBo, I'll probably get the Gigabyte 7dx too. I've heard good things about it here. But then again, I had heard good things about my Asus a7m266 board too. I called Ben, the Aardvark tech guy, and he told me months ago that the 7DX was conistantly solid with the Q10, while the Asus board created problems for lots of people who called him. Just goes to show that a good MoBo for one card may suck for another.


Prophessor, I feel your pain.
 
Back
Top