lkml.org 
[lkml]   [2003]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] PnP Fixes for 2.6.0-test9
    # --------------------------------------------
    # 03/11/15 ambx1@neo.rr.com 1.1450
    # [BUG][PATCH] isapnp does not detect some cards
    #
    # From: Paul L. Rogers <rogerspl@datasync.com>
    #
    # 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@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:58    [from the cache]
    ©2003-2011 Jasper Spaans