From 461f7bb57abe914c35080fe3caf04a5757e45d26 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Mon, 13 Aug 2007 11:24:33 +0200 Subject: [PATCH] --- yaml --- r: 67959 b: refs/heads/master c: 6374475661172d508a9b93a2740a3fdc9d899756 h: refs/heads/master i: 67957: 041f1ccf129c90ddaf92445230b088df313abd05 67955: bac713c84c5b47c8020da4f6f37ebf709aef5ab1 67951: 503ffeceddb78f38ecd0a5035fd2dd6bbe653f48 v: v3 --- [refs] | 2 +- trunk/drivers/firmware/dmi-id.c | 38 ++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index dcd4a501c372..2abe45ecaa02 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 990e53f880be9ff93072b4cce590ec2826cee0b6 +refs/heads/master: 6374475661172d508a9b93a2740a3fdc9d899756 diff --git a/trunk/drivers/firmware/dmi-id.c b/trunk/drivers/firmware/dmi-id.c index 2678098d4504..a7bd87d52897 100644 --- a/trunk/drivers/firmware/dmi-id.c +++ b/trunk/drivers/firmware/dmi-id.c @@ -13,21 +13,35 @@ #include #include +struct dmi_device_attribute{ + struct device_attribute dev_attr; + int field; +}; +#define to_dmi_dev_attr(_dev_attr) \ + container_of(_dev_attr, struct dmi_device_attribute, dev_attr) + #define DEFINE_DMI_ATTR(_name, _mode, _show) \ static struct device_attribute sys_dmi_##_name##_attr = \ __ATTR(_name, _mode, _show, NULL); -#define DEFINE_DMI_ATTR_WITH_SHOW(_name, _mode, _field) \ -static ssize_t sys_dmi_##_name##_show(struct device *dev, \ - struct device_attribute *attr, \ - char *page) \ -{ \ - ssize_t len; \ - len = scnprintf(page, PAGE_SIZE, "%s\n", dmi_get_system_info(_field)); \ - page[len-1] = '\n'; \ - return len; \ -} \ -DEFINE_DMI_ATTR(_name, _mode, sys_dmi_##_name##_show); +static ssize_t sys_dmi_field_show(struct device *dev, + struct device_attribute *attr, + char *page) +{ + int field = to_dmi_dev_attr(attr)->field; + ssize_t len; + len = scnprintf(page, PAGE_SIZE, "%s\n", dmi_get_system_info(field)); + page[len-1] = '\n'; + return len; +} + +#define DMI_ATTR(_name, _mode, _show, _field) \ + { .dev_attr = __ATTR(_name, _mode, _show, NULL), \ + .field = _field } + +#define DEFINE_DMI_ATTR_WITH_SHOW(_name, _mode, _field) \ +static struct dmi_device_attribute sys_dmi_##_name##_attr = \ + DMI_ATTR(_name, _mode, sys_dmi_field_show, _field); DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor, 0444, DMI_BIOS_VENDOR); DEFINE_DMI_ATTR_WITH_SHOW(bios_version, 0444, DMI_BIOS_VERSION); @@ -160,7 +174,7 @@ static struct device *dmi_dev; #define ADD_DMI_ATTR(_name, _field) \ if (dmi_get_system_info(_field)) \ - sys_dmi_attributes[i++] = & sys_dmi_##_name##_attr.attr; + sys_dmi_attributes[i++] = &sys_dmi_##_name##_attr.dev_attr.attr; extern int dmi_available;