| --- |
| drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 74 +++++++++++----------- |
| 1 file changed, 40 insertions(+), 34 deletions(-) |
| |
| --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c |
| +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c |
| @@ -33,9 +33,9 @@ int qlcnicvf_config_led(struct qlcnic_ad |
| return -EOPNOTSUPP; |
| } |
| |
| -static ssize_t qlcnic_store_bridged_mode(struct device *dev, |
| - struct device_attribute *attr, |
| - const char *buf, size_t len) |
| +static ssize_t bridged_mode_store(struct device *dev, |
| + struct device_attribute *attr, |
| + const char *buf, size_t len) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| unsigned long new; |
| @@ -57,9 +57,8 @@ err_out: |
| return ret; |
| } |
| |
| -static ssize_t qlcnic_show_bridged_mode(struct device *dev, |
| - struct device_attribute *attr, |
| - char *buf) |
| +static ssize_t bridged_mode_show(struct device *dev, |
| + struct device_attribute *attr, char *buf) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| int bridged_mode = 0; |
| @@ -69,10 +68,11 @@ static ssize_t qlcnic_show_bridged_mode( |
| |
| return sprintf(buf, "%d\n", bridged_mode); |
| } |
| +static DEVICE_ATTR_RW(bridged_mode); |
| |
| -static ssize_t qlcnic_store_diag_mode(struct device *dev, |
| - struct device_attribute *attr, |
| - const char *buf, size_t len) |
| +static ssize_t diag_mode_store(struct device *dev, |
| + struct device_attribute *attr, const char *buf, |
| + size_t len) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| unsigned long new; |
| @@ -86,12 +86,13 @@ static ssize_t qlcnic_store_diag_mode(st |
| return len; |
| } |
| |
| -static ssize_t qlcnic_show_diag_mode(struct device *dev, |
| - struct device_attribute *attr, char *buf) |
| +static ssize_t diag_mode_show(struct device *dev, struct device_attribute *attr, |
| + char *buf) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| return sprintf(buf, "%d\n", !!(adapter->flags & QLCNIC_DIAG_ENABLED)); |
| } |
| +static DEVICE_ATTR_RW(diag_mode); |
| |
| static int qlcnic_validate_beacon(struct qlcnic_adapter *adapter, u16 beacon, |
| u8 *state, u8 *rate) |
| @@ -212,9 +213,8 @@ out: |
| return err; |
| } |
| |
| -static ssize_t qlcnic_store_beacon(struct device *dev, |
| - struct device_attribute *attr, |
| - const char *buf, size_t len) |
| +static ssize_t beacon_store(struct device *dev, struct device_attribute *attr, |
| + const char *buf, size_t len) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| int err = 0; |
| @@ -235,8 +235,8 @@ static ssize_t qlcnic_store_beacon(struc |
| return err; |
| } |
| |
| -static ssize_t qlcnic_show_beacon(struct device *dev, |
| - struct device_attribute *attr, char *buf) |
| +static ssize_t beacon_show(struct device *dev, struct device_attribute *attr, |
| + char *buf) |
| { |
| struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
| |
| @@ -264,6 +264,7 @@ static int qlcnic_sysfs_validate_crb(str |
| |
| return 0; |
| } |
| +static DEVICE_ATTR_RW(beacon); |
| |
| static ssize_t qlcnic_sysfs_read_crb(struct file *filp, struct kobject *kobj, |
| struct bin_attribute *attr, char *buf, |
| @@ -1176,24 +1177,6 @@ static ssize_t qlcnic_83xx_sysfs_flash_w |
| return size; |
| } |
| |
| -static const struct device_attribute dev_attr_bridged_mode = { |
| - .attr = { .name = "bridged_mode", .mode = 0644 }, |
| - .show = qlcnic_show_bridged_mode, |
| - .store = qlcnic_store_bridged_mode, |
| -}; |
| - |
| -static const struct device_attribute dev_attr_diag_mode = { |
| - .attr = { .name = "diag_mode", .mode = 0644 }, |
| - .show = qlcnic_show_diag_mode, |
| - .store = qlcnic_store_diag_mode, |
| -}; |
| - |
| -static const struct device_attribute dev_attr_beacon = { |
| - .attr = { .name = "beacon", .mode = 0644 }, |
| - .show = qlcnic_show_beacon, |
| - .store = qlcnic_store_beacon, |
| -}; |
| - |
| static const struct bin_attribute bin_attr_crb = { |
| .attr = { .name = "crb", .mode = 0644 }, |
| .size = 0, |
| @@ -1319,6 +1302,24 @@ void qlcnic_unregister_hwmon_dev(struct |
| } |
| #endif |
| |
| +static struct attribute *qlcnic_attrs[] = { |
| + &dev_attr_diag_mode.attr, |
| + NULL, |
| +}; |
| + |
| +static struct bin_attribute *qlcnic_bin_attrs[] = { |
| + &bin_attr_esw_config, |
| + &bin_attr_pm_config, |
| + &bin_attr_flash, |
| + NULL, |
| +}; |
| + |
| +static const struct attribute_group qlcnic_attr = { |
| + .attrs = qlcnic_attrs, |
| + .bin_attrs = qlcnic_bin_attrs, |
| +}; |
| + |
| + |
| void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter) |
| { |
| struct device *dev = &adapter->pdev->dev; |
| @@ -1332,6 +1333,11 @@ void qlcnic_create_sysfs_entries(struct |
| void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter) |
| { |
| struct device *dev = &adapter->pdev->dev; |
| + int err; |
| + |
| + err = sysfs_create_group(&dev->kobj, &qlcnic_attr); |
| + if (err) |
| + dev_err(dev, "error creating sysfs files\n"); |
| |
| if (adapter->ahw->capabilities & QLCNIC_FW_CAPABILITY_BDG) |
| device_remove_file(dev, &dev_attr_bridged_mode); |