Subject: Re: pcmcia io alloc and map (can this be right?)
To: Garrett D'Amore <garrett_damore@tadpole.com>
From: Sverre Froyen <sverre@viewmark.com>
List: tech-kern
Date: 02/18/2006 16:46:15
On Saturday 18 February 2006 14:44, Garrett D'Amore wrote:
> PCMCIA is "funny".
>
> There is an attempt to make the bus spaces exposed to code (drivers)
> either zero based or based off of some small value.  This emulates the
> IO space addresses of 0xYYY (where YYY is small) that are used in PCs,
> for which PCMCIA is designed.
>
> In real life, the IO spaces could be mapped elsewhere.  It might
> actually be pretty inconvenient to stick the IO space in low "IO" space,
> because the space is so crowded on PCs.
>
> So it seems to me to be perfectly reasonable that a PCMCIA controller
> would do this.  I don't think you need to worry about it.

I understand (I hope) the concept of mapping the pcmcia cards address space 
into a window in the processors IO space.  What puzzles me is that the window 
appears to be 0x4000-0x4008 yet the card is being accessed at addresses 
starting at 0x43f8 (outside of that window).  It seems to me that the window 
ought to be 0x4000-0x4fff.

> (If you're used to PCs, this might be somewhat surprising, since usually
> the bus_addr_t is the same as the physical address.  Other platforms,
> like my Alchemy code for MIPS, don't do this.)
>
>     -- Garrett
>
> Sverre Froyen wrote:
> > Hi,
> >
> > With a pcmcia modem card (which does not work with NetBSD) I observe the
> > following from the dmesg output (attached):
> >
> > The function pcmcia_function_configure is called.  It calls the following
> > functions with the attendant dmesg output in parenthesis:
> >
> > pcmcia_config_alloc
> > 	pccbb_pcmcia_io_alloc
> > 		rbus_space_alloc
> > 		(addr 3f8, size 8, mask 3ff, align 400)
> > 	(alloc port 0x4000+0x8)
> > pcmcia_config_map
> > 	pcmcia_io_map
> > 		pccbb_pcmcia_io_map
> > 		(window 0 io8 port 4000+8)
> > 			pccbb_pcmcia_do_io_map
> > 			(win 0 addr 0x4000 size 0x8 width 8)
> > 			(start 00 40, stop 07 40, ioctl 00 enable 40)
> >
> > When attempting to read or write to the modem, the bus_space read and
> > write functions are using a bus_space_tag_t value of 0 (IO space) and a
> > bus_addr_t value of 0x43f8.  This appears to conflict with the dmesg
> > output from pccbb_pcmcia_io_alloc which says the address space ranges
> > from 0x4000 to 0x4008 (not including 0x43f8) and also with the output
> > from
> > pccbb_pcmcia_do_io_map which maps the same range.
> >
> > Comments and help are appreciated!
> >
> > Attached is the dmesg output before inserting the modem card (dmesg) and
> > the additional dmesg output when the card is inserted (dmesg_pcmcia).
> >
> > Thanks,
> >
> > Sverre