Lines Matching full:gw

779 static void gcm_walk_start(struct gcm_sg_walk *gw, struct scatterlist *sg,  in gcm_walk_start()  argument
782 memset(gw, 0, sizeof(*gw)); in gcm_walk_start()
783 gw->walk_bytes_remain = len; in gcm_walk_start()
784 scatterwalk_start(&gw->walk, sg); in gcm_walk_start()
787 static inline unsigned int _gcm_sg_clamp_and_map(struct gcm_sg_walk *gw) in _gcm_sg_clamp_and_map() argument
789 if (gw->walk_bytes_remain == 0) in _gcm_sg_clamp_and_map()
791 gw->walk_bytes = scatterwalk_next(&gw->walk, gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
792 return gw->walk_bytes; in _gcm_sg_clamp_and_map()
795 static inline void _gcm_sg_unmap_and_advance(struct gcm_sg_walk *gw, in _gcm_sg_unmap_and_advance() argument
798 gw->walk_bytes_remain -= nbytes; in _gcm_sg_unmap_and_advance()
800 scatterwalk_done_dst(&gw->walk, nbytes); in _gcm_sg_unmap_and_advance()
802 scatterwalk_done_src(&gw->walk, nbytes); in _gcm_sg_unmap_and_advance()
805 static int gcm_in_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_in_walk_go() argument
809 if (gw->buf_bytes && gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
810 gw->ptr = gw->buf; in gcm_in_walk_go()
811 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
815 if (gw->walk_bytes_remain == 0) { in gcm_in_walk_go()
816 gw->ptr = NULL; in gcm_in_walk_go()
817 gw->nbytes = 0; in gcm_in_walk_go()
821 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
822 gw->ptr = NULL; in gcm_in_walk_go()
823 gw->nbytes = 0; in gcm_in_walk_go()
827 if (!gw->buf_bytes && gw->walk_bytes >= minbytesneeded) { in gcm_in_walk_go()
828 gw->ptr = gw->walk.addr; in gcm_in_walk_go()
829 gw->nbytes = gw->walk_bytes; in gcm_in_walk_go()
834 n = min(gw->walk_bytes, AES_BLOCK_SIZE - gw->buf_bytes); in gcm_in_walk_go()
835 memcpy(gw->buf + gw->buf_bytes, gw->walk.addr, n); in gcm_in_walk_go()
836 gw->buf_bytes += n; in gcm_in_walk_go()
837 _gcm_sg_unmap_and_advance(gw, n, false); in gcm_in_walk_go()
838 if (gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
839 gw->ptr = gw->buf; in gcm_in_walk_go()
840 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
843 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
844 gw->ptr = NULL; in gcm_in_walk_go()
845 gw->nbytes = 0; in gcm_in_walk_go()
851 return gw->nbytes; in gcm_in_walk_go()
854 static int gcm_out_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_out_walk_go() argument
856 if (gw->walk_bytes_remain == 0) { in gcm_out_walk_go()
857 gw->ptr = NULL; in gcm_out_walk_go()
858 gw->nbytes = 0; in gcm_out_walk_go()
862 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_out_walk_go()
863 gw->ptr = NULL; in gcm_out_walk_go()
864 gw->nbytes = 0; in gcm_out_walk_go()
868 if (gw->walk_bytes >= minbytesneeded) { in gcm_out_walk_go()
869 gw->ptr = gw->walk.addr; in gcm_out_walk_go()
870 gw->nbytes = gw->walk_bytes; in gcm_out_walk_go()
874 scatterwalk_unmap(&gw->walk); in gcm_out_walk_go()
876 gw->ptr = gw->buf; in gcm_out_walk_go()
877 gw->nbytes = sizeof(gw->buf); in gcm_out_walk_go()
880 return gw->nbytes; in gcm_out_walk_go()
883 static int gcm_in_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_in_walk_done() argument
885 if (gw->ptr == NULL) in gcm_in_walk_done()
888 if (gw->ptr == gw->buf) { in gcm_in_walk_done()
889 int n = gw->buf_bytes - bytesdone; in gcm_in_walk_done()
891 memmove(gw->buf, gw->buf + bytesdone, n); in gcm_in_walk_done()
892 gw->buf_bytes = n; in gcm_in_walk_done()
894 gw->buf_bytes = 0; in gcm_in_walk_done()
896 _gcm_sg_unmap_and_advance(gw, bytesdone, false); in gcm_in_walk_done()
901 static int gcm_out_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_out_walk_done() argument
905 if (gw->ptr == NULL) in gcm_out_walk_done()
908 if (gw->ptr == gw->buf) { in gcm_out_walk_done()
910 if (!_gcm_sg_clamp_and_map(gw)) in gcm_out_walk_done()
912 n = min(gw->walk_bytes, bytesdone - i); in gcm_out_walk_done()
913 memcpy(gw->walk.addr, gw->buf + i, n); in gcm_out_walk_done()
914 _gcm_sg_unmap_and_advance(gw, n, true); in gcm_out_walk_done()
917 _gcm_sg_unmap_and_advance(gw, bytesdone, true); in gcm_out_walk_done()