Lines Matching full:gw

675 static void gcm_walk_start(struct gcm_sg_walk *gw, struct scatterlist *sg,  in gcm_walk_start()  argument
678 memset(gw, 0, sizeof(*gw)); in gcm_walk_start()
679 gw->walk_bytes_remain = len; in gcm_walk_start()
680 scatterwalk_start(&gw->walk, sg); in gcm_walk_start()
683 static inline unsigned int _gcm_sg_clamp_and_map(struct gcm_sg_walk *gw) in _gcm_sg_clamp_and_map() argument
687 gw->walk_bytes = scatterwalk_clamp(&gw->walk, gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
688 while (!gw->walk_bytes) { in _gcm_sg_clamp_and_map()
689 nextsg = sg_next(gw->walk.sg); in _gcm_sg_clamp_and_map()
692 scatterwalk_start(&gw->walk, nextsg); in _gcm_sg_clamp_and_map()
693 gw->walk_bytes = scatterwalk_clamp(&gw->walk, in _gcm_sg_clamp_and_map()
694 gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
696 gw->walk_ptr = scatterwalk_map(&gw->walk); in _gcm_sg_clamp_and_map()
697 return gw->walk_bytes; in _gcm_sg_clamp_and_map()
700 static inline void _gcm_sg_unmap_and_advance(struct gcm_sg_walk *gw, in _gcm_sg_unmap_and_advance() argument
703 gw->walk_bytes_remain -= nbytes; in _gcm_sg_unmap_and_advance()
704 scatterwalk_unmap(gw->walk_ptr); in _gcm_sg_unmap_and_advance()
705 scatterwalk_advance(&gw->walk, nbytes); in _gcm_sg_unmap_and_advance()
706 scatterwalk_done(&gw->walk, 0, gw->walk_bytes_remain); in _gcm_sg_unmap_and_advance()
707 gw->walk_ptr = NULL; in _gcm_sg_unmap_and_advance()
710 static int gcm_in_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_in_walk_go() argument
714 if (gw->buf_bytes && gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
715 gw->ptr = gw->buf; in gcm_in_walk_go()
716 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
720 if (gw->walk_bytes_remain == 0) { in gcm_in_walk_go()
721 gw->ptr = NULL; in gcm_in_walk_go()
722 gw->nbytes = 0; in gcm_in_walk_go()
726 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
727 gw->ptr = NULL; in gcm_in_walk_go()
728 gw->nbytes = 0; in gcm_in_walk_go()
732 if (!gw->buf_bytes && gw->walk_bytes >= minbytesneeded) { in gcm_in_walk_go()
733 gw->ptr = gw->walk_ptr; in gcm_in_walk_go()
734 gw->nbytes = gw->walk_bytes; in gcm_in_walk_go()
739 n = min(gw->walk_bytes, AES_BLOCK_SIZE - gw->buf_bytes); in gcm_in_walk_go()
740 memcpy(gw->buf + gw->buf_bytes, gw->walk_ptr, n); in gcm_in_walk_go()
741 gw->buf_bytes += n; in gcm_in_walk_go()
742 _gcm_sg_unmap_and_advance(gw, n); in gcm_in_walk_go()
743 if (gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
744 gw->ptr = gw->buf; in gcm_in_walk_go()
745 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
748 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
749 gw->ptr = NULL; in gcm_in_walk_go()
750 gw->nbytes = 0; in gcm_in_walk_go()
756 return gw->nbytes; in gcm_in_walk_go()
759 static int gcm_out_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_out_walk_go() argument
761 if (gw->walk_bytes_remain == 0) { in gcm_out_walk_go()
762 gw->ptr = NULL; in gcm_out_walk_go()
763 gw->nbytes = 0; in gcm_out_walk_go()
767 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_out_walk_go()
768 gw->ptr = NULL; in gcm_out_walk_go()
769 gw->nbytes = 0; in gcm_out_walk_go()
773 if (gw->walk_bytes >= minbytesneeded) { in gcm_out_walk_go()
774 gw->ptr = gw->walk_ptr; in gcm_out_walk_go()
775 gw->nbytes = gw->walk_bytes; in gcm_out_walk_go()
779 scatterwalk_unmap(gw->walk_ptr); in gcm_out_walk_go()
780 gw->walk_ptr = NULL; in gcm_out_walk_go()
782 gw->ptr = gw->buf; in gcm_out_walk_go()
783 gw->nbytes = sizeof(gw->buf); in gcm_out_walk_go()
786 return gw->nbytes; in gcm_out_walk_go()
789 static int gcm_in_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_in_walk_done() argument
791 if (gw->ptr == NULL) in gcm_in_walk_done()
794 if (gw->ptr == gw->buf) { in gcm_in_walk_done()
795 int n = gw->buf_bytes - bytesdone; in gcm_in_walk_done()
797 memmove(gw->buf, gw->buf + bytesdone, n); in gcm_in_walk_done()
798 gw->buf_bytes = n; in gcm_in_walk_done()
800 gw->buf_bytes = 0; in gcm_in_walk_done()
802 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_in_walk_done()
807 static int gcm_out_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_out_walk_done() argument
811 if (gw->ptr == NULL) in gcm_out_walk_done()
814 if (gw->ptr == gw->buf) { in gcm_out_walk_done()
816 if (!_gcm_sg_clamp_and_map(gw)) in gcm_out_walk_done()
818 n = min(gw->walk_bytes, bytesdone - i); in gcm_out_walk_done()
819 memcpy(gw->walk_ptr, gw->buf + i, n); in gcm_out_walk_done()
820 _gcm_sg_unmap_and_advance(gw, n); in gcm_out_walk_done()
823 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_out_walk_done()