Reviewed-by: Isaac W Oram <isaac.w.o...@intel.com> -----Original Message----- From: Lin, Jason1 <jason1....@intel.com> Sent: Friday, July 1, 2022 8:10 AM To: devel@edk2.groups.io Cc: Lin, Jason1 <jason1....@intel.com>; Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming <gaolim...@byosoft.com.cn>; Chen, Christine <yuwei.c...@intel.com>; Oram, Isaac W <isaac.w.o...@intel.com>; Chaganty, Rangasai V <rangasai.v.chaga...@intel.com>; Chiang, Dakota <dakota.chi...@intel.com> Subject: [PATCH v3 2/3] [edk2-platforms] Silicon/Intel/FitGen: Reduce the typecasting and pointer usage
From: Jason1 Lin <jason1....@intel.com> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3958 FitGen tool exists lots of typecasting and pointer usage. This code change is used to reduce these in FillFitTable () and GetFitEntryInfo (). To make code more clearly and easy to read. Signed-off-by: Jason1 Lin <jason1....@intel.com> Cc: Bob Feng <bob.c.f...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Yuwei Chen <yuwei.c...@intel.com> Cc: Isaac W Oram <isaac.w.o...@intel.com> Cc: Rangasai V Chaganty <rangasai.v.chaga...@intel.com> Cc: Dakota Chiang <dakota.chi...@intel.com> --- Silicon/Intel/Tools/FitGen/FitGen.c | 125 ++++++++++++-------- 1 file changed, 78 insertions(+), 47 deletions(-) diff --git a/Silicon/Intel/Tools/FitGen/FitGen.c b/Silicon/Intel/Tools/FitGen/FitGen.c index eac8fa8715..01b4f82518 100644 --- a/Silicon/Intel/Tools/FitGen/FitGen.c +++ b/Silicon/Intel/Tools/FitGen/FitGen.c @@ -2768,6 +2768,7 @@ Returns: { FIRMWARE_INTERFACE_TABLE_ENTRY *FitEntry; UINT32 FitIndex;+ UINT32 FitEntrySizeValue; UINT32 Index; UINT8 Checksum; UINTN SubIndex;@@ -2788,27 +2789,35 @@ Returns: // // 2. FitHeader //- FitEntry[FitIndex].Address = *(UINT64 *)"_FIT_ ";- *(UINT32 *)&FitEntry[FitIndex].Size[0] = gFitTableContext.FitEntryNumber;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.FitHeaderVersion;- FitEntry[FitIndex].Type = FIT_TABLE_TYPE_HEADER;- FitEntry[FitIndex].C_V = 1;+ FitEntrySizeValue = gFitTableContext.FitEntryNumber;+ FitEntry[FitIndex].Address = *(UINT64 *)"_FIT_ ";+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.FitHeaderVersion;+ FitEntry[FitIndex].Type = FIT_TABLE_TYPE_HEADER;+ FitEntry[FitIndex].C_V = 1; // // Checksum will be updated later... //- FitEntry[FitIndex].Checksum = 0;+ FitEntry[FitIndex].Checksum = 0; // // 3. Microcode // FitIndex++; for (Index = 0; Index < gFitTableContext.MicrocodeNumber; Index++) {- FitEntry[FitIndex].Address = gFitTableContext.Microcode[Index].Address;- *(UINT32 *)&FitEntry[FitIndex].Size[0] = 0; //gFitTableContext.Microcode[Index].Size / 16;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.MicrocodeVersion;- FitEntry[FitIndex].Type = FIT_TABLE_TYPE_MICROCODE;- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntrySizeValue = 0; // gFitTableContext.Microcode[Index].Size / 16+ FitEntry[FitIndex].Address = gFitTableContext.Microcode[Index].Address;+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.MicrocodeVersion;+ FitEntry[FitIndex].Type = FIT_TABLE_TYPE_MICROCODE;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } @@ -2816,12 +2825,16 @@ Returns: // 4. StartupAcm // for (Index = 0; Index < gFitTableContext.StartupAcmNumber; Index++) {- FitEntry[FitIndex].Address = gFitTableContext.StartupAcm[Index].Address;- *(UINT32 *)&FitEntry[FitIndex].Size[0] = 0; //gFitTableContext.StartupAcm.Size / 16;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.StartupAcmVersion;- FitEntry[FitIndex].Type = FIT_TABLE_TYPE_STARTUP_ACM;- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntrySizeValue = 0; // gFitTableContext.StartupAcm.Size / 16+ FitEntry[FitIndex].Address = gFitTableContext.StartupAcm[Index].Address;+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.StartupAcmVersion;+ FitEntry[FitIndex].Type = FIT_TABLE_TYPE_STARTUP_ACM;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } @@ -2829,19 +2842,23 @@ Returns: // 4.5. DiagnosticAcm // if (gFitTableContext.DiagnstAcm.Address != 0) {- FitEntry[FitIndex].Address = gFitTableContext.DiagnstAcm.Address;- *(UINT32 *)&FitEntry[FitIndex].Size[0] = 0;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.DiagnstAcmVersion;- FitEntry[FitIndex].Type = FIT_TABLE_TYPE_DIAGNST_ACM;- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntrySizeValue = 0; // gFitTableContext.DiagnstAcmVersion.Size / 16+ FitEntry[FitIndex].Address = gFitTableContext.DiagnstAcm.Address;+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.DiagnstAcmVersion;+ FitEntry[FitIndex].Type = FIT_TABLE_TYPE_DIAGNST_ACM;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } // // 5. BiosModule // //- // BiosModule segments order needs to be put from low addresss to high for Btg requirement+ // BiosModule segments order needs to be put from low address to high for Btg requirement // if (gFitTableContext.BiosModuleNumber > 1) { for (Index = 0; Index < (UINTN)gFitTableContext.BiosModuleNumber - 1; Index++){@@ -2855,12 +2872,16 @@ Returns: } } for (Index = 0; Index < gFitTableContext.BiosModuleNumber; Index++) {- FitEntry[FitIndex].Address = gFitTableContext.BiosModule[Index].Address;- *(UINT32 *)&FitEntry[FitIndex].Size[0] = gFitTableContext.BiosModule[Index].Size / 16;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.BiosModuleVersion;- FitEntry[FitIndex].Type = FIT_TABLE_TYPE_BIOS_MODULE;- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntrySizeValue = gFitTableContext.BiosModule[Index].Size / 16;+ FitEntry[FitIndex].Address = gFitTableContext.BiosModule[Index].Address;+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.BiosModuleVersion;+ FitEntry[FitIndex].Type = FIT_TABLE_TYPE_BIOS_MODULE;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } @@ -2868,15 +2889,18 @@ Returns: // 6. Optional module // for (Index = 0; Index < gFitTableContext.OptionalModuleNumber; Index++) {- FitEntry[FitIndex].Address = gFitTableContext.OptionalModule[Index].Address;- *(UINT32 *)&FitEntry[FitIndex].Size[0] = gFitTableContext.OptionalModule[Index].Size;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.OptionalModule[Index].Version;- FitEntry[FitIndex].Type = (UINT8)gFitTableContext.OptionalModule[Index].Type;+ FitEntrySizeValue = gFitTableContext.OptionalModule[Index].Size;+ FitEntry[FitIndex].Address = gFitTableContext.OptionalModule[Index].Address;+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.OptionalModule[Index].Version;+ FitEntry[FitIndex].Type = (UINT8)gFitTableContext.OptionalModule[Index].Type; if (FitEntry[FitIndex].Type == FIT_TABLE_TYPE_CSE_SECURE_BOOT) {- FitEntry[FitIndex].Rsvd = (UINT8)gFitTableContext.OptionalModule[Index].SubType;+ FitEntry[FitIndex].Rsvd = (UINT8)gFitTableContext.OptionalModule[Index].SubType; }- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } @@ -2884,12 +2908,16 @@ Returns: // 7. Port module // for (Index = 0; Index < gFitTableContext.PortModuleNumber; Index++) {- FitEntry[FitIndex].Address = gFitTableContext.PortModule[Index].Address + ((UINT64)gFitTableContext.PortModule[Index].Size << 32);- *(UINT32 *)&FitEntry[FitIndex].Size[0] = 0;- FitEntry[FitIndex].Version = (UINT16)gFitTableContext.PortModule[Index].Version;- FitEntry[FitIndex].Type = (UINT8)gFitTableContext.PortModule[Index].Type;- FitEntry[FitIndex].C_V = 0;- FitEntry[FitIndex].Checksum = 0;+ FitEntrySizeValue = 0;+ FitEntry[FitIndex].Address = gFitTableContext.PortModule[Index].Address + ((UINT64)gFitTableContext.PortModule[Index].Size << 32);+ FitEntry[FitIndex].Size[0] = (UINT8)FitEntrySizeValue;+ FitEntry[FitIndex].Size[1] = (UINT8)(FitEntrySizeValue >> 8);+ FitEntry[FitIndex].Size[2] = (UINT8)(FitEntrySizeValue >> 16);+ FitEntry[FitIndex].Rsvd = 0;+ FitEntry[FitIndex].Version = (UINT16)gFitTableContext.PortModule[Index].Version;+ FitEntry[FitIndex].Type = (UINT8)gFitTableContext.PortModule[Index].Type;+ FitEntry[FitIndex].C_V = 0;+ FitEntry[FitIndex].Checksum = 0; FitIndex++; } @@ -3130,6 +3158,7 @@ Returns: --*/ { FIRMWARE_INTERFACE_TABLE_ENTRY *FitEntry;+ UINT32 FitEntrySizeValue; UINT32 FitIndex; UINT32 FitTableOffset; @@ -3155,7 +3184,8 @@ Returns: if (FitEntry[FitIndex].Type != FIT_TABLE_TYPE_HEADER) { return 0; }- gFitTableContext.FitEntryNumber = *(UINT32 *)&FitEntry[FitIndex].Size[0];+ FitEntrySizeValue = (((UINT32)FitEntry[FitIndex].Size[2]) << 16) + (((UINT32)FitEntry[FitIndex].Size[1]) << 8) + ((UINT32)FitEntry[FitIndex].Size[0]);+ gFitTableContext.FitEntryNumber = FitEntrySizeValue; gFitTableContext.FitHeaderVersion = FitEntry[FitIndex].Version; //@@ -3163,6 +3193,7 @@ Returns: // FitIndex++; for (; FitIndex < gFitTableContext.FitEntryNumber; FitIndex++) {+ FitEntrySizeValue = (((UINT32)FitEntry[FitIndex].Size[2]) << 16) + (((UINT32)FitEntry[FitIndex].Size[1]) << 8) + ((UINT32)FitEntry[FitIndex].Size[0]); switch (FitEntry[FitIndex].Type) { case FIT_TABLE_TYPE_MICROCODE: gFitTableContext.Microcode[gFitTableContext.MicrocodeNumber].Address = (UINT32)FitEntry[FitIndex].Address;@@ -3175,7 +3206,7 @@ Returns: break; case FIT_TABLE_TYPE_BIOS_MODULE: gFitTableContext.BiosModule[gFitTableContext.BiosModuleNumber].Address = (UINT32)FitEntry[FitIndex].Address;- gFitTableContext.BiosModule[gFitTableContext.BiosModuleNumber].Size = *(UINT32 *)&FitEntry[FitIndex].Size[0] * 16;+ gFitTableContext.BiosModule[gFitTableContext.BiosModuleNumber].Size = FitEntrySizeValue * 16; gFitTableContext.BiosModuleVersion = FitEntry[FitIndex].Version; gFitTableContext.BiosModuleNumber ++; break;@@ -3192,7 +3223,7 @@ Returns: // Not Port Configure, pass through default: // Others gFitTableContext.OptionalModule[gFitTableContext.OptionalModuleNumber].Address = (UINT32)FitEntry[FitIndex].Address;- gFitTableContext.OptionalModule[gFitTableContext.OptionalModuleNumber].Size = *(UINT32 *)&FitEntry[FitIndex].Size[0];+ gFitTableContext.OptionalModule[gFitTableContext.OptionalModuleNumber].Size = FitEntrySizeValue; gFitTableContext.OptionalModule[gFitTableContext.OptionalModuleNumber].Version = FitEntry[FitIndex].Version; gFitTableContext.OptionalModule[gFitTableContext.OptionalModuleNumber].Type = FitEntry[FitIndex].Type; gFitTableContext.OptionalModuleNumber ++;-- 2.37.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91004): https://edk2.groups.io/g/devel/message/91004 Mute This Topic: https://groups.io/mt/92111641/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-