A couple of the EDAC drivers have a nice memdev_dmi_entry structure for
decoding DMI memory device entries.  Move the structure definition to
dmi.h so that it can be shared between those drivers and also other
parts of the kernel; the i915 graphics driver is going to need to use
this structure soon as well.  As part of this move we rename the
structure s/memdev_dmi_entry/dmi_entry_memdev/ to ensure it has a proper
'dmi' prefix.

v2:
 - Rename structure to dmi_entry_memdev.  (Jean)
 - Use __packed instead of __attribute__((__packed__)) for consistency
   with the rest of the dmi.h header.  (Jean)

Cc: Mauro Carvalho Chehab <mche...@osg.samsung.com>
Cc: Jean Delvare <jdelv...@suse.com>
Cc: linux-e...@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Matt Roper <matthew.d.ro...@intel.com>
---
 drivers/edac/ghes_edac.c   | 28 +--------------------------
 drivers/edac/i7core_edac.c | 47 +++++++++++-----------------------------------
 include/linux/dmi.h        | 25 ++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 63 deletions(-)

diff --git a/drivers/edac/ghes_edac.c b/drivers/edac/ghes_edac.c
index e3fa439..39535bb 100644
--- a/drivers/edac/ghes_edac.c
+++ b/drivers/edac/ghes_edac.c
@@ -35,32 +35,6 @@ static DEFINE_MUTEX(ghes_edac_lock);
 static int ghes_edac_mc_num;
 
 
-/* Memory Device - Type 17 of SMBIOS spec */
-struct memdev_dmi_entry {
-       u8 type;
-       u8 length;
-       u16 handle;
-       u16 phys_mem_array_handle;
-       u16 mem_err_info_handle;
-       u16 total_width;
-       u16 data_width;
-       u16 size;
-       u8 form_factor;
-       u8 device_set;
-       u8 device_locator;
-       u8 bank_locator;
-       u8 memory_type;
-       u16 type_detail;
-       u16 speed;
-       u8 manufacturer;
-       u8 serial_number;
-       u8 asset_tag;
-       u8 part_number;
-       u8 attributes;
-       u32 extended_size;
-       u16 conf_mem_clk_speed;
-} __attribute__((__packed__));
-
 struct ghes_edac_dimm_fill {
        struct mem_ctl_info *mci;
        unsigned count;
@@ -80,7 +54,7 @@ static void ghes_edac_dmidecode(const struct dmi_header *dh, 
void *arg)
        struct mem_ctl_info *mci = dimm_fill->mci;
 
        if (dh->type == DMI_ENTRY_MEM_DEVICE) {
-               struct memdev_dmi_entry *entry = (struct memdev_dmi_entry *)dh;
+               struct dmi_entry_memdev *entry = (struct dmi_entry_memdev *)dh;
                struct dimm_info *dimm = EDAC_DIMM_PTR(mci->layers, mci->dimms,
                                                       mci->n_layers,
                                                       dimm_fill->count, 0, 0);
diff --git a/drivers/edac/i7core_edac.c b/drivers/edac/i7core_edac.c
index 01087a3..fbfb06f 100644
--- a/drivers/edac/i7core_edac.c
+++ b/drivers/edac/i7core_edac.c
@@ -1906,31 +1906,6 @@ static struct notifier_block i7_mce_dec = {
        .notifier_call  = i7core_mce_check_error,
 };
 
-struct memdev_dmi_entry {
-       u8 type;
-       u8 length;
-       u16 handle;
-       u16 phys_mem_array_handle;
-       u16 mem_err_info_handle;
-       u16 total_width;
-       u16 data_width;
-       u16 size;
-       u8 form;
-       u8 device_set;
-       u8 device_locator;
-       u8 bank_locator;
-       u8 memory_type;
-       u16 type_detail;
-       u16 speed;
-       u8 manufacturer;
-       u8 serial_number;
-       u8 asset_tag;
-       u8 part_number;
-       u8 attributes;
-       u32 extended_size;
-       u16 conf_mem_clk_speed;
-} __attribute__((__packed__));
-
 
 /*
  * Decode the DRAM Clock Frequency, be paranoid, make sure that all
@@ -1946,28 +1921,28 @@ static void decode_dclk(const struct dmi_header *dh, 
void *_dclk_freq)
                return;
 
        if (dh->type == DMI_ENTRY_MEM_DEVICE) {
-               struct memdev_dmi_entry *memdev_dmi_entry =
-                       (struct memdev_dmi_entry *)dh;
+               struct dmi_entry_memdev *dmi_entry_memdev =
+                       (struct dmi_entry_memdev *)dh;
                unsigned long conf_mem_clk_speed_offset =
-                       (unsigned long)&memdev_dmi_entry->conf_mem_clk_speed -
-                       (unsigned long)&memdev_dmi_entry->type;
+                       (unsigned long)&dmi_entry_memdev->conf_mem_clk_speed -
+                       (unsigned long)&dmi_entry_memdev->type;
                unsigned long speed_offset =
-                       (unsigned long)&memdev_dmi_entry->speed -
-                       (unsigned long)&memdev_dmi_entry->type;
+                       (unsigned long)&dmi_entry_memdev->speed -
+                       (unsigned long)&dmi_entry_memdev->type;
 
                /* Check that a DIMM is present */
-               if (memdev_dmi_entry->size == 0)
+               if (dmi_entry_memdev->size == 0)
                        return;
 
                /*
                 * Pick the configured speed if it's available, otherwise
                 * pick the DIMM speed, or we don't have a speed.
                 */
-               if (memdev_dmi_entry->length > conf_mem_clk_speed_offset) {
+               if (dmi_entry_memdev->length > conf_mem_clk_speed_offset) {
                        dmi_mem_clk_speed =
-                               memdev_dmi_entry->conf_mem_clk_speed;
-               } else if (memdev_dmi_entry->length > speed_offset) {
-                       dmi_mem_clk_speed = memdev_dmi_entry->speed;
+                               dmi_entry_memdev->conf_mem_clk_speed;
+               } else if (dmi_entry_memdev->length > speed_offset) {
+                       dmi_mem_clk_speed = dmi_entry_memdev->speed;
                } else {
                        *dclk_freq = -1;
                        return;
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 5e9c74c..60dcc31 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -78,6 +78,31 @@ struct dmi_header {
        u16 handle;
 } __packed;
 
+struct dmi_entry_memdev {
+       u8 type;
+       u8 length;
+       u16 handle;
+       u16 phys_mem_array_handle;
+       u16 mem_err_info_handle;
+       u16 total_width;
+       u16 data_width;
+       u16 size;
+       u8 form;
+       u8 device_set;
+       u8 device_locator;
+       u8 bank_locator;
+       u8 memory_type;
+       u16 type_detail;
+       u16 speed;
+       u8 manufacturer;
+       u8 serial_number;
+       u8 asset_tag;
+       u8 part_number;
+       u8 attributes;
+       u32 extended_size;
+       u16 conf_mem_clk_speed;
+} __packed;
+
 struct dmi_device {
        struct list_head list;
        int type;
-- 
2.1.4

Reply via email to