aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firmware/dmi_scan.c16
-rw-r--r--include/linux/dmi.h3
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 4a597d8c2f70..78b989d202a3 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -582,3 +582,19 @@ int dmi_walk(void (*decode)(const struct dmi_header *))
582 return 0; 582 return 0;
583} 583}
584EXPORT_SYMBOL_GPL(dmi_walk); 584EXPORT_SYMBOL_GPL(dmi_walk);
585
586/**
587 * dmi_match - compare a string to the dmi field (if exists)
588 *
589 * Returns true if the requested field equals to the str (including NULL).
590 */
591bool dmi_match(enum dmi_field f, const char *str)
592{
593 const char *info = dmi_get_system_info(f);
594
595 if (info == NULL || str == NULL)
596 return info == str;
597
598 return !strcmp(info, str);
599}
600EXPORT_SYMBOL_GPL(dmi_match);
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 2bfda178f274..34161907b2f8 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -47,6 +47,7 @@ extern int dmi_name_in_vendors(const char *str);
47extern int dmi_name_in_serial(const char *str); 47extern int dmi_name_in_serial(const char *str);
48extern int dmi_available; 48extern int dmi_available;
49extern int dmi_walk(void (*decode)(const struct dmi_header *)); 49extern int dmi_walk(void (*decode)(const struct dmi_header *));
50extern bool dmi_match(enum dmi_field f, const char *str);
50 51
51#else 52#else
52 53
@@ -61,6 +62,8 @@ static inline int dmi_name_in_serial(const char *s) { return 0; }
61#define dmi_available 0 62#define dmi_available 0
62static inline int dmi_walk(void (*decode)(const struct dmi_header *)) 63static inline int dmi_walk(void (*decode)(const struct dmi_header *))
63 { return -1; } 64 { return -1; }
65static inline bool dmi_match(enum dmi_field f, const char *str)
66 { return false; }
64 67
65#endif 68#endif
66 69