kernel 2.6.13 - socket driver set_io_map() no longer called?

Kars de Jong jongk at linux-m68k.org
Thu Sep 15 16:23:10 EDT 2005


Hello everyone,


I wrote a socket driver for my Amiga 1200 PCMCIA socket a long time ago,
but never got it included in the mainstream kernel yet. I adapted it to
the 2.6 model at the beginning of this year and had it working OK with
kernel version 2.6.8.1.

Now I am trying to get it to work with 2.6.13, but I can't seem to get
it to behave.

The driver is of type SS_CAP_STATIC_MAP, but (and this is different from
all other "static" drivers) the io_offset field is 0.

This is because, depending on the map type, 8-bit accesses to odd I/O
ports need to be done using a different io_offset. So this is handled at
a lower level (in inb() / outb() and friends).

Compared to 2.6.8.1, I have set the resource_ops field to
&pccard_static_ops.

I have noticed that my set_io_map() function no longer gets called. This
is a problem, because I need to set up some offsets based on the I/O map
type requested (MAP_16BIT, MAP_AUTOSZ etc.).

There are other "static" socket drivers (with io_offset != 0) which
provide a set_io_map() function which doesn't get called anymore either
(probably, looking at the code in, for example,
drivers/pcmcia/soc_common.c, not a good thing!).

Also, I think the code in drivers/pcmcia/pcmcia_resource.c: needs to
handle io_offset == 0 differently. Now it ends up calling
pcmcia_find_io_region() which returns NULL when the pccard_static_ops
resource manager is used, which in turn causes alloc_io_space() to fail.

I hope the above makes any sense. If not, please let me know so I can
hopefully clarify what I mean.


Kind regards,

Kars.





More information about the linux-pcmcia mailing list