150944545795641de735586d4803f8fc38b43874ejljusten/** @file
250944545795641de735586d4803f8fc38b43874ejljusten  Save Non-Volatile Variables to a file system.
350944545795641de735586d4803f8fc38b43874ejljusten
456d7640a53bf23a4afa211c49b82527879edf65fhhtian  Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
556d7640a53bf23a4afa211c49b82527879edf65fhhtian  This program and the accompanying materials
650944545795641de735586d4803f8fc38b43874ejljusten  are licensed and made available under the terms and conditions of the BSD License
750944545795641de735586d4803f8fc38b43874ejljusten  which accompanies this distribution.  The full text of the license may be found at
850944545795641de735586d4803f8fc38b43874ejljusten  http://opensource.org/licenses/bsd-license.php
950944545795641de735586d4803f8fc38b43874ejljusten
1050944545795641de735586d4803f8fc38b43874ejljusten  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
1150944545795641de735586d4803f8fc38b43874ejljusten  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
1250944545795641de735586d4803f8fc38b43874ejljusten
1350944545795641de735586d4803f8fc38b43874ejljusten**/
1450944545795641de735586d4803f8fc38b43874ejljusten
1550944545795641de735586d4803f8fc38b43874ejljusten#include "NvVarsFileLib.h"
1650944545795641de735586d4803f8fc38b43874ejljusten#include <Library/DebugLib.h>
1750944545795641de735586d4803f8fc38b43874ejljusten#include <Library/NvVarsFileLib.h>
1850944545795641de735586d4803f8fc38b43874ejljusten
199607962def9f847c243b9fecb590c0cf94eec4fcjljustenEFI_HANDLE    mNvVarsFileLibFsHandle = NULL;
209607962def9f847c243b9fecb590c0cf94eec4fcjljusten
2150944545795641de735586d4803f8fc38b43874ejljusten
2250944545795641de735586d4803f8fc38b43874ejljusten/**
2350944545795641de735586d4803f8fc38b43874ejljusten  Attempts to connect the NvVarsFileLib to the specified file system.
2450944545795641de735586d4803f8fc38b43874ejljusten
2550944545795641de735586d4803f8fc38b43874ejljusten  @param[in]  FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance
2650944545795641de735586d4803f8fc38b43874ejljusten
2750944545795641de735586d4803f8fc38b43874ejljusten  @return     The EFI_STATUS while attempting to connect the NvVarsFileLib
2850944545795641de735586d4803f8fc38b43874ejljusten              to the file system instance.
2950944545795641de735586d4803f8fc38b43874ejljusten  @retval     EFI_SUCCESS - The given file system was connected successfully
3050944545795641de735586d4803f8fc38b43874ejljusten
3150944545795641de735586d4803f8fc38b43874ejljusten**/
3250944545795641de735586d4803f8fc38b43874ejljustenEFI_STATUS
3350944545795641de735586d4803f8fc38b43874ejljustenEFIAPI
3450944545795641de735586d4803f8fc38b43874ejljustenConnectNvVarsToFileSystem (
3550944545795641de735586d4803f8fc38b43874ejljusten  IN EFI_HANDLE    FsHandle
3650944545795641de735586d4803f8fc38b43874ejljusten  )
3750944545795641de735586d4803f8fc38b43874ejljusten{
3850944545795641de735586d4803f8fc38b43874ejljusten  EFI_STATUS Status;
3950944545795641de735586d4803f8fc38b43874ejljusten
4050944545795641de735586d4803f8fc38b43874ejljusten  //
4150944545795641de735586d4803f8fc38b43874ejljusten  // We might fail to load the variable, since the file system initially
4250944545795641de735586d4803f8fc38b43874ejljusten  // will not have the NvVars file.
4350944545795641de735586d4803f8fc38b43874ejljusten  //
4450944545795641de735586d4803f8fc38b43874ejljusten  LoadNvVarsFromFs (FsHandle);
4550944545795641de735586d4803f8fc38b43874ejljusten
4650944545795641de735586d4803f8fc38b43874ejljusten  //
4750944545795641de735586d4803f8fc38b43874ejljusten  // We must be able to save the variables successfully to the file system
4850944545795641de735586d4803f8fc38b43874ejljusten  // to have connected successfully.
4950944545795641de735586d4803f8fc38b43874ejljusten  //
5050944545795641de735586d4803f8fc38b43874ejljusten  Status = SaveNvVarsToFs (FsHandle);
519607962def9f847c243b9fecb590c0cf94eec4fcjljusten  if (!EFI_ERROR (Status)) {
529607962def9f847c243b9fecb590c0cf94eec4fcjljusten    mNvVarsFileLibFsHandle = FsHandle;
539607962def9f847c243b9fecb590c0cf94eec4fcjljusten  }
5450944545795641de735586d4803f8fc38b43874ejljusten
5550944545795641de735586d4803f8fc38b43874ejljusten  return Status;
5650944545795641de735586d4803f8fc38b43874ejljusten}
5750944545795641de735586d4803f8fc38b43874ejljusten
5850944545795641de735586d4803f8fc38b43874ejljusten
599607962def9f847c243b9fecb590c0cf94eec4fcjljusten/**
609607962def9f847c243b9fecb590c0cf94eec4fcjljusten  Update non-volatile variables stored on the file system.
619607962def9f847c243b9fecb590c0cf94eec4fcjljusten
629607962def9f847c243b9fecb590c0cf94eec4fcjljusten  @return     The EFI_STATUS while attempting to update the variable on
639607962def9f847c243b9fecb590c0cf94eec4fcjljusten              the connected file system.
649607962def9f847c243b9fecb590c0cf94eec4fcjljusten  @retval     EFI_SUCCESS - The non-volatile variables were saved to the disk
659607962def9f847c243b9fecb590c0cf94eec4fcjljusten  @retval     EFI_NOT_STARTED - A file system has not been connected
669607962def9f847c243b9fecb590c0cf94eec4fcjljusten
679607962def9f847c243b9fecb590c0cf94eec4fcjljusten**/
689607962def9f847c243b9fecb590c0cf94eec4fcjljustenEFI_STATUS
699607962def9f847c243b9fecb590c0cf94eec4fcjljustenEFIAPI
709607962def9f847c243b9fecb590c0cf94eec4fcjljustenUpdateNvVarsOnFileSystem (
719607962def9f847c243b9fecb590c0cf94eec4fcjljusten  )
729607962def9f847c243b9fecb590c0cf94eec4fcjljusten{
739607962def9f847c243b9fecb590c0cf94eec4fcjljusten  if (mNvVarsFileLibFsHandle == NULL) {
749607962def9f847c243b9fecb590c0cf94eec4fcjljusten    //
759607962def9f847c243b9fecb590c0cf94eec4fcjljusten    // A file system had not been connected to the library.
769607962def9f847c243b9fecb590c0cf94eec4fcjljusten    //
779607962def9f847c243b9fecb590c0cf94eec4fcjljusten    return EFI_NOT_STARTED;
789607962def9f847c243b9fecb590c0cf94eec4fcjljusten  } else {
799607962def9f847c243b9fecb590c0cf94eec4fcjljusten    return SaveNvVarsToFs (mNvVarsFileLibFsHandle);
809607962def9f847c243b9fecb590c0cf94eec4fcjljusten  }
819607962def9f847c243b9fecb590c0cf94eec4fcjljusten}
829607962def9f847c243b9fecb590c0cf94eec4fcjljusten
839607962def9f847c243b9fecb590c0cf94eec4fcjljusten
84