Re: [PATCH] PnP Fixes for 2.6.0-test9

From: Adam Belay
Date: Sun Nov 16 2003 - 00:34:56 EST


# --------------------------------------------
# 03/11/15 ambx1@xxxxxxxxxx 1.1450
# [BUG][PATCH] isapnp does not detect some cards
#
# From: Paul L. Rogers <rogerspl@xxxxxxxxxxxx>
#
# Plug and Play Cards (Tested only one at a time. One ISA slot):
# NCI1000 NewCom 33.6KifxC ISA PnP Data/Fax Modem
# ADP1542 Adaptec AHA-1542CP ISA PnP SCSI Host Adapter
#
# Problem Description:
# The Linux ISA PnP subsystem assumes that the checksum of the
# Vendor ID and the Serial Number returned by a PnP card in
# the Config state is valid. However, the Plug and Play ISA
# Specification (Version 1.0a) found at
# http://www.nondot.org/sabre/os/files/PlugNPlay/PNP-ISA-v1.0a.pdf,
# states in Section 4.5 that when a card enters the Config state
# directly from the Sleep state and the 9-byte serial identifier
# is read, the checksum byte is not valid.
#
# While some cards do return a valid checksum in this case
# (ADP1542), others do not (NCI1000) and thus are not detected
# since isapnp_build_device_list requires that the computed
# checksum match the checksum returned by the card.
#
# Workaround:
# Continue using the isapnp utility instead of the kernel PnP support.
#
# Proposed solution:
# The attached patch removes checksum related tests from
# isapnp_build_device_list and instead relies on the behavior
# documented in Section 6.1 of the PnP ISA Specification that
# specifies that Bit[7] of Vendor ID Byte 0 must be 0 to
# determine if the selected CSN is returning valid data.
#
# A longer term solution would be for isapnp_build_device_list to
# only access CSNs that were assigned during the Isolation process.
# --------------------------------------------
#
diff -Nru a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c
--- a/drivers/pnp/isapnp/core.c Sun Nov 16 00:24:55 2003
+++ b/drivers/pnp/isapnp/core.c Sun Nov 16 00:24:55 2003
@@ -890,11 +890,9 @@
header[4], header[5], header[6], header[7], header[8]);
printk(KERN_DEBUG "checksum = 0x%x\n", checksum);
#endif
- /* Don't be strict on the checksum, here !
- e.g. 'SCM SwapBox Plug and Play' has header[8]==0 (should be: b7)*/
- if (header[8] == 0)
- ;
- else if (checksum == 0x00 || checksum != header[8]) /* not valid CSN */
+ /* Per Section 6.1 of the Plug and Play ISA Specification (Version 1.0a), */
+ /* Bit[7] of Vendor ID Byte 0 must be 0 */
+ if (header[0] & 0x80) /* not valid CSN */
continue;
if ((card = isapnp_alloc(sizeof(struct pnp_card))) == NULL)
continue;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/