mirror of
https://github.com/LongSoft/UEFITool.git
synced 2025-05-13 14:44:47 -04:00
parent
c286459676
commit
8a14965463
3 changed files with 18 additions and 18 deletions
14
descriptor.h
14
descriptor.h
|
@ -39,7 +39,8 @@ typedef struct _FLASH_DESCRIPTOR_MAP {
|
||||||
UINT32 NumberOfFlashChips : 2; // Zero-based number of flash chips installed on board
|
UINT32 NumberOfFlashChips : 2; // Zero-based number of flash chips installed on board
|
||||||
UINT32 : 6;
|
UINT32 : 6;
|
||||||
UINT32 RegionBase : 8;
|
UINT32 RegionBase : 8;
|
||||||
UINT32 : 8;
|
UINT32 NumberOfRegions : 3; // Reserved in v2 descriptor
|
||||||
|
UINT32 : 5;
|
||||||
// FLMAP 1
|
// FLMAP 1
|
||||||
UINT32 MasterBase : 8;
|
UINT32 MasterBase : 8;
|
||||||
UINT32 NumberOfMasters : 2;
|
UINT32 NumberOfMasters : 2;
|
||||||
|
@ -59,11 +60,11 @@ typedef struct _FLASH_PARAMETERS {
|
||||||
UINT8 SecondChipDensity : 4;
|
UINT8 SecondChipDensity : 4;
|
||||||
UINT8 : 8;
|
UINT8 : 8;
|
||||||
UINT8 : 1;
|
UINT8 : 1;
|
||||||
UINT8 ReadClockFreqency : 3; // Hardcoded value of 20 Mhz (000b) in v1 descriptors and 17 Mhz (110b) in v2 ones
|
UINT8 ReadClockFrequency : 3; // Hardcoded value of 20 Mhz (000b) in v1 descriptors and 17 Mhz (110b) in v2 ones
|
||||||
UINT8 FastReadEnabled : 1;
|
UINT8 FastReadEnabled : 1;
|
||||||
UINT8 FastReadFreqency : 3;
|
UINT8 FastReadFrequency : 3;
|
||||||
UINT8 FlashReadStatusFrequency : 3;
|
|
||||||
UINT8 FlashWriteFrequency : 3;
|
UINT8 FlashWriteFrequency : 3;
|
||||||
|
UINT8 FlashReadStatusFrequency : 3;
|
||||||
UINT8 DualOutputFastReadSupported : 1;
|
UINT8 DualOutputFastReadSupported : 1;
|
||||||
UINT8 : 1;
|
UINT8 : 1;
|
||||||
} FLASH_PARAMETERS;
|
} FLASH_PARAMETERS;
|
||||||
|
@ -112,8 +113,7 @@ typedef struct _FLASH_DESCRIPTOR_COMPONENT_SECTION_V2 {
|
||||||
// All base and limit register are storing upper part of actual UINT32 base and limit
|
// All base and limit register are storing upper part of actual UINT32 base and limit
|
||||||
// If limit is zero - region is not present
|
// If limit is zero - region is not present
|
||||||
typedef struct _FLASH_DESCRIPTOR_REGION_SECTION {
|
typedef struct _FLASH_DESCRIPTOR_REGION_SECTION {
|
||||||
UINT16 :16;
|
UINT32 :32;
|
||||||
UINT16 FlashBlockEraseSize; // Size of block erased by single BLOCK ERASE command
|
|
||||||
UINT16 Region0Base; // BIOS
|
UINT16 Region0Base; // BIOS
|
||||||
UINT16 Region0Limit; //
|
UINT16 Region0Limit; //
|
||||||
UINT16 Region1Base; // ME
|
UINT16 Region1Base; // ME
|
||||||
|
@ -198,7 +198,7 @@ typedef struct _VSCC_TABLE_ENTRY {
|
||||||
|
|
||||||
// Base address and size of OEM section
|
// Base address and size of OEM section
|
||||||
#define FLASH_DESCRIPTOR_OEM_SECTION_BASE 0x0F00
|
#define FLASH_DESCRIPTOR_OEM_SECTION_BASE 0x0F00
|
||||||
#define FLASH_DESCRIPTOR_OEM_SECTION_SIZE 0xFF
|
#define FLASH_DESCRIPTOR_OEM_SECTION_SIZE 0x100
|
||||||
|
|
||||||
// Restore previous packing rules
|
// Restore previous packing rules
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
2
ffs.cpp
2
ffs.cpp
|
@ -155,7 +155,7 @@ UINT32 sizeOfSectionHeader(const EFI_COMMON_SECTION_HEADER* header)
|
||||||
if (!header)
|
if (!header)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
bool extended = false;
|
const bool extended = false;
|
||||||
/*if (uint24ToUint32(header->Size) == EFI_SECTION2_IS_USED) {
|
/*if (uint24ToUint32(header->Size) == EFI_SECTION2_IS_USED) {
|
||||||
extended = true;
|
extended = true;
|
||||||
}*/
|
}*/
|
||||||
|
|
|
@ -269,12 +269,12 @@ UINT8 FfsEngine::parseIntelImage(const QByteArray & intelImage, QModelIndex & in
|
||||||
|
|
||||||
// Check descriptor version by getting hardcoded value of FlashParameters.ReadClockFrequency
|
// Check descriptor version by getting hardcoded value of FlashParameters.ReadClockFrequency
|
||||||
UINT8 descriptorVersion = 0;
|
UINT8 descriptorVersion = 0;
|
||||||
if (componentSection->FlashParameters.ReadClockFreqency == FLASH_FREQUENCY_20MHZ) // Old descriptor
|
if (componentSection->FlashParameters.ReadClockFrequency == FLASH_FREQUENCY_20MHZ) // Old descriptor
|
||||||
descriptorVersion = 1;
|
descriptorVersion = 1;
|
||||||
else if (componentSection->FlashParameters.ReadClockFreqency == FLASH_FREQUENCY_17MHZ) // Skylake+ descriptor
|
else if (componentSection->FlashParameters.ReadClockFrequency == FLASH_FREQUENCY_17MHZ) // Skylake+ descriptor
|
||||||
descriptorVersion = 2;
|
descriptorVersion = 2;
|
||||||
else {
|
else {
|
||||||
msg(tr("parseIntelImage: unknown descriptor version with ReadClockFreqency %1h").hexarg(componentSection->FlashParameters.ReadClockFreqency));
|
msg(tr("parseIntelImage: unknown descriptor version with ReadClockFrequency %1h").hexarg(componentSection->FlashParameters.ReadClockFrequency));
|
||||||
return ERR_INVALID_FLASH_DESCRIPTOR;
|
return ERR_INVALID_FLASH_DESCRIPTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2831,16 +2831,16 @@ UINT8 FfsEngine::reconstructIntelImage(const QModelIndex& index, QByteArray& rec
|
||||||
const FLASH_DESCRIPTOR_COMPONENT_SECTION* componentSection = (const FLASH_DESCRIPTOR_COMPONENT_SECTION*)calculateAddress8((const UINT8*)descriptor.constData(), descriptorMap->ComponentBase);
|
const FLASH_DESCRIPTOR_COMPONENT_SECTION* componentSection = (const FLASH_DESCRIPTOR_COMPONENT_SECTION*)calculateAddress8((const UINT8*)descriptor.constData(), descriptorMap->ComponentBase);
|
||||||
// Check descriptor version by getting hardcoded value of FlashParameters.ReadClockFrequency
|
// Check descriptor version by getting hardcoded value of FlashParameters.ReadClockFrequency
|
||||||
UINT8 descriptorVersion = 0;
|
UINT8 descriptorVersion = 0;
|
||||||
if (componentSection->FlashParameters.ReadClockFreqency == FLASH_FREQUENCY_20MHZ) { // Old descriptor
|
if (componentSection->FlashParameters.ReadClockFrequency == FLASH_FREQUENCY_20MHZ) { // Old descriptor
|
||||||
descriptorVersion = 1;
|
descriptorVersion = 1;
|
||||||
}
|
}
|
||||||
else if (componentSection->FlashParameters.ReadClockFreqency == FLASH_FREQUENCY_17MHZ) { // Skylake+ descriptor
|
else if (componentSection->FlashParameters.ReadClockFrequency == FLASH_FREQUENCY_17MHZ) { // Skylake+ descriptor
|
||||||
descriptorVersion = 2;
|
descriptorVersion = 2;
|
||||||
ecBegin = calculateRegionOffset(regionSection->Region8Base);
|
ecBegin = calculateRegionOffset(regionSection->Region8Base);
|
||||||
ecEnd = ecBegin + calculateRegionSize(regionSection->Region8Base, regionSection->Region8Limit);
|
ecEnd = ecBegin + calculateRegionSize(regionSection->Region8Base, regionSection->Region8Limit);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
msg(tr("reconstructIntelImage: unknown descriptor version with ReadClockFreqency %1h").hexarg(componentSection->FlashParameters.ReadClockFreqency));
|
msg(tr("reconstructIntelImage: unknown descriptor version with ReadClockFrequency %1h").hexarg(componentSection->FlashParameters.ReadClockFrequency));
|
||||||
return ERR_INVALID_FLASH_DESCRIPTOR;
|
return ERR_INVALID_FLASH_DESCRIPTOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue