From 96ef8d99ba1e28b11bc788b5439ee511f2e171de Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Tue, 23 Dec 2014 20:23:14 -0500 Subject: ich9deblob: make gbe checksum function take byte offset directly --- (limited to 'resources/utilities/ich9deblob/gbe/gbe.c') 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; -- cgit v0.9.1