summaryrefslogtreecommitdiffstats
path: root/resources/utilities/ich9deblob/gbe/gbe.c
diff options
context:
space:
mode:
Diffstat (limited to 'resources/utilities/ich9deblob/gbe/gbe.c')
-rw-r--r--resources/utilities/ich9deblob/gbe/gbe.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/resources/utilities/ich9deblob/gbe/gbe.c b/resources/utilities/ich9deblob/gbe/gbe.c
index b1c55dd..d566906 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;