diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-28 17:43:59 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-28 17:43:59 -0700 |
commit | 9716ed1bd85214afb9a25b2d306254530b1802a5 (patch) | |
tree | cbb3204fa2c50c7ce14a4c74d4ba48221a7d6599 /network-class_device-to-device.patch | |
parent | 53d9687f8faa903da0fd5d5a665ca99a76e68dfa (diff) | |
download | patches-9716ed1bd85214afb9a25b2d306254530b1802a5.tar.gz |
add ability to move network devices to use struct device
Diffstat (limited to 'network-class_device-to-device.patch')
-rw-r--r-- | network-class_device-to-device.patch | 451 |
1 files changed, 451 insertions, 0 deletions
diff --git a/network-class_device-to-device.patch b/network-class_device-to-device.patch new file mode 100644 index 0000000000000..1fc65f55f8a66 --- /dev/null +++ b/network-class_device-to-device.patch @@ -0,0 +1,451 @@ +--- + drivers/net/wireless/hostap/hostap_main.c | 2 + drivers/net/wireless/orinoco.c | 4 + include/linux/netdevice.h | 5 + net/core/dev.c | 6 - + net/core/net-sysfs.c | 175 +++++++++++++++--------------- + 5 files changed, 102 insertions(+), 90 deletions(-) + +--- gregkh-2.6.orig/drivers/net/wireless/hostap/hostap_main.c ++++ gregkh-2.6/drivers/net/wireless/hostap/hostap_main.c +@@ -85,7 +85,7 @@ struct net_device * hostap_add_interface + if (strchr(dev->name, '%')) + ret = dev_alloc_name(dev, dev->name); + +- SET_NETDEV_DEV(dev, mdev->class_dev.dev); ++ SET_NETDEV_DEV(dev, mdev->dev.parent); + if (ret >= 0) + ret = register_netdevice(dev); + +--- gregkh-2.6.orig/drivers/net/wireless/orinoco.c ++++ gregkh-2.6/drivers/net/wireless/orinoco.c +@@ -4285,8 +4285,8 @@ static void orinoco_get_drvinfo(struct n + strncpy(info->driver, DRIVER_NAME, sizeof(info->driver) - 1); + strncpy(info->version, DRIVER_VERSION, sizeof(info->version) - 1); + strncpy(info->fw_version, priv->fw_name, sizeof(info->fw_version) - 1); +- if (dev->class_dev.dev) +- strncpy(info->bus_info, dev->class_dev.dev->bus_id, ++ if (dev->dev.parent) ++ strncpy(info->bus_info, dev->dev.parent->bus_id, + sizeof(info->bus_info) - 1); + else + snprintf(info->bus_info, sizeof(info->bus_info) - 1, +--- gregkh-2.6.orig/include/linux/netdevice.h ++++ gregkh-2.6/include/linux/netdevice.h +@@ -515,10 +515,11 @@ struct net_device + #endif /* CONFIG_NET_DIVERT */ + + /* class/net/name entry */ +- struct class_device class_dev; ++ struct device dev; + /* space for optional statistics and wireless sysfs groups */ + struct attribute_group *sysfs_groups[3]; + }; ++#define to_net_dev(d) container_of(d, struct net_device, dev) + + #define NETDEV_ALIGN 32 + #define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1) +@@ -534,7 +535,7 @@ static inline void *netdev_priv(struct n + /* Set the sysfs physical device reference for the network logical device + * if set prior to registration will cause a symlink during initialization. + */ +-#define SET_NETDEV_DEV(net, pdev) ((net)->class_dev.dev = (pdev)) ++#define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) + + struct packet_type { + __be16 type; /* This is really htons(ether_type). */ +--- gregkh-2.6.orig/net/core/dev.c ++++ gregkh-2.6/net/core/dev.c +@@ -742,7 +742,7 @@ int dev_change_name(struct net_device *d + else + strlcpy(dev->name, newname, IFNAMSIZ); + +- err = class_device_rename(&dev->class_dev, dev->name); ++// err = class_device_rename(&dev->class_dev, dev->name); + if (!err) { + hlist_del(&dev->name_hlist); + hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name)); +@@ -3211,8 +3211,8 @@ void free_netdev(struct net_device *dev) + BUG_ON(dev->reg_state != NETREG_UNREGISTERED); + dev->reg_state = NETREG_RELEASED; + +- /* will free via class release */ +- class_device_put(&dev->class_dev); ++ /* will free via device release */ ++ put_device(&dev->dev); + #else + kfree((char *)dev - dev->padded); + #endif +--- gregkh-2.6.orig/net/core/net-sysfs.c ++++ gregkh-2.6/net/core/net-sysfs.c +@@ -19,9 +19,6 @@ + #include <linux/wireless.h> + #include <net/iw_handler.h> + +-#define to_class_dev(obj) container_of(obj,struct class_device,kobj) +-#define to_net_dev(class) container_of(class, struct net_device, class_dev) +- + static const char fmt_hex[] = "%#x\n"; + static const char fmt_long_hex[] = "%#lx\n"; + static const char fmt_dec[] = "%d\n"; +@@ -33,10 +30,11 @@ static inline int dev_isalive(const stru + } + + /* use same locking rules as GIF* ioctl's */ +-static ssize_t netdev_show(const struct class_device *cd, char *buf, ++static ssize_t netdev_show(const struct device *dev, ++ struct device_attribute *attr, char *buf, + ssize_t (*format)(const struct net_device *, char *)) + { +- struct net_device *net = to_net_dev(cd); ++ struct net_device *net = to_net_dev(dev); + ssize_t ret = -EINVAL; + + read_lock(&dev_base_lock); +@@ -53,14 +51,15 @@ static ssize_t format_##field(const stru + { \ + return sprintf(buf, format_string, net->field); \ + } \ +-static ssize_t show_##field(struct class_device *cd, char *buf) \ ++static ssize_t show_##field(struct device *dev, \ ++ struct device_attribute *attr, char *buf) \ + { \ +- return netdev_show(cd, buf, format_##field); \ ++ return netdev_show(dev, attr, buf, format_##field); \ + } + + + /* use same locking and permission rules as SIF* ioctl's */ +-static ssize_t netdev_store(struct class_device *dev, ++static ssize_t netdev_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t len, + int (*set)(struct net_device *, unsigned long)) + { +@@ -105,7 +104,8 @@ static ssize_t format_addr(char *buf, co + return cp - buf; + } + +-static ssize_t show_address(struct class_device *dev, char *buf) ++static ssize_t show_address(struct device *dev, struct device_attribute *attr, ++ char *buf) + { + struct net_device *net = to_net_dev(dev); + ssize_t ret = -EINVAL; +@@ -117,7 +117,8 @@ static ssize_t show_address(struct class + return ret; + } + +-static ssize_t show_broadcast(struct class_device *dev, char *buf) ++static ssize_t show_broadcast(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + struct net_device *net = to_net_dev(dev); + if (dev_isalive(net)) +@@ -125,7 +126,8 @@ static ssize_t show_broadcast(struct cla + return -EINVAL; + } + +-static ssize_t show_carrier(struct class_device *dev, char *buf) ++static ssize_t show_carrier(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + struct net_device *netdev = to_net_dev(dev); + if (netif_running(netdev)) { +@@ -134,7 +136,8 @@ static ssize_t show_carrier(struct class + return -EINVAL; + } + +-static ssize_t show_dormant(struct class_device *dev, char *buf) ++static ssize_t show_dormant(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + struct net_device *netdev = to_net_dev(dev); + +@@ -154,7 +157,8 @@ static const char *operstates[] = { + "up" + }; + +-static ssize_t show_operstate(struct class_device *dev, char *buf) ++static ssize_t show_operstate(struct device *dev, ++ struct device_attribute *attr, char *buf) + { + const struct net_device *netdev = to_net_dev(dev); + unsigned char operstate; +@@ -179,9 +183,10 @@ static int change_mtu(struct net_device + return dev_set_mtu(net, (int) new_mtu); + } + +-static ssize_t store_mtu(struct class_device *dev, const char *buf, size_t len) ++static ssize_t store_mtu(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t len) + { +- return netdev_store(dev, buf, len, change_mtu); ++ return netdev_store(dev, attr, buf, len, change_mtu); + } + + NETDEVICE_SHOW(flags, fmt_hex); +@@ -191,9 +196,10 @@ static int change_flags(struct net_devic + return dev_change_flags(net, (unsigned) new_flags); + } + +-static ssize_t store_flags(struct class_device *dev, const char *buf, size_t len) ++static ssize_t store_flags(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t len) + { +- return netdev_store(dev, buf, len, change_flags); ++ return netdev_store(dev, attr, buf, len, change_flags); + } + + NETDEVICE_SHOW(tx_queue_len, fmt_ulong); +@@ -204,9 +210,11 @@ static int change_tx_queue_len(struct ne + return 0; + } + +-static ssize_t store_tx_queue_len(struct class_device *dev, const char *buf, size_t len) ++static ssize_t store_tx_queue_len(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, size_t len) + { +- return netdev_store(dev, buf, len, change_tx_queue_len); ++ return netdev_store(dev, attr, buf, len, change_tx_queue_len); + } + + NETDEVICE_SHOW(weight, fmt_dec); +@@ -217,12 +225,13 @@ static int change_weight(struct net_devi + return 0; + } + +-static ssize_t store_weight(struct class_device *dev, const char *buf, size_t len) ++static ssize_t store_weight(struct device *dev, struct device_attribute *attr, ++ const char *buf, size_t len) + { +- return netdev_store(dev, buf, len, change_weight); ++ return netdev_store(dev, attr, buf, len, change_weight); + } + +-static struct class_device_attribute net_class_attributes[] = { ++static struct device_attribute net_class_attributes[] = { + __ATTR(addr_len, S_IRUGO, show_addr_len, NULL), + __ATTR(iflink, S_IRUGO, show_iflink, NULL), + __ATTR(ifindex, S_IRUGO, show_ifindex, NULL), +@@ -243,10 +252,11 @@ static struct class_device_attribute net + }; + + /* Show a given an attribute in the statistics group */ +-static ssize_t netstat_show(const struct class_device *cd, char *buf, ++static ssize_t netstat_show(const struct device *d, ++ struct device_attribute *attr, char *buf, + unsigned long offset) + { +- struct net_device *dev = to_net_dev(cd); ++ struct net_device *dev = to_net_dev(d); + struct net_device_stats *stats; + ssize_t ret = -EINVAL; + +@@ -266,12 +276,13 @@ static ssize_t netstat_show(const struct + + /* generate a read-only statistics attribute */ + #define NETSTAT_ENTRY(name) \ +-static ssize_t show_##name(struct class_device *cd, char *buf) \ ++static ssize_t show_##name(struct device *d, \ ++ struct device_attribute *attr, char *buf) \ + { \ +- return netstat_show(cd, buf, \ ++ return netstat_show(d, attr, buf, \ + offsetof(struct net_device_stats, name)); \ + } \ +-static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) ++static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL) + + NETSTAT_ENTRY(rx_packets); + NETSTAT_ENTRY(tx_packets); +@@ -298,29 +309,29 @@ NETSTAT_ENTRY(rx_compressed); + NETSTAT_ENTRY(tx_compressed); + + static struct attribute *netstat_attrs[] = { +- &class_device_attr_rx_packets.attr, +- &class_device_attr_tx_packets.attr, +- &class_device_attr_rx_bytes.attr, +- &class_device_attr_tx_bytes.attr, +- &class_device_attr_rx_errors.attr, +- &class_device_attr_tx_errors.attr, +- &class_device_attr_rx_dropped.attr, +- &class_device_attr_tx_dropped.attr, +- &class_device_attr_multicast.attr, +- &class_device_attr_collisions.attr, +- &class_device_attr_rx_length_errors.attr, +- &class_device_attr_rx_over_errors.attr, +- &class_device_attr_rx_crc_errors.attr, +- &class_device_attr_rx_frame_errors.attr, +- &class_device_attr_rx_fifo_errors.attr, +- &class_device_attr_rx_missed_errors.attr, +- &class_device_attr_tx_aborted_errors.attr, +- &class_device_attr_tx_carrier_errors.attr, +- &class_device_attr_tx_fifo_errors.attr, +- &class_device_attr_tx_heartbeat_errors.attr, +- &class_device_attr_tx_window_errors.attr, +- &class_device_attr_rx_compressed.attr, +- &class_device_attr_tx_compressed.attr, ++ &dev_attr_rx_packets.attr, ++ &dev_attr_tx_packets.attr, ++ &dev_attr_rx_bytes.attr, ++ &dev_attr_tx_bytes.attr, ++ &dev_attr_rx_errors.attr, ++ &dev_attr_tx_errors.attr, ++ &dev_attr_rx_dropped.attr, ++ &dev_attr_tx_dropped.attr, ++ &dev_attr_multicast.attr, ++ &dev_attr_collisions.attr, ++ &dev_attr_rx_length_errors.attr, ++ &dev_attr_rx_over_errors.attr, ++ &dev_attr_rx_crc_errors.attr, ++ &dev_attr_rx_frame_errors.attr, ++ &dev_attr_rx_fifo_errors.attr, ++ &dev_attr_rx_missed_errors.attr, ++ &dev_attr_tx_aborted_errors.attr, ++ &dev_attr_tx_carrier_errors.attr, ++ &dev_attr_tx_fifo_errors.attr, ++ &dev_attr_tx_heartbeat_errors.attr, ++ &dev_attr_tx_window_errors.attr, ++ &dev_attr_rx_compressed.attr, ++ &dev_attr_tx_compressed.attr, + NULL + }; + +@@ -332,11 +343,11 @@ static struct attribute_group netstat_gr + + #ifdef WIRELESS_EXT + /* helper function that does all the locking etc for wireless stats */ +-static ssize_t wireless_show(struct class_device *cd, char *buf, ++static ssize_t wireless_show(struct device *d, char *buf, + ssize_t (*format)(const struct iw_statistics *, + char *)) + { +- struct net_device *dev = to_net_dev(cd); ++ struct net_device *dev = to_net_dev(d); + const struct iw_statistics *iw = NULL; + ssize_t ret = -EINVAL; + +@@ -361,11 +372,12 @@ static ssize_t format_iw_##name(const st + { \ + return sprintf(buf, format_string, iw->field); \ + } \ +-static ssize_t show_iw_##name(struct class_device *cd, char *buf) \ ++static ssize_t show_iw_##name(struct device *d, \ ++ struct device_attribute *attr, char *buf) \ + { \ +- return wireless_show(cd, buf, format_iw_##name); \ ++ return wireless_show(d, buf, format_iw_##name); \ + } \ +-static CLASS_DEVICE_ATTR(name, S_IRUGO, show_iw_##name, NULL) ++static DEVICE_ATTR(name, S_IRUGO, show_iw_##name, NULL) + + WIRELESS_SHOW(status, status, fmt_hex); + WIRELESS_SHOW(link, qual.qual, fmt_dec); +@@ -379,16 +391,16 @@ WIRELESS_SHOW(retries, discard.retries, + WIRELESS_SHOW(beacon, miss.beacon, fmt_dec); + + static struct attribute *wireless_attrs[] = { +- &class_device_attr_status.attr, +- &class_device_attr_link.attr, +- &class_device_attr_level.attr, +- &class_device_attr_noise.attr, +- &class_device_attr_nwid.attr, +- &class_device_attr_crypt.attr, +- &class_device_attr_fragment.attr, +- &class_device_attr_retries.attr, +- &class_device_attr_misc.attr, +- &class_device_attr_beacon.attr, ++ &dev_attr_status.attr, ++ &dev_attr_link.attr, ++ &dev_attr_level.attr, ++ &dev_attr_noise.attr, ++ &dev_attr_nwid.attr, ++ &dev_attr_crypt.attr, ++ &dev_attr_fragment.attr, ++ &dev_attr_retries.attr, ++ &dev_attr_misc.attr, ++ &dev_attr_beacon.attr, + NULL + }; + +@@ -399,10 +411,10 @@ static struct attribute_group wireless_g + #endif + + #ifdef CONFIG_HOTPLUG +-static int netdev_uevent(struct class_device *cd, char **envp, ++static int netdev_uevent(struct device *d, char **envp, + int num_envp, char *buf, int size) + { +- struct net_device *dev = to_net_dev(cd); ++ struct net_device *dev = to_net_dev(d); + int i = 0; + int n; + +@@ -422,12 +434,11 @@ static int netdev_uevent(struct class_de + + /* + * netdev_release -- destroy and free a dead device. +- * Called when last reference to class_device kobject is gone. ++ * Called when last reference to device kobject is gone. + */ +-static void netdev_release(struct class_device *cd) ++static void netdev_release(struct device *d) + { +- struct net_device *dev +- = container_of(cd, struct net_device, class_dev); ++ struct net_device *dev = to_net_dev(d); + + BUG_ON(dev->reg_state != NETREG_RELEASED); + +@@ -436,31 +447,31 @@ static void netdev_release(struct class_ + + static struct class net_class = { + .name = "net", +- .release = netdev_release, +- .class_dev_attrs = net_class_attributes, ++ .dev_release = netdev_release, ++ .dev_attrs = net_class_attributes, + #ifdef CONFIG_HOTPLUG +- .uevent = netdev_uevent, ++ .dev_uevent = netdev_uevent, + #endif + }; + + void netdev_unregister_sysfs(struct net_device * net) + { +- class_device_del(&(net->class_dev)); ++ device_del(&(net->dev)); + } + + /* Create sysfs entries for network device. */ + int netdev_register_sysfs(struct net_device *net) + { +- struct class_device *class_dev = &(net->class_dev); ++ struct device *dev = &(net->dev); + struct attribute_group **groups = net->sysfs_groups; + +- class_device_initialize(class_dev); +- class_dev->class = &net_class; +- class_dev->class_data = net; +- class_dev->groups = groups; ++ device_initialize(dev); ++ dev->class = &net_class; ++ dev->platform_data = net; ++ dev->groups = groups; + + BUILD_BUG_ON(BUS_ID_SIZE < IFNAMSIZ); +- strlcpy(class_dev->class_id, net->name, BUS_ID_SIZE); ++ strlcpy(dev->bus_id, net->name, BUS_ID_SIZE); + + if (net->get_stats) + *groups++ = &netstat_group; +@@ -471,7 +482,7 @@ int netdev_register_sysfs(struct net_dev + *groups++ = &wireless_group; + #endif + +- return class_device_add(class_dev); ++ return device_add(dev); + } + + int netdev_sysfs_init(void) |