How to use REAL "Anonymous Memory"?
Rossen Georgiev
rz70 at gmx.at
Mon Mar 10 08:44:41 EDT 2008
Hello!
I am trying to use an "Anonymous Memory" with PCMCIA - kernel
version 2.6.23.16 and pcmciautils-014.
The HW configuration is as follow:
Yenta: CardBus bridge found at 0000:00:0a.0 [3412:7856]
Yenta: ISA IRQ mask 0x02a0, PCI irq 12
Socket status: 30000059
Yenta: CardBus bridge found at 0000:00:0a.1 [3412:7856]
Yenta: ISA IRQ mask 0x02a0, PCI irq 15
Socket status: 30000059
On Socket 0 a CF is pluged in.
On Socket 1 a "REAL" "Anonymous Memory is pluged in.
There is NO CIS for the anonymous memory.
When the pcmcia-socket-startup is done for Socket 0,
the CF is properly found and mapped to ide-cs driver.
The kernel is started with following parameters:
pcmcia_core.pc_debug=5 pcmcia.pc_debug=5 yenta_socket.pc_debug=5
When the pcmcia-socket-startup is done for Socket 1,
the kernel report following problem:
Mar 10 12:24:37 platf106 kernel: cs: IO port probe 0xa00-0xaff: clean.
Mar 10 12:24:39 platf106 kernel: cs: IO port probe 0x1000-0x17ff: clean.
Mar 10 12:24:46 platf106 kernel: ds: re-scanning socket 1
Mar 10 12:24:46 platf106 kernel: cs: memory probe 0xa0000000-0xa0ffffff:<7>cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x00 0xe0 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x00 0xc0 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x00 0x00 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x00 0xe0 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
....
....
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x00 0x00 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: excluding 0xa0000000-0xa01fffff
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(1, 0x0, 2)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0xc5 0x80 ...
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: pcmcia_read_cis_mem(0, 0x0, 5)
Mar 10 12:24:46 platf106 kernel: cs: pcmcia_socket1: 0xff 0xff 0x33 0x33 ...
Mar 10 12:24:46 platf106 kernel: ds: invalid CIS or invalid resources
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Having a look into drivers/pcmcia/
static int pcmcia_card_add(struct pcmcia_socket *s)
{
......
ret = pccard_validate_cis(s, BIND_FN_ALL, &cisinfo);
if (ret || !cisinfo.Chains) {
ds_dbg(0, "invalid CIS or invalid resources\n");
return -ENODEV;
}
.......
}
and from drivers/pcmcia/cistpl.c
/*======================================================================
This tries to determine if a card has a sensible CIS. It returns
the number of tuples in the CIS, or 0 if the CIS looks bad. The
checks include making sure several critical tuples are present and
valid; seeing if the total number of tuples is reasonable; and
looking for tuples that use reserved codes.
======================================================================*/
int pccard_validate_cis(struct pcmcia_socket *s, unsigned int function, cisinfo_t *info)
So, acordind to the code when a PCMCIA card does have bad CIS or NO CIS at all,
it will be not added and mapped to corresponding driver.
So my question is if there is a way to handle an Anonymous Memory
with the the 2.6.x kernels and pcmciautils? I did search in pcmcia mailing list, but did not find anything about. Does somebody use such "Anonymous Memory"?
As experiment I did comment out the "return -ENODEV" in ds.c.
( which is not very correct from programming style ) and
the nulled cisinfo_t cisinfo reports "Anonymous memory" CIS.
Then the "Anonymous memory" was mapped successfully to pcmciamtd and map_mem
drivers. But this is not a solution coming from main stream kernel.
Thank you for your time!
Rossen
--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger
More information about the linux-pcmcia
mailing list