pcmcia driver model support [5/5]
PATCH 1/1 pcmcia driver model support [5/5]
I'm alright with dropping this patch if it creates a potential compatibility problem with possible 2.6 future *hotplug interfaces, but I do think that it is rather reasonable and close to whatever the final interface will be.
[PCMCIA] add *hotplug support
This patch allows for hotplug events. It reports vers_1 information.
drivers/pcmcia/ds.c +54 -0
@@ -577,6 +577,59 @@up (&s->device_mutex); } +#ifdef CONFIG_HOTPLUG + +int pcmcia_bus_hotplug (struct device *pdev,char **envp,int num_envp, +char *buffer,int buffer_size) +{ +struct pcmcia_device *dev; +char *scratch; +int i =0 ; +int length =0 ; + +if (!pdev) +return -ENODEV ; + + dev =to_pcmcia_device (pdev); + + scratch = buffer; + +/* stuff we want to pass to /sbin/hotplug */ + envp[i++] = scratch; + length +=snprintf (scratch, buffer_size - length,"PRODUCT=" ); +for (i =0 ; i < dev->vers_1.ns; i++) { + length +=snprintf (scratch,buffer_size - length,"%s\"%s\"" , (i>0 ) ?"," :"" , + dev->vers_1.str+dev->vers_1.ofs[i]); + } + +if ((buffer_size - length <=0 ) || (i >= num_envp)) +return -ENOMEM ; + ++length; + scratch += length; + + envp [i++] = scratch; + length +=snprintf (scratch, buffer_size - length,"MANFID=0x%04x,0x%04x" , + dev->manfid.manf, dev->manfid.card); +if ((buffer_size - length <=0 ) || (i >= num_envp)) +return -ENOMEM ; + ++length; + scratch += length; + + envp[i] =0 ; + +return 0 ; +} + +#else /* CONFIG_HOTPLUG */ + +int pcmcia_bus_hotplug (struct device *pdev,char **envp,int num_envp, +char *buffer,int buffer_size) +{ +return -ENODEV ; +} + +#endif /* CONFIG_HOTPLUG */ +/*====================================================================== These manage a ring buffer of events pending for one user process
@@ -1332,6 +1385,7 @@struct bus_type pcmcia_bus_type = { .name ="pcmcia" , + .hotplug = pcmcia_bus_hotplug, };EXPORT_SYMBOL (pcmcia_bus_type);