Compare commits

...

2 commits

Author SHA1 Message Date
Stephan I. Böttcher
6707923afb Merge branch 'master' of forge.bexus.org:Stephan/irena-arm 2024-10-29 16:19:18 +01:00
stephan
46fbd3fee4 poll_dma_submit(0,0)
Allow calling `poll_dma_submit()` with both args zero.  The effect is to
submit external changes to the buffer, or retry a failed submission of a
full buffer.

To be used by: printf()

git-svn-id: svn+ssh://asterix.ieap.uni-kiel.de/home/subversion/stephan/solo/eda/arm@9128 bc5caf13-1734-44f8-af43-603852e9ee25
2024-10-29 15:11:54 +00:00

View file

@ -105,12 +105,14 @@ unsigned int poll_dma_submit(const char *buffer, unsigned int buffer_size)
{
unsigned int n = 0;
if (buffer_size + poll_dma_buffer_size >= 512) {
memcpy(poll_dma_buffer+poll_dma_buffer_size, buffer, 512-poll_dma_buffer_size);
if (buffer_size)
memcpy(poll_dma_buffer+poll_dma_buffer_size, buffer, 512-poll_dma_buffer_size);
int nn = buffer_size + poll_dma_buffer_size - 512;
unsigned char *new_buffer = dma_poll(poll_dma_buffer);
if (new_buffer) {
poll_dma_buffer = new_buffer;
memcpy(poll_dma_buffer, buffer+512-poll_dma_buffer_size, n);
if (nn)
memcpy(poll_dma_buffer, buffer+512-poll_dma_buffer_size, nn);
poll_dma_buffer_size = nn;
poll_dma_flags &=~ poll_dma_stuck;
}
@ -120,7 +122,7 @@ unsigned int poll_dma_submit(const char *buffer, unsigned int buffer_size)
poll_dma_flags |= poll_dma_stuck;
}
}
else {
else if (buffer_size) {
memcpy(poll_dma_buffer+poll_dma_buffer_size, buffer, buffer_size);
poll_dma_buffer_size += buffer_size;
}