/* * \brief Utility functions used by ROM forwarder and receiver. * \author Johannes Schlatow * \date 2018-11-14 */ /* * Copyright (C) 2018 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #ifndef __INCLUDE__REMOTE_ROM__UTIL_H_ #define __INCLUDE__REMOTE_ROM__UTIL_H_ #include namespace Remote_rom { using Genode::uint32_t; using Genode::int32_t; using Genode::uint8_t; using Genode::size_t; uint32_t cksum(void const * const buf, size_t size); } /** * Calculating checksum compatible to POSIX cksum * * \param buf pointer to buffer containing data * \param size length of buffer in bytes * * \return CRC32 checksum of data */ Genode::uint32_t Remote_rom::cksum(void const * const buf, size_t size) { uint8_t const *p = static_cast(buf); uint32_t crc = ~0U; while (size--) { crc ^= *p++; for (uint32_t j = 0; j < 8; j++) crc = (-int32_t(crc & 1) & 0xedb88320) ^ (crc >> 1); } return crc ^ ~0U; } #endif