]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Staging: Merge staging-next into Linus's tree
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 5 Aug 2010 21:18:03 +0000 (14:18 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 5 Aug 2010 21:18:03 +0000 (14:18 -0700)
Conflicts:
drivers/staging/Kconfig
drivers/staging/batman-adv/bat_sysfs.c
drivers/staging/batman-adv/device.c
drivers/staging/batman-adv/hard-interface.c
drivers/staging/cx25821/cx25821-audups11.c

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
15 files changed:
1  2 
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/batman-adv/bat_sysfs.c
drivers/staging/batman-adv/hard-interface.c
drivers/staging/comedi/drivers/adl_pci9111.c
drivers/staging/comedi/drivers/cb_pcidda.c
drivers/staging/cx25821/cx25821-alsa.c
drivers/staging/hv/channel_mgmt.c
drivers/staging/hv/hv_utils.c
drivers/staging/hv/vmbus_drv.c
drivers/staging/memrar/memrar_handler.c
drivers/staging/rt2860/usb_main_dev.c
drivers/staging/rtl8192su/r8192U_core.c
drivers/staging/rtl8192u/r8192U_core.c
drivers/staging/winbond/wbusb.c

diff --combined drivers/staging/Kconfig
index 0e4122ed1b363fd8581d71268b24d1720c664562,a5e097461c62e6cb55a43ea442debc94c4b582c5..4a7a7a7f11b67b6efd6b559023824dadeefdff07
@@@ -97,6 -97,8 +97,8 @@@ source "drivers/staging/octeon/Kconfig
  
  source "drivers/staging/serqt_usb2/Kconfig"
  
+ source "drivers/staging/spectra/Kconfig"
  source "drivers/staging/quatech_usb2/Kconfig"
  
  source "drivers/staging/vt6655/Kconfig"
@@@ -109,13 -111,15 +111,13 @@@ source "drivers/staging/hv/Kconfig
  
  source "drivers/staging/vme/Kconfig"
  
 -source "drivers/staging/rar_register/Kconfig"
 -
  source "drivers/staging/memrar/Kconfig"
  
  source "drivers/staging/sep/Kconfig"
  
  source "drivers/staging/iio/Kconfig"
  
- source "drivers/staging/ramzswap/Kconfig"
+ source "drivers/staging/zram/Kconfig"
  
  source "drivers/staging/wlags49_h2/Kconfig"
  
@@@ -127,8 -131,6 +129,6 @@@ source "drivers/staging/samsung-laptop/
  
  source "drivers/staging/sm7xx/Kconfig"
  
- source "drivers/staging/dt3155/Kconfig"
  source "drivers/staging/dt3155v4l/Kconfig"
  
  source "drivers/staging/crystalhd/Kconfig"
@@@ -145,7 -147,13 +145,15 @@@ source "drivers/staging/mrst-touchscree
  
  source "drivers/staging/msm/Kconfig"
  
 +source "drivers/staging/lirc/Kconfig"
 +
+ source "drivers/staging/easycap/Kconfig"
+ source "drivers/staging/solo6x10/Kconfig"
+ source "drivers/staging/tidspbridge/Kconfig"
+ source "drivers/staging/quickstart/Kconfig"
  endif # !STAGING_EXCLUDE_BUILD
  endif # STAGING
diff --combined drivers/staging/Makefile
index ecfb0bb990b6222d1cc7fcbee550bf6ec1c8856c,4dcccf14b44c1a20b0bbaedaa815acb103b91832..ca5c03eb3ce36e233280f7f4bb00ceae5697e4e9
@@@ -8,7 -8,6 +8,7 @@@ obj-$(CONFIG_SLICOSS)            += slicoss
  obj-$(CONFIG_VIDEO_GO7007)    += go7007/
  obj-$(CONFIG_VIDEO_CX25821)   += cx25821/
  obj-$(CONFIG_VIDEO_TM6000)    += tm6000/
 +obj-$(CONFIG_LIRC_STAGING)    += lirc/
  obj-$(CONFIG_USB_IP_COMMON)   += usbip/
  obj-$(CONFIG_W35UND)          += winbond/
  obj-$(CONFIG_PRISM2_USB)      += wlan-ng/
@@@ -23,6 -22,7 +23,7 @@@ obj-$(CONFIG_R8187SE)         += rtl8187se
  obj-$(CONFIG_RTL8192SU)               += rtl8192su/
  obj-$(CONFIG_RTL8192U)                += rtl8192u/
  obj-$(CONFIG_RTL8192E)                += rtl8192e/
+ obj-$(CONFIG_SPECTRA)         += spectra/
  obj-$(CONFIG_TRANZPORT)               += frontier/
  obj-$(CONFIG_DREAM)           += dream/
  obj-$(CONFIG_POHMELFS)                += pohmelfs/
@@@ -36,16 -36,16 +37,15 @@@ obj-$(CONFIG_VT6656)               += vt6656
  obj-$(CONFIG_FB_UDL)          += udlfb/
  obj-$(CONFIG_HYPERV)          += hv/
  obj-$(CONFIG_VME_BUS)         += vme/
 -obj-$(CONFIG_RAR_REGISTER)    += rar_register/
  obj-$(CONFIG_MRST_RAR_HANDLER)        += memrar/
  obj-$(CONFIG_DX_SEP)          += sep/
  obj-$(CONFIG_IIO)             += iio/
- obj-$(CONFIG_RAMZSWAP)                += ramzswap/
+ obj-$(CONFIG_ZRAM)            += zram/
  obj-$(CONFIG_WLAGS49_H2)      += wlags49_h2/
  obj-$(CONFIG_WLAGS49_H25)     += wlags49_h25/
  obj-$(CONFIG_BATMAN_ADV)      += batman-adv/
  obj-$(CONFIG_SAMSUNG_LAPTOP)  += samsung-laptop/
  obj-$(CONFIG_FB_SM7XX)                += sm7xx/
- obj-$(CONFIG_DT3155)          += dt3155/
  obj-$(CONFIG_VIDEO_DT3155)    += dt3155v4l/
  obj-$(CONFIG_CRYSTALHD)               += crystalhd/
  obj-$(CONFIG_CXT1E1)          += cxt1e1/
@@@ -54,3 -54,7 +54,7 @@@ obj-$(CONFIG_ADIS16255)               += adis16255
  obj-$(CONFIG_FB_XGI)          += xgifb/
  obj-$(CONFIG_TOUCHSCREEN_MRSTOUCH)    += mrst-touchscreen/
  obj-$(CONFIG_MSM_STAGING)     += msm/
+ obj-$(CONFIG_EASYCAP)         += easycap/
+ obj-$(CONFIG_SOLO6X10)                += solo6x10/
+ obj-$(CONFIG_TIDSPBRIDGE)     += tidspbridge/
+ obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/
index 212bc21e6d682f7b3e822856be86c1af6f916102,05ca15a6c9f8b7f919f587e35e856d6de1310c2a..b4a8d5eb64fabc4879bd11e27577c2ed12f5b00a
  
  #define to_dev(obj)     container_of(obj, struct device, kobj)
  
- struct bat_attribute {
-       struct attribute attr;
-       ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
-                       char *buf);
-       ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
-                        char *buf, size_t count);
- };
- struct hardif_attribute {
-       struct attribute attr;
-       ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
-                       char *buf);
-       ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
-                        char *buf, size_t count);
- };
  #define BAT_ATTR(_name, _mode, _show, _store) \
  struct bat_attribute bat_attr_##_name = {     \
        .attr = {.name = __stringify(_name),    \
        .store  = _store,                       \
  };
  
- #define BAT_BIN_ATTR(_name, _mode, _read, _write)     \
- struct bin_attribute bat_attr_##_name = {             \
-       .attr = { .name = __stringify(_name),           \
-                 .mode = _mode, },                     \
-       .read = _read,                                  \
-       .write = _write,                                \
- };
- #define HARDIF_ATTR(_name, _mode, _show, _store)      \
- struct hardif_attribute hardif_attr_##_name = {               \
-       .attr = {.name = __stringify(_name),            \
-                .mode = _mode },                       \
-       .show   = _show,                                \
-       .store  = _store,                               \
- };
- static ssize_t show_aggr_ogm(struct kobject *kobj, struct attribute *attr,
+ static ssize_t show_aggr_ogms(struct kobject *kobj, struct attribute *attr,
                             char *buff)
  {
        struct device *dev = to_dev(kobj->parent);
        struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));
        int aggr_status = atomic_read(&bat_priv->aggregation_enabled);
  
-       return sprintf(buff, "status: %s\ncommands: enable, disable, 0, 1\n",
+       return sprintf(buff, "%s\n",
                       aggr_status == 0 ? "disabled" : "enabled");
  }
  
- static ssize_t store_aggr_ogm(struct kobject *kobj, struct attribute *attr,
+ static ssize_t store_aggr_ogms(struct kobject *kobj, struct attribute *attr,
                              char *buff, size_t count)
  {
        struct device *dev = to_dev(kobj->parent);
                if (buff[count - 1] == '\n')
                        buff[count - 1] = '\0';
  
-               printk(KERN_INFO "batman-adv:Invalid parameter for 'aggregate OGM' setting on mesh %s received: %s\n",
-                      net_dev->name, buff);
+               bat_info(net_dev,
+                        "Invalid parameter for 'aggregate OGM' setting"
+                        "received: %s\n", buff);
                return -EINVAL;
        }
  
        if (atomic_read(&bat_priv->aggregation_enabled) == aggr_tmp)
                return count;
  
-       printk(KERN_INFO "batman-adv:Changing aggregation from: %s to: %s on mesh: %s\n",
-              atomic_read(&bat_priv->aggregation_enabled) == 1 ?
-              "enabled" : "disabled", aggr_tmp == 1 ? "enabled" : "disabled",
-              net_dev->name);
+       bat_info(net_dev, "Changing aggregation from: %s to: %s\n",
+                atomic_read(&bat_priv->aggregation_enabled) == 1 ?
+                "enabled" : "disabled", aggr_tmp == 1 ? "enabled" :
+                "disabled");
  
        atomic_set(&bat_priv->aggregation_enabled, (unsigned)aggr_tmp);
        return count;
  }
  
+ static ssize_t show_bond(struct kobject *kobj, struct attribute *attr,
+                            char *buff)
+ {
+       struct device *dev = to_dev(kobj->parent);
+       struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));
+       int bond_status = atomic_read(&bat_priv->bonding_enabled);
+       return sprintf(buff, "%s\n",
+                      bond_status == 0 ? "disabled" : "enabled");
+ }
+ static ssize_t store_bond(struct kobject *kobj, struct attribute *attr,
+                         char *buff, size_t count)
+ {
+       struct device *dev = to_dev(kobj->parent);
+       struct net_device *net_dev = to_net_dev(dev);
+       struct bat_priv *bat_priv = netdev_priv(net_dev);
+       int bonding_enabled_tmp = -1;
+       if (((count == 2) && (buff[0] == '1')) ||
+           (strncmp(buff, "enable", 6) == 0))
+               bonding_enabled_tmp = 1;
+       if (((count == 2) && (buff[0] == '0')) ||
+           (strncmp(buff, "disable", 7) == 0))
+               bonding_enabled_tmp = 0;
+       if (bonding_enabled_tmp < 0) {
+               if (buff[count - 1] == '\n')
+                       buff[count - 1] = '\0';
+               bat_err(net_dev,
+                       "Invalid parameter for 'bonding' setting received: "
+                       "%s\n", buff);
+               return -EINVAL;
+       }
+       if (atomic_read(&bat_priv->bonding_enabled) == bonding_enabled_tmp)
+               return count;
+       bat_info(net_dev, "Changing bonding from: %s to: %s\n",
+                atomic_read(&bat_priv->bonding_enabled) == 1 ?
+                "enabled" : "disabled",
+                bonding_enabled_tmp == 1 ? "enabled" : "disabled");
+       atomic_set(&bat_priv->bonding_enabled, (unsigned)bonding_enabled_tmp);
+       return count;
+ }
  static ssize_t show_vis_mode(struct kobject *kobj, struct attribute *attr,
                             char *buff)
  {
        struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));
        int vis_mode = atomic_read(&bat_priv->vis_mode);
  
-       return sprintf(buff, "status: %s\ncommands: client, server, %d, %d\n",
+       return sprintf(buff, "%s\n",
                       vis_mode == VIS_TYPE_CLIENT_UPDATE ?
-                                                       "client" : "server",
-                      VIS_TYPE_SERVER_SYNC, VIS_TYPE_CLIENT_UPDATE);
+                                                       "client" : "server");
  }
  
  static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr,
        ret = strict_strtoul(buff, 10, &val);
  
        if (((count == 2) && (!ret) && (val == VIS_TYPE_CLIENT_UPDATE)) ||
-           (strncmp(buff, "client", 6) == 0))
+           (strncmp(buff, "client", 6) == 0) ||
+           (strncmp(buff, "off", 3) == 0))
                vis_mode_tmp = VIS_TYPE_CLIENT_UPDATE;
  
        if (((count == 2) && (!ret) && (val == VIS_TYPE_SERVER_SYNC)) ||
                if (buff[count - 1] == '\n')
                        buff[count - 1] = '\0';
  
-               printk(KERN_INFO "batman-adv:Invalid parameter for 'vis mode' setting on mesh %s received: %s\n",
-                      net_dev->name, buff);
+               bat_info(net_dev,
+                        "Invalid parameter for 'vis mode' setting received: "
+                        "%s\n", buff);
                return -EINVAL;
        }
  
        if (atomic_read(&bat_priv->vis_mode) == vis_mode_tmp)
                return count;
  
