Plug-and-Play sound cards with Linux

Unfortunately all currently manufactured cards are so called 'Plug-and-Play' cards. Plug-and-Play (PnP) protocol was developed by Intel and Microsoft.

Pnp specification is available from ftp://ftp.microsoft.com/developr/drg/Plug-and-Play/Pnpspecs

Pnp protocol is designed in order easily identify and configure I/O ports, IRQs and DMAs of external devices.

PCI card always has a full PnP support. It configured by BIOS during start-up. A sound driver just reads and accepts the settings from the cards.

ISA card is designed to be used either with a PCI motherboard, that provides PnP support, or with an old-style motherbord without PnP support. For that reason, even if an ISA card is recognised by BIOS it is open for configuration after BIOS. In many cases a PnP ISA card will not work if not configured properly.

How to configure an ISA Pnp card?

Using isapnoptools:

/sbin/isapnp /etc/isapnp.conf

RedHat (/etc/rc.d/rc.sysinit) :

# set up pnp
if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
    if [ -n "$PNP" ]; then
        echo "Setting up ISA PNP devices"
        /sbin/isapnp /etc/isapnp.conf
    else
        echo "Skipping ISA PNP configuration at users request"
    fi
fi

Building /etc/isapnp.conf

pnpdump > /etc/isapnp.conf

Creates a rough version of the file.

The file containce all devices characteristics commented out, as well as some real comments.

# Trying port address 0203
# Trying port address 020b
# Board 1 has serial identifier ce 19 6c d1 3b e4 00 8c 0e
# (DEBUG)
(READPORT 0x020b)
(ISOLATE PRESERVE)
(IDENTIFY *)
# Card 1: (serial identifier ce 19 6c d1 3b e4 00 8c 0e)
# Vendor Id CTL00e4, Serial Number 426561851, checksum 0xCE.
# Version 1.0, Vendor version 1.0
# ANSI string -->Creative SB AWE64 PnP<--
# Vendor defined tag: 73 02 45 20
#
# Logical device id CTL0045
# Device supports vendor reserved register @ 0x3a
# Device supports vendor reserved register @ 0x3c
# Device supports vendor reserved register @ 0x3d
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy
(CONFIGURE CTL00e4/426561851 (LD 0
# ANSI string -->Audio<--
# Multiple choice time, choose one only !
# Start dependent functions: priority preferred
#
IRQ 5.
#
High true, edge sensitive interrupt (by default)
(INT 0 (IRQ 5 (MODE +E)))
# First DMA channel 1.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed in compatible mode
(DMA 0 (CHANNEL 1))
# Next DMA channel 5.
# 16 bit DMA only
# Logical device is not a bus master
# DMA may not execute in count by byte mode
# DMA may execute in count by word mode
# DMA channel speed in compatible mode
(DMA 1 (CHANNEL 5))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0220
# Maximum IO base address 0x0220
# IO base alignment 1 bytes
# Number of IO addresses required: 16
(IO 0 (BASE 0x0220))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0330
# Maximum IO base address 0x0330
# IO base alignment 1 bytes
# Number of IO addresses required: 2
(IO 1 (BASE 0x0330))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0388
# Maximum IO base address 0x0388
# IO base alignment 1 bytes
# Number of IO addresses required: 4
(IO 2 (BASE 0x0388))
# The following line usually means the start of alternative options (M.G.)
# Start dependent functions: priority acceptable
# IRQ 5, 7, 9 or 10.
# High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
# First DMA channel 0, 1 or 3.
# 8 bit DMA only
# Logical device is not a bus master
# End dependent functions
# Don't forget to uncomment the following line!
# It activates the device
(ACT Y)
))

# Next device is the joystick port. here we have only
# default settings
#
# Logical device id CTL7002
# Device supports vendor reserved register @ 0x3a
# Device supports vendor reserved register @ 0x3c
# Device supports vendor reserved register @ 0x3d
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy
(CONFIGURE CTL00e4/426561851 (LD 1
# Compatible device id PNPb02f
# ANSI string -->Game<--
# Multiple choice time, choose one only !
# Start dependent functions: priority preferred
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0200
# Maximum IO base address 0x0200
# IO base alignment 1 bytes
# Number of IO addresses required: 8
# (IO 0 (BASE 0x0200))
# Start dependent functions: priority acceptable
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0200
# Maximum IO base address 0x0208
# IO base alignment 8 bytes
# Number of IO addresses required: 8
# (IO 0 (BASE 0x0200))
# End dependent functions
# Activate
(ACT Y)
))

# The last PnP device - wave table synthesizer
(CONFIGURE CTL00e4/426561851 (LD 2
# ANSI string -->WaveTable<--
# Multiple choice time, choose one only !
# Start dependent functions: priority preferred
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0620
# Maximum IO base address 0x0620
# IO base alignment 1 bytes
# Number of IO addresses required: 4
(IO 0 (BASE 0x0620))
# Start dependent functions: priority acceptable
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0620
# Maximum IO base address 0x0680
# IO base alignment 32 bytes
# Number of IO addresses required: 4
# (IO 0 (BASE 0x0620))
# End dependent functions
# Vendor defined tag: 75 01 69 46 35 55
(ACT Y)
))
# End tag... Checksum 0x00 (OK)
# Returns all cards to the "Wait for Key" state
(WAITFORKEY)

Back Next