GenFds Tool: Add FdfClassObject.
[people/mcb30/basetools.git] / Source / Python / GenFds / Fd.py
1 import Region\r
2 import Fv\r
3 import os\r
4 import StringIO\r
5 import sys\r
6 from struct import *\r
7 from GenFdsGlobalVariable import GenFdsGlobalVariable\r
8 T_CHAR_LF = '\n'\r
9 from CommonDataClass.FdfClassObject import FDClassObject\r
10 \r
11 class FD(FDClassObject):\r
12     def __init__(self):\r
13 ##        self.FdUiName = ''\r
14 ##        self.CreateFileName = None\r
15 ##        self.BaseAddress = None\r
16 ##        self.BaseAddressPcd = None\r
17 ##        self.Size = None\r
18 ##        self.SizePcd = None\r
19 ##        self.ErasePolarity = '1'\r
20 ##        # 3-tuple list (blockSize, numBlocks, pcd)\r
21 ##        self.BlockSizeList = []\r
22 ##        # DefineVarDict[var] = value\r
23 ##        self.DefineVarDict = {}\r
24 ##        # SetVarDict[var] = value\r
25 ##        self.SetVarDict = {}\r
26 ##        self.RegionList = []\r
27 ##        self.vtfRawDict = {}\r
28         FDClassObject.__init__(self)\r
29 ##\r
30 #  Create Fd file\r
31 ##\r
32     def GenFd (self, FvBinDict):\r
33         #\r
34         # Print Information\r
35         #\r
36         print 'Following Region will be add to Fd !!!'\r
37         for item in GenFdsGlobalVariable.FdfParser.profile.FvDict:\r
38             print item\r
39             \r
40         self.GenVtfFile()\r
41         \r
42         FdBuffer = StringIO.StringIO('')\r
43         for Regions in self.RegionList :\r
44             #\r
45             # Call each region's AddToBuffer function \r
46             #\r
47             Regions.AddToBuffer (FdBuffer, self.BaseAddress, self.BlockSizeList, self.ErasePolarity, FvBinDict, self.vtfRawDict)\r
48         #\r
49         # Create a empty Fd file\r
50         #\r
51         FdFileName = os.path.join(GenFdsGlobalVariable.FvDir,\r
52                                   self.FdUiName + '.fd')\r
53         fd = open(FdFileName, 'w+b')\r
54        \r
55         #\r
56         # Write the buffer contents to Fd file\r
57         #\r
58         print "Fd File Name:%s" %FdFileName\r
59         fd.write(FdBuffer.getvalue());\r
60         fd.close;\r
61         FdBuffer.close;\r
62         \r
63     def GenVtfFile (self) :\r
64         #\r
65         # Get this Fd's all Fv name\r
66         #\r
67         fvAddDict ={}\r
68         fvList = []\r
69         for region in self.RegionList:\r
70             if region.RegionType == 'FV':\r
71                 fvList.append(region.RegionData.upper())\r
72                 fvAddDict[region.RegionData.upper()] = (int(self.BaseAddress,16) + \\r
73                                                 region.Offset, region.Size)\r
74         #\r
75         # Check whether this Fd need VTF\r
76         #\r
77         flag = False\r
78         for vtf in GenFdsGlobalVariable.FdfParser.profile.VtfList:\r
79             compLocList = vtf.GetFvList()\r
80             if set(compLocList).issubset(fvList):\r
81                 flag = True\r
82                 break\r
83         if flag == True:\r
84             self.vtfRawDict = vtf.GenVtf(fvAddDict)\r
85 \r
86         \r
87 ##\r
88 # Create Flash Map file\r
89 ##\r
90     def GenFlashMap ():\r
91         pass\r
92 ##        FlashFile = open( os.path.join(GenFdsGlobalVariable.FvDir, 'FalshMap.h'), 'w+b')\r
93 ##        FlashFile.writelines ("#ifndef _FLASH_MAP_H_" + T_CHAR_LF)\r
94 ##        FlashFile.writelines ("#define _FLASH_MAP_H_" + T_CHAR_LF)\r
95         \r
96         \r
97 \r
98 \r
99 \r
100                 \r
101                 \r
102             \r