-       printk(KERN_INFO "batman-adv:Changing vis mode from: %s to: %s on mesh: %s\n",
-              atomic_read(&bat_priv->vis_mode) == VIS_TYPE_CLIENT_UPDATE ?
-              "client" : "server", vis_mode_tmp == VIS_TYPE_CLIENT_UPDATE ?
-              "client" : "server", net_dev->name);
+       bat_info(net_dev, "Changing vis mode from: %s to: %s\n",
+                atomic_read(&bat_priv->vis_mode) == VIS_TYPE_CLIENT_UPDATE ?
+                "client" : "server", vis_mode_tmp == VIS_TYPE_CLIENT_UPDATE ?
+                "client" : "server");
  
        atomic_set(&bat_priv->vis_mode, (unsigned)vis_mode_tmp);
        return count;
@@@ -175,7 -194,7 +194,7 @@@ static ssize_t show_orig_interval(struc
        struct device *dev = to_dev(kobj->parent);
        struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));
  
-       return sprintf(buff, "status: %i\n",
+       return sprintf(buff, "%i\n",
                       atomic_read(&bat_priv->orig_interval));
  }
  
@@@ -190,91 -209,91 +209,87 @@@ static ssize_t store_orig_interval(stru
  
        ret = strict_strtoul(buff, 10, &orig_interval_tmp);
        if (ret) {
-               printk(KERN_INFO "batman-adv:Invalid parameter for 'orig_interval' setting on mesh %s received: %s\n",
-                      net_dev->name, buff);
+               bat_info(net_dev, "Invalid parameter for 'orig_interval' "
+                        "setting received: %s\n", buff);
                return -EINVAL;
        }
  
-       if (orig_interval_tmp <= JITTER * 2) {
-               printk(KERN_INFO "batman-adv:New originator interval too small: %li (min: %i)\n",
-                      orig_interval_tmp, JITTER * 2);
+       if (orig_interval_tmp < JITTER * 2) {
+               bat_info(net_dev, "New originator interval too small: %li "
+                        "(min: %i)\n", orig_interval_tmp, JITTER * 2);
                return -EINVAL;
        }
  
        if (atomic_read(&bat_priv->orig_interval) == orig_interval_tmp)
                return count;
  
-       printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li on mesh: %s\n",
-              atomic_read(&bat_priv->orig_interval),
-              orig_interval_tmp, net_dev->name);
+       bat_info(net_dev, "Changing originator interval from: %i to: %li\n",
+                atomic_read(&bat_priv->orig_interval),
+                orig_interval_tmp);
  
        atomic_set(&bat_priv->orig_interval, orig_interval_tmp);
        return count;
  }
  
- static BAT_ATTR(aggregate_ogm, S_IRUGO | S_IWUSR,
-               show_aggr_ogm, store_aggr_ogm);
- static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode);
- static BAT_ATTR(orig_interval, S_IRUGO | S_IWUSR,
-               show_orig_interval, store_orig_interval);
- static struct bat_attribute *mesh_attrs[] = {
-       &bat_attr_aggregate_ogm,
-       &bat_attr_vis_mode,
-       &bat_attr_orig_interval,
-       NULL,
- };
- static ssize_t transtable_local_read(struct file *filp, struct kobject *kobj,
-                                 struct bin_attribute *bin_attr,
-                                 char *buff, loff_t off, size_t count)
+ #ifdef CONFIG_BATMAN_ADV_DEBUG
+ static ssize_t show_log_level(struct kobject *kobj, struct attribute *attr,
+                            char *buff)
  {
        struct device *dev = to_dev(kobj->parent);
-       struct net_device *net_dev = to_net_dev(dev);
+       struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));
+       int log_level = atomic_read(&bat_priv->log_level);
  
-       return hna_local_fill_buffer_text(net_dev, buff, count, off);
+       return sprintf(buff, "%d\n", log_level);
  }
  
- static ssize_t transtable_global_read(struct file *filp, struct kobject *kobj,
-                                 struct bin_attribute *bin_attr,
-                                 char *buff, loff_t off, size_t count)
+ static ssize_t store_log_level(struct kobject *kobj, struct attribute *attr,
+                             char *buff, size_t count)
  {
        struct device *dev = to_dev(kobj->parent);
        struct net_device *net_dev = to_net_dev(dev);
+       struct bat_priv *bat_priv = netdev_priv(net_dev);
+       unsigned long log_level_tmp;
+       int ret;
  
-       return hna_global_fill_buffer_text(net_dev, buff, count, off);
- }
- static ssize_t originators_read(struct file *filp, struct kobject *kobj,
-                                 struct bin_attribute *bin_attr,
-                                 char *buff, loff_t off, size_t count)
- {
-       struct device *dev = to_dev(kobj->parent);
-       struct net_device *net_dev = to_net_dev(dev);
+       ret = strict_strtoul(buff, 10, &log_level_tmp);
+       if (ret) {
+               bat_info(net_dev, "Invalid parameter for 'log_level' "
+                        "setting received: %s\n", buff);
+               return -EINVAL;
+       }
  
-       return orig_fill_buffer_text(net_dev, buff, count, off);
- }
+       if (log_level_tmp > 3) {
+               bat_info(net_dev, "New log level too big: %li "
+                        "(max: %i)\n", log_level_tmp, 3);
+               return -EINVAL;
+       }
  
- static ssize_t vis_data_read(struct file *filp, struct kobject *kobj,
-                                 struct bin_attribute *bin_attr,
-                                 char *buff, loff_t off, size_t count)
- {
-       struct device *dev = to_dev(kobj->parent);
-       struct net_device *net_dev = to_net_dev(dev);
+       if (atomic_read(&bat_priv->log_level) == log_level_tmp)
+               return count;
  
-       return vis_fill_buffer_text(net_dev, buff, count, off);
 -      bat_info(net_dev, "Changing log level from: %i to: %li\n",
 -               atomic_read(&bat_priv->log_level),
 -               log_level_tmp);
 -
+       atomic_set(&bat_priv->log_level, (unsigned)log_level_tmp);
+       return count;
  }
+ #endif
  
- static BAT_BIN_ATTR(transtable_local, S_IRUGO, transtable_local_read, NULL);
- static BAT_BIN_ATTR(transtable_global, S_IRUGO, transtable_global_read, NULL);
- static BAT_BIN_ATTR(originators, S_IRUGO, originators_read, NULL);
- static BAT_BIN_ATTR(vis_data, S_IRUGO, vis_data_read, NULL);
+ static BAT_ATTR(aggregated_ogms, S_IRUGO | S_IWUSR,
+               show_aggr_ogms, store_aggr_ogms);
+ static BAT_ATTR(bonding, S_IRUGO | S_IWUSR, show_bond, store_bond);
+ static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode);
+ static BAT_ATTR(orig_interval, S_IRUGO | S_IWUSR,
+               show_orig_interval, store_orig_interval);
+ #ifdef CONFIG_BATMAN_ADV_DEBUG
+ static BAT_ATTR(log_level, S_IRUGO | S_IWUSR, show_log_level, store_log_level);
+ #endif
  
- static struct bin_attribute *mesh_bin_attrs[] = {
-       &bat_attr_transtable_local,
-       &bat_attr_transtable_global,
-       &bat_attr_originators,
-       &bat_attr_vis_data,
+ static struct bat_attribute *mesh_attrs[] = {
+       &bat_attr_aggregated_ogms,
+       &bat_attr_bonding,
+       &bat_attr_vis_mode,
+       &bat_attr_orig_interval,
+ #ifdef CONFIG_BATMAN_ADV_DEBUG
+       &bat_attr_log_level,
+ #endif
        NULL,
  };
  
@@@ -283,22 -302,24 +298,24 @@@ int sysfs_add_meshif(struct net_device 
        struct kobject *batif_kobject = &dev->dev.kobj;
        struct bat_priv *bat_priv = netdev_priv(dev);
        struct bat_attribute **bat_attr;
-       struct bin_attribute **bin_attr;
        int err;
  
        /* FIXME: should be done in the general mesh setup
                  routine as soon as we have it */
        atomic_set(&bat_priv->aggregation_enabled, 1);
+       atomic_set(&bat_priv->bonding_enabled, 0);
        atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE);
        atomic_set(&bat_priv->orig_interval, 1000);
+       atomic_set(&bat_priv->log_level, 0);
        bat_priv->primary_if = NULL;
        bat_priv->num_ifaces = 0;
  
        bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR,
                                                    batif_kobject);
        if (!bat_priv->mesh_obj) {
-               printk(KERN_ERR "batman-adv:Can't add sysfs directory: %s/%s\n",
-                      dev->name, SYSFS_IF_MESH_SUBDIR);
+               bat_err(dev, "Can't add sysfs directory: %s/%s\n", dev->name,
+                       SYSFS_IF_MESH_SUBDIR);
                goto out;
        }
  
                err = sysfs_create_file(bat_priv->mesh_obj,
                                        &((*bat_attr)->attr));
                if (err) {
-                       printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n",
-                              dev->name, SYSFS_IF_MESH_SUBDIR,
-                              ((*bat_attr)->attr).name);
+                       bat_err(dev, "Can't add sysfs file: %s/%s/%s\n",
+                               dev->name, SYSFS_IF_MESH_SUBDIR,
+                               ((*bat_attr)->attr).name);
                        goto rem_attr;
                }
        }
  
-       for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr) {
-               err = sysfs_create_bin_file(bat_priv->mesh_obj, (*bin_attr));
-               if (err) {
-                       printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n",
-                              dev->name, SYSFS_IF_MESH_SUBDIR,
-                              ((*bin_attr)->attr).name);
-                       goto rem_bin_attr;
-               }
-       }
        return 0;
  
- rem_bin_attr:
-       for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr)
-               sysfs_remove_bin_file(bat_priv->mesh_obj, (*bin_attr));
  rem_attr:
        for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr)
                sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));
@@@ -342,10 -350,6 +346,6 @@@ void sysfs_del_meshif(struct net_devic
  {
        struct bat_priv *bat_priv = netdev_priv(dev);
        struct bat_attribute **bat_attr;
-       struct bin_attribute **bin_attr;
-       for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr)
-               sysfs_remove_bin_file(bat_priv->mesh_obj, (*bin_attr));
  
        for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr)
                sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr));
@@@ -364,7 -368,7 +364,7 @@@ static ssize_t show_mesh_iface(struct k
        if (!batman_if)
                return 0;
  
-       return sprintf(buff, "status: %s\ncommands: none, bat0\n",
+       return sprintf(buff, "%s\n",
                       batman_if->if_status == IF_NOT_IN_USE ?
                                                        "none" : "bat0");
  }
@@@ -390,8 -394,8 +390,8 @@@ static ssize_t store_mesh_iface(struct 
                if (buff[count - 1] == '\n')
                        buff[count - 1] = '\0';
  
-               printk(KERN_ERR "batman-adv:Invalid parameter for 'mesh_iface' setting received: %s\n",
-                      buff);
+               pr_err("Invalid parameter for 'mesh_iface' setting received: "
+                      "%s\n", buff);
                return -EINVAL;
        }
  
@@@ -433,37 -437,37 +433,37 @@@ static ssize_t show_iface_status(struc
        }
  }
  
- static HARDIF_ATTR(mesh_iface, S_IRUGO | S_IWUSR,
-                  show_mesh_iface, store_mesh_iface);
- static HARDIF_ATTR(iface_status, S_IRUGO, show_iface_status, NULL);
+ static BAT_ATTR(mesh_iface, S_IRUGO | S_IWUSR,
+               show_mesh_iface, store_mesh_iface);
+ static BAT_ATTR(iface_status, S_IRUGO, show_iface_status, NULL);
  
- static struct hardif_attribute *batman_attrs[] = {
-       &hardif_attr_mesh_iface,
-       &hardif_attr_iface_status,
+ static struct bat_attribute *batman_attrs[] = {
+       &bat_attr_mesh_iface,
+       &bat_attr_iface_status,
        NULL,
  };
  
  int sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev)
  {
        struct kobject *hardif_kobject = &dev->dev.kobj;
-       struct hardif_attribute **hardif_attr;
+       struct bat_attribute **bat_attr;
        int err;
  
        *hardif_obj = kobject_create_and_add(SYSFS_IF_BAT_SUBDIR,
                                                    hardif_kobject);
  
        if (!*hardif_obj) {
-               printk(KERN_ERR "batman-adv:Can't add sysfs directory: %s/%s\n",
-                      dev->name, SYSFS_IF_BAT_SUBDIR);
+               bat_err(dev, "Can't add sysfs directory: %s/%s\n", dev->name,
+                       SYSFS_IF_BAT_SUBDIR);
                goto out;
        }
  
-       for (hardif_attr = batman_attrs; *hardif_attr; ++hardif_attr) {
-               err = sysfs_create_file(*hardif_obj, &((*hardif_attr)->attr));
+       for (bat_attr = batman_attrs; *bat_attr; ++bat_attr) {
+               err = sysfs_create_file(*hardif_obj, &((*bat_attr)->attr));
                if (err) {
-                       printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n",
-                              dev->name, SYSFS_IF_BAT_SUBDIR,
-                              ((*hardif_attr)->attr).name);
+                       bat_err(dev, "Can't add sysfs file: %s/%s/%s\n",
+                               dev->name, SYSFS_IF_BAT_SUBDIR,
+                               ((*bat_attr)->attr).name);
                        goto rem_attr;
                }
        }
        return 0;
  
  rem_attr:
-       for (hardif_attr = batman_attrs; *hardif_attr; ++hardif_attr)
-               sysfs_remove_file(*hardif_obj, &((*hardif_attr)->attr));
+       for (bat_attr = batman_attrs; *bat_attr; ++bat_attr)
+               sysfs_remove_file(*hardif_obj, &((*bat_attr)->attr));
  out:
        return -ENOMEM;
  }
index 96c86c873011a428c832aafc39a589408f76aa6b,9bfd0365abbb6e73446a73c616719c80a0024428..92c216a568856b4592e6a38427163bcec386aab3
@@@ -30,6 -30,7 +30,7 @@@
  #include "hash.h"
  
  #include <linux/if_arp.h>
+ #include <linux/netfilter_bridge.h>
  
  #define MIN(x, y) ((x) < (y) ? (x) : (y))
  
