aboutsummaryrefslogtreecommitdiff
path: root/core/drivers/crypto/caam/utils/utils_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/drivers/crypto/caam/utils/utils_mem.c')
-rw-r--r--core/drivers/crypto/caam/utils/utils_mem.c20
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;
+}