Hi, Guo,

Thank you for providing the fixes to support IMD for CorebootModulePkg.

Could you please add the function/parameter/return status descriptions for the 
function FindCbMemTable() inside CbParseLib.c ?

Also according to the EKD II Coding Standards spec,  "A comparison of any 
pointer to zero must be done via the NULL type."
Could you please fix those comparisons accordingly?

Regards,
Maurice

-----Original Message-----
From: Dong, Guo 
Sent: Monday, May 18, 2015 8:30 AM
To: Ma, Maurice
Cc: edk2-devel@lists.sourceforge.net
Subject: [Patch 1/2] The latest coreboot use IMD (In Memory Database) to report 
Tables. This patch adds IMD support in UEFI payload.

Signed-off-by: Guo Dong <guo.d...@intel.com>
---
 CorebootModulePkg/Include/Coreboot.h              | 19 ++++++++++++
 CorebootModulePkg/Library/CbParseLib/CbParseLib.c | 38 ++++++++++++++++++-----
 2 files changed, 49 insertions(+), 8 deletions(-)

diff --git a/CorebootModulePkg/Include/Coreboot.h 
b/CorebootModulePkg/Include/Coreboot.h
index 703c034..a256d50 100644
--- a/CorebootModulePkg/Include/Coreboot.h
+++ b/CorebootModulePkg/Include/Coreboot.h
@@ -49,10 +49,13 @@
 #pragma warning( disable : 4200 )
 #endif
 
 #define DYN_CBMEM_ALIGN_SIZE (4096)
 
+#define IMD_ENTRY_MAGIC      (~0xC0389481)
+#define CBMEM_ENTRY_MAGIC    (~0xC0389479)
+
 struct cbmem_entry {
   UINT32 magic;
   UINT32 start;
   UINT32 size;
   UINT32 id;
@@ -64,10 +67,26 @@ struct cbmem_root {
   UINT32 locked;
   UINT32 size;
   struct cbmem_entry entries[0];
 };
 
+struct imd_entry {
+  UINT32 magic;
+  UINT32 start_offset;
+  UINT32 size;
+  UINT32 id;
+};
+
+struct imd_root {
+  UINT32 max_entries;
+  UINT32 num_entries;
+  UINT32 flags;
+  UINT32 entry_align;        
+  UINT32 max_offset;
+  struct imd_entry entries[0];
+};
+
 struct cbuint64 {
   UINT32 lo;
   UINT32 hi;
 };
 
diff --git a/CorebootModulePkg/Library/CbParseLib/CbParseLib.c 
b/CorebootModulePkg/Library/CbParseLib/CbParseLib.c
index c9b39b1..0f82b01 100644
--- a/CorebootModulePkg/Library/CbParseLib/CbParseLib.c
+++ b/CorebootModulePkg/Library/CbParseLib/CbParseLib.c
@@ -124,26 +124,48 @@ FindCbTag (
   return TagPtr;
 }
 
 RETURN_STATUS
 FindCbMemTable (
-  struct  cbmem_root  *root,
+  IN struct cbmem_root  *Root,
   IN UINT32     TableId, 
   IN VOID**     pMemTable,
   IN UINT32*    pMemTableSize
 )
 {      
-       UINTN Idx;
+  UINTN                Idx;
+  BOOLEAN              IsImdEntry;
+  struct cbmem_entry  *Entries;
        
-       if ((!root) || (!pMemTable))
+  if ((!Root) || (!pMemTable))
                return RETURN_INVALID_PARAMETER;
                
-       for (Idx = 0; Idx < root->num_entries; Idx++) {
-    if (root->entries[Idx].id == TableId) {
-       *pMemTable = (VOID *) (UINTN)root->entries[Idx].start;
-       if (pMemTableSize)
-               *pMemTableSize = root->entries[Idx].size;
+  //
+  // Check if the entry is CBMEM or IMD  // and handle them separately  
+ //
+  Entries    = Root->entries;
+  if (Entries[0].magic == CBMEM_ENTRY_MAGIC) {
+    IsImdEntry = FALSE;
+  } else {
+    Entries    = (struct cbmem_entry *)((struct imd_root *)Root)->entries;
+    if (Entries[0].magic == IMD_ENTRY_MAGIC) {
+      IsImdEntry = TRUE;
+    } else {
+      return RETURN_NOT_FOUND;
+    }
+  }
+
+  for (Idx = 0; Idx < Root->num_entries; Idx++) {
+    if (Entries[Idx].id == TableId) {
+      if (IsImdEntry) {
+        *pMemTable = (VOID *) ((UINTN)Entries[Idx].start + (UINTN)Root);
+      } else {
+        *pMemTable = (VOID *) (UINTN)Entries[Idx].start;
+      }
+      if (pMemTableSize)
+        *pMemTableSize = Entries[Idx].size;
        
        DEBUG ((EFI_D_ERROR, "Find CbMemTable Id 0x%x, base %p, size 0x%x\n", 
TableId, *pMemTable, *pMemTableSize));
        return RETURN_SUCCESS;
     }
   }
--
1.9.5.msysgit.0



------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud 
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to