- 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

Reply via email to