From 96ef8d99ba1e28b11bc788b5439ee511f2e171de Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Wed, 24 Dec 2014 01:23:14 +0000 Subject: ich9deblob: make gbe checksum function take byte offset directly --- resources/utilities/ich9deblob/gbe/gbe.c | 17 ++++++++--------- resources/utilities/ich9deblob/gbe/gbe.h | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'resources') diff --git a/resources/utilities/ich9deblob/gbe/gbe.c b/resources/utilities/ich9deblob/gbe/gbe.c index b1c55dd9..d5669061 100644 --- a/resources/utilities/ich9deblob/gbe/gbe.c +++ b/resources/utilities/ich9deblob/gbe/gbe.c @@ -45,22 +45,21 @@ unsigned short gbeGetRegionWordFrom8kBuffer(int index, char* regionData) * checksum calculation for 8k gbe region (algorithm based on datasheet) * also works for 4k buffers, so long as isBackup remains false */ -unsigned short gbeGetChecksumFrom8kBuffer(char* regionData, unsigned short desiredValue, char isBackup) +unsigned short gbeGetChecksumFrom8kBuffer(char* regionData, unsigned short desiredValue, int byteOffset) { int i; - unsigned short regionWord; /* store words here for adding to checksum */ - unsigned short checksum = 0; /* this gbe's checksum */ - unsigned short offset = 0; /* in bytes, from the start of the gbe region. */ - /* - * if isBackup is true, use 2nd gbe region ("backup" region) - * this function uses *word* not *byte* indexes, hence the bit shift. + * byteOffset defines the byte address where the gbe begins in the buffer "regionData". + * However, this function works with 16-bit words. Shift the byte offset to the right for the word (16-bit) offset. */ - if (isBackup) offset = GBEREGIONSIZE_4K>>1; + int wordOffset = byteOffset >> 1; + + unsigned short regionWord; /* store words here for adding to checksum */ + unsigned short checksum = 0; /* this gbe's checksum */ for (i = 0; i < 0x3F; i++) { - regionWord = gbeGetRegionWordFrom8kBuffer(i+offset, regionData); + regionWord = gbeGetRegionWordFrom8kBuffer(i+wordOffset, regionData); checksum += regionWord; } checksum = desiredValue - checksum; diff --git a/resources/utilities/ich9deblob/gbe/gbe.h b/resources/utilities/ich9deblob/gbe/gbe.h index 9647d806..d0ad6490 100644 --- a/resources/utilities/ich9deblob/gbe/gbe.h +++ b/resources/utilities/ich9deblob/gbe/gbe.h @@ -82,7 +82,7 @@ struct GBEREGIONRECORD_8K { */ unsigned short gbeGetRegionWordFrom8kBuffer(int index, char* regionData); -unsigned short gbeGetChecksumFrom8kBuffer(char* regionData, unsigned short desiredValue, char isBackup); +unsigned short gbeGetChecksumFrom8kBuffer(char* regionData, unsigned short desiredValue, int byteOffset); unsigned short gbeGetChecksumFrom4kStruct(struct GBEREGIONRECORD_4K gbeStruct4k, unsigned short desiredValue); struct GBEREGIONRECORD_8K deblobbedGbeStructFromFactory(struct GBEREGIONRECORD_8K factoryGbeStruct8k); -- cgit v1.2.3-70-g09d2