Lines Matching full:gw

674 static void gcm_walk_start(struct gcm_sg_walk *gw, struct scatterlist *sg,  in gcm_walk_start()  argument
677 memset(gw, 0, sizeof(*gw)); in gcm_walk_start()
678 gw->walk_bytes_remain = len; in gcm_walk_start()
679 scatterwalk_start(&gw->walk, sg); in gcm_walk_start()
682 static inline unsigned int _gcm_sg_clamp_and_map(struct gcm_sg_walk *gw) in _gcm_sg_clamp_and_map() argument
686 gw->walk_bytes = scatterwalk_clamp(&gw->walk, gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
687 while (!gw->walk_bytes) { in _gcm_sg_clamp_and_map()
688 nextsg = sg_next(gw->walk.sg); in _gcm_sg_clamp_and_map()
691 scatterwalk_start(&gw->walk, nextsg); in _gcm_sg_clamp_and_map()
692 gw->walk_bytes = scatterwalk_clamp(&gw->walk, in _gcm_sg_clamp_and_map()
693 gw->walk_bytes_remain); in _gcm_sg_clamp_and_map()
695 gw->walk_ptr = scatterwalk_map(&gw->walk); in _gcm_sg_clamp_and_map()
696 return gw->walk_bytes; in _gcm_sg_clamp_and_map()
699 static inline void _gcm_sg_unmap_and_advance(struct gcm_sg_walk *gw, in _gcm_sg_unmap_and_advance() argument
702 gw->walk_bytes_remain -= nbytes; in _gcm_sg_unmap_and_advance()
703 scatterwalk_unmap(&gw->walk); in _gcm_sg_unmap_and_advance()
704 scatterwalk_advance(&gw->walk, nbytes); in _gcm_sg_unmap_and_advance()
705 scatterwalk_done(&gw->walk, 0, gw->walk_bytes_remain); in _gcm_sg_unmap_and_advance()
706 gw->walk_ptr = NULL; in _gcm_sg_unmap_and_advance()
709 static int gcm_in_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_in_walk_go() argument
713 if (gw->buf_bytes && gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
714 gw->ptr = gw->buf; in gcm_in_walk_go()
715 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
719 if (gw->walk_bytes_remain == 0) { in gcm_in_walk_go()
720 gw->ptr = NULL; in gcm_in_walk_go()
721 gw->nbytes = 0; in gcm_in_walk_go()
725 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
726 gw->ptr = NULL; in gcm_in_walk_go()
727 gw->nbytes = 0; in gcm_in_walk_go()
731 if (!gw->buf_bytes && gw->walk_bytes >= minbytesneeded) { in gcm_in_walk_go()
732 gw->ptr = gw->walk_ptr; in gcm_in_walk_go()
733 gw->nbytes = gw->walk_bytes; in gcm_in_walk_go()
738 n = min(gw->walk_bytes, AES_BLOCK_SIZE - gw->buf_bytes); in gcm_in_walk_go()
739 memcpy(gw->buf + gw->buf_bytes, gw->walk_ptr, n); in gcm_in_walk_go()
740 gw->buf_bytes += n; in gcm_in_walk_go()
741 _gcm_sg_unmap_and_advance(gw, n); in gcm_in_walk_go()
742 if (gw->buf_bytes >= minbytesneeded) { in gcm_in_walk_go()
743 gw->ptr = gw->buf; in gcm_in_walk_go()
744 gw->nbytes = gw->buf_bytes; in gcm_in_walk_go()
747 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_in_walk_go()
748 gw->ptr = NULL; in gcm_in_walk_go()
749 gw->nbytes = 0; in gcm_in_walk_go()
755 return gw->nbytes; in gcm_in_walk_go()
758 static int gcm_out_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) in gcm_out_walk_go() argument
760 if (gw->walk_bytes_remain == 0) { in gcm_out_walk_go()
761 gw->ptr = NULL; in gcm_out_walk_go()
762 gw->nbytes = 0; in gcm_out_walk_go()
766 if (!_gcm_sg_clamp_and_map(gw)) { in gcm_out_walk_go()
767 gw->ptr = NULL; in gcm_out_walk_go()
768 gw->nbytes = 0; in gcm_out_walk_go()
772 if (gw->walk_bytes >= minbytesneeded) { in gcm_out_walk_go()
773 gw->ptr = gw->walk_ptr; in gcm_out_walk_go()
774 gw->nbytes = gw->walk_bytes; in gcm_out_walk_go()
778 scatterwalk_unmap(&gw->walk); in gcm_out_walk_go()
779 gw->walk_ptr = NULL; in gcm_out_walk_go()
781 gw->ptr = gw->buf; in gcm_out_walk_go()
782 gw->nbytes = sizeof(gw->buf); in gcm_out_walk_go()
785 return gw->nbytes; in gcm_out_walk_go()
788 static int gcm_in_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_in_walk_done() argument
790 if (gw->ptr == NULL) in gcm_in_walk_done()
793 if (gw->ptr == gw->buf) { in gcm_in_walk_done()
794 int n = gw->buf_bytes - bytesdone; in gcm_in_walk_done()
796 memmove(gw->buf, gw->buf + bytesdone, n); in gcm_in_walk_done()
797 gw->buf_bytes = n; in gcm_in_walk_done()
799 gw->buf_bytes = 0; in gcm_in_walk_done()
801 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_in_walk_done()
806 static int gcm_out_walk_done(struct gcm_sg_walk *gw, unsigned int bytesdone) in gcm_out_walk_done() argument
810 if (gw->ptr == NULL) in gcm_out_walk_done()
813 if (gw->ptr == gw->buf) { in gcm_out_walk_done()
815 if (!_gcm_sg_clamp_and_map(gw)) in gcm_out_walk_done()
817 n = min(gw->walk_bytes, bytesdone - i); in gcm_out_walk_done()
818 memcpy(gw->walk_ptr, gw->buf + i, n); in gcm_out_walk_done()
819 _gcm_sg_unmap_and_advance(gw, n); in gcm_out_walk_done()
822 _gcm_sg_unmap_and_advance(gw, bytesdone); in gcm_out_walk_done()