net/wireless/libertas: do not call wiphy_unregister() w/o wiphy_register()
[safe/jmp/linux-2.6] / drivers / net / wireless / ray_cs.c
index 5b8e3e4..84c530a 100644 (file)
@@ -1871,10 +1871,8 @@ static void ray_update_parm(struct net_device *dev, UCHAR objid, UCHAR *value,
 /*===========================================================================*/
 static void ray_update_multi_list(struct net_device *dev, int all)
 {
-       struct dev_mc_list *dmi, **dmip;
        int ccsindex;
        struct ccs __iomem *pccs;
-       int i = 0;
        ray_dev_t *local = netdev_priv(dev);
        struct pcmcia_device *link = local->finder;
        void __iomem *p = local->sram + HOST_TO_ECF_BASE;
@@ -1895,9 +1893,11 @@ static void ray_update_multi_list(struct net_device *dev, int all)
                writeb(0xff, &pccs->var);
                local->num_multi = 0xff;
        } else {
+               struct dev_mc_list *dmi;
+               int i = 0;
+
                /* Copy the kernel's list of MC addresses to card */
-               for (dmip = &dev->mc_list; (dmi = *dmip) != NULL;
-                    dmip = &dmi->next) {
+               netdev_for_each_mc_addr(dmi, dev) {
                        memcpy_toio(p, dmi->dmi_addr, ETH_ALEN);
                        dev_dbg(&link->dev,
                              "ray_update_multi add addr %02x%02x%02x%02x%02x%02x\n",
@@ -1950,7 +1950,7 @@ static void set_multicast_list(struct net_device *dev)
        if (dev->flags & IFF_ALLMULTI)
                ray_update_multi_list(dev, 1);
        else {
-               if (local->num_multi != dev->mc_count)
+               if (local->num_multi != netdev_mc_count(dev))
                        ray_update_multi_list(dev, 0);
        }
 } /* end set_multicast_list */
@@ -2854,18 +2854,8 @@ static int build_auth_frame(ray_dev_t *local, UCHAR *dest, int auth_type)
 
 /*===========================================================================*/
 #ifdef CONFIG_PROC_FS
-static void raycs_write(const char *name, write_proc_t *w, void *data)
-{
-       struct proc_dir_entry *entry =
-           create_proc_entry(name, S_IFREG | S_IWUSR, NULL);
-       if (entry) {
-               entry->write_proc = w;
-               entry->data = data;
-       }
-}
-
-static int write_essid(struct file *file, const char __user *buffer,
-                      unsigned long count, void *data)
+static ssize_t ray_cs_essid_proc_write(struct file *file,
+               const char __user *buffer, size_t count, loff_t *pos)
 {
        static char proc_essid[33];
        unsigned int len = count;
@@ -2879,8 +2869,13 @@ static int write_essid(struct file *file, const char __user *buffer,
        return count;
 }
 
-static int write_int(struct file *file, const char __user *buffer,
-                    unsigned long count, void *data)
+static const struct file_operations ray_cs_essid_proc_fops = {
+       .owner          = THIS_MODULE,
+       .write          = ray_cs_essid_proc_write,
+};
+
+static ssize_t int_proc_write(struct file *file, const char __user *buffer,
+                             size_t count, loff_t *pos)
 {
        static char proc_number[10];
        char *p;
@@ -2903,9 +2898,14 @@ static int write_int(struct file *file, const char __user *buffer,
                nr = nr * 10 + c;
                p++;
        } while (--len);
-       *(int *)data = nr;
+       *(int *)PDE(file->f_path.dentry->d_inode)->data = nr;
        return count;
 }
+
+static const struct file_operations int_proc_fops = {
+       .owner          = THIS_MODULE,
+       .write          = int_proc_write,
+};
 #endif
 
 static struct pcmcia_device_id ray_ids[] = {
@@ -2940,9 +2940,9 @@ static int __init init_ray_cs(void)
        proc_mkdir("driver/ray_cs", NULL);
 
        proc_create("driver/ray_cs/ray_cs", 0, NULL, &ray_cs_proc_fops);
-       raycs_write("driver/ray_cs/essid", write_essid, NULL);
-       raycs_write("driver/ray_cs/net_type", write_int, &net_type);
-       raycs_write("driver/ray_cs/translate", write_int, &translate);
+       proc_create("driver/ray_cs/essid", S_IWUSR, NULL, &ray_cs_essid_proc_fops);
+       proc_create_data("driver/ray_cs/net_type", S_IWUSR, NULL, &int_proc_fops, &net_type);
+       proc_create_data("driver/ray_cs/translate", S_IWUSR, NULL, &int_proc_fops, &translate);
 #endif
        if (translate != 0)
                translate = 1;