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