Add PCIe/memory CPER-JSON parsing.
diff --git a/cper-utils.c b/cper-utils.c
index ba8cd63..28d94d4 100644
--- a/cper-utils.c
+++ b/cper-utils.c
@@ -36,6 +36,19 @@
     return error_status_ir;
 }
 
+//Converts the given CPER-JSON generic error status into a CPER structure.
+void ir_generic_error_status_to_cper(json_object* error_status, EFI_GENERIC_ERROR_STATUS* error_status_cper)
+{
+    error_status_cper->Type = readable_pair_to_integer(json_object_object_get(error_status, "errorType"));
+    error_status_cper->AddressSignal = json_object_get_boolean(json_object_object_get(error_status, "addressSignal"));
+    error_status_cper->ControlSignal = json_object_get_boolean(json_object_object_get(error_status, "controlSignal"));
+    error_status_cper->DataSignal = json_object_get_boolean(json_object_object_get(error_status, "dataSignal"));
+    error_status_cper->DetectedByResponder = json_object_get_boolean(json_object_object_get(error_status, "detectedByResponder"));
+    error_status_cper->DetectedByRequester = json_object_get_boolean(json_object_object_get(error_status, "detectedByRequester"));
+    error_status_cper->FirstError = json_object_get_boolean(json_object_object_get(error_status, "firstError"));
+    error_status_cper->OverflowNotLogged = json_object_get_boolean(json_object_object_get(error_status, "overflowDroppedLogs"));
+}
+
 //Converts a single uniform struct of UINT64s into intermediate JSON IR format, given names for each field in byte order.
 json_object* uniform_struct64_to_ir(UINT64* start, int len, const char* names[])
 {
@@ -278,4 +291,17 @@
 int bcd_to_int(UINT8 bcd)
 {
     return ((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F);
+}
+
+//Converts the given integer to a single byte BCD.
+UINT8 int_to_bcd(int value)
+{
+    UINT8 result = 0;
+    int shift = 0;
+    while (value > 0) {
+        result |= (value % 10) << (shift++ << 2);
+        value /= 10;
+    }
+
+    return result;
 }
\ No newline at end of file