mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 05:15:23 +02:00
Driver core changes for 6.10-rc1
Here is the small set of driver core and kernfs changes for 6.10-rc1. Nothing major here at all, just a small set of changes for some driver core apis, and minor fixups. Included in here are: - sysfs_bin_attr_simple_read() helper added and used - device_show_string() helper added and used All usages of these were acked by the various maintainers. Also in here are: - kernfs minor cleanup - removed unused functions - typo fix in documentation - pay attention to sysfs_create_link() failures in module.c finally. All of these have been in linux-next for a very long time with no reported problems. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZk3+hQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ylfTwCfUyHWkDZuZ7ehdtjzfmcd4EKZBK8An3AAV99G ox8PXMxuFTaUEdT/69FQ =2sEo -----END PGP SIGNATURE----- Merge tag 'driver-core-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core Pull driver core updates from Greg KH: "Here is the small set of driver core and kernfs changes for 6.10-rc1. Nothing major here at all, just a small set of changes for some driver core apis, and minor fixups. Included in here are: - sysfs_bin_attr_simple_read() helper added and used - device_show_string() helper added and used All usages of these were acked by the various maintainers. Also in here are: - kernfs minor cleanup - removed unused functions - typo fix in documentation - pay attention to sysfs_create_link() failures in module.c finally All of these have been in linux-next for a very long time with no reported problems" * tag 'driver-core-6.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: device property: Fix a typo in the description of device_get_child_node_count() kernfs: mount: Remove unnecessary ‘NULL’ values from knparent scsi: Use device_show_string() helper for sysfs attributes platform/x86: Use device_show_string() helper for sysfs attributes perf: Use device_show_string() helper for sysfs attributes IB/qib: Use device_show_string() helper for sysfs attributes hwmon: Use device_show_string() helper for sysfs attributes driver core: Add device_show_string() helper for sysfs attributes treewide: Use sysfs_bin_attr_simple_read() helper sysfs: Add sysfs_bin_attr_simple_read() helper module: don't ignore sysfs_create_link() failures driver core: Remove unused platform_notify, platform_notify_remove
This commit is contained in:
commit
d90be6e4aa
|
@ -425,16 +425,6 @@ static char *memdup_to_str(char *maybe_str, int max_len, gfp_t gfp)
|
||||||
return kasprintf(gfp, "%.*s", max_len, maybe_str);
|
return kasprintf(gfp, "%.*s", max_len, maybe_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t device_show_string(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *d;
|
|
||||||
|
|
||||||
d = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sprintf(buf, "%s\n", (char *)d->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t cpumask_show(struct device *dev,
|
static ssize_t cpumask_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
|
|
@ -792,14 +792,6 @@ static int __init opal_sysfs_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t export_attr_read(struct file *fp, struct kobject *kobj,
|
|
||||||
struct bin_attribute *bin_attr, char *buf,
|
|
||||||
loff_t off, size_t count)
|
|
||||||
{
|
|
||||||
return memory_read_from_buffer(buf, count, &off, bin_attr->private,
|
|
||||||
bin_attr->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int opal_add_one_export(struct kobject *parent, const char *export_name,
|
static int opal_add_one_export(struct kobject *parent, const char *export_name,
|
||||||
struct device_node *np, const char *prop_name)
|
struct device_node *np, const char *prop_name)
|
||||||
{
|
{
|
||||||
|
@ -826,7 +818,7 @@ static int opal_add_one_export(struct kobject *parent, const char *export_name,
|
||||||
sysfs_bin_attr_init(attr);
|
sysfs_bin_attr_init(attr);
|
||||||
attr->attr.name = name;
|
attr->attr.name = name;
|
||||||
attr->attr.mode = 0400;
|
attr->attr.mode = 0400;
|
||||||
attr->read = export_attr_read;
|
attr->read = sysfs_bin_attr_simple_read;
|
||||||
attr->private = __va(vals[0]);
|
attr->private = __va(vals[0]);
|
||||||
attr->size = vals[1];
|
attr->size = vals[1];
|
||||||
|
|
||||||
|
|
|
@ -5645,18 +5645,11 @@ lbr_is_visible(struct kobject *kobj, struct attribute *attr, int i)
|
||||||
|
|
||||||
static char pmu_name_str[30];
|
static char pmu_name_str[30];
|
||||||
|
|
||||||
static ssize_t pmu_name_show(struct device *cdev,
|
static DEVICE_STRING_ATTR_RO(pmu_name, 0444, pmu_name_str);
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return snprintf(buf, PAGE_SIZE, "%s\n", pmu_name_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(pmu_name);
|
|
||||||
|
|
||||||
static struct attribute *intel_pmu_caps_attrs[] = {
|
static struct attribute *intel_pmu_caps_attrs[] = {
|
||||||
&dev_attr_pmu_name.attr,
|
&dev_attr_pmu_name.attr.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static DEVICE_ATTR(allow_tsx_force_abort, 0644,
|
static DEVICE_ATTR(allow_tsx_force_abort, 0644,
|
||||||
|
|
|
@ -29,14 +29,7 @@ BGRT_SHOW(type, image_type);
|
||||||
BGRT_SHOW(xoffset, image_offset_x);
|
BGRT_SHOW(xoffset, image_offset_x);
|
||||||
BGRT_SHOW(yoffset, image_offset_y);
|
BGRT_SHOW(yoffset, image_offset_y);
|
||||||
|
|
||||||
static ssize_t image_read(struct file *file, struct kobject *kobj,
|
static BIN_ATTR_SIMPLE_RO(image);
|
||||||
struct bin_attribute *attr, char *buf, loff_t off, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + off, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BIN_ATTR_RO(image, 0); /* size gets filled in later */
|
|
||||||
|
|
||||||
static struct attribute *bgrt_attributes[] = {
|
static struct attribute *bgrt_attributes[] = {
|
||||||
&bgrt_attr_version.attr,
|
&bgrt_attr_version.attr,
|
||||||
|
|
|
@ -192,11 +192,14 @@ extern struct kset *devices_kset;
|
||||||
void devices_kset_move_last(struct device *dev);
|
void devices_kset_move_last(struct device *dev);
|
||||||
|
|
||||||
#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
|
#if defined(CONFIG_MODULES) && defined(CONFIG_SYSFS)
|
||||||
void module_add_driver(struct module *mod, struct device_driver *drv);
|
int module_add_driver(struct module *mod, struct device_driver *drv);
|
||||||
void module_remove_driver(struct device_driver *drv);
|
void module_remove_driver(struct device_driver *drv);
|
||||||
#else
|
#else
|
||||||
static inline void module_add_driver(struct module *mod,
|
static inline int module_add_driver(struct module *mod,
|
||||||
struct device_driver *drv) { }
|
struct device_driver *drv)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
static inline void module_remove_driver(struct device_driver *drv) { }
|
static inline void module_remove_driver(struct device_driver *drv) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -674,7 +674,12 @@ int bus_add_driver(struct device_driver *drv)
|
||||||
if (error)
|
if (error)
|
||||||
goto out_del_list;
|
goto out_del_list;
|
||||||
}
|
}
|
||||||
module_add_driver(drv->owner, drv);
|
error = module_add_driver(drv->owner, drv);
|
||||||
|
if (error) {
|
||||||
|
printk(KERN_ERR "%s: failed to create module links for %s\n",
|
||||||
|
__func__, drv->name);
|
||||||
|
goto out_detach;
|
||||||
|
}
|
||||||
|
|
||||||
error = driver_create_file(drv, &driver_attr_uevent);
|
error = driver_create_file(drv, &driver_attr_uevent);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -699,6 +704,8 @@ int bus_add_driver(struct device_driver *drv)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
out_detach:
|
||||||
|
driver_detach(drv);
|
||||||
out_del_list:
|
out_del_list:
|
||||||
klist_del(&priv->knode_bus);
|
klist_del(&priv->knode_bus);
|
||||||
out_unregister:
|
out_unregister:
|
||||||
|
|
|
@ -2346,8 +2346,6 @@ static void fw_devlink_link_device(struct device *dev)
|
||||||
|
|
||||||
/* Device links support end. */
|
/* Device links support end. */
|
||||||
|
|
||||||
int (*platform_notify)(struct device *dev) = NULL;
|
|
||||||
int (*platform_notify_remove)(struct device *dev) = NULL;
|
|
||||||
static struct kobject *dev_kobj;
|
static struct kobject *dev_kobj;
|
||||||
|
|
||||||
/* /sys/dev/char */
|
/* /sys/dev/char */
|
||||||
|
@ -2395,16 +2393,10 @@ static void device_platform_notify(struct device *dev)
|
||||||
acpi_device_notify(dev);
|
acpi_device_notify(dev);
|
||||||
|
|
||||||
software_node_notify(dev);
|
software_node_notify(dev);
|
||||||
|
|
||||||
if (platform_notify)
|
|
||||||
platform_notify(dev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void device_platform_notify_remove(struct device *dev)
|
static void device_platform_notify_remove(struct device *dev)
|
||||||
{
|
{
|
||||||
if (platform_notify_remove)
|
|
||||||
platform_notify_remove(dev);
|
|
||||||
|
|
||||||
software_node_notify_remove(dev);
|
software_node_notify_remove(dev);
|
||||||
|
|
||||||
acpi_device_notify_remove(dev);
|
acpi_device_notify_remove(dev);
|
||||||
|
@ -2546,6 +2538,15 @@ ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_show_bool);
|
EXPORT_SYMBOL_GPL(device_show_bool);
|
||||||
|
|
||||||
|
ssize_t device_show_string(struct device *dev,
|
||||||
|
struct device_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
struct dev_ext_attribute *ea = to_ext_attr(attr);
|
||||||
|
|
||||||
|
return sysfs_emit(buf, "%s\n", (char *)ea->var);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_show_string);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_release - free device structure.
|
* device_release - free device structure.
|
||||||
* @kobj: device's kobject.
|
* @kobj: device's kobject.
|
||||||
|
|
|
@ -30,14 +30,14 @@ static void module_create_drivers_dir(struct module_kobject *mk)
|
||||||
mutex_unlock(&drivers_dir_mutex);
|
mutex_unlock(&drivers_dir_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void module_add_driver(struct module *mod, struct device_driver *drv)
|
int module_add_driver(struct module *mod, struct device_driver *drv)
|
||||||
{
|
{
|
||||||
char *driver_name;
|
char *driver_name;
|
||||||
int no_warn;
|
|
||||||
struct module_kobject *mk = NULL;
|
struct module_kobject *mk = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!drv)
|
if (!drv)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
if (mod)
|
if (mod)
|
||||||
mk = &mod->mkobj;
|
mk = &mod->mkobj;
|
||||||
|
@ -56,17 +56,37 @@ void module_add_driver(struct module *mod, struct device_driver *drv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mk)
|
if (!mk)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
|
ret = sysfs_create_link(&drv->p->kobj, &mk->kobj, "module");
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/* Don't check return codes; these calls are idempotent */
|
|
||||||
no_warn = sysfs_create_link(&drv->p->kobj, &mk->kobj, "module");
|
|
||||||
driver_name = make_driver_name(drv);
|
driver_name = make_driver_name(drv);
|
||||||
if (driver_name) {
|
if (!driver_name) {
|
||||||
module_create_drivers_dir(mk);
|
ret = -ENOMEM;
|
||||||
no_warn = sysfs_create_link(mk->drivers_dir, &drv->p->kobj,
|
goto out;
|
||||||
driver_name);
|
|
||||||
kfree(driver_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module_create_drivers_dir(mk);
|
||||||
|
if (!mk->drivers_dir) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = sysfs_create_link(mk->drivers_dir, &drv->p->kobj, driver_name);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
kfree(driver_name);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
out:
|
||||||
|
sysfs_remove_link(&drv->p->kobj, "module");
|
||||||
|
sysfs_remove_link(mk->drivers_dir, driver_name);
|
||||||
|
kfree(driver_name);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void module_remove_driver(struct device_driver *drv)
|
void module_remove_driver(struct device_driver *drv)
|
||||||
|
|
|
@ -905,7 +905,7 @@ EXPORT_SYMBOL_GPL(fwnode_device_is_available);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_get_child_node_count - return the number of child nodes for device
|
* device_get_child_node_count - return the number of child nodes for device
|
||||||
* @dev: Device to cound the child nodes for
|
* @dev: Device to count the child nodes for
|
||||||
*
|
*
|
||||||
* Return: the number of child nodes for a given device.
|
* Return: the number of child nodes for a given device.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -761,16 +761,8 @@ static void __init dmi_scan_machine(void)
|
||||||
pr_info("DMI not present or invalid.\n");
|
pr_info("DMI not present or invalid.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t raw_table_read(struct file *file, struct kobject *kobj,
|
static BIN_ATTR_SIMPLE_ADMIN_RO(smbios_entry_point);
|
||||||
struct bin_attribute *attr, char *buf,
|
static BIN_ATTR_SIMPLE_ADMIN_RO(DMI);
|
||||||
loff_t pos, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + pos, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BIN_ATTR(smbios_entry_point, S_IRUSR, raw_table_read, NULL, 0);
|
|
||||||
static BIN_ATTR(DMI, S_IRUSR, raw_table_read, NULL, 0);
|
|
||||||
|
|
||||||
static int __init dmi_init(void)
|
static int __init dmi_init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,15 +40,7 @@ static u8 *rci2_base;
|
||||||
static u32 rci2_table_len;
|
static u32 rci2_table_len;
|
||||||
unsigned long rci2_table_phys __ro_after_init = EFI_INVALID_TABLE_ADDR;
|
unsigned long rci2_table_phys __ro_after_init = EFI_INVALID_TABLE_ADDR;
|
||||||
|
|
||||||
static ssize_t raw_table_read(struct file *file, struct kobject *kobj,
|
static BIN_ATTR_SIMPLE_ADMIN_RO(rci2);
|
||||||
struct bin_attribute *attr, char *buf,
|
|
||||||
loff_t pos, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + pos, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BIN_ATTR(rci2, S_IRUSR, raw_table_read, NULL, 0);
|
|
||||||
|
|
||||||
static u16 checksum(void)
|
static u16 checksum(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -51,21 +51,7 @@ struct gvt_firmware_header {
|
||||||
|
|
||||||
#define dev_to_drm_minor(d) dev_get_drvdata((d))
|
#define dev_to_drm_minor(d) dev_get_drvdata((d))
|
||||||
|
|
||||||
static ssize_t
|
static BIN_ATTR_SIMPLE_ADMIN_RO(gvt_firmware);
|
||||||
gvt_firmware_read(struct file *filp, struct kobject *kobj,
|
|
||||||
struct bin_attribute *attr, char *buf,
|
|
||||||
loff_t offset, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + offset, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct bin_attribute firmware_attr = {
|
|
||||||
.attr = {.name = "gvt_firmware", .mode = (S_IRUSR)},
|
|
||||||
.read = gvt_firmware_read,
|
|
||||||
.write = NULL,
|
|
||||||
.mmap = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int expose_firmware_sysfs(struct intel_gvt *gvt)
|
static int expose_firmware_sysfs(struct intel_gvt *gvt)
|
||||||
{
|
{
|
||||||
|
@ -108,10 +94,10 @@ static int expose_firmware_sysfs(struct intel_gvt *gvt)
|
||||||
crc32_start = offsetof(struct gvt_firmware_header, version);
|
crc32_start = offsetof(struct gvt_firmware_header, version);
|
||||||
h->crc32 = crc32_le(0, firmware + crc32_start, size - crc32_start);
|
h->crc32 = crc32_le(0, firmware + crc32_start, size - crc32_start);
|
||||||
|
|
||||||
firmware_attr.size = size;
|
bin_attr_gvt_firmware.size = size;
|
||||||
firmware_attr.private = firmware;
|
bin_attr_gvt_firmware.private = firmware;
|
||||||
|
|
||||||
ret = device_create_bin_file(&pdev->dev, &firmware_attr);
|
ret = device_create_bin_file(&pdev->dev, &bin_attr_gvt_firmware);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
vfree(firmware);
|
vfree(firmware);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -123,8 +109,8 @@ static void clean_firmware_sysfs(struct intel_gvt *gvt)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = to_pci_dev(gvt->gt->i915->drm.dev);
|
struct pci_dev *pdev = to_pci_dev(gvt->gt->i915->drm.dev);
|
||||||
|
|
||||||
device_remove_bin_file(&pdev->dev, &firmware_attr);
|
device_remove_bin_file(&pdev->dev, &bin_attr_gvt_firmware);
|
||||||
vfree(firmware_attr.private);
|
vfree(bin_attr_gvt_firmware.private);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -101,14 +101,7 @@ struct i5k_amb_data {
|
||||||
unsigned int num_attrs;
|
unsigned int num_attrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
|
static DEVICE_STRING_ATTR_RO(name, 0444, DRVNAME);
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sprintf(buf, "%s\n", DRVNAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(name);
|
|
||||||
|
|
||||||
static struct platform_device *amb_pdev;
|
static struct platform_device *amb_pdev;
|
||||||
|
|
||||||
|
@ -373,7 +366,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = device_create_file(&pdev->dev, &dev_attr_name);
|
res = device_create_file(&pdev->dev, &dev_attr_name.attr);
|
||||||
if (res)
|
if (res)
|
||||||
goto exit_remove;
|
goto exit_remove;
|
||||||
|
|
||||||
|
@ -386,7 +379,7 @@ static int i5k_amb_hwmon_init(struct platform_device *pdev)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
exit_remove:
|
exit_remove:
|
||||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
device_remove_file(&pdev->dev, &dev_attr_name.attr);
|
||||||
for (i = 0; i < data->num_attrs; i++)
|
for (i = 0; i < data->num_attrs; i++)
|
||||||
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
||||||
kfree(data->attrs);
|
kfree(data->attrs);
|
||||||
|
@ -561,7 +554,7 @@ static void i5k_amb_remove(struct platform_device *pdev)
|
||||||
struct i5k_amb_data *data = platform_get_drvdata(pdev);
|
struct i5k_amb_data *data = platform_get_drvdata(pdev);
|
||||||
|
|
||||||
hwmon_device_unregister(data->hwmon_dev);
|
hwmon_device_unregister(data->hwmon_dev);
|
||||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
device_remove_file(&pdev->dev, &dev_attr_name.attr);
|
||||||
for (i = 0; i < data->num_attrs; i++)
|
for (i = 0; i < data->num_attrs; i++)
|
||||||
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
device_remove_file(&pdev->dev, &data->attrs[i].s_attr.dev_attr);
|
||||||
kfree(data->attrs);
|
kfree(data->attrs);
|
||||||
|
|
|
@ -256,12 +256,7 @@ static struct ibmpex_bmc_data *get_bmc_data(int iface)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t name_show(struct device *dev, struct device_attribute *devattr,
|
static DEVICE_STRING_ATTR_RO(name, 0444, DRVNAME);
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sprintf(buf, "%s\n", DRVNAME);
|
|
||||||
}
|
|
||||||
static SENSOR_DEVICE_ATTR_RO(name, name, 0);
|
|
||||||
|
|
||||||
static ssize_t ibmpex_show_sensor(struct device *dev,
|
static ssize_t ibmpex_show_sensor(struct device *dev,
|
||||||
struct device_attribute *devattr,
|
struct device_attribute *devattr,
|
||||||
|
@ -415,8 +410,7 @@ static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
|
||||||
if (err)
|
if (err)
|
||||||
goto exit_remove;
|
goto exit_remove;
|
||||||
|
|
||||||
err = device_create_file(data->bmc_device,
|
err = device_create_file(data->bmc_device, &dev_attr_name.attr);
|
||||||
&sensor_dev_attr_name.dev_attr);
|
|
||||||
if (err)
|
if (err)
|
||||||
goto exit_remove;
|
goto exit_remove;
|
||||||
|
|
||||||
|
@ -425,7 +419,7 @@ static int ibmpex_find_sensors(struct ibmpex_bmc_data *data)
|
||||||
exit_remove:
|
exit_remove:
|
||||||
device_remove_file(data->bmc_device,
|
device_remove_file(data->bmc_device,
|
||||||
&sensor_dev_attr_reset_high_low.dev_attr);
|
&sensor_dev_attr_reset_high_low.dev_attr);
|
||||||
device_remove_file(data->bmc_device, &sensor_dev_attr_name.dev_attr);
|
device_remove_file(data->bmc_device, &dev_attr_name.attr);
|
||||||
for (i = 0; i < data->num_sensors; i++)
|
for (i = 0; i < data->num_sensors; i++)
|
||||||
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
||||||
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
||||||
|
@ -516,7 +510,7 @@ static void ibmpex_bmc_delete(struct ibmpex_bmc_data *data)
|
||||||
|
|
||||||
device_remove_file(data->bmc_device,
|
device_remove_file(data->bmc_device,
|
||||||
&sensor_dev_attr_reset_high_low.dev_attr);
|
&sensor_dev_attr_reset_high_low.dev_attr);
|
||||||
device_remove_file(data->bmc_device, &sensor_dev_attr_name.dev_attr);
|
device_remove_file(data->bmc_device, &dev_attr_name.attr);
|
||||||
for (i = 0; i < data->num_sensors; i++)
|
for (i = 0; i < data->num_sensors; i++)
|
||||||
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
for (j = 0; j < PEX_NUM_SENSOR_FUNCS; j++) {
|
||||||
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
if (!data->sensors[i].attr[j].dev_attr.attr.name)
|
||||||
|
|
|
@ -1359,7 +1359,6 @@ static inline u32 qib_get_rcvhdrtail(const struct qib_ctxtdata *rcd)
|
||||||
* sysfs interface.
|
* sysfs interface.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern const char ib_qib_version[];
|
|
||||||
extern const struct attribute_group qib_attr_group;
|
extern const struct attribute_group qib_attr_group;
|
||||||
extern const struct attribute_group *qib_attr_port_groups[];
|
extern const struct attribute_group *qib_attr_port_groups[];
|
||||||
|
|
||||||
|
|
|
@ -44,12 +44,6 @@
|
||||||
|
|
||||||
#include "qib.h"
|
#include "qib.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* The size has to be longer than this string, so we can append
|
|
||||||
* board/chip information to it in the init code.
|
|
||||||
*/
|
|
||||||
const char ib_qib_version[] = QIB_DRIVER_VERSION "\n";
|
|
||||||
|
|
||||||
DEFINE_MUTEX(qib_mutex); /* general driver use */
|
DEFINE_MUTEX(qib_mutex); /* general driver use */
|
||||||
|
|
||||||
unsigned qib_ibmtu;
|
unsigned qib_ibmtu;
|
||||||
|
|
|
@ -585,13 +585,7 @@ static ssize_t hca_type_show(struct device *device,
|
||||||
static DEVICE_ATTR_RO(hca_type);
|
static DEVICE_ATTR_RO(hca_type);
|
||||||
static DEVICE_ATTR(board_id, 0444, hca_type_show, NULL);
|
static DEVICE_ATTR(board_id, 0444, hca_type_show, NULL);
|
||||||
|
|
||||||
static ssize_t version_show(struct device *device,
|
static DEVICE_STRING_ATTR_RO(version, 0444, QIB_DRIVER_VERSION);
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
/* The string printed here is already newline-terminated. */
|
|
||||||
return sysfs_emit(buf, "%s", (char *)ib_qib_version);
|
|
||||||
}
|
|
||||||
static DEVICE_ATTR_RO(version);
|
|
||||||
|
|
||||||
static ssize_t boardversion_show(struct device *device,
|
static ssize_t boardversion_show(struct device *device,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
|
@ -721,7 +715,7 @@ static struct attribute *qib_attributes[] = {
|
||||||
&dev_attr_hw_rev.attr,
|
&dev_attr_hw_rev.attr,
|
||||||
&dev_attr_hca_type.attr,
|
&dev_attr_hca_type.attr,
|
||||||
&dev_attr_board_id.attr,
|
&dev_attr_board_id.attr,
|
||||||
&dev_attr_version.attr,
|
&dev_attr_version.attr.attr,
|
||||||
&dev_attr_nctxts.attr,
|
&dev_attr_nctxts.attr,
|
||||||
&dev_attr_nfreectxts.attr,
|
&dev_attr_nfreectxts.attr,
|
||||||
&dev_attr_serial.attr,
|
&dev_attr_serial.attr,
|
||||||
|
|
|
@ -236,24 +236,16 @@ static const struct attribute_group ali_drw_pmu_cpumask_attr_group = {
|
||||||
.attrs = ali_drw_pmu_cpumask_attrs,
|
.attrs = ali_drw_pmu_cpumask_attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t ali_drw_pmu_identifier_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *page)
|
|
||||||
{
|
|
||||||
return sysfs_emit(page, "%s\n", "ali_drw_pmu");
|
|
||||||
}
|
|
||||||
|
|
||||||
static umode_t ali_drw_pmu_identifier_attr_visible(struct kobject *kobj,
|
static umode_t ali_drw_pmu_identifier_attr_visible(struct kobject *kobj,
|
||||||
struct attribute *attr, int n)
|
struct attribute *attr, int n)
|
||||||
{
|
{
|
||||||
return attr->mode;
|
return attr->mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct device_attribute ali_drw_pmu_identifier_attr =
|
static DEVICE_STRING_ATTR_RO(ali_drw_pmu_identifier, 0444, "ali_drw_pmu");
|
||||||
__ATTR(identifier, 0444, ali_drw_pmu_identifier_show, NULL);
|
|
||||||
|
|
||||||
static struct attribute *ali_drw_pmu_identifier_attrs[] = {
|
static struct attribute *ali_drw_pmu_identifier_attrs[] = {
|
||||||
&ali_drw_pmu_identifier_attr.attr,
|
&dev_attr_ali_drw_pmu_identifier.attr.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -127,8 +127,6 @@ enum cci_models {
|
||||||
|
|
||||||
static void pmu_write_counters(struct cci_pmu *cci_pmu,
|
static void pmu_write_counters(struct cci_pmu *cci_pmu,
|
||||||
unsigned long *mask);
|
unsigned long *mask);
|
||||||
static ssize_t __maybe_unused cci_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf);
|
|
||||||
static ssize_t __maybe_unused cci_pmu_event_show(struct device *dev,
|
static ssize_t __maybe_unused cci_pmu_event_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf);
|
struct device_attribute *attr, char *buf);
|
||||||
|
|
||||||
|
@ -138,7 +136,7 @@ static ssize_t __maybe_unused cci_pmu_event_show(struct device *dev,
|
||||||
})[0].attr.attr
|
})[0].attr.attr
|
||||||
|
|
||||||
#define CCI_FORMAT_EXT_ATTR_ENTRY(_name, _config) \
|
#define CCI_FORMAT_EXT_ATTR_ENTRY(_name, _config) \
|
||||||
CCI_EXT_ATTR_ENTRY(_name, cci_pmu_format_show, (char *)_config)
|
CCI_EXT_ATTR_ENTRY(_name, device_show_string, _config)
|
||||||
#define CCI_EVENT_EXT_ATTR_ENTRY(_name, _config) \
|
#define CCI_EVENT_EXT_ATTR_ENTRY(_name, _config) \
|
||||||
CCI_EXT_ATTR_ENTRY(_name, cci_pmu_event_show, (unsigned long)_config)
|
CCI_EXT_ATTR_ENTRY(_name, cci_pmu_event_show, (unsigned long)_config)
|
||||||
|
|
||||||
|
@ -688,14 +686,6 @@ static void __cci_pmu_disable(struct cci_pmu *cci_pmu)
|
||||||
writel(val, cci_pmu->ctrl_base + CCI_PMCR);
|
writel(val, cci_pmu->ctrl_base + CCI_PMCR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t cci_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr = container_of(attr,
|
|
||||||
struct dev_ext_attribute, attr);
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t cci_pmu_event_show(struct device *dev,
|
static ssize_t cci_pmu_event_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
|
|
@ -215,18 +215,9 @@ static void arm_ccn_pmu_config_set(u64 *config, u32 node_xp, u32 type, u32 port)
|
||||||
*config |= (node_xp << 0) | (type << 8) | (port << 24);
|
*config |= (node_xp << 0) | (type << 8) | (port << 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t arm_ccn_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *ea = container_of(attr,
|
|
||||||
struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)ea->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CCN_FORMAT_ATTR(_name, _config) \
|
#define CCN_FORMAT_ATTR(_name, _config) \
|
||||||
struct dev_ext_attribute arm_ccn_pmu_format_attr_##_name = \
|
struct dev_ext_attribute arm_ccn_pmu_format_attr_##_name = \
|
||||||
{ __ATTR(_name, S_IRUGO, arm_ccn_pmu_format_show, \
|
{ __ATTR(_name, S_IRUGO, device_show_string, \
|
||||||
NULL), _config }
|
NULL), _config }
|
||||||
|
|
||||||
static CCN_FORMAT_ATTR(node, "config:0-7");
|
static CCN_FORMAT_ATTR(node, "config:0-7");
|
||||||
|
|
|
@ -223,16 +223,6 @@ arm_cspmu_event_attr_is_visible(struct kobject *kobj,
|
||||||
return attr->mode;
|
return attr->mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t arm_cspmu_sysfs_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr =
|
|
||||||
container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(arm_cspmu_sysfs_format_show);
|
|
||||||
|
|
||||||
static struct attribute *arm_cspmu_format_attrs[] = {
|
static struct attribute *arm_cspmu_format_attrs[] = {
|
||||||
ARM_CSPMU_FORMAT_EVENT_ATTR,
|
ARM_CSPMU_FORMAT_EVENT_ATTR,
|
||||||
ARM_CSPMU_FORMAT_FILTER_ATTR,
|
ARM_CSPMU_FORMAT_FILTER_ATTR,
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
#define ARM_CSPMU_FORMAT_ATTR(_name, _config) \
|
#define ARM_CSPMU_FORMAT_ATTR(_name, _config) \
|
||||||
ARM_CSPMU_EXT_ATTR(_name, arm_cspmu_sysfs_format_show, (char *)_config)
|
ARM_CSPMU_EXT_ATTR(_name, device_show_string, _config)
|
||||||
|
|
||||||
#define ARM_CSPMU_EVENT_ATTR(_name, _config) \
|
#define ARM_CSPMU_EVENT_ATTR(_name, _config) \
|
||||||
PMU_EVENT_ATTR_ID(_name, arm_cspmu_sysfs_event_show, _config)
|
PMU_EVENT_ATTR_ID(_name, arm_cspmu_sysfs_event_show, _config)
|
||||||
|
@ -167,11 +167,6 @@ ssize_t arm_cspmu_sysfs_event_show(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf);
|
char *buf);
|
||||||
|
|
||||||
/* Default function to show format attribute in sysfs. */
|
|
||||||
ssize_t arm_cspmu_sysfs_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf);
|
|
||||||
|
|
||||||
/* Register vendor backend. */
|
/* Register vendor backend. */
|
||||||
int arm_cspmu_impl_register(const struct arm_cspmu_impl_match *impl_match);
|
int arm_cspmu_impl_register(const struct arm_cspmu_impl_match *impl_match);
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
DSU_EXT_ATTR(_name, dsu_pmu_sysfs_event_show, (unsigned long)_config)
|
DSU_EXT_ATTR(_name, dsu_pmu_sysfs_event_show, (unsigned long)_config)
|
||||||
|
|
||||||
#define DSU_FORMAT_ATTR(_name, _config) \
|
#define DSU_FORMAT_ATTR(_name, _config) \
|
||||||
DSU_EXT_ATTR(_name, dsu_pmu_sysfs_format_show, (char *)_config)
|
DSU_EXT_ATTR(_name, device_show_string, _config)
|
||||||
|
|
||||||
#define DSU_CPUMASK_ATTR(_name, _config) \
|
#define DSU_CPUMASK_ATTR(_name, _config) \
|
||||||
DSU_EXT_ATTR(_name, dsu_pmu_cpumask_show, (unsigned long)_config)
|
DSU_EXT_ATTR(_name, dsu_pmu_cpumask_show, (unsigned long)_config)
|
||||||
|
@ -139,15 +139,6 @@ static ssize_t dsu_pmu_sysfs_event_show(struct device *dev,
|
||||||
return sysfs_emit(buf, "event=0x%lx\n", (unsigned long)eattr->var);
|
return sysfs_emit(buf, "event=0x%lx\n", (unsigned long)eattr->var);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t dsu_pmu_sysfs_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr = container_of(attr,
|
|
||||||
struct dev_ext_attribute, attr);
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t dsu_pmu_cpumask_show(struct device *dev,
|
static ssize_t dsu_pmu_cpumask_show(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
|
|
|
@ -208,21 +208,10 @@ static int cxl_pmu_parse_caps(struct device *dev, struct cxl_pmu_info *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t cxl_pmu_format_sysfs_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CXL_PMU_FORMAT_ATTR(_name, _format)\
|
#define CXL_PMU_FORMAT_ATTR(_name, _format)\
|
||||||
(&((struct dev_ext_attribute[]) { \
|
(&((struct dev_ext_attribute[]) { \
|
||||||
{ \
|
{ \
|
||||||
.attr = __ATTR(_name, 0444, \
|
.attr = __ATTR(_name, 0444, device_show_string, NULL), \
|
||||||
cxl_pmu_format_sysfs_show, NULL), \
|
|
||||||
.var = (void *)_format \
|
.var = (void *)_format \
|
||||||
} \
|
} \
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
|
@ -99,16 +99,6 @@ HISI_PCIE_PMU_FILTER_ATTR(len_mode, config1, 11, 10);
|
||||||
HISI_PCIE_PMU_FILTER_ATTR(port, config2, 15, 0);
|
HISI_PCIE_PMU_FILTER_ATTR(port, config2, 15, 0);
|
||||||
HISI_PCIE_PMU_FILTER_ATTR(bdf, config2, 31, 16);
|
HISI_PCIE_PMU_FILTER_ATTR(bdf, config2, 31, 16);
|
||||||
|
|
||||||
static ssize_t hisi_pcie_format_sysfs_show(struct device *dev, struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t hisi_pcie_event_sysfs_show(struct device *dev, struct device_attribute *attr,
|
static ssize_t hisi_pcie_event_sysfs_show(struct device *dev, struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
{
|
{
|
||||||
|
@ -120,8 +110,7 @@ static ssize_t hisi_pcie_event_sysfs_show(struct device *dev, struct device_attr
|
||||||
|
|
||||||
#define HISI_PCIE_PMU_FORMAT_ATTR(_name, _format) \
|
#define HISI_PCIE_PMU_FORMAT_ATTR(_name, _format) \
|
||||||
(&((struct dev_ext_attribute[]){ \
|
(&((struct dev_ext_attribute[]){ \
|
||||||
{ .attr = __ATTR(_name, 0444, hisi_pcie_format_sysfs_show, \
|
{ .attr = __ATTR(_name, 0444, device_show_string, NULL), \
|
||||||
NULL), \
|
|
||||||
.var = (void *)_format } \
|
.var = (void *)_format } \
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
|
|
|
@ -22,20 +22,6 @@
|
||||||
|
|
||||||
#define HISI_MAX_PERIOD(nr) (GENMASK_ULL((nr) - 1, 0))
|
#define HISI_MAX_PERIOD(nr) (GENMASK_ULL((nr) - 1, 0))
|
||||||
|
|
||||||
/*
|
|
||||||
* PMU format attributes
|
|
||||||
*/
|
|
||||||
ssize_t hisi_format_sysfs_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(hisi_format_sysfs_show);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PMU event attributes
|
* PMU event attributes
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
#define HISI_PMU_FORMAT_ATTR(_name, _config) \
|
#define HISI_PMU_FORMAT_ATTR(_name, _config) \
|
||||||
HISI_PMU_ATTR(_name, hisi_format_sysfs_show, (void *)_config)
|
HISI_PMU_ATTR(_name, device_show_string, _config)
|
||||||
#define HISI_PMU_EVENT_ATTR(_name, _config) \
|
#define HISI_PMU_EVENT_ATTR(_name, _config) \
|
||||||
HISI_PMU_ATTR(_name, hisi_event_sysfs_show, (unsigned long)_config)
|
HISI_PMU_ATTR(_name, hisi_event_sysfs_show, (unsigned long)_config)
|
||||||
|
|
||||||
|
@ -122,8 +122,6 @@ void hisi_uncore_pmu_enable(struct pmu *pmu);
|
||||||
void hisi_uncore_pmu_disable(struct pmu *pmu);
|
void hisi_uncore_pmu_disable(struct pmu *pmu);
|
||||||
ssize_t hisi_event_sysfs_show(struct device *dev,
|
ssize_t hisi_event_sysfs_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf);
|
struct device_attribute *attr, char *buf);
|
||||||
ssize_t hisi_format_sysfs_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf);
|
|
||||||
ssize_t hisi_cpumask_sysfs_show(struct device *dev,
|
ssize_t hisi_cpumask_sysfs_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf);
|
struct device_attribute *attr, char *buf);
|
||||||
int hisi_uncore_pmu_online_cpu(unsigned int cpu, struct hlist_node *node);
|
int hisi_uncore_pmu_online_cpu(unsigned int cpu, struct hlist_node *node);
|
||||||
|
|
|
@ -363,16 +363,6 @@ HNS3_PMU_FILTER_ATTR(global, config1, 52, 52);
|
||||||
HNS3_PMU_EVT_PPS_##_name##_TIME, \
|
HNS3_PMU_EVT_PPS_##_name##_TIME, \
|
||||||
HNS3_PMU_FILTER_INTR_##_name})
|
HNS3_PMU_FILTER_INTR_##_name})
|
||||||
|
|
||||||
static ssize_t hns3_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *)eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t hns3_pmu_event_show(struct device *dev,
|
static ssize_t hns3_pmu_event_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -421,7 +411,7 @@ static ssize_t hns3_pmu_filter_mode_show(struct device *dev,
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
#define HNS3_PMU_FORMAT_ATTR(_name, _format) \
|
#define HNS3_PMU_FORMAT_ATTR(_name, _format) \
|
||||||
HNS3_PMU_ATTR(_name, hns3_pmu_format_show, (void *)_format)
|
HNS3_PMU_ATTR(_name, device_show_string, _format)
|
||||||
#define HNS3_PMU_EVENT_ATTR(_name, _event) \
|
#define HNS3_PMU_EVENT_ATTR(_name, _event) \
|
||||||
HNS3_PMU_ATTR(_name, hns3_pmu_event_show, (void *)_event)
|
HNS3_PMU_ATTR(_name, hns3_pmu_event_show, (void *)_event)
|
||||||
#define HNS3_PMU_FLT_MODE_ATTR(_name, _event) \
|
#define HNS3_PMU_FLT_MODE_ATTR(_name, _event) \
|
||||||
|
|
|
@ -609,18 +609,9 @@ static void qcom_l3_cache__event_read(struct perf_event *event)
|
||||||
|
|
||||||
/* formats */
|
/* formats */
|
||||||
|
|
||||||
static ssize_t l3cache_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *) eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define L3CACHE_PMU_FORMAT_ATTR(_name, _config) \
|
#define L3CACHE_PMU_FORMAT_ATTR(_name, _config) \
|
||||||
(&((struct dev_ext_attribute[]) { \
|
(&((struct dev_ext_attribute[]) { \
|
||||||
{ .attr = __ATTR(_name, 0444, l3cache_pmu_format_show, NULL), \
|
{ .attr = __ATTR(_name, 0444, device_show_string, NULL), \
|
||||||
.var = (void *) _config, } \
|
.var = (void *) _config, } \
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
|
|
|
@ -162,18 +162,9 @@ enum xgene_pmu_dev_type {
|
||||||
/*
|
/*
|
||||||
* sysfs format attributes
|
* sysfs format attributes
|
||||||
*/
|
*/
|
||||||
static ssize_t xgene_pmu_format_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
struct dev_ext_attribute *eattr;
|
|
||||||
|
|
||||||
eattr = container_of(attr, struct dev_ext_attribute, attr);
|
|
||||||
return sysfs_emit(buf, "%s\n", (char *) eattr->var);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define XGENE_PMU_FORMAT_ATTR(_name, _config) \
|
#define XGENE_PMU_FORMAT_ATTR(_name, _config) \
|
||||||
(&((struct dev_ext_attribute[]) { \
|
(&((struct dev_ext_attribute[]) { \
|
||||||
{ .attr = __ATTR(_name, S_IRUGO, xgene_pmu_format_show, NULL), \
|
{ .attr = __ATTR(_name, S_IRUGO, device_show_string, NULL), \
|
||||||
.var = (void *) _config, } \
|
.var = (void *) _config, } \
|
||||||
})[0].attr.attr)
|
})[0].attr.attr)
|
||||||
|
|
||||||
|
|
|
@ -925,17 +925,12 @@ static ssize_t kbd_rgb_mode_store(struct device *dev,
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR_WO(kbd_rgb_mode);
|
static DEVICE_ATTR_WO(kbd_rgb_mode);
|
||||||
|
|
||||||
static ssize_t kbd_rgb_mode_index_show(struct device *device,
|
static DEVICE_STRING_ATTR_RO(kbd_rgb_mode_index, 0444,
|
||||||
struct device_attribute *attr,
|
"cmd mode red green blue speed");
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", "cmd mode red green blue speed");
|
|
||||||
}
|
|
||||||
static DEVICE_ATTR_RO(kbd_rgb_mode_index);
|
|
||||||
|
|
||||||
static struct attribute *kbd_rgb_mode_attrs[] = {
|
static struct attribute *kbd_rgb_mode_attrs[] = {
|
||||||
&dev_attr_kbd_rgb_mode.attr,
|
&dev_attr_kbd_rgb_mode.attr,
|
||||||
&dev_attr_kbd_rgb_mode_index.attr,
|
&dev_attr_kbd_rgb_mode_index.attr.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -977,17 +972,12 @@ static ssize_t kbd_rgb_state_store(struct device *dev,
|
||||||
}
|
}
|
||||||
static DEVICE_ATTR_WO(kbd_rgb_state);
|
static DEVICE_ATTR_WO(kbd_rgb_state);
|
||||||
|
|
||||||
static ssize_t kbd_rgb_state_index_show(struct device *device,
|
static DEVICE_STRING_ATTR_RO(kbd_rgb_state_index, 0444,
|
||||||
struct device_attribute *attr,
|
"cmd boot awake sleep keyboard");
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", "cmd boot awake sleep keyboard");
|
|
||||||
}
|
|
||||||
static DEVICE_ATTR_RO(kbd_rgb_state_index);
|
|
||||||
|
|
||||||
static struct attribute *kbd_rgb_state_attrs[] = {
|
static struct attribute *kbd_rgb_state_attrs[] = {
|
||||||
&dev_attr_kbd_rgb_state.attr,
|
&dev_attr_kbd_rgb_state.attr,
|
||||||
&dev_attr_kbd_rgb_state_index.attr,
|
&dev_attr_kbd_rgb_state_index.attr.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2718,13 +2708,6 @@ static ssize_t pwm1_enable_store(struct device *dev,
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t fan1_label_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", ASUS_FAN_DESC);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t asus_hwmon_temp1(struct device *dev,
|
static ssize_t asus_hwmon_temp1(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
|
@ -2759,13 +2742,6 @@ static ssize_t fan2_input_show(struct device *dev,
|
||||||
return sysfs_emit(buf, "%d\n", value * 100);
|
return sysfs_emit(buf, "%d\n", value * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t fan2_label_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", ASUS_GPU_FAN_DESC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Middle/Center fan on modern ROG laptops */
|
/* Middle/Center fan on modern ROG laptops */
|
||||||
static ssize_t fan3_input_show(struct device *dev,
|
static ssize_t fan3_input_show(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
|
@ -2784,13 +2760,6 @@ static ssize_t fan3_input_show(struct device *dev,
|
||||||
return sysfs_emit(buf, "%d\n", value * 100);
|
return sysfs_emit(buf, "%d\n", value * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t fan3_label_show(struct device *dev,
|
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", ASUS_MID_FAN_DESC);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t pwm2_enable_show(struct device *dev,
|
static ssize_t pwm2_enable_show(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
char *buf)
|
char *buf)
|
||||||
|
@ -2887,15 +2856,16 @@ static ssize_t pwm3_enable_store(struct device *dev,
|
||||||
static DEVICE_ATTR_RW(pwm1);
|
static DEVICE_ATTR_RW(pwm1);
|
||||||
static DEVICE_ATTR_RW(pwm1_enable);
|
static DEVICE_ATTR_RW(pwm1_enable);
|
||||||
static DEVICE_ATTR_RO(fan1_input);
|
static DEVICE_ATTR_RO(fan1_input);
|
||||||
static DEVICE_ATTR_RO(fan1_label);
|
static DEVICE_STRING_ATTR_RO(fan1_label, 0444, ASUS_FAN_DESC);
|
||||||
|
|
||||||
/* Fan2 - GPU fan */
|
/* Fan2 - GPU fan */
|
||||||
static DEVICE_ATTR_RW(pwm2_enable);
|
static DEVICE_ATTR_RW(pwm2_enable);
|
||||||
static DEVICE_ATTR_RO(fan2_input);
|
static DEVICE_ATTR_RO(fan2_input);
|
||||||
static DEVICE_ATTR_RO(fan2_label);
|
static DEVICE_STRING_ATTR_RO(fan2_label, 0444, ASUS_GPU_FAN_DESC);
|
||||||
/* Fan3 - Middle/center fan */
|
/* Fan3 - Middle/center fan */
|
||||||
static DEVICE_ATTR_RW(pwm3_enable);
|
static DEVICE_ATTR_RW(pwm3_enable);
|
||||||
static DEVICE_ATTR_RO(fan3_input);
|
static DEVICE_ATTR_RO(fan3_input);
|
||||||
static DEVICE_ATTR_RO(fan3_label);
|
static DEVICE_STRING_ATTR_RO(fan3_label, 0444, ASUS_MID_FAN_DESC);
|
||||||
|
|
||||||
/* Temperature */
|
/* Temperature */
|
||||||
static DEVICE_ATTR(temp1_input, S_IRUGO, asus_hwmon_temp1, NULL);
|
static DEVICE_ATTR(temp1_input, S_IRUGO, asus_hwmon_temp1, NULL);
|
||||||
|
@ -2906,11 +2876,11 @@ static struct attribute *hwmon_attributes[] = {
|
||||||
&dev_attr_pwm2_enable.attr,
|
&dev_attr_pwm2_enable.attr,
|
||||||
&dev_attr_pwm3_enable.attr,
|
&dev_attr_pwm3_enable.attr,
|
||||||
&dev_attr_fan1_input.attr,
|
&dev_attr_fan1_input.attr,
|
||||||
&dev_attr_fan1_label.attr,
|
&dev_attr_fan1_label.attr.attr,
|
||||||
&dev_attr_fan2_input.attr,
|
&dev_attr_fan2_input.attr,
|
||||||
&dev_attr_fan2_label.attr,
|
&dev_attr_fan2_label.attr.attr,
|
||||||
&dev_attr_fan3_input.attr,
|
&dev_attr_fan3_input.attr,
|
||||||
&dev_attr_fan3_label.attr,
|
&dev_attr_fan3_label.attr.attr,
|
||||||
|
|
||||||
&dev_attr_temp1_input.attr,
|
&dev_attr_temp1_input.attr,
|
||||||
NULL
|
NULL
|
||||||
|
@ -2927,17 +2897,17 @@ static umode_t asus_hwmon_sysfs_is_visible(struct kobject *kobj,
|
||||||
if (asus->fan_type != FAN_TYPE_AGFN)
|
if (asus->fan_type != FAN_TYPE_AGFN)
|
||||||
return 0;
|
return 0;
|
||||||
} else if (attr == &dev_attr_fan1_input.attr
|
} else if (attr == &dev_attr_fan1_input.attr
|
||||||
|| attr == &dev_attr_fan1_label.attr
|
|| attr == &dev_attr_fan1_label.attr.attr
|
||||||
|| attr == &dev_attr_pwm1_enable.attr) {
|
|| attr == &dev_attr_pwm1_enable.attr) {
|
||||||
if (asus->fan_type == FAN_TYPE_NONE)
|
if (asus->fan_type == FAN_TYPE_NONE)
|
||||||
return 0;
|
return 0;
|
||||||
} else if (attr == &dev_attr_fan2_input.attr
|
} else if (attr == &dev_attr_fan2_input.attr
|
||||||
|| attr == &dev_attr_fan2_label.attr
|
|| attr == &dev_attr_fan2_label.attr.attr
|
||||||
|| attr == &dev_attr_pwm2_enable.attr) {
|
|| attr == &dev_attr_pwm2_enable.attr) {
|
||||||
if (asus->gpu_fan_type == FAN_TYPE_NONE)
|
if (asus->gpu_fan_type == FAN_TYPE_NONE)
|
||||||
return 0;
|
return 0;
|
||||||
} else if (attr == &dev_attr_fan3_input.attr
|
} else if (attr == &dev_attr_fan3_input.attr
|
||||||
|| attr == &dev_attr_fan3_label.attr
|
|| attr == &dev_attr_fan3_label.attr.attr
|
||||||
|| attr == &dev_attr_pwm3_enable.attr) {
|
|| attr == &dev_attr_pwm3_enable.attr) {
|
||||||
if (asus->mid_fan_type == FAN_TYPE_NONE)
|
if (asus->mid_fan_type == FAN_TYPE_NONE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -10828,13 +10828,7 @@ static struct ibm_struct auxmac_data = {
|
||||||
.name = "auxmac",
|
.name = "auxmac",
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t auxmac_show(struct device *dev,
|
static DEVICE_STRING_ATTR_RO(auxmac, 0444, auxmac);
|
||||||
struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", auxmac);
|
|
||||||
}
|
|
||||||
static DEVICE_ATTR_RO(auxmac);
|
|
||||||
|
|
||||||
static umode_t auxmac_attr_is_visible(struct kobject *kobj,
|
static umode_t auxmac_attr_is_visible(struct kobject *kobj,
|
||||||
struct attribute *attr, int n)
|
struct attribute *attr, int n)
|
||||||
|
@ -10843,7 +10837,7 @@ static umode_t auxmac_attr_is_visible(struct kobject *kobj,
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct attribute *auxmac_attributes[] = {
|
static struct attribute *auxmac_attributes[] = {
|
||||||
&dev_attr_auxmac.attr,
|
&dev_attr_auxmac.attr.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1821,12 +1821,7 @@ static DECLARE_WORK(kbd_bl_work, toshiba_acpi_kbd_bl_work);
|
||||||
/*
|
/*
|
||||||
* Sysfs files
|
* Sysfs files
|
||||||
*/
|
*/
|
||||||
static ssize_t version_show(struct device *dev,
|
static DEVICE_STRING_ATTR_RO(version, 0444, TOSHIBA_ACPI_VERSION);
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
return sprintf(buf, "%s\n", TOSHIBA_ACPI_VERSION);
|
|
||||||
}
|
|
||||||
static DEVICE_ATTR_RO(version);
|
|
||||||
|
|
||||||
static ssize_t fan_store(struct device *dev,
|
static ssize_t fan_store(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
|
@ -2435,7 +2430,7 @@ static ssize_t cooling_method_store(struct device *dev,
|
||||||
static DEVICE_ATTR_RW(cooling_method);
|
static DEVICE_ATTR_RW(cooling_method);
|
||||||
|
|
||||||
static struct attribute *toshiba_attributes[] = {
|
static struct attribute *toshiba_attributes[] = {
|
||||||
&dev_attr_version.attr,
|
&dev_attr_version.attr.attr,
|
||||||
&dev_attr_fan.attr,
|
&dev_attr_fan.attr,
|
||||||
&dev_attr_kbd_backlight_mode.attr,
|
&dev_attr_kbd_backlight_mode.attr,
|
||||||
&dev_attr_kbd_type.attr,
|
&dev_attr_kbd_type.attr,
|
||||||
|
|
|
@ -853,13 +853,6 @@ bfad_im_hw_version_show(struct device *dev, struct device_attribute *attr,
|
||||||
return sysfs_emit(buf, "%s\n", hw_ver);
|
return sysfs_emit(buf, "%s\n", hw_ver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
|
||||||
bfad_im_drv_version_show(struct device *dev, struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", BFAD_DRIVER_VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
bfad_im_optionrom_version_show(struct device *dev,
|
bfad_im_optionrom_version_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
|
@ -901,13 +894,6 @@ bfad_im_num_of_ports_show(struct device *dev, struct device_attribute *attr,
|
||||||
bfa_get_nports(&bfad->bfa));
|
bfa_get_nports(&bfad->bfa));
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
|
||||||
bfad_im_drv_name_show(struct device *dev, struct device_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", BFAD_DRIVER_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
bfad_im_num_of_discovered_ports_show(struct device *dev,
|
bfad_im_num_of_discovered_ports_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
|
@ -944,15 +930,15 @@ static DEVICE_ATTR(symbolic_name, S_IRUGO,
|
||||||
bfad_im_symbolic_name_show, NULL);
|
bfad_im_symbolic_name_show, NULL);
|
||||||
static DEVICE_ATTR(hardware_version, S_IRUGO,
|
static DEVICE_ATTR(hardware_version, S_IRUGO,
|
||||||
bfad_im_hw_version_show, NULL);
|
bfad_im_hw_version_show, NULL);
|
||||||
static DEVICE_ATTR(driver_version, S_IRUGO,
|
static DEVICE_STRING_ATTR_RO(driver_version, S_IRUGO,
|
||||||
bfad_im_drv_version_show, NULL);
|
BFAD_DRIVER_VERSION);
|
||||||
static DEVICE_ATTR(option_rom_version, S_IRUGO,
|
static DEVICE_ATTR(option_rom_version, S_IRUGO,
|
||||||
bfad_im_optionrom_version_show, NULL);
|
bfad_im_optionrom_version_show, NULL);
|
||||||
static DEVICE_ATTR(firmware_version, S_IRUGO,
|
static DEVICE_ATTR(firmware_version, S_IRUGO,
|
||||||
bfad_im_fw_version_show, NULL);
|
bfad_im_fw_version_show, NULL);
|
||||||
static DEVICE_ATTR(number_of_ports, S_IRUGO,
|
static DEVICE_ATTR(number_of_ports, S_IRUGO,
|
||||||
bfad_im_num_of_ports_show, NULL);
|
bfad_im_num_of_ports_show, NULL);
|
||||||
static DEVICE_ATTR(driver_name, S_IRUGO, bfad_im_drv_name_show, NULL);
|
static DEVICE_STRING_ATTR_RO(driver_name, S_IRUGO, BFAD_DRIVER_NAME);
|
||||||
static DEVICE_ATTR(number_of_discovered_ports, S_IRUGO,
|
static DEVICE_ATTR(number_of_discovered_ports, S_IRUGO,
|
||||||
bfad_im_num_of_discovered_ports_show, NULL);
|
bfad_im_num_of_discovered_ports_show, NULL);
|
||||||
|
|
||||||
|
@ -963,11 +949,11 @@ static struct attribute *bfad_im_host_attrs[] = {
|
||||||
&dev_attr_node_name.attr,
|
&dev_attr_node_name.attr,
|
||||||
&dev_attr_symbolic_name.attr,
|
&dev_attr_symbolic_name.attr,
|
||||||
&dev_attr_hardware_version.attr,
|
&dev_attr_hardware_version.attr,
|
||||||
&dev_attr_driver_version.attr,
|
&dev_attr_driver_version.attr.attr,
|
||||||
&dev_attr_option_rom_version.attr,
|
&dev_attr_option_rom_version.attr,
|
||||||
&dev_attr_firmware_version.attr,
|
&dev_attr_firmware_version.attr,
|
||||||
&dev_attr_number_of_ports.attr,
|
&dev_attr_number_of_ports.attr,
|
||||||
&dev_attr_driver_name.attr,
|
&dev_attr_driver_name.attr.attr,
|
||||||
&dev_attr_number_of_discovered_ports.attr,
|
&dev_attr_number_of_discovered_ports.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
@ -988,11 +974,11 @@ static struct attribute *bfad_im_vport_attrs[] = {
|
||||||
&dev_attr_node_name.attr,
|
&dev_attr_node_name.attr,
|
||||||
&dev_attr_symbolic_name.attr,
|
&dev_attr_symbolic_name.attr,
|
||||||
&dev_attr_hardware_version.attr,
|
&dev_attr_hardware_version.attr,
|
||||||
&dev_attr_driver_version.attr,
|
&dev_attr_driver_version.attr.attr,
|
||||||
&dev_attr_option_rom_version.attr,
|
&dev_attr_option_rom_version.attr,
|
||||||
&dev_attr_firmware_version.attr,
|
&dev_attr_firmware_version.attr,
|
||||||
&dev_attr_number_of_ports.attr,
|
&dev_attr_number_of_ports.attr,
|
||||||
&dev_attr_driver_name.attr,
|
&dev_attr_driver_name.attr.attr,
|
||||||
&dev_attr_number_of_discovered_ports.attr,
|
&dev_attr_number_of_discovered_ports.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
|
@ -3613,12 +3613,6 @@ static void ibmvscsis_remove(struct vio_dev *vdev)
|
||||||
kfree(vscsi);
|
kfree(vscsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t system_id_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buf, "%s\n", system_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t partition_number_show(struct device *dev,
|
static ssize_t partition_number_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -3982,8 +3976,7 @@ static const struct target_core_fabric_ops ibmvscsis_ops = {
|
||||||
|
|
||||||
static void ibmvscsis_dev_release(struct device *dev) {};
|
static void ibmvscsis_dev_release(struct device *dev) {};
|
||||||
|
|
||||||
static struct device_attribute dev_attr_system_id =
|
static DEVICE_STRING_ATTR_RO(system_id, S_IRUGO, system_id);
|
||||||
__ATTR(system_id, S_IRUGO, system_id_show, NULL);
|
|
||||||
|
|
||||||
static struct device_attribute dev_attr_partition_number =
|
static struct device_attribute dev_attr_partition_number =
|
||||||
__ATTR(partition_number, S_IRUGO, partition_number_show, NULL);
|
__ATTR(partition_number, S_IRUGO, partition_number_show, NULL);
|
||||||
|
@ -3992,7 +3985,7 @@ static struct device_attribute dev_attr_unit_address =
|
||||||
__ATTR(unit_address, S_IRUGO, unit_address_show, NULL);
|
__ATTR(unit_address, S_IRUGO, unit_address_show, NULL);
|
||||||
|
|
||||||
static struct attribute *ibmvscsis_dev_attrs[] = {
|
static struct attribute *ibmvscsis_dev_attrs[] = {
|
||||||
&dev_attr_system_id.attr,
|
&dev_attr_system_id.attr.attr,
|
||||||
&dev_attr_partition_number.attr,
|
&dev_attr_partition_number.attr,
|
||||||
&dev_attr_unit_address.attr,
|
&dev_attr_unit_address.attr,
|
||||||
};
|
};
|
||||||
|
|
|
@ -676,13 +676,7 @@ static struct pci_driver mvs_pci_driver = {
|
||||||
.remove = mvs_pci_remove,
|
.remove = mvs_pci_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t driver_version_show(struct device *cdev,
|
static DEVICE_STRING_ATTR_RO(driver_version, 0444, DRV_VERSION);
|
||||||
struct device_attribute *attr, char *buffer)
|
|
||||||
{
|
|
||||||
return sysfs_emit(buffer, "%s\n", DRV_VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(driver_version);
|
|
||||||
|
|
||||||
static ssize_t interrupt_coalescing_store(struct device *cdev,
|
static ssize_t interrupt_coalescing_store(struct device *cdev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
|
@ -757,7 +751,7 @@ static void __exit mvs_exit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct attribute *mvst_host_attrs[] = {
|
static struct attribute *mvst_host_attrs[] = {
|
||||||
&dev_attr_driver_version.attr,
|
&dev_attr_driver_version.attr.attr,
|
||||||
&dev_attr_interrupt_coalescing.attr,
|
&dev_attr_interrupt_coalescing.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1067,13 +1067,6 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha, bool stop_beacon)
|
||||||
|
|
||||||
/* Scsi_Host attributes. */
|
/* Scsi_Host attributes. */
|
||||||
|
|
||||||
static ssize_t
|
|
||||||
qla2x00_driver_version_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
|
||||||
return scnprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
qla2x00_fw_version_show(struct device *dev,
|
qla2x00_fw_version_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
|
@ -2412,7 +2405,7 @@ qla2x00_dport_diagnostics_show(struct device *dev,
|
||||||
static DEVICE_ATTR(dport_diagnostics, 0444,
|
static DEVICE_ATTR(dport_diagnostics, 0444,
|
||||||
qla2x00_dport_diagnostics_show, NULL);
|
qla2x00_dport_diagnostics_show, NULL);
|
||||||
|
|
||||||
static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_driver_version_show, NULL);
|
static DEVICE_STRING_ATTR_RO(driver_version, S_IRUGO, qla2x00_version_str);
|
||||||
static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
|
static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
|
||||||
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
|
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
|
||||||
static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL);
|
static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL);
|
||||||
|
@ -2478,7 +2471,7 @@ static DEVICE_ATTR(port_no, 0444, qla2x00_port_no_show, NULL);
|
||||||
static DEVICE_ATTR(fw_attr, 0444, qla2x00_fw_attr_show, NULL);
|
static DEVICE_ATTR(fw_attr, 0444, qla2x00_fw_attr_show, NULL);
|
||||||
|
|
||||||
static struct attribute *qla2x00_host_attrs[] = {
|
static struct attribute *qla2x00_host_attrs[] = {
|
||||||
&dev_attr_driver_version.attr,
|
&dev_attr_driver_version.attr.attr,
|
||||||
&dev_attr_fw_version.attr,
|
&dev_attr_fw_version.attr,
|
||||||
&dev_attr_serial_num.attr,
|
&dev_attr_serial_num.attr,
|
||||||
&dev_attr_isp_name.attr,
|
&dev_attr_isp_name.attr,
|
||||||
|
|
|
@ -6891,12 +6891,6 @@ static ssize_t pqi_firmware_version_show(struct device *dev,
|
||||||
return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->firmware_version);
|
return scnprintf(buffer, PAGE_SIZE, "%s\n", ctrl_info->firmware_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t pqi_driver_version_show(struct device *dev,
|
|
||||||
struct device_attribute *attr, char *buffer)
|
|
||||||
{
|
|
||||||
return scnprintf(buffer, PAGE_SIZE, "%s\n", DRIVER_VERSION BUILD_TIMESTAMP);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t pqi_serial_number_show(struct device *dev,
|
static ssize_t pqi_serial_number_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buffer)
|
struct device_attribute *attr, char *buffer)
|
||||||
{
|
{
|
||||||
|
@ -7065,7 +7059,8 @@ static ssize_t pqi_host_enable_r6_writes_store(struct device *dev,
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR(driver_version, 0444, pqi_driver_version_show, NULL);
|
static DEVICE_STRING_ATTR_RO(driver_version, 0444,
|
||||||
|
DRIVER_VERSION BUILD_TIMESTAMP);
|
||||||
static DEVICE_ATTR(firmware_version, 0444, pqi_firmware_version_show, NULL);
|
static DEVICE_ATTR(firmware_version, 0444, pqi_firmware_version_show, NULL);
|
||||||
static DEVICE_ATTR(model, 0444, pqi_model_show, NULL);
|
static DEVICE_ATTR(model, 0444, pqi_model_show, NULL);
|
||||||
static DEVICE_ATTR(serial_number, 0444, pqi_serial_number_show, NULL);
|
static DEVICE_ATTR(serial_number, 0444, pqi_serial_number_show, NULL);
|
||||||
|
@ -7082,7 +7077,7 @@ static DEVICE_ATTR(enable_r6_writes, 0644,
|
||||||
pqi_host_enable_r6_writes_show, pqi_host_enable_r6_writes_store);
|
pqi_host_enable_r6_writes_show, pqi_host_enable_r6_writes_store);
|
||||||
|
|
||||||
static struct attribute *pqi_shost_attrs[] = {
|
static struct attribute *pqi_shost_attrs[] = {
|
||||||
&dev_attr_driver_version.attr,
|
&dev_attr_driver_version.attr.attr,
|
||||||
&dev_attr_firmware_version.attr,
|
&dev_attr_firmware_version.attr,
|
||||||
&dev_attr_model.attr,
|
&dev_attr_model.attr,
|
||||||
&dev_attr_serial_number.attr,
|
&dev_attr_serial_number.attr,
|
||||||
|
|
|
@ -73,14 +73,7 @@ struct odvp_attr {
|
||||||
struct device_attribute attr;
|
struct device_attribute attr;
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t data_vault_read(struct file *file, struct kobject *kobj,
|
static BIN_ATTR_SIMPLE_RO(data_vault);
|
||||||
struct bin_attribute *attr, char *buf, loff_t off, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + off, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BIN_ATTR_RO(data_vault, 0);
|
|
||||||
|
|
||||||
static struct bin_attribute *data_attributes[] = {
|
static struct bin_attribute *data_attributes[] = {
|
||||||
&bin_attr_data_vault,
|
&bin_attr_data_vault,
|
||||||
|
|
|
@ -206,7 +206,7 @@ struct dentry *kernfs_node_dentry(struct kernfs_node *kn,
|
||||||
struct super_block *sb)
|
struct super_block *sb)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
struct kernfs_node *knparent = NULL;
|
struct kernfs_node *knparent;
|
||||||
|
|
||||||
BUG_ON(sb->s_op != &kernfs_sops);
|
BUG_ON(sb->s_op != &kernfs_sops);
|
||||||
|
|
||||||
|
|
|
@ -785,3 +785,30 @@ int sysfs_emit_at(char *buf, int at, const char *fmt, ...)
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sysfs_emit_at);
|
EXPORT_SYMBOL_GPL(sysfs_emit_at);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_bin_attr_simple_read - read callback to simply copy from memory.
|
||||||
|
* @file: attribute file which is being read.
|
||||||
|
* @kobj: object to which the attribute belongs.
|
||||||
|
* @attr: attribute descriptor.
|
||||||
|
* @buf: destination buffer.
|
||||||
|
* @off: offset in bytes from which to read.
|
||||||
|
* @count: maximum number of bytes to read.
|
||||||
|
*
|
||||||
|
* Simple ->read() callback for bin_attributes backed by a buffer in memory.
|
||||||
|
* The @private and @size members in struct bin_attribute must be set to the
|
||||||
|
* buffer's location and size before the bin_attribute is created in sysfs.
|
||||||
|
*
|
||||||
|
* Bounds check for @off and @count is done in sysfs_kf_bin_read().
|
||||||
|
* Negative value check for @off is done in vfs_setpos() and default_llseek().
|
||||||
|
*
|
||||||
|
* Returns number of bytes written to @buf.
|
||||||
|
*/
|
||||||
|
ssize_t sysfs_bin_attr_simple_read(struct file *file, struct kobject *kobj,
|
||||||
|
struct bin_attribute *attr, char *buf,
|
||||||
|
loff_t off, size_t count)
|
||||||
|
{
|
||||||
|
memcpy(buf, attr->private + off, count);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sysfs_bin_attr_simple_read);
|
||||||
|
|
|
@ -132,6 +132,8 @@ ssize_t device_show_bool(struct device *dev, struct device_attribute *attr,
|
||||||
char *buf);
|
char *buf);
|
||||||
ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
||||||
const char *buf, size_t count);
|
const char *buf, size_t count);
|
||||||
|
ssize_t device_show_string(struct device *dev, struct device_attribute *attr,
|
||||||
|
char *buf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DEVICE_ATTR - Define a device attribute.
|
* DEVICE_ATTR - Define a device attribute.
|
||||||
|
@ -251,6 +253,19 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
||||||
struct dev_ext_attribute dev_attr_##_name = \
|
struct dev_ext_attribute dev_attr_##_name = \
|
||||||
{ __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) }
|
{ __ATTR(_name, _mode, device_show_bool, device_store_bool), &(_var) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DEVICE_STRING_ATTR_RO - Define a device attribute backed by a r/o string.
|
||||||
|
* @_name: Attribute name.
|
||||||
|
* @_mode: File mode.
|
||||||
|
* @_var: Identifier of string.
|
||||||
|
*
|
||||||
|
* Like DEVICE_ULONG_ATTR(), but @_var is a string. Because the length of the
|
||||||
|
* string allocation is unknown, the attribute must be read-only.
|
||||||
|
*/
|
||||||
|
#define DEVICE_STRING_ATTR_RO(_name, _mode, _var) \
|
||||||
|
struct dev_ext_attribute dev_attr_##_name = \
|
||||||
|
{ __ATTR(_name, (_mode) & ~0222, device_show_string, NULL), (_var) }
|
||||||
|
|
||||||
#define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
|
#define DEVICE_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
|
||||||
struct device_attribute dev_attr_##_name = \
|
struct device_attribute dev_attr_##_name = \
|
||||||
__ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
|
__ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
|
||||||
|
@ -1210,17 +1225,6 @@ int __must_check devm_device_add_groups(struct device *dev,
|
||||||
int __must_check devm_device_add_group(struct device *dev,
|
int __must_check devm_device_add_group(struct device *dev,
|
||||||
const struct attribute_group *grp);
|
const struct attribute_group *grp);
|
||||||
|
|
||||||
/*
|
|
||||||
* Platform "fixup" functions - allow the platform to have their say
|
|
||||||
* about devices and actions that the general device layer doesn't
|
|
||||||
* know about.
|
|
||||||
*/
|
|
||||||
/* Notify platform of device discovery */
|
|
||||||
extern int (*platform_notify)(struct device *dev);
|
|
||||||
|
|
||||||
extern int (*platform_notify_remove)(struct device *dev);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get_device - atomically increment the reference count for the device.
|
* get_device - atomically increment the reference count for the device.
|
||||||
*
|
*
|
||||||
|
|
|
@ -371,6 +371,17 @@ struct bin_attribute bin_attr_##_name = __BIN_ATTR_ADMIN_RO(_name, _size)
|
||||||
#define BIN_ATTR_ADMIN_RW(_name, _size) \
|
#define BIN_ATTR_ADMIN_RW(_name, _size) \
|
||||||
struct bin_attribute bin_attr_##_name = __BIN_ATTR_ADMIN_RW(_name, _size)
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR_ADMIN_RW(_name, _size)
|
||||||
|
|
||||||
|
#define __BIN_ATTR_SIMPLE_RO(_name, _mode) { \
|
||||||
|
.attr = { .name = __stringify(_name), .mode = _mode }, \
|
||||||
|
.read = sysfs_bin_attr_simple_read, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BIN_ATTR_SIMPLE_RO(_name) \
|
||||||
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR_SIMPLE_RO(_name, 0444)
|
||||||
|
|
||||||
|
#define BIN_ATTR_SIMPLE_ADMIN_RO(_name) \
|
||||||
|
struct bin_attribute bin_attr_##_name = __BIN_ATTR_SIMPLE_RO(_name, 0400)
|
||||||
|
|
||||||
struct sysfs_ops {
|
struct sysfs_ops {
|
||||||
ssize_t (*show)(struct kobject *, struct attribute *, char *);
|
ssize_t (*show)(struct kobject *, struct attribute *, char *);
|
||||||
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
|
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
|
||||||
|
@ -478,6 +489,10 @@ int sysfs_emit(char *buf, const char *fmt, ...);
|
||||||
__printf(3, 4)
|
__printf(3, 4)
|
||||||
int sysfs_emit_at(char *buf, int at, const char *fmt, ...);
|
int sysfs_emit_at(char *buf, int at, const char *fmt, ...);
|
||||||
|
|
||||||
|
ssize_t sysfs_bin_attr_simple_read(struct file *file, struct kobject *kobj,
|
||||||
|
struct bin_attribute *attr, char *buf,
|
||||||
|
loff_t off, size_t count);
|
||||||
|
|
||||||
#else /* CONFIG_SYSFS */
|
#else /* CONFIG_SYSFS */
|
||||||
|
|
||||||
static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
|
static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)
|
||||||
|
|
|
@ -575,15 +575,7 @@ extern unsigned long __initramfs_size;
|
||||||
#include <linux/initrd.h>
|
#include <linux/initrd.h>
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
|
|
||||||
static ssize_t raw_read(struct file *file, struct kobject *kobj,
|
static BIN_ATTR(initrd, 0440, sysfs_bin_attr_simple_read, NULL, 0);
|
||||||
struct bin_attribute *attr, char *buf,
|
|
||||||
loff_t pos, size_t count)
|
|
||||||
{
|
|
||||||
memcpy(buf, attr->private + pos, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BIN_ATTR(initrd, 0440, raw_read, NULL, 0);
|
|
||||||
|
|
||||||
void __init reserve_initrd_mem(void)
|
void __init reserve_initrd_mem(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -146,17 +146,6 @@ struct module_notes_attrs {
|
||||||
struct bin_attribute attrs[] __counted_by(notes);
|
struct bin_attribute attrs[] __counted_by(notes);
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t module_notes_read(struct file *filp, struct kobject *kobj,
|
|
||||||
struct bin_attribute *bin_attr,
|
|
||||||
char *buf, loff_t pos, size_t count)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The caller checked the pos and count against our size.
|
|
||||||
*/
|
|
||||||
memcpy(buf, bin_attr->private + pos, count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
|
static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
|
||||||
unsigned int i)
|
unsigned int i)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +194,7 @@ static void add_notes_attrs(struct module *mod, const struct load_info *info)
|
||||||
nattr->attr.mode = 0444;
|
nattr->attr.mode = 0444;
|
||||||
nattr->size = info->sechdrs[i].sh_size;
|
nattr->size = info->sechdrs[i].sh_size;
|
||||||
nattr->private = (void *)info->sechdrs[i].sh_addr;
|
nattr->private = (void *)info->sechdrs[i].sh_addr;
|
||||||
nattr->read = module_notes_read;
|
nattr->read = sysfs_bin_attr_simple_read;
|
||||||
++nattr;
|
++nattr;
|
||||||
}
|
}
|
||||||
++loaded;
|
++loaded;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user