<div>Hello, Rob!</div><div> </div><div>Yes, you are right, you can use memcpy(), but length must be set to 4 bytes. Just bear in mind, that you can only read/write 32 bits at a time, so if you need to transfer large amounts of data, simply call memcpy(dst, src, 4) in a loop, you don't need to wait for anything. You don't even have to use my read/write wrappers, you can create a macro, something like this:</div><div>#define eim_memcpy(dst, src) memcpy(dst, src, sizeof(int))</div><div>or whatever you want.The other important thing is that you need to mmap() EIM region into our address space. I can't tell what overhead is caused by this call, because I'm not even close to being a linux kernel expert. The idea to save last mapped page address and not call mmap() again if access is requested to already mapped page was actually in the original code that I downloaded from the repository. I do know that one can't mmap() smaller than one page at a time, but I belive that you can mmap() a larger region if you need. You will not need to remap it that often then. I actually haven't tried it, because my demo adder only has 4 registers.<br />With best regards,Pavel Shatov</div><div>01.02.2015, 00:23, "Rob Austein" <sra@hactrn.net>:</div><blockquote type="cite"><p>At Sat, 31 Jan 2015 09:19:04 +0100, Joachim Strömbergson wrote:</p><blockquote> Paul and Rob could you look at whats in the sw/ and the doc/ and comment<br /> on both the code and what is suggested in the documentation.</blockquote><p>C code looks very clean.  There are a few constructs Pavel used that I<br />would not ordinarily use in portable network code, but this code is<br />(very) specific to a particular platform and compiler, so what Pavel<br />did is fine.<br /><br />Unfortunate that we can't do bulk memcpy(), particularly since modern<br />compilers tend to be clever about inlining memcpy() calls, but it is<br />what it is.  Reading between the lines, I assume that we can write<br />(eg) a complete block as a sequence of eim_write_32() without having<br />to poll for an acknowledgement after every 32-bit word, we just can't<br />do that in a single memcmp().<br /><br />I'm a little worried about overhead from _eim_remap_mem() if we end up<br />spreading things out on a large number of pages (thus requiring<br />frequent remapping), but let's get the basic stuff right before<br />worrying about that kind of performance issue.  If we can get to the<br />point where overhead from _eim_remap_mem() is our worst bottleneck,<br />I'll be very happy. :)<br /><br />I will wait for somebody to hook some hash cores into the revised EIM<br />framework before trying to revise the HAL code.<br />_______________________________________________<br />Tech mailing list<br /><a href="mailto:Tech@cryptech.is">Tech@cryptech.is</a><br /><a href="https://lists.cryptech.is/listinfo/tech">https://lists.cryptech.is/listinfo/tech</a></p></blockquote>