/** @file
  Save Non-Volatile Variables to a file system.

  Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#include "NvVarsFileLib.h"
#include <Library/DebugLib.h>
#include <Library/NvVarsFileLib.h>

EFI_HANDLE    mNvVarsFileLibFsHandle = NULL;


/**
  Attempts to connect the NvVarsFileLib to the specified file system.

  @param[in]  FsHandle - Handle for a gEfiSimpleFileSystemProtocolGuid instance

  @return     The EFI_STATUS while attempting to connect the NvVarsFileLib
              to the file system instance.
  @retval     EFI_SUCCESS - The given file system was connected successfully

**/
EFI_STATUS
EFIAPI
ConnectNvVarsToFileSystem (
  IN EFI_HANDLE    FsHandle
  )
{
  EFI_STATUS Status;

  //
  // We might fail to load the variable, since the file system initially
  // will not have the NvVars file.
  //
  LoadNvVarsFromFs (FsHandle);

  //
  // We must be able to save the variables successfully to the file system
  // to have connected successfully.
  //
  Status = SaveNvVarsToFs (FsHandle);
  if (!EFI_ERROR (Status)) {
    mNvVarsFileLibFsHandle = FsHandle;
  }

  return Status;
}


/**
  Update non-volatile variables stored on the file system.

  @return     The EFI_STATUS while attempting to update the variable on
              the connected file system.
  @retval     EFI_SUCCESS - The non-volatile variables were saved to the disk
  @retval     EFI_NOT_STARTED - A file system has not been connected

**/
EFI_STATUS
EFIAPI
UpdateNvVarsOnFileSystem (
  )
{
  if (mNvVarsFileLibFsHandle == NULL) {
    //
    // A file system had not been connected to the library.
    //
    return EFI_NOT_STARTED;
  } else {
    return SaveNvVarsToFs (mNvVarsFileLibFsHandle);
  }
}


