remote_rom: use UDP and implement go-back-N ARQ
This commit is contained in:
committed by
Norman Feske
parent
c137c595c8
commit
8ed98b8459
49
include/remote_rom/util.h
Normal file
49
include/remote_rom/util.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* \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 <base/fixed_stdint.h>
|
||||
|
||||
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<uint8_t const*>(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
|
||||
Reference in New Issue
Block a user