[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

How to set IRQ for a module?



After months of trying to grasp an adequate understanding of modules, I
still find myself having to ask this list; sorry for the bother. This is
long, but I'm trying to be complete.

I've got a soundcard (Creative CT2940, Soundblaster 16 according to
isapnp.conf). It's a PnP card. Here are the steps I've taken to get it
going.

Insert card.

As root, run "pnpdump > /etc/isapnp.conf" to create an isapnp.conf file.
My understanding is that this contains all the possible settings for all
the ISA PnP cards in the box. Since I only have the soundcard, that's
the only device mentioned in the isapnp.conf file. Since there are
several "logical devices" (?) on the card, such as joystick circuitry
and etc, there are several sections in the isapnp.conf file.

Trying to keep things simple, I leave all the extra logical devices
commented out for the time being, and work only with the "Audio"
section. The way this file is put together is really confusing; the file
says to "choose one only", but there's no indication if that means one
line, or one section, or one item between DMA and IRQ and IO; the file I
have mentions a "DMA 0" and a "DMA 1", as well as an "IO 0" and an "IO
1" and an "IO 2"; do I select only one of all five of these? Or one of
the DMAs and one of the IOs? or one of each, but only in this section
but not another section with similar choices? Very confusing, and the
documentation hasn't helped me any.

What I've done is to uncomment the following lines:
(CONFIGURE CTL0026/321098269 (LD 0
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING
 (INT 0 (IRQ 5 (MODE +E)))
 (DMA 0 (CHANNEL 1))
 (DMA 1 (CHANNEL 5))
 (IO 0 (SIZE 16) (BASE 0x0220))
 (NAME "CTL0026/321098269[0]{Audio               }")
 (ACT Y)
))

and left everything else in the file commented out.

Recompiled the kernel to support SB16.

In /etc/modules, there automagically appeared a line with 
 sound

I don't remember whether that worked somewhat or not, but for some
reason that I don't remember now, I commented out the "sound" line and
replaced it with "sb".

Now when I do an "lsmod", I see the following:
3c509                   5744   1 
sb                     32992   0 
uart401                 6128   0  [sb]
sound                  56336   0  [sb uart401]
soundcore               2608   6  [sb sound]
vfat                    9056   0  (unused)
fat                    29312   0  [vfat]
smbfs                  24304   0  (unused)
nls_cp437               3904   0  (unused)
coda                   50960   0  (unused)

I reboot or restart /etc/rcS.d/S15isapnp.

When I run "saytime", I get "The time is now."

When I try to splay a .wav file, usually I get silence; occassionally I
get a high-pitched whine or something similar. Very similar to an IRQ
conflict type behaviour.

So I take a closer look at dmesg; sure enough, there's mention of an
interrupt conflict when trying to put the card on IRQ 7:
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
SB 4.13 detected OK (220)
sb: Interrupt test on IRQ7 failed - Probable IRQ conflict

But wait a minute; in my /etc/isapnp.conf file I uncommented an IRQ 5
line, and nothing about IRQ 7 is mentioned.

So I make the guess that perhaps the isapnp.conf file is setting the
actual hardware to IRQ 5, but that the module(s) is/are looking to IRQ 7
to find the sound card.

"man modules" is useless, as is "man modutils". Neither "man
modules.conf" nor "man update-modules" mentions "irq" or "interrupt".
There's no /usr/doc/modules directory. The info on /usr/doc/modutils
hasn't helped me. It mentioned modules.dep, but there's no "man
modules.dep" nor a doc directory for it. I did find a modules.dep file
in my kernel source directory, but it didn't give me much of a clue.

I'm sure there's probably some way to tell a module to look to a certain
IRQ, but I haven't found the documentation for it. Or perhaps I'm wrong
about needing to tell the module about the IRQ, etc?

So my questions are:
 1) Am I getting close to an understanding of how things work?
"isapnp.conf" specifies the "jumper" settings a board should use, and
then isapnp reads that file and sets the board accordingly. Then the
modules have to be told which IRQs to look to when loading the modules?
 2) How do I tell the modules which IRQ is to be associated with which
module?
 3) "modprobe sb" loads four modules. Is there a single command to
unload those four modules rather than having to use four separate rmmod
commands? This would need to be a generic command that is the opposite
of modprobe, rather than something specific like a script to unload
these specific four modules.

Thanks for any direct help and any pointers to documentation that is
understandable!

-- 
Kent West
kent.west@infotech.acu.edu



Reply to: