- I am using 2.6.31-17
- I would think that pDev->conf.ConfigBase and pDev->conf.Present will only
be valid after a pcmcia_request_configuration. Is it valid in the probe
routine ?
- pDev->conf.ConfigBase is a pointer to attribute memory or common memory
window ? ...and how do I get the other window mapped for access ? (cistpl
config has default flag set and uses device size as common memory size.
Based on our last interchange I assume all attrib memory is sized 4K).
- I havent tried using INT_MEMORY_AND_IO but have tried using access speed
0. I know the card normally works at 200ns
- I believe CardOffset = 0 ... if not I dont know what value to set here ..
where do I get this info ? ( I have an older 2.4 card services version
driver that does the same thing when requesting mappings for both memory
windows ).
Thanks
-R-
----- Original Message -----
From: "Dominik Brodowski" <[email protected]>
To: "raraks" <[email protected]>
Cc: <[email protected]>
Sent: Tuesday, March 23, 2010 8:30 AM
Subject: Re: Card Memory windows in client driver - how to access ?
Hey,
On Mon, Mar 22, 2010 at 04:40:33PM -0700, raraks wrote:
I have a 16 bit PCMCIA card driver I am working on which requires
memory windows to read and write both attribute and common memory.
Card needs only memory windows to work (no IO or irq).
I use the foll. method to get access to the card memory windows
after setting up the window attributes appropriately
link->conf.ConfigBase = parse.config.base;
link->conf.Present = parse.config.rmask[0];
That's already available in
p_dev->conf.ConfigBase
p_dev->conf.Present
no need to overwrite it here. Unless, of course, you're using an oooold
kernel.
link->conf.IntType = INT_MEMORY;
What happens if you set this to INT_MEMORY_AND_IO ?
dev->request_attr_memory.Attributes = ( WIN_DATA_WIDTH_8 |
WIN_MEMORY_TYPE_AM | WIN_ENABLE );
dev->request_attr_memory.Base = 0;
dev->request_attr_memory.Size = 0x1000;
dev->request_attr_memory.AccessSpeed = 200;
Have you tried different accessspeed settings, or keeping it at 0?
ret = pcmcia_request_window(&link, &dev->request_attr_memory,
&dev->handle_attr_memory);
if (ret != 0) {
cs_error(link, RequestWindow, ret);
}
Using cs_error is deprecated.
memreq_attr_memory.CardOffset = 0;
0?
memreq_attr_memory.Page = 0;
ret = pcmcia_map_mem_page(dev->handle_attr_memory, &memreq_attr_memory);
if (ret != 0) {
cs_error(link, MapMemPage, ret);}
dev->attr_memory = ioremap( dev->request_attr_memory.Base,
dev->request_attr_memory.Size);
All the above succeed and then I call pcmcia_request_configuration
Is this ordering correct? IIRC you shouldn't even have to call
pcmcia_request_configuration...
Best,
Dominik
_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia