Questions about ioport-assignments

Wolfram Sang w.sang at
Wed Jan 13 18:15:15 EST 2010


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:

(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,


Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 |  |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <>

More information about the linux-pcmcia mailing list