#include <error-mem-viewer/crc.h>

uint32_t do_crc(uint32_t init, uint32_t data)
{
	uint32_t crc = init;
	uint32_t cnt;

	for(cnt=0; cnt < 32; cnt++)
	{
		crc = ((int32_t)(crc ^ data))<0 ? (crc << 1) ^ 0x04C11DB7 : crc << 1;
		data <<=1;
	}

	return crc;
}

uint32_t calculate_stm_crc(uint32_t *data, size_t len)
{
	uint32_t crc = ~0U;

	while(len--) {
		crc = do_crc(crc, *data++);
	}

	return crc;
}
