STATIC\r
EFI_SMM_BASE_PROTOCOL *mSmmBase;\r
\r
+STATIC\r
+EFI_RUNTIME_SERVICES *mRT;\r
+\r
STATIC\r
BOOLEAN mHaveExitedBootServices = FALSE;\r
\r
return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport;\r
}\r
}\r
- if (gRT->Hdr.Revision < 0x20000) {\r
- return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)gRT)->ReportStatusCode;\r
+ if (mRT->Hdr.Revision < 0x20000) {\r
+ return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode;\r
} else if (!mHaveExitedBootServices) {\r
Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);\r
if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) {\r
)\r
{\r
if (NULL != mReportStatusCode) {\r
- gRT->ConvertPointer (0, (VOID **) &mReportStatusCode);\r
+ mRT->ConvertPointer (0, (VOID **) &mReportStatusCode);\r
}\r
if (NULL != mSmmBase) {\r
- gRT->ConvertPointer (0, (VOID **) &mSmmBase);\r
+ mRT->ConvertPointer (0, (VOID **) &mSmmBase);\r
}\r
- gRT->ConvertPointer (0, (VOID **) &mStatusCodeData);\r
- gRT->ConvertPointer (0, (VOID **) &gRT);\r
+ mRT->ConvertPointer (0, (VOID **) &mStatusCodeData);\r
+ mRT->ConvertPointer (0, (VOID **) &mRT);\r
}\r
\r
/**\r
}\r
}\r
\r
+ //\r
+ // Library should not use the gRT directly, since it\r
+ // may be converted by other library instance.\r
+ // \r
+ mRT = gRT;\r
+\r
gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);\r
ASSERT (NULL != mStatusCodeData);\r
//\r