• [CFT][PATCH] net/8390: apne.c - read out and log PCMCIA cftable entries

    From Michael Schmitz@21:1/5 to All on Sun Aug 22 03:50:01 2021
    Could someone with a 'normal' Amiga PCMCIA ethernet card (supported
    by the current apne driver) please test this patch and send me the
    kernel log output relating to the apne driver probe?

    At least for the 16 bit card that Alex tested, the PCMCIA config
    tuple data correctly records the 16 bit IO width of the card. I
    need to know whether 8 bit cards also report 16 bit IO width, or
    only 8 bit.

    The IO width from the config table data, iff accurate, would allow
    auto-probing of 16 bit cards. That would make it easier to get
    a patch to support 16 bit cards accepted.

    Thanks,

    Michael


    Read the card's CISTPL_CFTABLE_ENTRY tuple, and log to the
    kernel log buffer. This tuple ought to hold information
    about the IO width of the card memory window that can be used
    in autoprobing to detect 16 bit datapath cards.

    CC: Debian/m68k <debian-68k@lists.debian.org>
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    ---
    drivers/net/ethernet/8390/apne.c | 16 ++++++++++++++++
    1 file changed, 16 insertions(+)

    diff --git a/drivers/net/ethernet/8390/apne.c b/drivers/net/ethernet/8390/apne.c
    index fe6c834..363c1d5 100644
    --- a/drivers/net/ethernet/8390/apne.c
    +++ b/drivers/net/ethernet/8390/apne.c
    @@ -127,6 +127,8 @@ struct net_device * __init apne_probe(int unit)

    #ifndef MANUAL_CONFIG
    char tuple[8];
    + char cftuple[258];
    + int len_cftuple = 0;
    #endif
    int err;

    @@ -168,6 +170,20 @@ struct net_device * __init apne_probe(int unit)
    free_netdev(dev);
    return ERR_PTR(-ENODEV);
    }
    +
    + if ((len_cftuple = pcmcia_copy_tuple(CISTPL_CFTABLE_ENTRY, cftuple, 256)) < 32) {
    + pr_cont("no cftable entry for card\n");
    + /* XXX: shouldn't we re-enable irq here? */
    + } else {
    + int i;
    +
    + pr_info("CFTABLE_ENTRY tuple:\n");
    + for (i=0; i<len_cftuple; i++) {
    + pr_cont("%hhx ", cftuple[i]);
    + if (i > 0 && !(i % 10)) pr_cont("\n");
    + }
    + pr_cont("\n");
    + }
    #endif

    pr_cont("ethernet