Follow PI 1.6 spec to support FFS_ATTRIB_DATA_ALIGNMENT_2 for
FFS alignment extended to support maximum 16MB.
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
/** @file\r
Implements functions to read firmware file\r
\r
/** @file\r
Implements functions to read firmware file\r
\r
-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
#include "FwVolDriver.h"\r
\r
/**\r
#include "FwVolDriver.h"\r
\r
/**\r
-Required Alignment Alignment Value in FFS Alignment Value in\r
-(bytes) Attributes Field Firmware Volume Interfaces\r
-1 0 0\r
-16 1 4\r
-128 2 7\r
-512 3 9\r
-1 KB 4 10\r
-4 KB 5 12\r
-32 KB 6 15\r
-64 KB 7 16\r
+Required Alignment Alignment Value in FFS FFS_ATTRIB_DATA_ALIGNMENT2 Alignment Value in\r
+(bytes) Attributes Field in FFS Attributes Field Firmware Volume Interfaces\r
+1 0 0 0\r
+16 1 0 4\r
+128 2 0 7\r
+512 3 0 9\r
+1 KB 4 0 10\r
+4 KB 5 0 12\r
+32 KB 6 0 15\r
+64 KB 7 0 16\r
+128 KB 0 1 17\r
+256 KB 1 1 18\r
+512 KB 2 1 19\r
+1 MB 3 1 20\r
+2 MB 4 1 21\r
+4 MB 5 1 22\r
+8 MB 6 1 23\r
+16 MB 7 1 24\r
**/\r
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};\r
**/\r
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};\r
+UINT8 mFvAttributes2[] = {17, 18, 19, 20, 21, 22, 23, 24};\r
\r
/**\r
Convert the FFS File Attributes to FV File Attributes\r
\r
/**\r
Convert the FFS File Attributes to FV File Attributes\r
DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);\r
ASSERT (DataAlignment < 8);\r
\r
DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);\r
ASSERT (DataAlignment < 8);\r
\r
- FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment];\r
+ if ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT_2) != 0) {\r
+ FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes2[DataAlignment];\r
+ } else {\r
+ FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment];\r
+ }\r
\r
if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) {\r
FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED;\r
\r
if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) {\r
FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED;\r
-Required Alignment Alignment Value in FFS Alignment Value in\r
-(bytes) Attributes Field Firmware Volume Interfaces\r
-1 0 0\r
-16 1 4\r
-128 2 7\r
-512 3 9\r
-1 KB 4 10\r
-4 KB 5 12\r
-32 KB 6 15\r
-64 KB 7 16\r
+Required Alignment Alignment Value in FFS FFS_ATTRIB_DATA_ALIGNMENT2 Alignment Value in\r
+(bytes) Attributes Field in FFS Attributes Field Firmware Volume Interfaces\r
+1 0 0 0\r
+16 1 0 4\r
+128 2 0 7\r
+512 3 0 9\r
+1 KB 4 0 10\r
+4 KB 5 0 12\r
+32 KB 6 0 15\r
+64 KB 7 0 16\r
+128 KB 0 1 17\r
+256 KB 1 1 18\r
+512 KB 2 1 19\r
+1 MB 3 1 20\r
+2 MB 4 1 21\r
+4 MB 5 1 22\r
+8 MB 6 1 23\r
+16 MB 7 1 24\r
**/\r
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};\r
**/\r
UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16};\r
+UINT8 mFvAttributes2[] = {17, 18, 19, 20, 21, 22, 23, 24};\r
\r
/**\r
Convert the FFS File Attributes to FV File Attributes\r
\r
/**\r
Convert the FFS File Attributes to FV File Attributes\r
DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);\r
ASSERT (DataAlignment < 8);\r
\r
DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3);\r
ASSERT (DataAlignment < 8);\r
\r
- FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment];\r
+ if ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT_2) != 0) {\r
+ FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes2[DataAlignment];\r
+ } else {\r
+ FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment];\r
+ }\r
\r
if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) {\r
FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED;\r
\r
if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) {\r
FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED;\r