Commit e542e0dc authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

Pull dmi update from Jean Delvare.

* 'dmi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  firmware/dmi: Report DMI Bios & EC firmware release
parents 3925c3bb f5152f4d
...@@ -42,6 +42,8 @@ DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor, 0444, DMI_BIOS_VENDOR); ...@@ -42,6 +42,8 @@ DEFINE_DMI_ATTR_WITH_SHOW(bios_vendor, 0444, DMI_BIOS_VENDOR);
DEFINE_DMI_ATTR_WITH_SHOW(bios_version, 0444, DMI_BIOS_VERSION); DEFINE_DMI_ATTR_WITH_SHOW(bios_version, 0444, DMI_BIOS_VERSION);
DEFINE_DMI_ATTR_WITH_SHOW(bios_date, 0444, DMI_BIOS_DATE); DEFINE_DMI_ATTR_WITH_SHOW(bios_date, 0444, DMI_BIOS_DATE);
DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor, 0444, DMI_SYS_VENDOR); DEFINE_DMI_ATTR_WITH_SHOW(sys_vendor, 0444, DMI_SYS_VENDOR);
DEFINE_DMI_ATTR_WITH_SHOW(bios_release, 0444, DMI_BIOS_RELEASE);
DEFINE_DMI_ATTR_WITH_SHOW(ec_firmware_release, 0444, DMI_EC_FIRMWARE_RELEASE);
DEFINE_DMI_ATTR_WITH_SHOW(product_name, 0444, DMI_PRODUCT_NAME); DEFINE_DMI_ATTR_WITH_SHOW(product_name, 0444, DMI_PRODUCT_NAME);
DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION); DEFINE_DMI_ATTR_WITH_SHOW(product_version, 0444, DMI_PRODUCT_VERSION);
DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL); DEFINE_DMI_ATTR_WITH_SHOW(product_serial, 0400, DMI_PRODUCT_SERIAL);
...@@ -78,6 +80,8 @@ static ssize_t get_modalias(char *buffer, size_t buffer_size) ...@@ -78,6 +80,8 @@ static ssize_t get_modalias(char *buffer, size_t buffer_size)
{ "bvn", DMI_BIOS_VENDOR }, { "bvn", DMI_BIOS_VENDOR },
{ "bvr", DMI_BIOS_VERSION }, { "bvr", DMI_BIOS_VERSION },
{ "bd", DMI_BIOS_DATE }, { "bd", DMI_BIOS_DATE },
{ "br", DMI_BIOS_RELEASE },
{ "efr", DMI_EC_FIRMWARE_RELEASE },
{ "svn", DMI_SYS_VENDOR }, { "svn", DMI_SYS_VENDOR },
{ "pn", DMI_PRODUCT_NAME }, { "pn", DMI_PRODUCT_NAME },
{ "pvr", DMI_PRODUCT_VERSION }, { "pvr", DMI_PRODUCT_VERSION },
...@@ -187,6 +191,8 @@ static void __init dmi_id_init_attr_table(void) ...@@ -187,6 +191,8 @@ static void __init dmi_id_init_attr_table(void)
ADD_DMI_ATTR(bios_vendor, DMI_BIOS_VENDOR); ADD_DMI_ATTR(bios_vendor, DMI_BIOS_VENDOR);
ADD_DMI_ATTR(bios_version, DMI_BIOS_VERSION); ADD_DMI_ATTR(bios_version, DMI_BIOS_VERSION);
ADD_DMI_ATTR(bios_date, DMI_BIOS_DATE); ADD_DMI_ATTR(bios_date, DMI_BIOS_DATE);
ADD_DMI_ATTR(bios_release, DMI_BIOS_RELEASE);
ADD_DMI_ATTR(ec_firmware_release, DMI_EC_FIRMWARE_RELEASE);
ADD_DMI_ATTR(sys_vendor, DMI_SYS_VENDOR); ADD_DMI_ATTR(sys_vendor, DMI_SYS_VENDOR);
ADD_DMI_ATTR(product_name, DMI_PRODUCT_NAME); ADD_DMI_ATTR(product_name, DMI_PRODUCT_NAME);
ADD_DMI_ATTR(product_version, DMI_PRODUCT_VERSION); ADD_DMI_ATTR(product_version, DMI_PRODUCT_VERSION);
......
...@@ -186,6 +186,34 @@ static void __init dmi_save_ident(const struct dmi_header *dm, int slot, ...@@ -186,6 +186,34 @@ static void __init dmi_save_ident(const struct dmi_header *dm, int slot,
dmi_ident[slot] = p; dmi_ident[slot] = p;
} }
static void __init dmi_save_release(const struct dmi_header *dm, int slot,
int index)
{
const u8 *minor, *major;
char *s;
/* If the table doesn't have the field, let's return */
if (dmi_ident[slot] || dm->length < index)
return;
minor = (u8 *) dm + index;
major = (u8 *) dm + index - 1;
/* As per the spec, if the system doesn't support this field,
* the value is FF
*/
if (*major == 0xFF && *minor == 0xFF)
return;
s = dmi_alloc(8);
if (!s)
return;
sprintf(s, "%u.%u", *major, *minor);
dmi_ident[slot] = s;
}
static void __init dmi_save_uuid(const struct dmi_header *dm, int slot, static void __init dmi_save_uuid(const struct dmi_header *dm, int slot,
int index) int index)
{ {
...@@ -444,6 +472,8 @@ static void __init dmi_decode(const struct dmi_header *dm, void *dummy) ...@@ -444,6 +472,8 @@ static void __init dmi_decode(const struct dmi_header *dm, void *dummy)
dmi_save_ident(dm, DMI_BIOS_VENDOR, 4); dmi_save_ident(dm, DMI_BIOS_VENDOR, 4);
dmi_save_ident(dm, DMI_BIOS_VERSION, 5); dmi_save_ident(dm, DMI_BIOS_VERSION, 5);
dmi_save_ident(dm, DMI_BIOS_DATE, 8); dmi_save_ident(dm, DMI_BIOS_DATE, 8);
dmi_save_release(dm, DMI_BIOS_RELEASE, 21);
dmi_save_release(dm, DMI_EC_FIRMWARE_RELEASE, 23);
break; break;
case 1: /* System Information */ case 1: /* System Information */
dmi_save_ident(dm, DMI_SYS_VENDOR, 4); dmi_save_ident(dm, DMI_SYS_VENDOR, 4);
......
...@@ -532,6 +532,8 @@ enum dmi_field { ...@@ -532,6 +532,8 @@ enum dmi_field {
DMI_BIOS_VENDOR, DMI_BIOS_VENDOR,
DMI_BIOS_VERSION, DMI_BIOS_VERSION,
DMI_BIOS_DATE, DMI_BIOS_DATE,
DMI_BIOS_RELEASE,
DMI_EC_FIRMWARE_RELEASE,
DMI_SYS_VENDOR, DMI_SYS_VENDOR,
DMI_PRODUCT_NAME, DMI_PRODUCT_NAME,
DMI_PRODUCT_VERSION, DMI_PRODUCT_VERSION,
......
...@@ -954,6 +954,8 @@ static const struct dmifield { ...@@ -954,6 +954,8 @@ static const struct dmifield {
{ "bvn", DMI_BIOS_VENDOR }, { "bvn", DMI_BIOS_VENDOR },
{ "bvr", DMI_BIOS_VERSION }, { "bvr", DMI_BIOS_VERSION },
{ "bd", DMI_BIOS_DATE }, { "bd", DMI_BIOS_DATE },
{ "br", DMI_BIOS_RELEASE },
{ "efr", DMI_EC_FIRMWARE_RELEASE },
{ "svn", DMI_SYS_VENDOR }, { "svn", DMI_SYS_VENDOR },
{ "pn", DMI_PRODUCT_NAME }, { "pn", DMI_PRODUCT_NAME },
{ "pvr", DMI_PRODUCT_VERSION }, { "pvr", DMI_PRODUCT_VERSION },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment