diff options
| author | Steffen Klassert <steffen.klassert@secunet.com> | 2010-11-22 05:25:50 -0500 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2010-12-02 01:47:15 -0500 |
| commit | 079f2f7485648c1397a35575fae45908a0db5ba6 (patch) | |
| tree | ca31a39f249f17feac5e26970c7b2fc881daacce /include/crypto | |
| parent | bc97e57eb21f8db55bf0e1f182d384e75b2e3c99 (diff) | |
crypto: scatterwalk - Add scatterwalk_crypto_chain helper
A lot of crypto algorithms implement their own chaining function.
So add a generic one that can be used from all the algorithms that
need scatterlist chaining.
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/crypto')
| -rw-r--r-- | include/crypto/scatterwalk.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/crypto/scatterwalk.h b/include/crypto/scatterwalk.h index 833d208c25d6..4fd95a323beb 100644 --- a/include/crypto/scatterwalk.h +++ b/include/crypto/scatterwalk.h | |||
| @@ -68,6 +68,21 @@ static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg) | |||
| 68 | return (++sg)->length ? sg : (void *)sg_page(sg); | 68 | return (++sg)->length ? sg : (void *)sg_page(sg); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | static inline void scatterwalk_crypto_chain(struct scatterlist *head, | ||
| 72 | struct scatterlist *sg, | ||
| 73 | int chain, int num) | ||
| 74 | { | ||
| 75 | if (chain) { | ||
| 76 | head->length += sg->length; | ||
| 77 | sg = scatterwalk_sg_next(sg); | ||
| 78 | } | ||
| 79 | |||
| 80 | if (sg) | ||
| 81 | scatterwalk_sg_chain(head, num, sg); | ||
| 82 | else | ||
| 83 | sg_mark_end(head); | ||
| 84 | } | ||
| 85 | |||
| 71 | static inline unsigned long scatterwalk_samebuf(struct scatter_walk *walk_in, | 86 | static inline unsigned long scatterwalk_samebuf(struct scatter_walk *walk_in, |
| 72 | struct scatter_walk *walk_out) | 87 | struct scatter_walk *walk_out) |
| 73 | { | 88 | { |
