Added information in Troubleshooting about PnP devices that stop

working after u/g to 4.x
This commit is contained in:
Mark Ovens 2000-09-25 22:29:16 +00:00
parent 16084dbeb2
commit c6f056f2c6
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=8024
2 changed files with 220 additions and 2 deletions

View file

@ -15,7 +15,7 @@
</author>
</authorgroup>
<pubdate>$FreeBSD: doc/en_US.ISO_8859-1/books/faq/book.sgml,v 1.96 2000/09/24 07:01:50 kris Exp $</pubdate>
<pubdate>$FreeBSD: doc/en_US.ISO_8859-1/books/faq/book.sgml,v 1.97 2000/09/25 15:54:03 marko Exp $</pubdate>
<abstract>
<para>This is the FAQ for FreeBSD versions 2.X, 3.X, and 4.X. All entries
@ -3548,6 +3548,115 @@ timekeeping.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>My PnP card is no longer found (or found as
<literal>unknown</literal>) since upgrading to FreeBSD 4.x</para>
</question>
<answer>
<para>FreeBSD 4.x is now much more <emphasis>PnP-centric</emphasis>
and this has had the side effect of some PnP devices (e.g. sound
cards and internal modems) not working even though they worked
under FreeBSD 3.x.</para>
<para>The reasons for this behaviour are explained by the following
e-mail, posted to the freebsd-questions mailing list by Peter Wemm,
in answer to a question about an internal modem that was no longer
found after an upgrade to FreeBSD 4.x (the comments in
<literal>[]</literal> have been added to clarify the context.</para>
<blockquote>
<para>The PNP bios preconfigured it [the modem] and left it
laying around in port space, so [in 3.x] 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.x] 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 id's 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 & 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 <quote>Vendor ID</quote>
line at the start of the output. The hexadecimal number in
parentheses (0x3024a341 in this example) is the PnP id and the
string immediately before this (PMC2430) is a unique ASCII
id. This information needs adding to the file
<filename>/usr/src/sys/isa/sio.c</filename>.</para>
<para>You should first make a backup of <filename>sio.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, aren't
you?) then edit <filename>sio.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 <literal>sio</literal> device as it was
under FreeBSD 3.x</para>
</answer>
</qandaentry>
</qandaset>
</chapter>

View file

@ -15,7 +15,7 @@
</author>
</authorgroup>
<pubdate>$FreeBSD: doc/en_US.ISO_8859-1/books/faq/book.sgml,v 1.96 2000/09/24 07:01:50 kris Exp $</pubdate>
<pubdate>$FreeBSD: doc/en_US.ISO_8859-1/books/faq/book.sgml,v 1.97 2000/09/25 15:54:03 marko Exp $</pubdate>
<abstract>
<para>This is the FAQ for FreeBSD versions 2.X, 3.X, and 4.X. All entries
@ -3548,6 +3548,115 @@ timekeeping.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>My PnP card is no longer found (or found as
<literal>unknown</literal>) since upgrading to FreeBSD 4.x</para>
</question>
<answer>
<para>FreeBSD 4.x is now much more <emphasis>PnP-centric</emphasis>
and this has had the side effect of some PnP devices (e.g. sound
cards and internal modems) not working even though they worked
under FreeBSD 3.x.</para>
<para>The reasons for this behaviour are explained by the following
e-mail, posted to the freebsd-questions mailing list by Peter Wemm,
in answer to a question about an internal modem that was no longer
found after an upgrade to FreeBSD 4.x (the comments in
<literal>[]</literal> have been added to clarify the context.</para>
<blockquote>
<para>The PNP bios preconfigured it [the modem] and left it
laying around in port space, so [in 3.x] 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.x] 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 id's 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 & 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 <quote>Vendor ID</quote>
line at the start of the output. The hexadecimal number in
parentheses (0x3024a341 in this example) is the PnP id and the
string immediately before this (PMC2430) is a unique ASCII
id. This information needs adding to the file
<filename>/usr/src/sys/isa/sio.c</filename>.</para>
<para>You should first make a backup of <filename>sio.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, aren't
you?) then edit <filename>sio.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 <literal>sio</literal> device as it was
under FreeBSD 3.x</para>
</answer>
</qandaentry>
</qandaset>
</chapter>