[PATCH 10/14] pcmcia: allow function-ID based match

Dominik Brodowski linux at dominikbrodowski.net
Sun Feb 27 05:11:43 EST 2005


The "func_id"-based matching is very fuzzy and can lead to false 
positives. Therefore, it should be tried to avoid relying on these
matches. Until most/all existing func_id-based matches are replaced
by manf_id/card_id/prod_id matches (a patch which will ask to send 
the appropriate card information to the PCMCIA mailing list will be 
added once other, more pressing issues are adressed), we need to 
emulate cardmgr behaviour by allowing func_id matches if no 
manf_id/card_id/prod_id match occurs. This can only be done in
userspace because of modules possibly loaded with long delays. So,
add a per-device sysfs file for this purpose.

Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>
Index: 2.6.11-rc5/drivers/pcmcia/ds.c
===================================================================
--- 2.6.11-rc5.orig/drivers/pcmcia/ds.c	2005-02-27 08:42:03.000000000 +0100
+++ 2.6.11-rc5/drivers/pcmcia/ds.c	2005-02-27 08:42:43.000000000 +0100
@@ -656,7 +656,7 @@
 static void pcmcia_bus_rescan(void)
 {
 	/* must be called with skt_sem held */
-        bus_rescan_devices(&pcmcia_bus_type);
+	bus_rescan_devices(&pcmcia_bus_type);
 }
 
 static inline int pcmcia_devmatch(struct pcmcia_device *dev,
@@ -869,6 +869,22 @@
 pcmcia_device_stringattr(prod_id3, prod_id[2]);
 pcmcia_device_stringattr(prod_id4, prod_id[3]);
 
+
+static ssize_t pcmcia_store_allow_func_id_match (struct device * dev, const char * buf, size_t count)
+{
+	struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
+        if (!count)
+                return -EINVAL;
+
+	down(&p_dev->socket->skt_sem);
+	p_dev->allow_func_id_match = 1;
+	up(&p_dev->socket->skt_sem);
+
+	bus_rescan_devices(&pcmcia_bus_type);
+
+	return count;
+}
+
 static struct device_attribute pcmcia_dev_attrs[] = {
 	__ATTR(function, 0444, func_show, NULL),
 	__ATTR_RO(func_id),
@@ -878,6 +894,7 @@
 	__ATTR_RO(prod_id2),
 	__ATTR_RO(prod_id3),
 	__ATTR_RO(prod_id4),
+	__ATTR(allow_func_id_match, 0200, NULL, pcmcia_store_allow_func_id_match),
 	__ATTR_NULL,
 };
 



More information about the linux-pcmcia mailing list