/** @file
  Provides a GUID and a data structure that can be used with EFI_FILE_PROTOCOL.GetInfo()
  or EFI_FILE_PROTOCOL.SetInfo() to get or set information about the system's volume.
  This GUID is defined in UEFI specification.

Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __FILE_SYSTEM_INFO_H__
#define __FILE_SYSTEM_INFO_H__

#define EFI_FILE_SYSTEM_INFO_ID \
  { \
    0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
  }

typedef struct {
  ///
  /// The size of the EFI_FILE_SYSTEM_INFO structure, including the Null-terminated VolumeLabel string.
  ///
  UINT64     Size;
  ///
  /// TRUE if the volume only supports read access.
  ///
  BOOLEAN    ReadOnly;
  ///
  /// The number of bytes managed by the file system.
  ///
  UINT64     VolumeSize;
  ///
  /// The number of available bytes for use by the file system.
  ///
  UINT64     FreeSpace;
  ///
  /// The nominal block size by which files are typically grown.
  ///
  UINT32     BlockSize;
  ///
  /// The Null-terminated string that is the volume's label.
  ///
  CHAR16     VolumeLabel[1];
} EFI_FILE_SYSTEM_INFO;

///
/// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
/// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
/// to be the size of the data structure without the VolumeLable field.  The following macro
/// computes this size correctly no matter how big the VolumeLable array is declared.
/// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
///
#define SIZE_OF_EFI_FILE_SYSTEM_INFO  OFFSET_OF (EFI_FILE_SYSTEM_INFO, VolumeLabel)

extern EFI_GUID  gEfiFileSystemInfoGuid;

#endif
