1 /** @file
2   Defines the data structure that is the volume header found at the beginning of
3   all firmware volumes that are either memory mapped or have an
4   associated FirmwareVolumeBlock protocol.
5 
6 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
7 This program and the accompanying materials are licensed and made available under
8 the terms and conditions of the BSD License that accompanies this distribution.
9 The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php.
11 
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 
15   @par Revision Reference:
16   These definitions are from the Firmware Volume Block Spec 0.9.
17 
18 **/
19 
20 #ifndef __EFI_FIRMWARE_VOLUME_HEADER_H__
21 #define __EFI_FIRMWARE_VOLUME_HEADER_H__
22 
23 ///
24 /// Firmware Volume Block Attributes bit definitions.
25 ///@{
26 #define EFI_FVB_READ_DISABLED_CAP   0x00000001
27 #define EFI_FVB_READ_ENABLED_CAP    0x00000002
28 #define EFI_FVB_READ_STATUS         0x00000004
29 
30 #define EFI_FVB_WRITE_DISABLED_CAP  0x00000008
31 #define EFI_FVB_WRITE_ENABLED_CAP   0x00000010
32 #define EFI_FVB_WRITE_STATUS        0x00000020
33 
34 #define EFI_FVB_LOCK_CAP            0x00000040
35 #define EFI_FVB_LOCK_STATUS         0x00000080
36 
37 #define EFI_FVB_STICKY_WRITE        0x00000200
38 #define EFI_FVB_MEMORY_MAPPED       0x00000400
39 #define EFI_FVB_ERASE_POLARITY      0x00000800
40 
41 #define EFI_FVB_ALIGNMENT_CAP       0x00008000
42 #define EFI_FVB_ALIGNMENT_2         0x00010000
43 #define EFI_FVB_ALIGNMENT_4         0x00020000
44 #define EFI_FVB_ALIGNMENT_8         0x00040000
45 #define EFI_FVB_ALIGNMENT_16        0x00080000
46 #define EFI_FVB_ALIGNMENT_32        0x00100000
47 #define EFI_FVB_ALIGNMENT_64        0x00200000
48 #define EFI_FVB_ALIGNMENT_128       0x00400000
49 #define EFI_FVB_ALIGNMENT_256       0x00800000
50 #define EFI_FVB_ALIGNMENT_512       0x01000000
51 #define EFI_FVB_ALIGNMENT_1K        0x02000000
52 #define EFI_FVB_ALIGNMENT_2K        0x04000000
53 #define EFI_FVB_ALIGNMENT_4K        0x08000000
54 #define EFI_FVB_ALIGNMENT_8K        0x10000000
55 #define EFI_FVB_ALIGNMENT_16K       0x20000000
56 #define EFI_FVB_ALIGNMENT_32K       0x40000000
57 #define EFI_FVB_ALIGNMENT_64K       0x80000000
58 ///@}
59 
60 /// This is a simple macro defined as the set of all FV Block Attributes signifying capabilities.
61 #define EFI_FVB_CAPABILITIES  ( EFI_FVB_READ_DISABLED_CAP  | \
62                                 EFI_FVB_READ_ENABLED_CAP   | \
63                                 EFI_FVB_WRITE_DISABLED_CAP | \
64                                 EFI_FVB_WRITE_ENABLED_CAP  | \
65                                 EFI_FVB_LOCK_CAP \
66                               )
67 
68 /** A parameterized macro defining a boolean expression that tests the state of a particular bit.
69   *
70   * @param FvbAttributes  Indicates a test for CLEAR if EFI_FVB_ERASE_POLARITY is 1, else test for SET.
71   *
72   * @param TestAttributes The set of bits to test.
73   *
74   * @param Bit            A value indicating the bit(s) to test.
75   *                       If multiple bits are set, the logical OR of their tests is the expression's value.
76 **/
77 #define EFI_TEST_FFS_ATTRIBUTES_BIT( FvbAttributes, TestAttributes, Bit) \
78     ((BOOLEAN) \
79       ((FvbAttributes & EFI_FVB_ERASE_POLARITY) ? (((~TestAttributes) & Bit) == Bit) : ((TestAttributes & Bit) == Bit)) \
80     )
81 
82 /// A simple macro defined as the set of all FV Block Attribute bits that indicate status.
83 #define EFI_FVB_STATUS    (EFI_FVB_READ_STATUS | EFI_FVB_WRITE_STATUS | EFI_FVB_LOCK_STATUS)
84 
85 #endif  /* __EFI_FIRMWARE_VOLUME_HEADER_H__ */
86