Improve Nvidia CPER decode

Add decoding of registers to the structure.  Note, this requires
COUNTED_BY support which is borrowed from LIBPLDM.

Also add unit-tests for NVIDIA section, and update schema to match
existing register decoding.

Change-Id: If1c9cae97de35ba6a5dad1f462d3989ec6ac6a90
Signed-off-by: Karthik Rajagopalan <krajagopalan@nvidia.com>
Signed-off-by: Ed Tanous <etanous@nvidia.com>
diff --git a/generator/sections/gen-section-nvidia.c b/generator/sections/gen-section-nvidia.c
index d5103a6..0cb4cb4 100644
--- a/generator/sections/gen-section-nvidia.c
+++ b/generator/sections/gen-section-nvidia.c
@@ -4,6 +4,7 @@
  **/
 
 #include <stdlib.h>
+#include <stddef.h>
 #include <string.h>
 #include <stdio.h>
 #include "../../edk/BaseTypes.h"
@@ -26,13 +27,21 @@
 	init_random();
 
 	//Create random bytes.
-	size_t size = sizeof(EFI_NVIDIA_ERROR_DATA);
+	int numRegs = 6;
+	size_t size = offsetof(EFI_NVIDIA_ERROR_DATA, Register) +
+		      numRegs * sizeof(EFI_NVIDIA_REGISTER_DATA);
 	UINT8 *section = generate_random_bytes(size);
 
 	//Reserved byte.
 	EFI_NVIDIA_ERROR_DATA *nvidia_error = (EFI_NVIDIA_ERROR_DATA *)section;
 	nvidia_error->Reserved = 0;
 
+	//Number of Registers.
+	nvidia_error->NumberRegs = numRegs;
+
+	//Severity (0 to 3 as defined in UEFI spec).
+	nvidia_error->Severity %= 4;
+
 	//Signature.
 	int idx_random = rand() % (sizeof(signatures) / sizeof(signatures[0]));
 	strncpy(nvidia_error->Signature, signatures[idx_random],