Actually correct and still right, but PNP ISA cards aren't relevant

anymore.

Noted by:	imp
Approved by:	bcr (mentor)
This commit is contained in:
Eitan Adler 2013-01-13 05:54:06 +00:00
parent e8b50cb82d
commit d42d1b16af
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=40596

View file

@ -2610,136 +2610,6 @@ bindkey ^[[3~ delete-char # for xterm</programlisting>
</answer>
</qandaentry>
<qandaentry>
<question id="pnp-not-found">
<para>Why is my PnP card not found (or found as
<literal>unknown</literal>)?</para>
</question>
<answer>
<para>The reasons for this behavior are explained by the
following email, posted to the &a.questions; by &a.peter;, in
answer to a question about an internal modem that was no
longer found after an upgrade to
&os;&nbsp;4.<replaceable>X</replaceable> (the comments in
<literal>[]</literal> have been added to clarify the
context).</para>
<note>
<para>The contents of this quotation has been updated from
its original text.</para>
</note>
<blockquote>
<para>The PNP bios preconfigured it [the modem] and left it
laying around in port space, so [in
3.<replaceable>X</replaceable>] the old-style ISA probes
<quote>found</quote> it there.</para>
<para>Under 4.0, the ISA code is much more PnP-centric. It
was possible [in 3.<replaceable>X</replaceable>] for an ISA
probe to find a <quote>stray</quote> device and then for
the PNP device ID to match and then fail due to resource
conflicts. So, it disables the programmable cards first
so this double probing cannot happen. It also means that
it needs to know the PnP IDs for supported PnP hardware.
Making this more user tweakable is on the TODO
list.</para>
</blockquote>
<para>To get the device working again requires finding its PnP
ID and adding it to the list that the ISA probes use to
identify PnP devices. This is obtained using
&man.pnpinfo.8; to probe the device, for example this is the
output from &man.pnpinfo.8; for an internal modem:</para>
<screen>&prompt.root; <userinput>pnpinfo</userinput>
Checking for Plug-n-Play devices...
Card assigned CSN #1
Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff
PnP Version 1.0, Vendor Version 0
Device Description: Pace 56 Voice Internal Plug &amp; Play Modem
Logical Device ID: PMC2430 0x3024a341 #0
Device supports I/O Range Check
TAG Start DF
I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8
[16-bit addr]
IRQ: 4 - only one type (true/edge)</screen>
<para>[more TAG lines elided]</para>
<screen>TAG End DF
End Tag
Successfully got 31 resources, 1 logical fdevs
-- card select # 0x0001
CSN PMC2430 (0x3024a341), Serial Number 0xffffffff
Logical device #0
IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8
IRQ 5 0
DMA 4 0
IO range check 0x00 activate 0x01</screen>
<para>The information you require is in the <literal>Vendor
ID</literal> line at the start of the output. The
hexadecimal number in parentheses
(<literal>0x3024a341</literal> in this example) is the PnP
ID and the string immediately before this
(<literal>PMC2430</literal>) is a unique ASCII ID.</para>
<para>Alternatively, if &man.pnpinfo.8; does not list the card
in question, &man.pciconf.8; can be used instead. This is
part of the output from <command>pciconf -vl</command> for
an onboard sound chip:</para>
<screen>&prompt.root; <userinput>pciconf -vl</userinput>
chip1@pci0:31:5: class=0x040100 card=0x00931028 chip=0x24158086 rev=0x02 hdr=0x00
vendor = 'Intel Corporation'
device = '82801AA 8xx Chipset AC'97 Audio Controller'
class = multimedia
subclass = audio</screen>
<para>Here, you would use the <varname>chip</varname> value,
<literal>0x24158086</literal>.</para>
<para>This information (<literal>Vendor ID</literal> or
<varname>chip</varname> value) needs adding to the file
<filename>/usr/src/sys/dev/sio/sio_isa.c</filename>.</para>
<para>You should first make a backup of
<filename>sio_isa.c</filename> just in case things go wrong.
You will also need it to make the patch to submit with your
PR (you are going to submit a PR, are you not?) then edit
<filename>sio_isa.c</filename> and search for the
line:</para>
<programlisting>static struct isa_pnp_id sio_ids[] = {</programlisting>
<para>Then scroll down to find the correct place to add the
entry for your device. The entries look like this, and are
sorted on the ASCII Vendor ID string which should be
included in the comment to the right of the line of code
along with all (if it will fit) or part of the
<emphasis>Device Description</emphasis> from the output of
&man.pnpinfo.8;:</para>
<programlisting>{0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */
{0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */
{0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */
{0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */
{0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */</programlisting>
<para>Add the hexadecimal Vendor ID for your device in the
correct place, save the file, rebuild your kernel, and
reboot. Your device should now be found as an
<devicename>sio</devicename> device.</para>
</answer>
</qandaentry>
<qandaentry>
<question id="nlist-failed">
<para>Why do I get the error <errorname>nlist