diff options
Diffstat (limited to 'core/drivers/crypto/caam/utils/utils_mem.c')
-rw-r--r-- | core/drivers/crypto/caam/utils/utils_mem.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/core/drivers/crypto/caam/utils/utils_mem.c b/core/drivers/crypto/caam/utils/utils_mem.c index 8acaeb10..fa42b10b 100644 --- a/core/drivers/crypto/caam/utils/utils_mem.c +++ b/core/drivers/crypto/caam/utils/utils_mem.c @@ -522,3 +522,23 @@ int caam_mem_get_pa_area(struct caambuf *buf, struct caambuf **out_pabufs) MEM_TRACE("Nb Physical Area %d", nb_pa_area + 1); return nb_pa_area + 1; } + +void caam_mem_cpy_ltrim_buf(struct caambuf *dst, struct caambuf *src) +{ + size_t offset = 0; + size_t cpy_size = 0; + + /* Calculate the offset to start the copy */ + while (!src->data[offset] && offset < src->length) + offset++; + + if (offset >= src->length) + offset = src->length - 1; + + cpy_size = MIN(dst->length, (src->length - offset)); + MEM_TRACE("Copy %zu of src %zu bytes (offset = %zu)", cpy_size, + src->length, offset); + memcpy(dst->data, &src->data[offset], cpy_size); + + dst->length = cpy_size; +} |