@@@ -71,7 -72,7 +72,7 @@@ static int is_valid_iface(struct net_de
  #endif
  
        /* Device is being bridged */
 -      /* if (net_dev->br_port != NULL)
 +      /* if (net_dev->priv_flags & IFF_BRIDGE_PORT)
                return 0; */
  
        return 1;
@@@ -108,7 -109,7 +109,7 @@@ static void set_primary_if(struct bat_p
        set_main_if_addr(batman_if->net_dev->dev_addr);
  
        batman_packet = (struct batman_packet *)(batman_if->packet_buff);
-       batman_packet->flags = 0;
+       batman_packet->flags = PRIMARIES_FIRST_HOP;
        batman_packet->ttl = TTL;
  
        /***
@@@ -149,12 -150,10 +150,10 @@@ static void check_known_mac_addr(uint8_
                if (!compare_orig(batman_if->net_dev->dev_addr, addr))
                        continue;
  
-               printk(KERN_WARNING "batman-adv:"
-                   "The newly added mac address (%pM) already exists on: %s\n",
-                   addr, batman_if->dev);
-               printk(KERN_WARNING "batman-adv:"
-                   "It is strongly recommended to keep mac addresses unique"
-                   "to avoid problems!\n");
+               pr_warning("The newly added mac address (%pM) already exists "
+                          "on: %s\n", addr, batman_if->dev);
+               pr_warning("It is strongly recommended to keep mac addresses "
+                          "unique to avoid problems!\n");
        }
        rcu_read_unlock();
  }
@@@ -188,7 -187,8 +187,8 @@@ void update_min_mtu(void
                soft_device->mtu = min_mtu;
  }
  
- static void hardif_activate_interface(struct bat_priv *bat_priv,
+ static void hardif_activate_interface(struct net_device *net_dev,
+                                     struct bat_priv *bat_priv,
                                      struct batman_if *batman_if)
  {
        if (batman_if->if_status != IF_INACTIVE)
        if (!bat_priv->primary_if)
                set_primary_if(bat_priv, batman_if);
  
-       printk(KERN_INFO "batman-adv:Interface activated: %s\n",
-              batman_if->dev);
+       bat_info(net_dev, "Interface activated: %s\n", batman_if->dev);
  
        if (atomic_read(&module_state) == MODULE_INACTIVE)
                activate_module();
        return;
  }
  
- static void hardif_deactivate_interface(struct batman_if *batman_if)
+ static void hardif_deactivate_interface(struct net_device *net_dev,
+                                       struct batman_if *batman_if)
  {
        if ((batman_if->if_status != IF_ACTIVE) &&
           (batman_if->if_status != IF_TO_BE_ACTIVATED))
  
        batman_if->if_status = IF_INACTIVE;
  
-       printk(KERN_INFO "batman-adv:Interface deactivated: %s\n",
-              batman_if->dev);
+       bat_info(net_dev, "Interface deactivated: %s\n", batman_if->dev);
  
        update_min_mtu();
  }
@@@ -245,9 -244,8 +244,8 @@@ int hardif_enable_interface(struct batm
        batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_ATOMIC);
  
        if (!batman_if->packet_buff) {
-               printk(KERN_ERR "batman-adv:"
-                      "Can't add interface packet (%s): out of memory\n",
-                      batman_if->dev);
+               bat_err(soft_device, "Can't add interface packet (%s): "
+                       "out of memory\n", batman_if->dev);
                goto err;
        }
  
        orig_hash_add_if(batman_if, bat_priv->num_ifaces);
  
        atomic_set(&batman_if->seqno, 1);
-       printk(KERN_INFO "batman-adv:Adding interface: %s\n", batman_if->dev);
+       bat_info(soft_device, "Adding interface: %s\n", batman_if->dev);
  
        if (hardif_is_iface_up(batman_if))
-               hardif_activate_interface(bat_priv, batman_if);
+               hardif_activate_interface(soft_device, bat_priv, batman_if);
        else
-               printk(KERN_ERR "batman-adv:"
-                      "Not using interface %s "
-                      "(retrying later): interface not active\n",
-                      batman_if->dev);
+               bat_err(soft_device, "Not using interface %s "
+                       "(retrying later): interface not active\n",
+                       batman_if->dev);
  
        /* begin scheduling originator messages on that interface */
        schedule_own_packet(batman_if);
@@@ -291,12 -288,12 +288,12 @@@ void hardif_disable_interface(struct ba
        struct bat_priv *bat_priv = netdev_priv(soft_device);
  
        if (batman_if->if_status == IF_ACTIVE)
-               hardif_deactivate_interface(batman_if);
+               hardif_deactivate_interface(soft_device, batman_if);
  
        if (batman_if->if_status != IF_INACTIVE)
                return;
  
-       printk(KERN_INFO "batman-adv:Removing interface: %s\n", batman_if->dev);
+       bat_info(soft_device, "Removing interface: %s\n", batman_if->dev);
        bat_priv->num_ifaces--;
        orig_hash_del_if(batman_if, bat_priv->num_ifaces);
  
@@@ -323,8 -320,7 +320,7 @@@ static struct batman_if *hardif_add_int
  
        batman_if = kmalloc(sizeof(struct batman_if), GFP_ATOMIC);
        if (!batman_if) {
-               printk(KERN_ERR "batman-adv:"
-                      "Can't add interface (%s): out of memory\n",
+               pr_err("Can't add interface (%s): out of memory\n",
                       net_dev->name);
                goto out;
        }
@@@ -407,11 -403,11 +403,11 @@@ static int hard_if_event(struct notifie
        case NETDEV_REGISTER:
                break;
        case NETDEV_UP:
-               hardif_activate_interface(bat_priv, batman_if);
+               hardif_activate_interface(soft_device, bat_priv, batman_if);
                break;
        case NETDEV_GOING_DOWN:
        case NETDEV_DOWN:
-               hardif_deactivate_interface(batman_if);
+               hardif_deactivate_interface(soft_device, batman_if);
                break;
        case NETDEV_UNREGISTER:
                hardif_remove_interface(batman_if);
@@@ -432,15 -428,20 +428,22 @@@ out
        return NOTIFY_DONE;
  }
  
+ static int batman_skb_recv_finish(struct sk_buff *skb)
+ {
+       return NF_ACCEPT;
+ }
  /* receive a packet with the batman ethertype coming on a hard
   * interface */
  int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
        struct packet_type *ptype, struct net_device *orig_dev)
  {
+       /* FIXME: each orig_node->batman_if will be attached to a softif */
+       struct bat_priv *bat_priv = netdev_priv(soft_device);
        struct batman_packet *batman_packet;
        struct batman_if *batman_if;
 +      struct net_device_stats *stats;
 +      struct rtnl_link_stats64 temp;
        int ret;
  
        skb = skb_share_check(skb, GFP_ATOMIC);
        if (atomic_read(&module_state) != MODULE_ACTIVE)
                goto err_free;
  
+       /* if netfilter/ebtables wants to block incoming batman
+        * packets then give them a chance to do so here */
+       ret = NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, dev, NULL,
+                     batman_skb_recv_finish);
+       if (ret != 1)
+               goto err_out;
        /* packet should hold at least type and version */
        if (unlikely(skb_headlen(skb) < 2))
                goto err_free;
        if (batman_if->if_status != IF_ACTIVE)
                goto err_free;
  
 +      stats = (struct net_device_stats *)dev_get_stats(skb->dev, &temp);
 +      if (stats) {
 +              stats->rx_packets++;
 +              stats->rx_bytes += skb->len;
 +      }
 +
        batman_packet = (struct batman_packet *)skb->data;
  
        if (batman_packet->version != COMPAT_VERSION) {
-               bat_dbg(DBG_BATMAN,
+               bat_dbg(DBG_BATMAN, bat_priv,
                        "Drop packet: incompatible batman version (%i)\n",
                        batman_packet->version);
                goto err_free;
  
                /* unicast packet */
        case BAT_UNICAST:
-               ret = recv_unicast_packet(skb);
+               ret = recv_unicast_packet(skb, batman_if);
                break;
  
                /* broadcast packet */
@@@ -531,7 -533,6 +541,6 @@@ err_out
        return NET_RX_DROP;
  }
  
  struct notifier_block hard_if_notifier = {
        .notifier_call = hard_if_event,
  };
index 39d112b708e3711c6bf78b7ad966ceafcce810fb,99e3bdb6bfae404ad18565a8b25db8b724f2979b..b2a02b0f569ac5199e93fba20711243c6e548157
@@@ -38,8 -38,8 +38,8 @@@ Supports
    - do_insn read/write
    - ai_do_cmd mode with the following sources:
  
-     - start_src               TRIG_NOW
-     - scan_begin_src          TRIG_FOLLOW     TRIG_TIMER      TRIG_EXT
+     - start_src                       TRIG_NOW
+     - scan_begin_src          TRIG_FOLLOW     TRIG_TIMER      TRIG_EXT
      - convert_src                             TRIG_TIMER      TRIG_EXT
      - scan_end_src            TRIG_COUNT
      - stop_src                        TRIG_COUNT      TRIG_NONE
@@@ -68,8 -68,9 +68,9 @@@ CHANGELOG
  TODO:
  
    - Really test implemented functionality.
-   - Add support for the PCI-9111DG with a probe routine to identify the card type
-     (perhaps with the help of the channel number readback of the A/D Data register).
+   - Add support for the PCI-9111DG with a probe routine to identify the card
+     type (perhaps with the help of the channel number readback of the A/D Data
+     register).
    - Add external multiplexer support.
  
  */
  #include "comedi_pci.h"
  #include "comedi_fc.h"
  
- #define PCI9111_DRIVER_NAME   "adl_pci9111"
- #define PCI9111_HR_DEVICE_ID  0x9111
+ #define PCI9111_DRIVER_NAME   "adl_pci9111"
+ #define PCI9111_HR_DEVICE_ID  0x9111
  
  /*  TODO: Add other pci9111 board id */
  
- #define PCI9111_IO_RANGE      0x0100
+ #define PCI9111_IO_RANGE      0x0100
  
  #define PCI9111_FIFO_HALF_SIZE        512
  
  
  /* IO address map */
  
- #define PCI9111_REGISTER_AD_FIFO_VALUE                        0x00    /*  AD Data stored in FIFO */
- #define PCI9111_REGISTER_DA_OUTPUT                    0x00
- #define PCI9111_REGISTER_DIGITAL_IO                   0x02
- #define PCI9111_REGISTER_EXTENDED_IO_PORTS            0x04
- #define PCI9111_REGISTER_AD_CHANNEL_CONTROL           0x06    /*  Channel selection */
- #define PCI9111_REGISTER_AD_CHANNEL_READBACK          0x06
- #define PCI9111_REGISTER_INPUT_SIGNAL_RANGE           0x08
- #define PCI9111_REGISTER_RANGE_STATUS_READBACK                0x08
- #define PCI9111_REGISTER_TRIGGER_MODE_CONTROL                 0x0A
- #define PCI9111_REGISTER_AD_MODE_INTERRUPT_READBACK   0x0A
- #define PCI9111_REGISTER_SOFTWARE_TRIGGER             0x0E
- #define PCI9111_REGISTER_INTERRUPT_CONTROL            0x0C
+ #define PCI9111_REGISTER_AD_FIFO_VALUE                        0x00 /* AD Data stored
+                                                               in FIFO */
+ #define PCI9111_REGISTER_DA_OUTPUT                    0x00
+ #define PCI9111_REGISTER_DIGITAL_IO                   0x02
+ #define PCI9111_REGISTER_EXTENDED_IO_PORTS            0x04
+ #define PCI9111_REGISTER_AD_CHANNEL_CONTROL           0x06 /* Channel
+                                                               selection */
+ #define PCI9111_REGISTER_AD_CHANNEL_READBACK          0x06
+ #define PCI9111_REGISTER_INPUT_SIGNAL_RANGE           0x08
+ #define PCI9111_REGISTER_RANGE_STATUS_READBACK                0x08
+ #define PCI9111_REGISTER_TRIGGER_MODE_CONTROL         0x0A
+ #define PCI9111_REGISTER_AD_MODE_INTERRUPT_READBACK   0x0A
+ #define PCI9111_REGISTER_SOFTWARE_TRIGGER             0x0E
+ #define PCI9111_REGISTER_INTERRUPT_CONTROL            0x0C
  #define PCI9111_REGISTER_8254_COUNTER_0                       0x40
  #define PCI9111_REGISTER_8254_COUNTER_1                       0x42
- #define PCI9111_REGISTER_8254_COUNTER_2               0X44
+ #define PCI9111_REGISTER_8254_COUNTER_2                       0X44
  #define PCI9111_REGISTER_8254_CONTROL                 0x46
- #define PCI9111_REGISTER_INTERRUPT_CLEAR              0x48
+ #define PCI9111_REGISTER_INTERRUPT_CLEAR              0x48
  
- #define PCI9111_TRIGGER_MASK                          0x0F
- #define PCI9111_PTRG_OFF                              (0 << 3)
- #define PCI9111_PTRG_ON                               (1 << 3)
+ #define PCI9111_TRIGGER_MASK                          0x0F
+ #define PCI9111_PTRG_OFF                              (0 << 3)
+ #define PCI9111_PTRG_ON                                       (1 << 3)
  #define PCI9111_EITS_EXTERNAL                         (1 << 2)
  #define PCI9111_EITS_INTERNAL                         (0 << 2)
  #define PCI9111_TPST_SOFTWARE_TRIGGER                 (0 << 1)
  
  #define PCI9111_ISC0_SET_IRQ_ON_ENDING_OF_AD_CONVERSION (0 << 0)
  #define PCI9111_ISC0_SET_IRQ_ON_FIFO_HALF_FULL                (1 << 0)
- #define PCI9111_ISC1_SET_IRQ_ON_TIMER_TICK            (0 << 1)
- #define PCI9111_ISC1_SET_IRQ_ON_EXT_TRG               (1 << 1)
- #define PCI9111_FFEN_SET_FIFO_ENABLE                  (0 << 2)
+ #define PCI9111_ISC1_SET_IRQ_ON_TIMER_TICK            (0 << 1)
+ #define PCI9111_ISC1_SET_IRQ_ON_EXT_TRG                       (1 << 1)
+ #define PCI9111_FFEN_SET_FIFO_ENABLE                  (0 << 2)
  #define PCI9111_FFEN_SET_FIFO_DISABLE                 (1 << 2)
  
  #define PCI9111_CHANNEL_MASK                          0x0F
  #define PCI9111_FIFO_FULL_MASK                                0x40
  #define PCI9111_AD_BUSY_MASK                          0x80
  
- #define PCI9111_IO_BASE dev->iobase
+ #define PCI9111_IO_BASE (dev->iobase)
  
  /*
   * Define inlined function
  #define pci9111_trigger_and_autoscan_set(flags) \
    outb(flags, PCI9111_IO_BASE+PCI9111_REGISTER_TRIGGER_MODE_CONTROL)
  
- #define pci9111_interrupt_and_fifo_get() \
-   ((inb(PCI9111_IO_BASE+PCI9111_REGISTER_AD_MODE_INTERRUPT_READBACK) >> 4) &0x03)
+ #define pci9111_interrupt_and_fifo_get()                                 \
+   ((inb(PCI9111_IO_BASE+PCI9111_REGISTER_AD_MODE_INTERRUPT_READBACK) >> 4) \
+    &0x03)
  
  #define pci9111_interrupt_and_fifo_set(flags) \
    outb(flags, PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL)
  #define pci9111_software_trigger() \
    outb(0, PCI9111_IO_BASE+PCI9111_REGISTER_SOFTWARE_TRIGGER)
  
- #define pci9111_fifo_reset() \
-   outb(PCI9111_FFEN_SET_FIFO_ENABLE, PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL); \
-   outb(PCI9111_FFEN_SET_FIFO_DISABLE, PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL); \
-   outb(PCI9111_FFEN_SET_FIFO_ENABLE, PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL)
+ #define pci9111_fifo_reset() do {                                     \
+   outb(PCI9111_FFEN_SET_FIFO_ENABLE,                                  \
+        PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL);           \
+   outb(PCI9111_FFEN_SET_FIFO_DISABLE,                                 \
+        PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL);           \
+   outb(PCI9111_FFEN_SET_FIFO_ENABLE,                                  \
+        PCI9111_IO_BASE+PCI9111_REGISTER_INTERRUPT_CONTROL);           \
+   } while (0)
  
  #define pci9111_is_fifo_full() \
    ((inb(PCI9111_IO_BASE+PCI9111_REGISTER_RANGE_STATUS_READBACK)& \
-     PCI9111_FIFO_FULL_MASK)==0)
+     PCI9111_FIFO_FULL_MASK) == 0)
  
  #define pci9111_is_fifo_half_full() \
    ((inb(PCI9111_IO_BASE+PCI9111_REGISTER_RANGE_STATUS_READBACK)& \
-     PCI9111_FIFO_HALF_FULL_MASK)==0)
+     PCI9111_FIFO_HALF_FULL_MASK) == 0)
  
  #define pci9111_is_fifo_empty() \
    ((inb(PCI9111_IO_BASE+PCI9111_REGISTER_RANGE_STATUS_READBACK)& \
-     PCI9111_FIFO_EMPTY_MASK)==0)
+     PCI9111_FIFO_EMPTY_MASK) == 0)
  
- #define pci9111_ai_channel_set(channel) \
-   outb((channel)&PCI9111_CHANNEL_MASK, PCI9111_IO_BASE+PCI9111_REGISTER_AD_CHANNEL_CONTROL)
+ #define pci9111_ai_channel_set(channel)                                       \
+   outb((channel)&PCI9111_CHANNEL_MASK,                                        \
+        PCI9111_IO_BASE+PCI9111_REGISTER_AD_CHANNEL_CONTROL)
  
- #define pci9111_ai_channel_get() \
-   inb(PCI9111_IO_BASE+PCI9111_REGISTER_AD_CHANNEL_READBACK)&PCI9111_CHANNEL_MASK
+ #define pci9111_ai_channel_get()                                      \
+   (inb(PCI9111_IO_BASE+PCI9111_REGISTER_AD_CHANNEL_READBACK)          \
+    &PCI9111_CHANNEL_MASK)
  
- #define pci9111_ai_range_set(range) \
-   outb((range)&PCI9111_RANGE_MASK, PCI9111_IO_BASE+PCI9111_REGISTER_INPUT_SIGNAL_RANGE)
+ #define pci9111_ai_range_set(range)                                   \
+   outb((range)&PCI9111_RANGE_MASK,                                    \
+        PCI9111_IO_BASE+PCI9111_REGISTER_INPUT_SIGNAL_RANGE)
  
- #define pci9111_ai_range_get() \
-   inb(PCI9111_IO_BASE+PCI9111_REGISTER_RANGE_STATUS_READBACK)&PCI9111_RANGE_MASK
+ #define pci9111_ai_range_get()                                                \
+   (inb(PCI9111_IO_BASE+PCI9111_REGISTER_RANGE_STATUS_READBACK)                \
+    &PCI9111_RANGE_MASK)
  
- #define pci9111_ai_get_data() \
-   ((inw(PCI9111_IO_BASE+PCI9111_REGISTER_AD_FIFO_VALUE)>>4)&PCI9111_AI_RESOLUTION_MASK) \
-   ^ PCI9111_AI_RESOLUTION_2_CMP_BIT
+ #define pci9111_ai_get_data()                                         \
+   (((inw(PCI9111_IO_BASE+PCI9111_REGISTER_AD_FIFO_VALUE)>>4)          \
+     &PCI9111_AI_RESOLUTION_MASK)                                      \
+    ^ PCI9111_AI_RESOLUTION_2_CMP_BIT)
  
- #define pci9111_hr_ai_get_data() \
-   (inw(PCI9111_IO_BASE+PCI9111_REGISTER_AD_FIFO_VALUE) & PCI9111_HR_AI_RESOLUTION_MASK) \
-   ^ PCI9111_HR_AI_RESOLUTION_2_CMP_BIT
+ #define pci9111_hr_ai_get_data()                                      \
+   ((inw(PCI9111_IO_BASE+PCI9111_REGISTER_AD_FIFO_VALUE)                       \
+     & PCI9111_HR_AI_RESOLUTION_MASK)                                  \
+    ^ PCI9111_HR_AI_RESOLUTION_2_CMP_BIT)
  
- #define pci9111_ao_set_data(data) \
-   outw(data&PCI9111_AO_RESOLUTION_MASK, PCI9111_IO_BASE+PCI9111_REGISTER_DA_OUTPUT)
+ #define pci9111_ao_set_data(data)                                     \
+   outw(data&PCI9111_AO_RESOLUTION_MASK,                                       \
+        PCI9111_IO_BASE+PCI9111_REGISTER_DA_OUTPUT)
  
  #define pci9111_di_get_bits() \
    inw(PCI9111_IO_BASE+PCI9111_REGISTER_DIGITAL_IO)
@@@ -284,12 -299,11 +299,11 @@@ static const struct comedi_lrange pci91
  };
  
  static DEFINE_PCI_DEVICE_TABLE(pci9111_pci_table) = {
-       {
-       PCI_VENDOR_ID_ADLINK, PCI9111_HR_DEVICE_ID, PCI_ANY_ID,
-                   PCI_ANY_ID, 0, 0, 0},
-           /* { PCI_VENDOR_ID_ADLINK, PCI9111_HG_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, */
-       {
-       0}
+       { PCI_VENDOR_ID_ADLINK, PCI9111_HR_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
+         0, 0, 0 },
+       /* { PCI_VENDOR_ID_ADLINK, PCI9111_HG_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,
+        *   0, 0, 0 }, */
+       { 0 }
  };
  
  MODULE_DEVICE_TABLE(pci, pci9111_pci_table);
@@@ -337,7 -351,43 +351,43 @@@ static struct comedi_driver pci9111_dri
        .detach = pci9111_detach,
  };
  
- COMEDI_PCI_INITCLEANUP(pci9111_driver, pci9111_pci_table);
+ static int __devinit pci9111_driver_pci_probe(struct pci_dev *dev,
+                                             const struct pci_device_id *ent)
+ {
+       return comedi_pci_auto_config(dev, pci9111_driver.driver_name);
+ }
+ static void __devexit pci9111_driver_pci_remove(struct pci_dev *dev)
+ {
+       comedi_pci_auto_unconfig(dev);
+ }
+ static struct pci_driver pci9111_driver_pci_driver = {
+       .id_table = pci9111_pci_table,
+       .probe = &pci9111_driver_pci_probe,
+       .remove = __devexit_p(&pci9111_driver_pci_remove)
+ };
+ static int __init pci9111_driver_init_module(void)
+ {
+       int retval;
+       retval = comedi_driver_register(&pci9111_driver);
+       if (retval < 0)
+               return retval;
+       pci9111_driver_pci_driver.name = (char *)pci9111_driver.driver_name;
+       return pci_register_driver(&pci9111_driver_pci_driver);
+ }
+ static void __exit pci9111_driver_cleanup_module(void)
+ {
+       pci_unregister_driver(&pci9111_driver_pci_driver);
+       comedi_driver_unregister(&pci9111_driver);
+ }
+ module_init(pci9111_driver_init_module);
+ module_exit(pci9111_driver_cleanup_module);
  
  /*  Private data structure */
  
@@@ -345,7 -395,8 +395,8 @@@ struct pci9111_private_data 
        struct pci_dev *pci_device;
        unsigned long io_range; /*  PCI6503 io range */
  
-       unsigned long lcr_io_base;      /*  Local configuration register base address */
+       unsigned long lcr_io_base; /* Local configuration register base
+                                   * address */
        unsigned long lcr_io_range;
  
        int stop_counter;
  
        int ao_readback;        /*  Last written analog output data */
  
-       unsigned int timer_divisor_1;   /*  Divisor values for the 8254 timer pacer */
+       unsigned int timer_divisor_1; /* Divisor values for the 8254 timer
+                                      * pacer */
        unsigned int timer_divisor_2;
  
        int is_valid;           /*  Is device valid */
        short ai_bounce_buffer[2 * PCI9111_FIFO_HALF_SIZE];
  };
  
- #define dev_private   ((struct pci9111_private_data *)dev->private)
+ #define dev_private   ((struct pci9111_private_data *)dev->private)
  
  /*  ------------------------------------------------------------------ */
  /*  PLX9050 SECTION */
@@@ -548,10 -600,12 +600,12 @@@ static int pci9111_ai_cancel(struct com
  
  /*  Test analog input command */
  
- #define pci9111_check_trigger_src(src, flags) \
-   tmp = src; \
-   src &= flags; \
-   if (!src || tmp != src) error++
+ #define pci9111_check_trigger_src(src, flags) do {                    \
+               tmp = src;                                              \
+               src &= flags;                                           \
+               if (!src || tmp != src)                                 \
+                       error++;                                        \
+       } while (false);
  
  static int
  pci9111_ai_do_cmd_test(struct comedi_device *dev,
        if (error)
                return 1;
  
-       /*  step 2 : make sure trigger sources are unique and mutually compatible */
+       /*  step 2 : make sure trigger sources are unique and mutually
+        *  compatible */
  
        if (cmd->start_src != TRIG_NOW)
                error++;
                cmd->scan_begin_arg = board->ai_acquisition_period_min_ns;
                error++;
        }
-       if ((cmd->scan_begin_src == TRIG_FOLLOW) && (cmd->scan_begin_arg != 0)) {
+       if ((cmd->scan_begin_src == TRIG_FOLLOW)
+           && (cmd->scan_begin_arg != 0)) {
                cmd->scan_begin_arg = 0;
                error++;
        }
@@@ -824,12 -880,9 +880,12 @@@ static int pci9111_ai_do_cmd(struct com
                plx9050_interrupt_control(dev_private->lcr_io_base, true, true,
                                          false, true, true);
  
 -              dev_private->scan_delay =
 -                  (async_cmd->scan_begin_arg / (async_cmd->convert_arg *
 -                                                async_cmd->chanlist_len)) - 1;
 +              if (async_cmd->scan_begin_src == TRIG_TIMER) {
 +                      dev_private->scan_delay =
 +                              (async_cmd->scan_begin_arg /
 +                               (async_cmd->convert_arg *
 +                                async_cmd->chanlist_len)) - 1;
 +              }
  
                break;
  
@@@ -1216,7 -1269,7 +1272,7 @@@ static int pci9111_attach(struct comedi
  {
        struct comedi_subdevice *subdevice;
        unsigned long io_base, io_range, lcr_io_base, lcr_io_range;
-       struct pci_dev *pci_device;
+       struct pci_dev *pci_device = NULL;
        int error, i;
        const struct pci9111_board *board;
  
  
        printk("comedi%d: " PCI9111_DRIVER_NAME " driver\n", dev->minor);
  
-       for (pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
-            pci_device != NULL;
-            pci_device = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_device)) {
+       for_each_pci_dev(pci_device) {
                if (pci_device->vendor == PCI_VENDOR_ID_ADLINK) {
                        for (i = 0; i < pci9111_board_nbr; i++) {
                                if (pci9111_boards[i].device_id ==
                                    pci_device->device) {
-                                       /*  was a particular bus/slot requested? */
+                                       /* was a particular bus/slot
+                                        * requested? */
                                        if ((it->options[0] != 0)
                                            || (it->options[1] != 0)) {
-                                               /*  are we on the wrong bus/slot? */
+                                               /* are we on the wrong
+                                                * bus/slot? */
                                                if (pci_device->bus->number !=
                                                    it->options[0]
                                                    ||
@@@ -1272,7 -1325,8 +1328,8 @@@ found
  
        /*  TODO: Warn about non-tested boards. */
  
-       /*  Read local configuration register base address [PCI_BASE_ADDRESS #1]. */
+       /*  Read local configuration register base address
+        *  [PCI_BASE_ADDRESS #1]. */
  
        lcr_io_base = pci_resource_start(pci_device, 1);
        lcr_io_range = pci_resource_len(pci_device, 1);
@@@ -1399,3 -1453,7 +1456,7 @@@ static int pci9111_detach(struct comedi
  
        return 0;
  }
+ MODULE_AUTHOR("Comedi http://www.comedi.org");
+ MODULE_DESCRIPTION("Comedi low-level driver");
+ MODULE_LICENSE("GPL");
index c374bee250687597a8c196e8a8823b44f2ea3aaa,2f2997fd926fd26f5b96e5fdbbb52d273bb9e98d..2d35143b8e525b5c7d6e19e624e76ce9dee28772
@@@ -52,6 -52,7 +52,6 @@@ Please report success/failure with othe
  #include "8255.h"
  
  #define PCI_VENDOR_ID_CB      0x1307  /*  PCI vendor number of ComputerBoards */
 -#define N_BOARDS      10      /*  Number of boards in cb_pcidda_boards */
  #define EEPROM_SIZE   128     /*  number of entries in eeprom */
  #define MAX_AO_CHANNELS 8     /*  maximum number of ao channels for supported boards */
  
@@@ -280,7 -281,7 +280,7 @@@ static int cb_pcidda_attach(struct come
                            struct comedi_devconfig *it)
  {
        struct comedi_subdevice *s;
-       struct pci_dev *pcidev;
+       struct pci_dev *pcidev = NULL;
        int index;
  
        printk("comedi%d: cb_pcidda: ", dev->minor);
   */
        printk("\n");
  
-       for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
-            pcidev != NULL;
-            pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
+       for_each_pci_dev(pcidev) {
                if (pcidev->vendor == PCI_VENDOR_ID_CB) {
                        if (it->options[0] || it->options[1]) {
                                if (pcidev->bus->number != it->options[0] ||
                                        continue;
                                }
                        }
 -                      for (index = 0; index < N_BOARDS; index++) {
 +                      for (index = 0; index < ARRAY_SIZE(cb_pcidda_boards); index++) {
                                if (cb_pcidda_boards[index].device_id ==
                                    pcidev->device) {
                                        goto found;
@@@ -856,4 -855,44 +854,44 @@@ static void cb_pcidda_calibrate(struct 
   * A convenient macro that defines init_module() and cleanup_module(),
   * as necessary.
   */
- COMEDI_PCI_INITCLEANUP(driver_cb_pcidda, cb_pcidda_pci_table);
+ static int __devinit driver_cb_pcidda_pci_probe(struct pci_dev *dev,
+                                               const struct pci_device_id *ent)
+ {
+       return comedi_pci_auto_config(dev, driver_cb_pcidda.driver_name);
+ }
+ static void __devexit driver_cb_pcidda_pci_remove(struct pci_dev *dev)
+ {
+       comedi_pci_auto_unconfig(dev);
+ }
+ static struct pci_driver driver_cb_pcidda_pci_driver = {
+       .id_table = cb_pcidda_pci_table,
+       .probe = &driver_cb_pcidda_pci_probe,
+       .remove = __devexit_p(&driver_cb_pcidda_pci_remove)
+ };
+ static int __init driver_cb_pcidda_init_module(void)
+ {
+       int retval;
+       retval = comedi_driver_register(&driver_cb_pcidda);
+       if (retval < 0)
+               return retval;
+       driver_cb_pcidda_pci_driver.name = (char *)driver_cb_pcidda.driver_name;
+       return pci_register_driver(&driver_cb_pcidda_pci_driver);
+ }
+ static void __exit driver_cb_pcidda_cleanup_module(void)
+ {
+       pci_unregister_driver(&driver_cb_pcidda_pci_driver);
+       comedi_driver_unregister(&driver_cb_pcidda);
+ }
+ module_init(driver_cb_pcidda_init_module);
+ module_exit(driver_cb_pcidda_cleanup_module);
+ MODULE_AUTHOR("Comedi http://www.comedi.org");
+ MODULE_DESCRIPTION("Comedi low-level driver");
+ MODULE_LICENSE("GPL");
index a43b18816fa51b372f76704cec75c9e185fc6c50,ce2c6f1323e1ee7b8186a006a08daf5b57ba1336..bbe36437ac16e02d3d5e00c3f6693838d341996a
  static struct snd_card *snd_cx25821_cards[SNDRV_CARDS];
  static int devno;
  
 +struct cx25821_audio_buffer {
 +      unsigned int bpl;
 +      struct btcx_riscmem risc;
 +      struct videobuf_dmabuf dma;
 +};
 +
  struct cx25821_audio_dev {
        struct cx25821_dev *dev;
        struct cx25821_dmaqueue q;
@@@ -83,7 -77,7 +83,7 @@@
  
        struct videobuf_dmabuf *dma_risc;
  
 -      struct cx25821_buffer *buf;
 +      struct cx25821_audio_buffer *buf;
  
        struct snd_pcm_substream *substream;
  };
@@@ -142,7 -136,7 +142,7 @@@ MODULE_PARM_DESC(debug, "enable debug m
  
  static int _cx25821_start_audio_dma(struct cx25821_audio_dev *chip)
  {
 -      struct cx25821_buffer *buf = chip->buf;
 +      struct cx25821_audio_buffer *buf = chip->buf;
        struct cx25821_dev *dev = chip->dev;
        struct sram_channel *audio_ch =
            &cx25821_sram_channels[AUDIO_SRAM_CHANNEL];
@@@ -337,7 -331,7 +337,7 @@@ static int dsp_buffer_free(struct cx258
        BUG_ON(!chip->dma_size);
  
        dprintk(2, "Freeing buffer\n");
 -      videobuf_sg_dma_unmap(&chip->pci->dev, chip->dma_risc);
 +      videobuf_dma_unmap(&chip->pci->dev, chip->dma_risc);
        videobuf_dma_free(chip->dma_risc);
        btcx_riscmem_free(chip->pci, &chip->buf->risc);
        kfree(chip->buf);
@@@ -438,7 -432,7 +438,7 @@@ static int snd_cx25821_hw_params(struc
        struct cx25821_audio_dev *chip = snd_pcm_substream_chip(substream);
        struct videobuf_dmabuf *dma;
  
 -      struct cx25821_buffer *buf;
 +      struct cx25821_audio_buffer *buf;
        int ret;
  
        if (substream->runtime->dma_area) {
        BUG_ON(!chip->dma_size);
        BUG_ON(chip->num_periods & (chip->num_periods - 1));
  
 -      buf = videobuf_sg_alloc(sizeof(*buf));
 +      buf = kzalloc(sizeof(*buf), GFP_KERNEL);
        if (NULL == buf)
                return -ENOMEM;
  
        if (chip->period_size > AUDIO_LINE_SIZE)
                chip->period_size = AUDIO_LINE_SIZE;
  
 -      buf->vb.memory = V4L2_MEMORY_MMAP;
 -      buf->vb.field = V4L2_FIELD_NONE;
 -      buf->vb.width = chip->period_size;
        buf->bpl = chip->period_size;
 -      buf->vb.height = chip->num_periods;
 -      buf->vb.size = chip->dma_size;
  
 -      dma = videobuf_to_dma(&buf->vb);
 +      dma = &buf->dma;
        videobuf_dma_init(dma);
 -
        ret = videobuf_dma_init_kernel(dma, PCI_DMA_FROMDEVICE,
 -                                     (PAGE_ALIGN(buf->vb.size) >>
 +                                     (PAGE_ALIGN(chip->dma_size) >>
                                        PAGE_SHIFT));
        if (ret < 0)
                goto error;
  
 -      ret = videobuf_sg_dma_map(&chip->pci->dev, dma);
 +      ret = videobuf_dma_map(&chip->pci->dev, dma);
        if (ret < 0)
                goto error;
  
        ret =
            cx25821_risc_databuffer_audio(chip->pci, &buf->risc, dma->sglist,
 -                                        buf->vb.width, buf->vb.height, 1);
 +                                        chip->period_size, chip->num_periods,
 +                                        1);
        if (ret < 0) {
                printk(KERN_INFO
                        "DEBUG: ERROR after cx25821_risc_databuffer_audio()\n");
        buf->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
        buf->risc.jmp[2] = cpu_to_le32(0);      /* bits 63-32 */
  
 -      buf->vb.state = VIDEOBUF_PREPARED;
 -
        chip->buf = buf;
        chip->dma_risc = dma;
  
 -      substream->runtime->dma_area = chip->dma_risc->vmalloc;
 +      substream->runtime->dma_area = chip->dma_risc->vaddr;
        substream->runtime->dma_bytes = chip->dma_size;
        substream->runtime->dma_addr = 0;
  
@@@ -698,7 -699,7 +698,7 @@@ static int cx25821_audio_initdev(struc
  
        /* Card "creation" */
        card->private_free = snd_cx25821_dev_free;
-       chip = (struct cx25821_audio_dev *) card->private_data;
+       chip = card->private_data;
        spin_lock_init(&chip->reg_lock);
  
        chip->dev = dev;
index 12db555a3a5d59b1348c4f3616e246991f7c3246,994abd229737172be8fa528541a4ab33c64bb9b5..6ccf505e802d6f8d5b063b12112fab3e459d1a2b
@@@ -23,7 -23,6 +23,7 @@@
  #include <linux/slab.h>
  #include <linux/list.h>
  #include <linux/module.h>
 +#include <linux/completion.h>
  #include "osd.h"
  #include "logging.h"
  #include "vmbus_private.h"
@@@ -267,15 -266,11 +267,11 @@@ static inline void ReleaseVmbusChannel(
  {
        struct vmbus_channel *channel = context;
  
-       DPRINT_ENTER(VMBUS);
        DPRINT_DBG(VMBUS, "releasing channel (%p)", channel);
        destroy_workqueue(channel->ControlWQ);
        DPRINT_DBG(VMBUS, "channel released (%p)", channel);
  
        kfree(channel);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -294,25 -289,6 +290,25 @@@ void FreeVmbusChannel(struct vmbus_chan
                              Channel);
  }
  
 +
 +DECLARE_COMPLETION(hv_channel_ready);
 +
 +/*
 + * Count initialized channels, and ensure all channels are ready when hv_vmbus
 + * module loading completes.
 + */
 +static void count_hv_channel(void)
 +{
 +      static int counter;
 +      unsigned long flags;
 +
 +      spin_lock_irqsave(&gVmbusConnection.channel_lock, flags);
 +      if (++counter == MAX_MSG_TYPES)
 +              complete(&hv_channel_ready);
 +      spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags);
 +}
 +
 +
  /*
   * VmbusChannelProcessOffer - Process the offer by creating a channel/device
   * associated with this offer
@@@ -326,8 -302,6 +322,6 @@@ static void VmbusChannelProcessOffer(vo
        int cnt;
        unsigned long flags;
  
-       DPRINT_ENTER(VMBUS);
        /* Make sure this is a new offer */
        spin_lock_irqsave(&gVmbusConnection.channel_lock, flags);
  
                DPRINT_DBG(VMBUS, "Ignoring duplicate offer for relid (%d)",
                           newChannel->OfferMsg.ChildRelId);
                FreeVmbusChannel(newChannel);
-               DPRINT_EXIT(VMBUS);
                return;
        }
  
                 * can cleanup properly
                 */
                newChannel->State = CHANNEL_OPEN_STATE;
 -              cnt = 0;
  
 -              while (cnt != MAX_MSG_TYPES) {
 +              /* Open IC channels */
 +              for (cnt = 0; cnt < MAX_MSG_TYPES; cnt++) {
                        if (memcmp(&newChannel->OfferMsg.Offer.InterfaceType,
                                   &hv_cb_utils[cnt].data,
 -                                 sizeof(struct hv_guid)) == 0) {
 +                                 sizeof(struct hv_guid)) == 0 &&
 +                              VmbusChannelOpen(newChannel, 2 * PAGE_SIZE,
 +                                               2 * PAGE_SIZE, NULL, 0,
 +                                               hv_cb_utils[cnt].callback,
 +                                               newChannel) == 0) {
 +                              hv_cb_utils[cnt].channel = newChannel;
                                DPRINT_INFO(VMBUS, "%s",
 -                                          hv_cb_utils[cnt].log_msg);
 -
 -                              if (VmbusChannelOpen(newChannel, 2 * PAGE_SIZE,
 -                                                  2 * PAGE_SIZE, NULL, 0,
 -                                                  hv_cb_utils[cnt].callback,
 -                                                  newChannel) == 0)
 -                                      hv_cb_utils[cnt].channel = newChannel;
 +                                              hv_cb_utils[cnt].log_msg);
 +                              count_hv_channel();
                        }
 -                      cnt++;
                }
        }
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -420,9 -393,7 +412,7 @@@ static void VmbusChannelProcessRescindO
  {
        struct vmbus_channel *channel = context;
  
-       DPRINT_ENTER(VMBUS);
        VmbusChildDeviceRemove(channel->DeviceObject);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -441,8 -412,6 +431,6 @@@ static void VmbusChannelOnOffer(struct 
        int i;
        int fSupported = 0;
  
-       DPRINT_ENTER(VMBUS);
        offer = (struct vmbus_channel_offer_channel *)hdr;
        for (i = 0; i < MAX_NUM_DEVICE_CLASSES_SUPPORTED; i++) {
                if (memcmp(&offer->Offer.InterfaceType,
        if (!fSupported) {
                DPRINT_DBG(VMBUS, "Ignoring channel offer notification for "
                           "child relid %d", offer->ChildRelId);
-               DPRINT_EXIT(VMBUS);
                return;
        }
  
        /* TODO: Make sure the offer comes from our parent partition */
        osd_schedule_callback(newChannel->ControlWQ, VmbusChannelProcessOffer,
                              newChannel);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -518,8 -484,6 +503,6 @@@ static void VmbusChannelOnOfferRescind(
        struct vmbus_channel_rescind_offer *rescind;
        struct vmbus_channel *channel;
  
-       DPRINT_ENTER(VMBUS);
        rescind = (struct vmbus_channel_rescind_offer *)hdr;
        channel = GetChannelFromRelId(rescind->ChildRelId);
        if (channel == NULL) {
        osd_schedule_callback(channel->ControlWQ,
                              VmbusChannelProcessRescindOffer,
                              channel);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
  static void VmbusChannelOnOffersDelivered(
                        struct vmbus_channel_message_header *hdr)
  {
-       DPRINT_ENTER(VMBUS);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -563,8 -523,6 +542,6 @@@ static void VmbusChannelOnOpenResult(st
        struct vmbus_channel_open_channel *openMsg;
        unsigned long flags;
  
-       DPRINT_ENTER(VMBUS);
        result = (struct vmbus_channel_open_result *)hdr;
        DPRINT_DBG(VMBUS, "vmbus open result - %d", result->Status);
  
                }
        }
        spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -611,8 -567,6 +586,6 @@@ static void VmbusChannelOnGpadlCreated(
        struct vmbus_channel_gpadl_header *gpadlHeader;
        unsigned long flags;
  
-       DPRINT_ENTER(VMBUS);
        gpadlCreated = (struct vmbus_channel_gpadl_created *)hdr;
        DPRINT_DBG(VMBUS, "vmbus gpadl created result - %d",
                   gpadlCreated->CreationStatus);
                }
        }
        spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -664,8 -616,6 +635,6 @@@ static void VmbusChannelOnGpadlTorndown
        struct vmbus_channel_gpadl_teardown *gpadlTeardown;
        unsigned long flags;
  
-       DPRINT_ENTER(VMBUS);
        gpadlTorndown = (struct vmbus_channel_gpadl_torndown *)hdr;
  
        /*
                }
        }
        spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -712,8 -660,6 +679,6 @@@ static void VmbusChannelOnVersionRespon
        struct vmbus_channel_version_response *versionResponse;
        unsigned long flags;
  
-       DPRINT_ENTER(VMBUS);
        versionResponse = (struct vmbus_channel_version_response *)hdr;
        spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags);
  
                }
        }
        spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags);
-       DPRINT_EXIT(VMBUS);
  }
  
  /* Channel message dispatch table */
@@@ -769,8 -713,6 +732,6 @@@ void VmbusOnChannelMessage(void *Contex
        struct vmbus_channel_message_header *hdr;
        int size;
  
-       DPRINT_ENTER(VMBUS);
        hdr = (struct vmbus_channel_message_header *)msg->u.Payload;
        size = msg->Header.PayloadSize;
  
  
        /* Free the msg that was allocated in VmbusOnMsgDPC() */
        kfree(msg);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -806,8 -747,6 +766,6 @@@ int VmbusChannelRequestOffers(void
        struct vmbus_channel_msginfo *msgInfo;
        int ret;
  
-       DPRINT_ENTER(VMBUS);
        msgInfo = kmalloc(sizeof(*msgInfo) +
                          sizeof(struct vmbus_channel_message_header),
                          GFP_KERNEL);
@@@ -853,7 -792,6 +811,6 @@@ Cleanup
                kfree(msgInfo);
        }
  
-       DPRINT_EXIT(VMBUS);
        return ret;
  }
  
index 2adc9b48ca9cf5aea96de4cc672f62327945af83,d8c76b1fc1bdcd388d66041946328c6995c9d720..6eb79febef9b345c631576f840f6d63378a3e78a
@@@ -24,8 -24,6 +24,8 @@@
  #include <linux/slab.h>
  #include <linux/sysctl.h>
  #include <linux/reboot.h>
 +#include <linux/dmi.h>
 +#include <linux/pci.h>
  
  #include "logging.h"
  #include "osd.h"
@@@ -52,8 -50,6 +52,6 @@@ static void shutdown_onchannelcallback(
        struct icmsg_hdr *icmsghdrp;
        struct icmsg_negotiate *negop = NULL;
  
-       DPRINT_ENTER(VMBUS);
        buflen = PAGE_SIZE;
        buf = kmalloc(buflen, GFP_ATOMIC);
  
  
        kfree(buf);
  
-       DPRINT_EXIT(VMBUS);
        if (execute_shutdown == true)
                orderly_poweroff(false);
  }
@@@ -160,8 -154,6 +156,6 @@@ static void timesync_onchannelcallback(
        struct icmsg_hdr *icmsghdrp;
        struct ictimesync_data *timedatap;
  
-       DPRINT_ENTER(VMBUS);
        buflen = PAGE_SIZE;
        buf = kmalloc(buflen, GFP_ATOMIC);
  
        }
  
        kfree(buf);
-       DPRINT_EXIT(VMBUS);
  }
  
  /*
@@@ -210,8 -200,6 +202,6 @@@ static void heartbeat_onchannelcallback
        struct icmsg_hdr *icmsghdrp;
        struct heartbeat_msg_data *heartbeat_msg;
  
-       DPRINT_ENTER(VMBUS);
        buflen = PAGE_SIZE;
        buf = kmalloc(buflen, GFP_ATOMIC);
  
        }
  
        kfree(buf);
-       DPRINT_EXIT(VMBUS);
  }
  
 +static const struct pci_device_id __initconst
 +hv_utils_pci_table[] __maybe_unused = {
 +      { PCI_DEVICE(0x1414, 0x5353) }, /* Hyper-V emulated VGA controller */
 +      { 0 }
 +};
 +MODULE_DEVICE_TABLE(pci, hv_utils_pci_table);
 +
 +
 +static const struct dmi_system_id __initconst
 +hv_utils_dmi_table[] __maybe_unused  = {
 +      {
 +              .ident = "Hyper-V",
 +              .matches = {
 +                      DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +                      DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
 +                      DMI_MATCH(DMI_BOARD_NAME, "Virtual Machine"),
 +              },
 +      },
 +      { },
 +};
 +MODULE_DEVICE_TABLE(dmi, hv_utils_dmi_table);
 +
 +
  static int __init init_hyperv_utils(void)
  {
        printk(KERN_INFO "Registering HyperV Utility Driver\n");
  
 +      if (!dmi_check_system(hv_utils_dmi_table))
 +              return -ENODEV;
 +
        hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback =
                &shutdown_onchannelcallback;
        hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback;
index 22c80ece6388c5e72661864105f4d35ebf7e1824,63c9168504ed414ef59b660a0758b2355aa62de6..092f02ed6be1cfdfedf24e5b22c13a5eae3fca64
@@@ -27,7 -27,6 +27,7 @@@
  #include <linux/pci.h>
  #include <linux/dmi.h>
  #include <linux/slab.h>
 +#include <linux/completion.h>
  #include "version_info.h"
  #include "osd.h"
  #include "logging.h"
@@@ -254,8 -253,6 +254,6 @@@ static int vmbus_bus_init(int (*drv_ini
        int ret;
        unsigned int vector;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /*
         * Set this up to allow lower layer to callback to add/remove child
         * devices on the bus
  
        vmbus_drv_obj->GetChannelOffers();
  
 +      wait_for_completion(&hv_channel_ready);
 +
  cleanup:
-       DPRINT_EXIT(VMBUS_DRV);
        return ret;
  }
  
@@@ -377,8 -370,6 +373,6 @@@ static void vmbus_bus_exit(void
  
        struct vm_device *dev_ctx = &g_vmbus_drv.device_ctx;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* Remove the root device */
        if (vmbus_drv_obj->Base.OnDeviceRemove)
                vmbus_drv_obj->Base.OnDeviceRemove(&dev_ctx->device_obj);
  
        tasklet_kill(&vmbus_drv_ctx->msg_dpc);
        tasklet_kill(&vmbus_drv_ctx->event_dpc);
-       DPRINT_EXIT(VMBUS_DRV);
-       return;
  }
  
  
@@@ -419,8 -406,6 +409,6 @@@ int vmbus_child_driver_register(struct 
        struct vmbus_driver *vmbus_drv_obj = &g_vmbus_drv.drv_obj;
        int ret;
  
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_INFO(VMBUS_DRV, "child driver (%p) registering - name %s",
                    driver_ctx, driver_ctx->driver.name);
  
  
        vmbus_drv_obj->GetChannelOffers();
  
-       DPRINT_EXIT(VMBUS_DRV);
        return ret;
  }
  EXPORT_SYMBOL(vmbus_child_driver_register);
   */
  void vmbus_child_driver_unregister(struct driver_context *driver_ctx)
  {
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_INFO(VMBUS_DRV, "child driver (%p) unregistering - name %s",
                    driver_ctx, driver_ctx->driver.name);
  
        driver_unregister(&driver_ctx->driver);
  
        driver_ctx->driver.bus = NULL;
-       DPRINT_EXIT(VMBUS_DRV);
  }
  EXPORT_SYMBOL(vmbus_child_driver_unregister);
  
@@@ -506,15 -485,11 +488,11 @@@ static struct hv_device *vmbus_child_de
        struct vm_device *child_device_ctx;
        struct hv_device *child_device_obj;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* Allocate the new child device */
        child_device_ctx = kzalloc(sizeof(struct vm_device), GFP_KERNEL);
        if (!child_device_ctx) {
                DPRINT_ERR(VMBUS_DRV,
                        "unable to allocate device_context for child device");
-               DPRINT_EXIT(VMBUS_DRV);
                return NULL;
        }
  
        memcpy(&child_device_ctx->class_id, type, sizeof(struct hv_guid));
        memcpy(&child_device_ctx->device_id, instance, sizeof(struct hv_guid));
  
-       DPRINT_EXIT(VMBUS_DRV);
        return child_device_obj;
  }
  
@@@ -564,8 -537,6 +540,6 @@@ static int vmbus_child_device_register(
                                to_vm_device(child_device_obj);
        static atomic_t device_num = ATOMIC_INIT(0);
  
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_DBG(VMBUS_DRV, "child device (%p) registering",
                   child_device_ctx);
  
                DPRINT_INFO(VMBUS_DRV, "child device (%p) registered",
                            &child_device_ctx->device);
  
-       DPRINT_EXIT(VMBUS_DRV);
        return ret;
  }
  
@@@ -607,8 -576,6 +579,6 @@@ static void vmbus_child_device_unregist
  {
        struct vm_device *device_ctx = to_vm_device(device_obj);
  
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_INFO(VMBUS_DRV, "unregistering child device (%p)",
                    &device_ctx->device);
  
  
        DPRINT_INFO(VMBUS_DRV, "child device (%p) unregistered",
                    &device_ctx->device);
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  /*
   */
  static void vmbus_child_device_destroy(struct hv_device *device_obj)
  {
-       DPRINT_ENTER(VMBUS_DRV);
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  /*
@@@ -646,8 -608,6 +611,6 @@@ static int vmbus_uevent(struct device *
        struct vm_device *device_ctx = device_to_vm_device(device);
        int ret;
  
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_INFO(VMBUS_DRV, "generating uevent - VMBUS_DEVICE_CLASS_GUID={"
                    "%02x%02x%02x%02x-%02x%02x-%02x%02x-"
                    "%02x%02x%02x%02x%02x%02x%02x%02x}",
        if (ret)
                return ret;
  
-       DPRINT_EXIT(VMBUS_DRV);
        return 0;
  }
  
@@@ -722,8 -680,6 +683,6 @@@ static int vmbus_match(struct device *d
        struct driver_context *driver_ctx = driver_to_driver_context(driver);
        struct vm_device *device_ctx = device_to_vm_device(device);
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* We found our driver ? */
        if (memcmp(&device_ctx->class_id, &driver_ctx->class_id,
                   sizeof(struct hv_guid)) == 0) {
  
                match = 1;
        }
-       DPRINT_EXIT(VMBUS_DRV);
        return match;
  }
  
@@@ -759,8 -712,6 +715,6 @@@ static void vmbus_probe_failed_cb(struc
  {
        struct vm_device *device_ctx = (struct vm_device *)context;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /*
         * Kick off the process of unregistering the device.
         * This will call vmbus_remove() and eventually vmbus_device_release()
        device_unregister(&device_ctx->device);
  
        /* put_device(&device_ctx->device); */
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  /*
@@@ -782,8 -732,6 +735,6 @@@ static int vmbus_probe(struct device *c
        struct vm_device *device_ctx =
                        device_to_vm_device(child_device);
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* Let the specific open-source driver handles the probe if it can */
        if (driver_ctx->probe) {
                ret = device_ctx->probe_error = driver_ctx->probe(child_device);
                           child_device->driver->name);
                ret = -1;
        }
-       DPRINT_EXIT(VMBUS_DRV);
        return ret;
  }
  
@@@ -815,15 -761,12 +764,12 @@@ static int vmbus_remove(struct device *
        int ret;
        struct driver_context *driver_ctx;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* Special case root bus device */
        if (child_device->parent == NULL) {
                /*
                 * No-op since it is statically defined and handle in
                 * vmbus_bus_exit()
                 */
-               DPRINT_EXIT(VMBUS_DRV);
                return 0;
        }
  
                }
        }
  
-       DPRINT_EXIT(VMBUS_DRV);
        return 0;
  }
  
@@@ -856,23 -797,18 +800,18 @@@ static void vmbus_shutdown(struct devic
  {
        struct driver_context *driver_ctx;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* Special case root bus device */
        if (child_device->parent == NULL) {
                /*
                 * No-op since it is statically defined and handle in
                 * vmbus_bus_exit()
                 */
-               DPRINT_EXIT(VMBUS_DRV);
                return;
        }
  
        /* The device may not be attached yet */
-       if (!child_device->driver) {
-               DPRINT_EXIT(VMBUS_DRV);
+       if (!child_device->driver)
                return;
-       }
  
        driver_ctx = driver_to_driver_context(child_device->driver);
  
        if (driver_ctx->shutdown)
                driver_ctx->shutdown(child_device);
  
-       DPRINT_EXIT(VMBUS_DRV);
        return;
  }
  
   */
  static void vmbus_bus_release(struct device *device)
  {
-       DPRINT_ENTER(VMBUS_DRV);
        /* FIXME */
        /* Empty release functions are a bug, or a major sign
         * of a problem design, this MUST BE FIXED! */
        dev_err(device, "%s needs to be fixed!\n", __func__);
        WARN_ON(1);
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  /*
@@@ -906,15 -838,10 +841,10 @@@ static void vmbus_device_release(struc
  {
        struct vm_device *device_ctx = device_to_vm_device(device);
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* vmbus_child_device_destroy(&device_ctx->device_obj); */
        kfree(device_ctx);
  
        /* !!DO NOT REFERENCE device_ctx anymore at this point!! */
-       DPRINT_EXIT(VMBUS_DRV);
-       return;
  }
  
  /*
@@@ -924,14 -851,10 +854,10 @@@ static void vmbus_msg_dpc(unsigned lon
  {
        struct vmbus_driver *vmbus_drv_obj = (struct vmbus_driver *)data;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* ASSERT(vmbus_drv_obj->OnMsgDpc != NULL); */
  
        /* Call to bus driver to handle interrupt */
        vmbus_drv_obj->OnMsgDpc(&vmbus_drv_obj->Base);
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  /*
@@@ -941,14 -864,10 +867,10 @@@ static void vmbus_event_dpc(unsigned lo
  {
        struct vmbus_driver *vmbus_drv_obj = (struct vmbus_driver *)data;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* ASSERT(vmbus_drv_obj->OnEventDpc != NULL); */
  
        /* Call to bus driver to handle interrupt */
        vmbus_drv_obj->OnEventDpc(&vmbus_drv_obj->Base);
-       DPRINT_EXIT(VMBUS_DRV);
  }
  
  static irqreturn_t vmbus_isr(int irq, void *dev_id)
        struct vmbus_driver *vmbus_driver_obj = &g_vmbus_drv.drv_obj;
        int ret;
  
-       DPRINT_ENTER(VMBUS_DRV);
        /* ASSERT(vmbus_driver_obj->OnIsr != NULL); */
  
        /* Call to bus driver to handle interrupt */
                if (test_bit(1, (unsigned long *)&ret))
                        tasklet_schedule(&g_vmbus_drv.event_dpc);
  
-               DPRINT_EXIT(VMBUS_DRV);
                return IRQ_HANDLED;
        } else {
-               DPRINT_EXIT(VMBUS_DRV);
                return IRQ_NONE;
        }
  }
@@@ -994,10 -909,6 +912,6 @@@ MODULE_DEVICE_TABLE(dmi, microsoft_hv_d
  
  static int __init vmbus_init(void)
  {
-       int ret = 0;
-       DPRINT_ENTER(VMBUS_DRV);
        DPRINT_INFO(VMBUS_DRV,
                "Vmbus initializing.... current log level 0x%x (%x,%x)",
                vmbus_loglevel, HIWORD(vmbus_loglevel), LOWORD(vmbus_loglevel));
        if (!dmi_check_system(microsoft_hv_dmi_table))
                return -ENODEV;
  
-       ret = vmbus_bus_init(VmbusInitialize);
-       DPRINT_EXIT(VMBUS_DRV);
-       return ret;
+       return vmbus_bus_init(VmbusInitialize);
  }
  
  static void __exit vmbus_exit(void)
  {
-       DPRINT_ENTER(VMBUS_DRV);
        vmbus_bus_exit();
        /* Todo: it is used for loglevel, to be ported to new kernel. */
-       DPRINT_EXIT(VMBUS_DRV);
-       return;
  }
  
  /*
   * installed and/or configured.  We don't do anything else with the table, but
   * it needs to be present.
   */
const static struct pci_device_id microsoft_hv_pci_table[] = {
static const struct pci_device_id microsoft_hv_pci_table[] = {
        { PCI_DEVICE(0x1414, 0x5353) }, /* VGA compatible controller */
        { 0 }
  };
index 41876f2b0e548b1c31ef585110e8501f22019439,dd5d2c8d13ad7ddc5756ae777861e616a39cb389..a98b3f1f11e00a11293c548b2389ed684714c818
@@@ -47,7 -47,8 +47,7 @@@
  #include <linux/mm.h>
  #include <linux/ioport.h>
  #include <linux/io.h>
 -
 -#include "../rar_register/rar_register.h"
 +#include <linux/rar_register.h>
  
  #include "memrar.h"
  #include "memrar_allocator.h"
@@@ -278,19 -279,10 +278,10 @@@ static int memrar_init_rar_resources(in
        BUG_ON(!memrar_is_valid_rar_type(rarnum));
        BUG_ON(rar->allocated);
  
-       mutex_init(&rar->lock);
-       /*
-        * Initialize the process table before we reach any
-        * code that exit on failure since the finalization
-        * code requires an initialized list.
-        */
-       INIT_LIST_HEAD(&rar->buffers.list);
        if (rar_get_address(rarnum, &low, &high) != 0)
                /* No RAR is available. */
                return -ENODEV;
-       
        if (low == 0 || high == 0) {
                rar->base      = 0;
                rar->length    = 0;
        /* Claim RAR memory as our own. */
        if (request_mem_region(low, rar->length, devname) == NULL) {
                rar->length = 0;
-               pr_err("%s: Unable to claim RAR[%d] memory.\n", devname, rarnum);
+               pr_err("%s: Unable to claim RAR[%d] memory.\n",
+                      devname, rarnum);
                pr_err("%s: RAR[%d] disabled.\n", devname, rarnum);
                return -EBUSY;
        }
        }
  
        pr_info("%s: BRAR[%d] bus address range = [0x%lx, 0x%lx]\n",
-                       devname, rarnum, (unsigned long) low, (unsigned long) high);
+               devname, rarnum, (unsigned long) low, (unsigned long) high);
  
        pr_info("%s: BRAR[%d] size = %zu KiB\n",
                        devname, rarnum, rar->allocator->capacity / 1024);
@@@ -530,7 -523,7 +522,7 @@@ static long memrar_get_stat(struct RAR_
  {
        struct memrar_allocator *allocator;
  
-       if (!memrar_is_valid_rar_type(r->type))
+       if (!memrar_is_valid_rar_type(r->type))
                return -EINVAL;
  
        if (!memrars[r->type].allocated)
@@@ -939,9 -932,28 +931,28 @@@ static int memrar_registration_callback
  static int __init memrar_init(void)
  {
        int err;
+       int i;
  
        printk(banner);
  
+       /*
+        * Some delayed initialization is performed in this driver.
+        * Make sure resources that are used during driver clean-up
+        * (e.g. during driver's release() function) are fully
+        * initialized before first use.  This is particularly
+        * important for the case when the delayed initialization
+        * isn't completed, leaving behind a partially initialized
+        * driver.
+        *
+        * Such a scenario can occur when RAR is not available on the
+        * platform, and the driver is release()d.
+        */
+       for (i = 0; i != ARRAY_SIZE(memrars); ++i) {
+               struct memrar_rar_info * const rar = &memrars[i];
+               mutex_init(&rar->lock);
+               INIT_LIST_HEAD(&rar->buffers.list);
+       }
        err = misc_register(&memrar_miscdev);
        if (err)
                return err;
index 674769d2b59b0e7c35b8fc9b58d02cca48a23fe2,913aa9e33a5de7109f85b35d15f1bdbfa38824d1..a0fe31de0a6d1299c802062cff4007b971d6a594
@@@ -64,6 -64,7 +64,7 @@@ struct usb_device_id rtusb_usb_id[] = 
        {USB_DEVICE(0x14B2, 0x3C07)},   /* AL */
        {USB_DEVICE(0x050D, 0x8053)},   /* Belkin */
        {USB_DEVICE(0x050D, 0x825B)},   /* Belkin */
+       {USB_DEVICE(0x050D, 0x935B)},   /* Belkin F6D4050 v2 */
        {USB_DEVICE(0x14B2, 0x3C23)},   /* Airlink */
        {USB_DEVICE(0x14B2, 0x3C27)},   /* Airlink */
        {USB_DEVICE(0x07AA, 0x002F)},   /* Corega */
@@@ -77,7 -78,6 +78,7 @@@
        {USB_DEVICE(0x083A, 0x7522)},   /* Arcadyan */
        {USB_DEVICE(0x0CDE, 0x0022)},   /* ZCOM */
        {USB_DEVICE(0x0586, 0x3416)},   /* Zyxel */
 +      {USB_DEVICE(0x0586, 0x341a)},   /* Zyxel NWD-270N */
        {USB_DEVICE(0x0CDE, 0x0025)},   /* Zyxel */
        {USB_DEVICE(0x1740, 0x9701)},   /* EnGenius */
        {USB_DEVICE(0x1740, 0x9702)},   /* EnGenius */
@@@ -422,8 -422,8 +423,8 @@@ int MlmeThread(IN void *Context
        int status;
        status = 0;
  
-       pTask = (struct rt_rtmp_os_task *)Context;
-       pAd = (struct rt_rtmp_adapter *)pTask->priv;
+       pTask = Context;
+       pAd = pTask->priv;
  
        RtmpOSTaskCustomize(pTask);
  
@@@ -491,8 -491,8 +492,8 @@@ int RTUSBCmdThread(IN void *Context
        int status;
        status = 0;
  
-       pTask = (struct rt_rtmp_os_task *)Context;
-       pAd = (struct rt_rtmp_adapter *)pTask->priv;
+       pTask = Context;
+       pAd = pTask->priv;
  
        RtmpOSTaskCustomize(pTask);
  
index 1b6890611fb6dc822156e6ffbee719fb156712c3,fcd05304b47085b1d940dcad603d87dc81ce3f0e..6970c97713d8e8611df165dbfaafaf3489bc995e
@@@ -27,6 -27,7 +27,7 @@@
  #include <linux/vmalloc.h>
  #include <linux/slab.h>
  #include <linux/eeprom_93cx6.h>
+ #include <linux/notifier.h>
  
  #undef LOOP_TEST
  #undef DUMP_RX
@@@ -112,29 -113,28 +113,29 @@@ u32 rt_global_debug_component = 
  #define CAM_CONTENT_COUNT 8
  
  static const struct usb_device_id rtl8192_usb_id_tbl[] = {
 -      /* Realtek */
 -      {USB_DEVICE(0x0bda, 0x8171)},
 -      {USB_DEVICE(0x0bda, 0x8192)},
 -      {USB_DEVICE(0x0bda, 0x8709)},
 -      /* Corega */
 -      {USB_DEVICE(0x07aa, 0x0043)},
 -      /* Belkin */
 -      {USB_DEVICE(0x050d, 0x805E)},
 -      {USB_DEVICE(0x050d, 0x815F)}, /* Belkin F5D8053 v6 */
 -      /* Sitecom */
 -      {USB_DEVICE(0x0df6, 0x0031)},
 -      {USB_DEVICE(0x0df6, 0x004b)},   /* WL-349 */
 -      /* EnGenius */
 -      {USB_DEVICE(0x1740, 0x9201)},
 -      /* Dlink */
 -      {USB_DEVICE(0x2001, 0x3301)},
 -      /* Zinwell */
 -      {USB_DEVICE(0x5a57, 0x0290)},
 -      /* Guillemot */
 -      {USB_DEVICE(0x06f8, 0xe031)},
 -      //92SU
 +      {USB_DEVICE(0x0bda, 0x8171)}, /* Realtek */
        {USB_DEVICE(0x0bda, 0x8172)},
 +      {USB_DEVICE(0x0bda, 0x8173)},
 +      {USB_DEVICE(0x0bda, 0x8174)},
 +      {USB_DEVICE(0x0bda, 0x8712)},
 +      {USB_DEVICE(0x0bda, 0x8713)},
 +      {USB_DEVICE(0x07aa, 0x0047)},
 +      {USB_DEVICE(0x07d1, 0x3303)},
 +      {USB_DEVICE(0x07d1, 0x3302)},
 +      {USB_DEVICE(0x07d1, 0x3300)},
 +      {USB_DEVICE(0x1740, 0x9603)},
 +      {USB_DEVICE(0x1740, 0x9605)},
 +      {USB_DEVICE(0x050d, 0x815F)},
 +      {USB_DEVICE(0x06f8, 0xe031)},
 +      {USB_DEVICE(0x7392, 0x7611)},
 +      {USB_DEVICE(0x7392, 0x7612)},
 +      {USB_DEVICE(0x7392, 0x7622)},
 +      {USB_DEVICE(0x0DF6, 0x0045)},
 +      {USB_DEVICE(0x0E66, 0x0015)},
 +      {USB_DEVICE(0x0E66, 0x0016)},
 +      {USB_DEVICE(0x0b05, 0x1786)},
 +      /* these are not in the official list */
 +      {USB_DEVICE(0x0df6, 0x004b)}, /* WL-349 */
        {}
  };
  
@@@ -162,6 -162,8 +163,8 @@@ MODULE_PARM_DESC(channels," Channel bit
  static int __devinit rtl8192_usb_probe(struct usb_interface *intf,
                         const struct usb_device_id *id);
  static void __devexit rtl8192_usb_disconnect(struct usb_interface *intf);
+ static const struct net_device_ops rtl8192_netdev_ops;
+ static struct notifier_block proc_netdev_notifier;
  
  static struct usb_driver rtl8192_usb_driver = {
        .name           = RTL819xU_MODULE_NAME,           /* Driver name   */
@@@ -252,53 -254,49 +255,49 @@@ static void rtl819x_set_channel_map(u8 
  {
        int i, max_chan=-1, min_chan=-1;
        struct ieee80211_device* ieee = priv->ieee80211;
-       switch (channel_plan)
-       {
-               case COUNTRY_CODE_FCC:
-               case COUNTRY_CODE_IC:
-               case COUNTRY_CODE_ETSI:
-               case COUNTRY_CODE_SPAIN:
-               case COUNTRY_CODE_FRANCE:
-               case COUNTRY_CODE_MKK:
-               case COUNTRY_CODE_MKK1:
-               case COUNTRY_CODE_ISRAEL:
-               case COUNTRY_CODE_TELEC:
-               case COUNTRY_CODE_MIC:
-               {
-                       Dot11d_Init(ieee);
-                       ieee->bGlobalDomain = false;
-                       //acturally 8225 & 8256 rf chip only support B,G,24N mode
-                         if ((priv->rf_chip == RF_8225) || (priv->rf_chip == RF_8256) || (priv->rf_chip == RF_6052))
-                       {
-                               min_chan = 1;
-                               max_chan = 14;
-                       }
-                       else
-                       {
-                               RT_TRACE(COMP_ERR, "unknown rf chip, can't set channel map in function:%s()\n", __FUNCTION__);
-                       }
-                       if (ChannelPlan[channel_plan].Len != 0){
-                               // Clear old channel map
-                               memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map));
-                               // Set new channel map
-                               for (i=0;i<ChannelPlan[channel_plan].Len;i++)
-                               {
-                                       if (ChannelPlan[channel_plan].Channel[i] < min_chan || ChannelPlan[channel_plan].Channel[i] > max_chan)
-                                       break;
-                                       GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan[channel_plan].Channel[i]] = 1;
-                               }
-                       }
-                       break;
-               }
-               case COUNTRY_CODE_GLOBAL_DOMAIN:
-               {
-                       GET_DOT11D_INFO(ieee)->bEnabled = 0;//this flag enabled to follow 11d country IE setting, otherwise, it shall follow global domain settings.
-                       Dot11d_Reset(ieee);
-                       ieee->bGlobalDomain = true;
-                       break;
+       ieee->bGlobalDomain = false;
+       switch (priv->rf_chip) {
+       case RF_8225:
+       case RF_8256:
+       case RF_6052:
+               min_chan = 1;
+               max_chan = 14;
+               break;
+       default:
+               pr_err("%s(): unknown rf chip, can't set channel map\n",
+                                                               __func__);
+               break;
+       }
+       if (ChannelPlan[channel_plan].Len != 0) {
+               memset(GET_DOT11D_INFO(ieee)->channel_map, 0,
+                               sizeof(GET_DOT11D_INFO(ieee)->channel_map));
+               for (i = 0; i < ChannelPlan[channel_plan].Len; i++) {
+                       if (ChannelPlan[channel_plan].Channel[i] < min_chan || ChannelPlan[channel_plan].Channel[i] > max_chan)
+                               break;
+                       GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan[channel_plan].Channel[i]] = 1;
                }
-               default:
-                       break;
+       }
+       switch (channel_plan) {
+       case COUNTRY_CODE_GLOBAL_DOMAIN:
+               ieee->bGlobalDomain = true;
+               for (i = 12; i <= 14; i++)
+                       GET_DOT11D_INFO(ieee)->channel_map[i] = 2;
+               ieee->IbssStartChnl = 10;
+               ieee->ibss_maxjoin_chal = 11;
+               break;
+       case COUNTRY_CODE_WORLD_WIDE_13:
+               printk(KERN_INFO "world wide 13\n");
+               for (i = 12; i <= 13; i++)
+                       GET_DOT11D_INFO(ieee)->channel_map[i] = 2;
+               ieee->IbssStartChnl = 10;
+               ieee->ibss_maxjoin_chal = 11;
+               break;
+       default:
+               ieee->IbssStartChnl = 1;
+               ieee->ibss_maxjoin_chal = 14;
+               break;
        }
        return;
  }
@@@ -991,15 -989,24 +990,24 @@@ static int proc_get_stats_rx(char *page
        return len;
  }
  
void rtl8192_proc_module_init(void)
int rtl8192_proc_module_init(void)
  {
+       int ret;
        RT_TRACE(COMP_INIT, "Initializing proc filesystem");
        rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
+       if (!rtl8192_proc)
+               return -ENOMEM;
+       ret = register_netdevice_notifier(&proc_netdev_notifier);
+       if (ret)
+               remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
+       return ret;
  }
  
  
  void rtl8192_proc_module_remove(void)
  {
+       unregister_netdevice_notifier(&proc_netdev_notifier);
        remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
  }
  
@@@ -1027,8 -1034,7 +1035,7 @@@ void rtl8192_proc_remove_one(struct net
                remove_proc_entry("registers-e", priv->dir_dev);
        //      remove_proc_entry("cck-registers",priv->dir_dev);
        //      remove_proc_entry("ofdm-registers",priv->dir_dev);
-               //remove_proc_entry(dev->name, rtl8192_proc);
-               remove_proc_entry("wlan0", rtl8192_proc);
+               remove_proc_entry(priv->dir_dev->name, rtl8192_proc);
                priv->dir_dev = NULL;
        }
  }
@@@ -1145,6 -1151,25 +1152,25 @@@ void rtl8192_proc_init_one(struct net_d
                      dev->name);
        }
  }
+ static int proc_netdev_event(struct notifier_block *this,
+                            unsigned long event, void *ptr)
+ {
+       struct net_device *net_dev = ptr;
+       if (net_dev->netdev_ops == &rtl8192_netdev_ops &&
+           event == NETDEV_CHANGENAME) {
+               rtl8192_proc_remove_one(net_dev);
+               rtl8192_proc_init_one(net_dev);
+       }
+       return NOTIFY_DONE;
+ }
+ static struct notifier_block proc_netdev_notifier = {
+       .notifier_call = proc_netdev_event,
+ };
  /****************************************************************************
     -----------------------------MISC STUFF-------------------------
  *****************************************************************************/
@@@ -7355,6 -7380,8 +7381,8 @@@ static int __devinit rtl8192_usb_probe(
          RT_TRACE(COMP_INIT, "Oops: i'm coming\n");
  
        dev = alloc_ieee80211(sizeof(struct r8192_priv));
+       if (dev == NULL)
+               return -ENOMEM;
  
        usb_set_intfdata(intf, dev);
        SET_NETDEV_DEV(dev, &intf->dev);
        netif_carrier_off(dev);
        netif_stop_queue(dev);
  
-       register_netdev(dev);
+       if (register_netdev(dev))
+               goto fail;
        RT_TRACE(COMP_INIT, "dev name=======> %s\n",dev->name);
        rtl8192_proc_init_one(dev);
  
@@@ -7474,35 -7502,63 +7503,63 @@@ static int __init rtl8192_usb_module_in
        ret = ieee80211_crypto_init();
        if (ret) {
                printk(KERN_ERR "ieee80211_crypto_init() failed %d\n", ret);
-               return ret;
+               goto fail_crypto;
        }
  
        ret = ieee80211_crypto_tkip_init();
        if (ret) {
                printk(KERN_ERR "ieee80211_crypto_tkip_init() failed %d\n",
                        ret);
-               return ret;
+               goto fail_crypto_tkip;
        }
  
        ret = ieee80211_crypto_ccmp_init();
        if (ret) {
                printk(KERN_ERR "ieee80211_crypto_ccmp_init() failed %d\n",
                        ret);
-               return ret;
+               goto fail_crypto_ccmp;
        }
  
        ret = ieee80211_crypto_wep_init();
        if (ret) {
                printk(KERN_ERR "ieee80211_crypto_wep_init() failed %d\n", ret);
-               return ret;
+               goto fail_crypto_wep;
        }
  
        printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
        printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan\n");
        RT_TRACE(COMP_INIT, "Initializing module");
        RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT);
-       rtl8192_proc_module_init();
-       return usb_register(&rtl8192_usb_driver);
+       ret = rtl8192_proc_module_init();
+       if (ret) {
+               pr_err("rtl8192_proc_module_init() failed %d\n", ret);
+               goto fail_proc;
+       }
+       ret = usb_register(&rtl8192_usb_driver);
+       if (ret) {
+               pr_err("usb_register() failed %d\n", ret);
+               goto fail_usb;
+       }
+       return 0;
+ fail_usb:
+       rtl8192_proc_module_remove();
+ fail_proc:
+       ieee80211_crypto_wep_exit();
+ fail_crypto_wep:
+       ieee80211_crypto_ccmp_exit();
+ fail_crypto_ccmp:
+       ieee80211_crypto_tkip_exit();
+ fail_crypto_tkip:
+       ieee80211_crypto_deinit();
+ fail_crypto:
+ #ifdef CONFIG_IEEE80211_DEBUG
+       ieee80211_debug_exit();
+ #endif
+       return ret;
  }
  
  
index f38472c2e75cc78847c191883b28e781d712805a,358013482fd448f46985312903b8c411331ade82..1ff7850cc1e72f9be0eca8f33dee850fe568a1b1
@@@ -121,8 -121,6 +121,8 @@@ static const struct usb_device_id rtl81
        {USB_DEVICE(0x2001, 0x3301)},
        /* Zinwell */
        {USB_DEVICE(0x5a57, 0x0290)},
 +      /* LG */
 +      {USB_DEVICE(0x043e, 0x7a01)},
        {}
  };
  
@@@ -410,14 -408,12 +410,12 @@@ u16 read_nic_word(struct net_device *de
        struct usb_device *udev = priv->udev;
  
        status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
-                              RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
-                              (indx&0xff)|0xff00, (indx>>8)&0x0f, &data, 2, HZ / 2);
+                                      RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
+                                      (indx&0xff)|0xff00, (indx>>8)&0x0f,
+                                                       &data, 2, HZ / 2);
  
        if (status < 0)
-       {
                printk("read_nic_word TimeOut! status:%d\n", status);
-       }
  
        return data;
  }
@@@ -431,13 -427,10 +429,10 @@@ u16 read_nic_word_E(struct net_device *
  
        status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
                               RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
-                              indx|0xfe00, 0, &data, 2, HZ / 2);
+                                      indx|0xfe00, 0, &data, 2, HZ / 2);
  
        if (status < 0)
-       {
                printk("read_nic_word TimeOut! status:%d\n", status);
-       }
  
        return data;
  }
@@@ -446,31 -439,29 +441,29 @@@ u32 read_nic_dword(struct net_device *d
  {
        u32 data;
        int status;
- //    int result;
+       /* int result; */
  
        struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
        struct usb_device *udev = priv->udev;
  
        status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
-                              RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
-                              (indx&0xff)|0xff00, (indx>>8)&0x0f, &data, 4, HZ / 2);
- //    if(0 != result) {
- //      printk(KERN_WARNING "read size of data = %d\, date = %d\n", result, data);
- //    }
+                                      RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
+                                       (indx&0xff)|0xff00, (indx>>8)&0x0f,
+                                                       &data, 4, HZ / 2);
+       /* if(0 != result) {
+        *      printk(KERN_WARNING "read size of data = %d\, date = %d\n",
+        *                                                       result, data);
+        * }
+        */
  
        if (status < 0)
-       {
                printk("read_nic_dword TimeOut! status:%d\n", status);
-       }
  
        return data;
  }
  
- //u8 read_phy_cck(struct net_device *dev, u8 adr);
- //u8 read_phy_ofdm(struct net_device *dev, u8 adr);
+ /* u8 read_phy_cck(struct net_device *dev, u8 adr); */
+ /* u8 read_phy_ofdm(struct net_device *dev, u8 adr); */
  /* this might still called in what was the PHY rtl8185/rtl8192 common code
   * plans are to possibilty turn it again in one common code...
   */
@@@ -478,26 -469,22 +471,22 @@@ inline void force_pci_posting(struct ne
  {
  }
  
  static struct net_device_stats *rtl8192_stats(struct net_device *dev);
  void rtl8192_commit(struct net_device *dev);
- //void rtl8192_restart(struct net_device *dev);
+ /* void rtl8192_restart(struct net_device *dev); */
  void rtl8192_restart(struct work_struct *work);
- //void rtl8192_rq_tx_ack(struct work_struct *work);
+ /* void rtl8192_rq_tx_ack(struct work_struct *work); */
  void watch_dog_timer_callback(unsigned long data);
  
  /****************************************************************************
-    -----------------------------PROCFS STUFF-------------------------
- *****************************************************************************/
- static struct proc_dir_entry *rtl8192_proc = NULL;
+  *   -----------------------------PROCFS STUFF-------------------------
+ *****************************************************************************
+  */
  
+ static struct proc_dir_entry *rtl8192_proc;
  
- static int proc_get_stats_ap(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
+ static int proc_get_stats_ap(char *page, char **start, off_t offset, int count,
+                                                       int *eof, void *data)
  {
        struct net_device *dev = data;
        struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
  
        list_for_each_entry(target, &ieee->network_list, list) {
  
-               len += snprintf(page + len, count - len,
-               "%s ", target->ssid);
-               if(target->wpa_ie_len>0 || target->rsn_ie_len>0){
-                       len += snprintf(page + len, count - len,
-                       "WPA\n");
-               }
-               else{
-                       len += snprintf(page + len, count - len,
-                       "non_WPA\n");
-               }
+               len += snprintf(page + len, count - len, "%s ", target->ssid);
  
+               if (target->wpa_ie_len > 0 || target->rsn_ie_len > 0)
+                       len += snprintf(page + len, count - len, "WPA\n");
+               else
+                       len += snprintf(page + len, count - len, "non_WPA\n");
        }
  
        *eof = 1;
index 251caa052eee3439852b811f57d34e4e39a3066b,8c3768c1ba976eb3b9bf3507803a9569365f2b4e..abaa05a630f0b53918f907522b63b7cf3956101e
@@@ -1,5 -1,5 +1,5 @@@
  /*
 - * Copyright 2008 Pavel Machek <pavel@suse.cz>
 + * Copyright 2008 Pavel Machek <pavel@ucw.cz>
   *
   * Distribute under GPLv2.
   *
@@@ -700,7 -700,7 +700,7 @@@ static int wb35_hw_init(struct ieee8021
        Mds_initial(priv);
  
        /*
-        * If no user-defined address in the registry, use the addresss
+        * If no user-defined address in the registry, use the address
         * "burned" on the NIC instead.
         */
        pMacAddr = priv->sLocalPara.ThisMacAddress;