Hi,

Dwayne Jacques Fontenot wrote:

> I spent several hours last night moving cards around in my machine
> trying to solve this problem.
> 
> The short version is that I need a PCI network and sound card
> that have linux drivers which allow them to share an IRQ.
> 
> I currently have a SB PCI64 and a NetGear FA310TX (Tulip based)
> which do not get along on an IRQ.
> 
> I need them to share because the BP6 has 5 PCI slots but only 3 IRQs
> among them. It works like this:
> 
> AGP   INT_0
> PCI1  INT_0
> PCI2  INT_1
> PCI3  INT_2
> PCI4  INT_0
> PCI5  INT_0
> 
> INT_3 in the BOIS does not seem to have any effect.
> 
> My cards and their constraints are as follows (not in any order):
> 
> 1. AGP TNT2 Ultra     has an IRQ but does not seem to use it
> 2. PCI TNT            requires an IRQ and seems to disturb other cards
>                       on same IRQ (SB64 has static, FA310TX stops working)
> 3. PCI BT878 TV card  driver will not share IRQ (black screen)
> 4. PCI NetGear FA310TX        does not work if shared (AFAICT)
> 5. PCI SB64 (es1371)  has terrible static if shared with TNT,
>                       locks when shared with FA310TX
> 
> So, my only option is to find a NIC and sound card which will share.

Your current problem is not IRQ sharing, but PCI busmaster sharing.
PCI4 and PCI5 can't be both a PCI busmaster for DMA. So, use for
PCI5 a card which does not tell "Master Capable" with cat /proc/pci
or use the accompanied ISA slot. ;-))

For making the BT878 driver sharing his IRQ, you need nothing but
this little patch:

diff -u -rN linux-2.2.14-ide/drivers/char/bttv.c linux/drivers/char/bttv.c
--- linux-2.2.14-ide/drivers/char/bttv.c        Thu Jan  6 13:28:59 2000
+++ linux/drivers/char/bttv.c   Mon Feb  7 10:06:00 2000
@@ -3605,7 +3605,7 @@
        btwrite(0, BT848_INT_MASK);
 
         result = request_irq(btv->irq, bttv_irq,
-                             SA_SHIRQ | SA_INTERRUPT,"bttv",(void *)btv);
+                             SA_SHIRQ, "bttv",(void *)btv);
         if (result==-EINVAL) 
         {
                 printk(KERN_ERR "bttv%d: Bad irq number or handler\n",
@@ -3769,7 +3769,7 @@
                btv->bt848_mem=ioremap(btv->bt848_adr, 0x1000);
                 
                result = request_irq(btv->irq, bttv_irq,
-                       SA_SHIRQ | SA_INTERRUPT,"bttv",(void *)btv);
+                       SA_SHIRQ, "bttv", (void *)btv);
                if (result==-EINVAL) 
                {
                        printk(KERN_ERR "bttv%d: Bad irq number or handler\n",

Look at this (3 IRQs for PCI):

lxi013:0 23:00:20 ~ # cat /proc/interrupts 
           CPU0       CPU1       
  0:    5201242    8787269    IO-APIC-edge  timer
  1:       1454       1432    IO-APIC-edge  keyboard
  2:          0          0          XT-PIC  cascade
  3:          0          1    IO-APIC-edge  serial
  4:          0          1    IO-APIC-edge  serial
  5:       1246       1899    IO-APIC-edge  wvlan_cs
  8:          1          1    IO-APIC-edge  rtc
  9:      11886      14484   IO-APIC-level  es1371, bttv
 10:     994098    1018326   IO-APIC-level  eth0
 11:      34753      33769   IO-APIC-level  ide2, ide3, sym53c8xx
 12:      10196       9879    IO-APIC-edge  PS/2 Mouse
 13:          1          0          XT-PIC  fpu
 14:      59542      87973    IO-APIC-edge  ide0
 15:         10          4    IO-APIC-edge  ide1
NMI:          0
ERR:          0
lxi013:0 23:03:51 ~ # 

and show yours.

Cheers -e
-- 
Eberhard Moenkeberg ([EMAIL PROTECTED], [EMAIL PROTECTED])

--
=-          To unsubscribe, email [EMAIL PROTECTED] with the       -=
=-                body of "unsubscribe linux-abit".                 -=

Reply via email to