Lines Matching full:gw
673 static void gcm_walk_start(struct gcm_sg_walk *gw, struct scatterlist *sg, in gcm_walk_start() argument
676 memset(gw, 0, sizeof(*gw)); in gcm_walk_start()
677 gw->walk_bytes_remain = len; in gcm_walk_start()
678 scatterwalk_start(&gw->walk, sg); in gcm_walk_start()
681 static inline unsigned int _gcm_sg_clamp_and_map(struct gcm_sg_walk *gw) in _gcm_sg_clamp_and_map() argument
685 gw->walk_bytes = scatterwalk_clamp(&gw->walk, gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
686 while (!gw->walk_bytes) { in _gcm_sg_clamp_and_map()
687 nextsg = sg_next(gw->walk.sg); in _gcm_sg_clamp_and_map()
690 scatterwalk_start(&gw->walk, nextsg); in _gcm_sg_clamp_and_map()
691 gw->walk_bytes = scatterwalk_clamp(&gw->walk, in _gcm_sg_clamp_and_map()
692 gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
694 gw->walk_ptr = scatterwalk_map(&gw->walk); in _gcm_sg_clamp_and_map()
695 return gw->walk_bytes; in _gcm_sg_clamp_and_map()
698 static inline void _gcm_sg_unmap_and_advance(struct gcm_sg_walk *gw, in _gcm_sg_unmap_and_advance() argument
701 gw->walk_bytes_remain -= nbytes; in _gcm_sg_unmap_and_advance()
702 scatterwalk_unmap(gw->walk_ptr); in _gcm_sg_unmap_and_advance()
703 scatterwalk_advance(&gw->walk, nbytes); in _gcm_sg_unmap_and_advance()
704 scatterwalk_done(&gw->walk, 0, gw->walk_bytes_remain); in _gcm_sg_unmap_and_advance()
705 gw->walk_ptr = NULL; in _gcm_sg_unmap_and_advance()
708 static int gcm_in_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_in_walk_go() argument
712 if (gw->buf_bytes && gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
713 gw->ptr = gw->buf; in gcm_in_walk_go()
714 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
718 if (gw->walk_bytes_remain == 0) { in gcm_in_walk_go()
719 gw->ptr = NULL; in gcm_in_walk_go()
720 gw->nbytes = 0; in gcm_in_walk_go()
724 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
725 gw->ptr = NULL; in gcm_in_walk_go()
726 gw->nbytes = 0; in gcm_in_walk_go()
730 if (!gw->buf_bytes && gw->walk_bytes >= minbytesneeded) { in gcm_in_walk_go()
731 gw->ptr = gw->walk_ptr; in gcm_in_walk_go()
732 gw->nbytes = gw->walk_bytes; in gcm_in_walk_go()
737 n = min(gw->walk_bytes, AES_BLOCK_SIZE - gw->buf_bytes); in gcm_in_walk_go()
738 memcpy(gw->buf + gw->buf_bytes, gw->walk_ptr, n); in gcm_in_walk_go()
739 gw->buf_bytes += n; in gcm_in_walk_go()
740 _gcm_sg_unmap_and_advance(gw, n); in gcm_in_walk_go()
741 if (gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
742 gw->ptr = gw->buf; in gcm_in_walk_go()
743 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
746 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
747 gw->ptr = NULL; in gcm_in_walk_go()
748 gw->nbytes = 0; in gcm_in_walk_go()
754 return gw->nbytes; in gcm_in_walk_go()
757 static int gcm_out_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_out_walk_go() argument
759 if (gw->walk_bytes_remain == 0) { in gcm_out_walk_go()
760 gw->ptr = NULL; in gcm_out_walk_go()
761 gw->nbytes = 0; in gcm_out_walk_go()
765 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_out_walk_go()
766 gw->ptr = NULL; in gcm_out_walk_go()
767 gw->nbytes = 0; in gcm_out_walk_go()
771 if (gw->walk_bytes >= minbytesneeded) { in gcm_out_walk_go()
772 gw->ptr = gw->walk_ptr; in gcm_out_walk_go()
773 gw->nbytes = gw->walk_bytes; in gcm_out_walk_go()
777 scatterwalk_unmap(gw->walk_ptr); in gcm_out_walk_go()
778 gw->walk_ptr = NULL; in gcm_out_walk_go()
780 gw->ptr = gw->buf; in gcm_out_walk_go()
781 gw->nbytes = sizeof(gw->buf); in gcm_out_walk_go()
784 return gw->nbytes; in gcm_out_walk_go()
787 static int gcm_in_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_in_walk_done() argument
789 if (gw->ptr == NULL) in gcm_in_walk_done()
792 if (gw->ptr == gw->buf) { in gcm_in_walk_done()
793 int n = gw->buf_bytes - bytesdone; in gcm_in_walk_done()
795 memmove(gw->buf, gw->buf + bytesdone, n); in gcm_in_walk_done()
796 gw->buf_bytes = n; in gcm_in_walk_done()
798 gw->buf_bytes = 0; in gcm_in_walk_done()
800 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_in_walk_done()
805 static int gcm_out_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_out_walk_done() argument
809 if (gw->ptr == NULL) in gcm_out_walk_done()
812 if (gw->ptr == gw->buf) { in gcm_out_walk_done()
814 if (!_gcm_sg_clamp_and_map(gw)) in gcm_out_walk_done()
816 n = min(gw->walk_bytes, bytesdone - i); in gcm_out_walk_done()
817 memcpy(gw->walk_ptr, gw->buf + i, n); in gcm_out_walk_done()
818 _gcm_sg_unmap_and_advance(gw, n); in gcm_out_walk_done()
821 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_out_walk_done()