X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=crypto%2Fscatterwalk.h;h=e79925c474a3a2eb6de0fe120d1e0151acd45530;hb=34a75f0025b9cf803b6a88db032e6ad6950c9313;hp=b16446519017f3509ad17209fa6ccbfffa2d1584;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/crypto/scatterwalk.h b/crypto/scatterwalk.h index b16446519..e79925c47 100644 --- a/crypto/scatterwalk.h +++ b/crypto/scatterwalk.h @@ -34,15 +34,33 @@ static inline struct scatterlist *sg_next(struct scatterlist *sg) } static inline int scatterwalk_samebuf(struct scatter_walk *walk_in, - struct scatter_walk *walk_out, - void *src_p, void *dst_p) + struct scatter_walk *walk_out) { return walk_in->page == walk_out->page && - walk_in->offset == walk_out->offset && - walk_in->data == src_p && walk_out->data == dst_p; + walk_in->offset == walk_out->offset; +} + +static inline unsigned int scatterwalk_clamp(struct scatter_walk *walk, + unsigned int nbytes) +{ + return nbytes > walk->len_this_page ? walk->len_this_page : nbytes; +} + +static inline void scatterwalk_advance(struct scatter_walk *walk, + unsigned int nbytes) +{ + walk->data += nbytes; + walk->offset += nbytes; + walk->len_this_page -= nbytes; + walk->len_this_segment -= nbytes; +} + +static inline unsigned int scatterwalk_aligned(struct scatter_walk *walk, + unsigned int alignmask) +{ + return !(walk->offset & alignmask); } -void *scatterwalk_whichbuf(struct scatter_walk *walk, unsigned int nbytes, void *scratch); void scatterwalk_start(struct scatter_walk *walk, struct scatterlist *sg); int scatterwalk_copychunks(void *buf, struct scatter_walk *walk, size_t nbytes, int out); void scatterwalk_map(struct scatter_walk *walk, int out);