--- /dev/null
+/** @file\r
+ This header file describes a library that contains functions to save and\r
+ restore unit test internal state, in case the test needs to pause and resume\r
+ (eg. a reboot-based test).\r
+\r
+ Copyright (c) Microsoft Corporation.<BR>\r
+ Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef _UNIT_TEST_PERSISTENCE_LIB_H_\r
+#define _UNIT_TEST_PERSISTENCE_LIB_H_\r
+\r
+#include <UnitTestFrameworkTypes.h>\r
+\r
+#define UNIT_TEST_PERSISTENCE_LIB_VERSION 1\r
+\r
+/**\r
+ Determines whether a persistence cache already exists for\r
+ the given framework.\r
+\r
+ @param[in] FrameworkHandle A pointer to the framework that is being persisted.\r
+\r
+ @retval TRUE\r
+ @retval FALSE Cache doesn't exist or an error occurred.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+DoesCacheExist (\r
+ IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle\r
+ );\r
+\r
+/**\r
+ Will save the data associated with an internal Unit Test Framework\r
+ state in a manner that can persist a Unit Test Application quit or\r
+ even a system reboot.\r
+\r
+ @param[in] FrameworkHandle A pointer to the framework that is being persisted.\r
+ @param[in] SaveData A pointer to the buffer containing the serialized\r
+ framework internal state.\r
+\r
+ @retval EFI_SUCCESS Data is persisted and the test can be safely quit.\r
+ @retval Others Data is not persisted and test cannot be resumed upon exit.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SaveUnitTestCache (\r
+ IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,\r
+ IN UNIT_TEST_SAVE_HEADER *SaveData\r
+ );\r
+\r
+/**\r
+ Will retrieve any cached state associated with the given framework.\r
+ Will allocate a buffer to hold the loaded data.\r
+\r
+ @param[in] FrameworkHandle A pointer to the framework that is being persisted.\r
+ @param[in] SaveData A pointer pointer that will be updated with the address\r
+ of the loaded data buffer.\r
+\r
+ @retval EFI_SUCCESS Data has been loaded successfully and SaveData is updated\r
+ with a pointer to the buffer.\r
+ @retval Others An error has occurred and no data has been loaded. SaveData\r
+ is set to NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LoadUnitTestCache (\r
+ IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle,\r
+ OUT UNIT_TEST_SAVE_HEADER **SaveData\r
+ );\r
+\r
+#endif\r