## @file\r
# parse FDF file\r
#\r
-# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>\r
#\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
if not Status:\r
raise Warning("FD name error", self.FileName, self.CurrentLineNumber)\r
\r
- self.__GetTokenStatements(FdObj)\r
+ while self.__GetTokenStatements(FdObj):\r
+ pass\r
+ for Attr in ("BaseAddress", "Size", "ErasePolarity"):\r
+ if getattr(FdObj, Attr) == None:\r
+ self.__GetNextToken()\r
+ raise Warning("Keyword %s missing" % Attr, self.FileName, self.CurrentLineNumber)\r
+\r
+ if not FdObj.BlockSizeList:\r
+ FdObj.BlockSizeList.append((1, FdObj.Size, None))\r
\r
self.__GetDefineStatements(FdObj)\r
\r
# @param Obj for whom token statement is got\r
#\r
def __GetTokenStatements(self, Obj):\r
- if not self.__IsKeyword( "BaseAddress"):\r
- raise Warning("BaseAddress missing", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__IsToken( "="):\r
- raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__GetNextHexNumber():\r
- raise Warning("expected Hex base address", self.FileName, self.CurrentLineNumber)\r
-\r
- Obj.BaseAddress = self.__Token\r
-\r
- if self.__IsToken( "|"):\r
- pcdPair = self.__GetNextPcdName()\r
- Obj.BaseAddressPcd = pcdPair\r
- self.Profile.PcdDict[pcdPair] = Obj.BaseAddress\r
- FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
- self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple\r
-\r
- if not self.__IsKeyword( "Size"):\r
- raise Warning("Size missing", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__IsToken( "="):\r
- raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__GetNextHexNumber():\r
- raise Warning("expected Hex size", self.FileName, self.CurrentLineNumber)\r
-\r
-\r
- Size = self.__Token\r
- if self.__IsToken( "|"):\r
- pcdPair = self.__GetNextPcdName()\r
- Obj.SizePcd = pcdPair\r
- self.Profile.PcdDict[pcdPair] = Size\r
- FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
- self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple\r
- Obj.Size = long(Size, 0)\r
-\r
- if not self.__IsKeyword( "ErasePolarity"):\r
- raise Warning("ErasePolarity missing", self.FileName, self.CurrentLineNumber)\r
-\r
- if not self.__IsToken( "="):\r
- raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ if self.__IsKeyword( "BaseAddress"):\r
+ if not self.__IsToken( "="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ \r
+ if not self.__GetNextHexNumber():\r
+ raise Warning("expected Hex base address", self.FileName, self.CurrentLineNumber)\r
+ \r
+ Obj.BaseAddress = self.__Token\r
+ \r
+ if self.__IsToken( "|"):\r
+ pcdPair = self.__GetNextPcdName()\r
+ Obj.BaseAddressPcd = pcdPair\r
+ self.Profile.PcdDict[pcdPair] = Obj.BaseAddress\r
+ FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
+ self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple\r
+ return True\r
\r
- if not self.__GetNextToken():\r
- raise Warning("expected Erase Polarity", self.FileName, self.CurrentLineNumber)\r
+ if self.__IsKeyword( "Size"):\r
+ if not self.__IsToken( "="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ \r
+ if not self.__GetNextHexNumber():\r
+ raise Warning("expected Hex size", self.FileName, self.CurrentLineNumber)\r
\r
- if self.__Token != "1" and self.__Token != "0":\r
- raise Warning("expected 1 or 0 Erase Polarity", self.FileName, self.CurrentLineNumber)\r
+ Size = self.__Token\r
+ if self.__IsToken( "|"):\r
+ pcdPair = self.__GetNextPcdName()\r
+ Obj.SizePcd = pcdPair\r
+ self.Profile.PcdDict[pcdPair] = Size\r
+ FileLineTuple = GetRealFileLine(self.FileName, self.CurrentLineNumber)\r
+ self.Profile.PcdFileLineDict[pcdPair] = FileLineTuple\r
+ Obj.Size = long(Size, 0)\r
+ return True\r
\r
- Obj.ErasePolarity = self.__Token\r
+ if self.__IsKeyword( "ErasePolarity"):\r
+ if not self.__IsToken( "="):\r
+ raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
+ \r
+ if not self.__GetNextToken():\r
+ raise Warning("expected Erase Polarity", self.FileName, self.CurrentLineNumber)\r
+ \r
+ if self.__Token != "1" and self.__Token != "0":\r
+ raise Warning("expected 1 or 0 Erase Polarity", self.FileName, self.CurrentLineNumber)\r
+ \r
+ Obj.ErasePolarity = self.__Token\r
+ return True\r
\r
- self.__GetBlockStatements(Obj)\r
+ return self.__GetBlockStatements(Obj)\r
\r
## __GetAddressStatements() method\r
#\r
# @param Obj for whom block statement is got\r
#\r
def __GetBlockStatements(self, Obj):\r
-\r
- if not self.__GetBlockStatement(Obj):\r
- #set default block size is 1\r
- Obj.BlockSizeList.append((1, Obj.Size, None))\r
- return\r
-\r
+ IsBlock = False\r
while self.__GetBlockStatement(Obj):\r
- pass\r
+ IsBlock = True\r
\r
- for Item in Obj.BlockSizeList:\r
+ Item = Obj.BlockSizeList[-1]\r
if Item[0] == None or Item[1] == None:\r
raise Warning("expected block statement", self.FileName, self.CurrentLineNumber)\r
+ return IsBlock\r
\r
## __GetBlockStatement() method\r
#\r
\r
self.__GetAddressStatements(FvObj)\r
\r
- while self.__GetBlockStatement(FvObj):\r
- pass\r
-\r
- self.__GetSetStatements(FvObj)\r
- \r
- self.__GetFvBaseAddress(FvObj)\r
- \r
- self.__GetFvForceRebase(FvObj)\r
-\r
- self.__GetFvAlignment(FvObj)\r
-\r
- self.__GetFvAttributes(FvObj)\r
- \r
- self.__GetFvNameGuid(FvObj)\r
-\r
FvObj.FvExtEntryTypeValue = []\r
FvObj.FvExtEntryType = []\r
FvObj.FvExtEntryData = []\r
while True:\r
- isFvExtEntry = self.__GetFvExtEntryStatement(FvObj)\r
- if not isFvExtEntry:\r
+ self.__GetSetStatements(FvObj)\r
+\r
+ if not (self.__GetBlockStatement(FvObj) or self.__GetFvBaseAddress(FvObj) or \r
+ self.__GetFvForceRebase(FvObj) or self.__GetFvAlignment(FvObj) or \r
+ self.__GetFvAttributes(FvObj) or self.__GetFvNameGuid(FvObj) or \r
+ self.__GetFvExtEntryStatement(FvObj)):\r
break\r
\r
self.__GetAprioriSection(FvObj, FvObj.DefineVarDict.copy())\r
"WRITE_DISABLED_CAP", "WRITE_STATUS", "READ_ENABLED_CAP", \\r
"READ_DISABLED_CAP", "READ_STATUS", "READ_LOCK_CAP", \\r
"READ_LOCK_STATUS", "WRITE_LOCK_CAP", "WRITE_LOCK_STATUS", \\r
- "WRITE_POLICY_RELIABLE"):\r
+ "WRITE_POLICY_RELIABLE", "WEAK_ALIGNMENT"):\r
self.__UndoToken()\r
- return\r
+ return False\r
\r
if not self.__IsToken( "="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
\r
FvObj.FvAttributeDict[name] = self.__Token\r
\r
- return\r
+ return True\r
\r
## __GetFvNameGuid() method\r
#\r
def __GetFvNameGuid(self, FvObj):\r
\r
if not self.__IsKeyword( "FvNameGuid"):\r
- return\r
+ return False\r
\r
if not self.__IsToken( "="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
\r
FvObj.FvNameGuid = self.__Token\r
\r
- return\r
+ return True\r
\r
def __GetFvExtEntryStatement(self, FvObj):\r
\r
def __GetCapsuleTokens(self, Obj):\r
if not self.__GetNextToken():\r
return False\r
- while self.__Token in ("CAPSULE_GUID", "CAPSULE_HEADER_SIZE", "CAPSULE_FLAGS"):\r
+ while self.__Token in ("CAPSULE_GUID", "CAPSULE_HEADER_SIZE", "CAPSULE_FLAGS", "OEM_CAPSULE_FLAGS"):\r
Name = self.__Token.strip()\r
if not self.__IsToken("="):\r
raise Warning("expected '='", self.FileName, self.CurrentLineNumber)\r
if not self.__Token in ("PersistAcrossReset", "PopulateSystemTable", "InitiateReset"):\r
raise Warning("expected PersistAcrossReset, PopulateSystemTable, or InitiateReset", self.FileName, self.CurrentLineNumber)\r
Value += self.__Token.strip()\r
+ elif Name == 'OEM_CAPSULE_FLAGS':\r
+ Value = self.__Token.strip()\r
+ try:\r
+ Value = int(Value, 0)\r
+ except ValueError:\r
+ raise Warning("expected integer value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber)\r
+ if not 0x0000 <= Value <= 0xFFFF:\r
+ raise Warning("expected integer value between 0x0000 and 0xFFFF", self.FileName, self.CurrentLineNumber)\r
+ Value = self.__Token.strip()\r
else:\r
Value = self.__Token.strip()\r
Obj.TokensDict[Name] = Value \r