Hi, I borrowed a modem/network-combo card for testing, namely a D-Link DMF-560TX. It does not work out of the box:
[ 2227.051073] pcmcia 0.0: pcmcia: registering new device pcmcia0.0 [ 2227.105828] eth%d: pcnet_reset_8390() did not complete. [ 2227.115966] pcnet_cs: unable to read hardware net address for io base 0xc300 [ 2227.845576] eth%d: pcnet_reset_8390() did not complete. [ 2227.855714] pcnet_cs: unable to read hardware net address for io base 0xc300 (/proc/ioports does also _not_ list occupied ports at 0xc300.) The following page describes a workaround which still applies: http://tuxmobil.org/pcmcia_dlink_dmf_560tx_lan_modem_linux.html (short summary: exclude the ioport region assigned to the PCI-host-controller, so mapping will be forced to ioport 0x300 instead of e.g. 0xc300) Playing around, I made this change which also helps: diff --git a/drivers/net/pcmcia/pcnet_cs.c b/drivers/net/pcmcia/pcnet_cs.c index 776cad2..15904ff 100644 --- a/drivers/net/pcmcia/pcnet_cs.c +++ b/drivers/net/pcmcia/pcnet_cs.c @@ -497,8 +497,8 @@ static int try_io_port(struct pcmcia_device *link) link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; } + link->io.IOAddrLines = 16; if (link->io.BasePort1 == 0) { - link->io.IOAddrLines = 16; for (j = 0; j < 0x400; j += 0x20) { link->io.BasePort1 = j ^ 0x300; link->io.BasePort2 = (j ^ 0x300) + 0x10; Now, i have a few questions: - Is it just a buggy card if it works at 0x300 but not 0xc300 (or is it maybe a problem with Linux assigning the io area)? - Why is IOAddrLines forced to 16 (and thus alignment to 0x10000), but only if BasePort1 is 0? Thanks for assistance, Wolfram -- Pengutronix e.K. | Wolfram Sang | Industrial Linux Solutions | http://www.pengutronix.de/ |
signature.asc
Description: Digital signature
_______________________________________________ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia