#include <prjxray/xilinx/xcupseries/ecc.h>
#include <cassert>
#include <cstdio>

namespace prjxray {
namespace xilinx {
namespace xcupseries {

constexpr size_t kECCFrameNumber = 0x32;

uint32_t icap_ecc(uint32_t idx, uint32_t data, uint32_t ecc) {
	uint32_t val = idx * 32;  // bit offset

	if (idx > 0x25)  // avoid 0x800
		val += 0x1360;
	else if (idx > 0x6)  // avoid 0x400
		val += 0x1340;
	else  // avoid lower
		val += 0x1320;

	if (idx == 0x32)  // mask ECC
		data &= 0xFFFFE000;

	for (int i = 0; i < 32; i++) {
		if (data & 1)
			ecc ^= val + i;

		data >>= 1;
	}

	if (idx == 0x64) {  // last index
		uint32_t v = ecc & 0xFFF;
		v ^= v >> 8;
		v ^= v >> 4;
		v ^= v >> 2;
		v ^= v >> 1;
		ecc ^= (v & 1) << 12;  // parity
	}

	return ecc;
}

static uint32_t calculateECC(const std::vector<uint32_t>& data) {
	uint32_t ecc = 0;
	for (size_t ii = 0; ii < data.size(); ++ii) {
		ecc = xcupseries::icap_ecc(ii, data[ii], ecc);
	}
	return ecc;
}

void updateECC(std::vector<uint32_t>& data) {
	assert(data.size() >= kECCFrameNumber);
	// Replace the old ECC with the new.
	data[kECCFrameNumber] &= 0xFFFFE000;
	data[kECCFrameNumber] |= (calculateECC(data) & 0x1FFF);
}

}  // namespace xcupseries
}  // namespace xilinx
}  // namespace prjxray
