crypto: scatterwalk - Add scatterwalk_ffwd helper
This patch adds the scatterwalk_ffwd helper which can create an SG list that starts in the middle of an existing SG list. The new list may either be part of the existing list or be a chain that latches onto part of the existing list. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
66d948e732
commit
fc42bcba97
2 changed files with 26 additions and 0 deletions
|
@ -146,3 +146,25 @@ int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes)
|
|||
return n;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(scatterwalk_bytes_sglen);
|
||||
|
||||
struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
|
||||
struct scatterlist *src,
|
||||
unsigned int len)
|
||||
{
|
||||
for (;;) {
|
||||
if (!len)
|
||||
return src;
|
||||
|
||||
if (src->length > len)
|
||||
break;
|
||||
|
||||
len -= src->length;
|
||||
src = sg_next(src);
|
||||
}
|
||||
|
||||
sg_set_page(dst, sg_page(src), src->length - len, src->offset + len);
|
||||
scatterwalk_crypto_chain(dst, sg_next(src), 0, 2);
|
||||
|
||||
return dst;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(scatterwalk_ffwd);
|
||||
|
|
|
@ -102,4 +102,8 @@ void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
|||
|
||||
int scatterwalk_bytes_sglen(struct scatterlist *sg, int num_bytes);
|
||||
|
||||
struct scatterlist *scatterwalk_ffwd(struct scatterlist dst[2],
|
||||
struct scatterlist *src,
|
||||
unsigned int len);
|
||||
|
||||
#endif /* _CRYPTO_SCATTERWALK_H */
|
||||
|
|
Loading…
Reference in a new issue