]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c
Follow up tracker:
[mirror_edk2.git] / EdkModulePkg / Universal / StatusCode / Dxe / SerialStatusCodeWorker.c
index 256ff03b7a2ba7567ad03ef79ed504fa8cb24f78..a5fbf236782a93fbaa78c7d7011f244c96e40ad7 100644 (file)
@@ -15,7 +15,8 @@
 \r
 **/\r
 \r
-EFI_SERIAL_IO_PROTOCOL *SerialIoProtocol;\r
+STATIC\r
+EFI_SERIAL_IO_PROTOCOL *mSerialIoProtocol;\r
 \r
 /**\r
   Initialize serial status code worker.\r
@@ -33,7 +34,7 @@ EfiSerialStatusCodeInitializeWorker (
   Status = gBS->LocateProtocol (\r
             &gEfiSerialIoProtocolGuid,\r
             NULL,\r
-            (VOID **) &SerialIoProtocol\r
+            (VOID **) &mSerialIoProtocol\r
             );\r
 \r
   ASSERT_EFI_ERROR (Status);\r
@@ -67,7 +68,8 @@ EfiSerialStatusCodeInitializeWorker (
 \r
   @param  Data          This optional parameter may be used to pass additional data\r
  \r
-  @return               The function always return EFI_SUCCESS.\r
+  @retval EFI_SUCCESS         Success to report status code to serial I/O.\r
+  @retval EFI_DEVICE_ERROR    EFI serial device can not work after ExitBootService() is called .\r
 \r
 **/\r
 EFI_STATUS\r
@@ -89,6 +91,11 @@ SerialStatusCodeReportWorker (
   VA_LIST         Marker;\r
   EFI_DEBUG_INFO  *DebugInfo;\r
 \r
+\r
+  if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) && EfiAtRuntime ()) {\r
+    return EFI_DEVICE_ERROR;\r
+  }\r
+\r
   Buffer[0] = '\0';\r
 \r
   if (Data != NULL &&\r
@@ -130,10 +137,18 @@ SerialStatusCodeReportWorker (
     //\r
     // Print ERROR information into output buffer.\r
     //\r
-    CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance);\r
+    CharCount = AsciiSPrint (\r
+                  Buffer, \r
+                  EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+                  "ERROR: C%x:V%x I%x", \r
+                  CodeType, \r
+                  Value, \r
+                  Instance\r
+                  );\r
 \r
     //\r
-    // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers.\r
+    // Make sure we don't try to print values that weren't \r
+    // intended to be printed, especially NULL GUID pointers.\r
     //\r
     \r
     if (CallerId != NULL) {\r
@@ -145,7 +160,7 @@ SerialStatusCodeReportWorker (
                      );\r
     }\r
 \r
-    if (Data) {\r
+    if (Data != NULL) {\r
       CharCount += AsciiSPrint (\r
                      &Buffer[CharCount - 1],\r
                      (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),\r
@@ -160,9 +175,22 @@ SerialStatusCodeReportWorker (
                    "\n\r"\r
                    );\r
   } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {\r
-    CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance);\r
+    CharCount = AsciiSPrint (\r
+                  Buffer, \r
+                  EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+                  "PROGRESS CODE: V%x I%x\n\r", \r
+                  Value, \r
+                  Instance\r
+                  );\r
   } else {\r
-    CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance);\r
+    CharCount = AsciiSPrint (\r
+                  Buffer, \r
+                  EFI_STATUS_CODE_DATA_MAX_SIZE, \r
+                  "Undefined: C%x:V%x I%x\n\r", \r
+                  CodeType, \r
+                  Value, \r
+                  Instance\r
+                  );\r
   }\r
 \r
 \r
@@ -173,8 +201,8 @@ SerialStatusCodeReportWorker (
     SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
   }\r
   if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {\r
-    SerialIoProtocol->Write (\r
-      SerialIoProtocol,\r
+    mSerialIoProtocol->Write (\r
+      mSerialIoProtocol,\r
       &CharCount,\r
       Buffer\r
       );\r