Skip to contentSkip to conversation

Linux kernel PCMCIA linear flash memory card fix

PATCH New Tony Lindgren 1 participant 1 message Jan 27, 2002 Pcmcia

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Linux kernel PCMCIA linear flash memory card fix

Hi all,

Here's a little patch to fix the 2.4.17 PCMCIA to make linear flash cards work. The patch should work with all the recent kernels.

Linear flash card are rarely used, but are needed to boot some embedded systems, like the AMD ELAN. They are also used in some Cisco routers.

Just FYI, here's some Linux related projects where linear flash cards may be used:

Wireless access points running Linux:
http://opensource.instant802.com/

Alios boot loader for AMD ELAN:
http://www.telos.de/linux/alios/default_e.htm

Read Cisco flash cards from Linux:
ftp://ftp.bbc.co.uk/pub/ciscoflash/

I'm CC'ing dhinds, as I guess he's taking care of the PCMCIA in the kernel?

Here's a short description of the fix:

Basically there were two problems; The RegisterMTD ioctl was accidentally dropped at some point, so the flash cards would not register. Then the reference to the flash card memory window was incorrect, so the cards were not seen, and the flash drivers would not unload after use.

Cheers,

Tony

drivers/pcmcia/bulkmem.c +1 -1
diff -urN -X ./dontdiff linux-2.4.17-vanilla/drivers/pcmcia/bulkmem.c linux-2.4.17-tony/drivers/pcmcia/bulkmem.c
@@ -300,7 +300,7 @@
     {
 	window_handle_t w;
         int ret = pcmcia_request_window(a1, a2, &w);
-        (window_handle_t *)a1 = w;
+        *(window_handle_t *)a1 = w;
 	return  ret;
     }
         break;
drivers/pcmcia/cs.c +2 -3
diff -urN -X ./dontdiff linux-2.4.17-vanilla/drivers/pcmcia/cs.c linux-2.4.17-tony/drivers/pcmcia/cs.c
@@ -2283,9 +2283,8 @@
         *(eraseq_handle_t *)a1 = w;
 	return  ret;
     }
-        break;
-/*	return pcmcia_register_erase_queue(a1, a2); break; */
-
+	break;
+    case RegisterMTD:
 	return pcmcia_register_mtd(a1, a2); break;
     case ReleaseConfiguration:
 	return pcmcia_release_configuration(a1); break;