Lines Matching refs:ctx
281 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_copy_hash_omap2() local
282 struct omap_sham_dev *dd = ctx->dd; in omap_sham_copy_hash_omap2()
283 u32 *hash = (u32 *)ctx->digest; in omap_sham_copy_hash_omap2()
296 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_copy_hash_omap4() local
297 struct omap_sham_dev *dd = ctx->dd; in omap_sham_copy_hash_omap4()
300 if (ctx->flags & BIT(FLAGS_HMAC)) { in omap_sham_copy_hash_omap4()
321 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_copy_ready_hash() local
322 u32 *in = (u32 *)ctx->digest; in omap_sham_copy_ready_hash()
329 switch (ctx->flags & FLAGS_MODE_MASK) { in omap_sham_copy_ready_hash()
335 if (test_bit(FLAGS_BE32_SHA1, &ctx->dd->flags)) in omap_sham_copy_ready_hash()
378 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_write_ctrl_omap2() local
381 if (likely(ctx->digcnt)) in omap_sham_write_ctrl_omap2()
382 omap_sham_write(dd, SHA_REG_DIGCNT(dd), ctx->digcnt); in omap_sham_write_ctrl_omap2()
391 if ((ctx->flags & FLAGS_MODE_MASK) == FLAGS_MODE_SHA1) in omap_sham_write_ctrl_omap2()
393 if (!ctx->digcnt) in omap_sham_write_ctrl_omap2()
413 static int get_block_size(struct omap_sham_reqctx *ctx) in get_block_size() argument
417 switch (ctx->flags & FLAGS_MODE_MASK) { in get_block_size()
447 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_write_ctrl_omap4() local
455 val = (ctx->flags & FLAGS_MODE_MASK) >> (FLAGS_MODE_SHIFT); in omap_sham_write_ctrl_omap4()
456 if (!ctx->digcnt) { in omap_sham_write_ctrl_omap4()
464 if (ctx->flags & BIT(FLAGS_HMAC)) { in omap_sham_write_ctrl_omap4()
465 bs = get_block_size(ctx); in omap_sham_write_ctrl_omap4()
472 ctx->digcnt += bs; in omap_sham_write_ctrl_omap4()
479 if (ctx->flags & BIT(FLAGS_HMAC)) in omap_sham_write_ctrl_omap4()
487 dev_dbg(dd->dev, "ctrl: %08x, flags: %08lx\n", val, ctx->flags); in omap_sham_write_ctrl_omap4()
510 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_xmit_cpu() local
515 ctx->digcnt, length, final); in omap_sham_xmit_cpu()
521 ctx->digcnt += length; in omap_sham_xmit_cpu()
529 bs32 = get_block_size(ctx) / sizeof(u32); in omap_sham_xmit_cpu()
555 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_xmit_dma() local
558 int len32, ret, dma_min = get_block_size(ctx); in omap_sham_xmit_dma()
561 ctx->digcnt, length, final); in omap_sham_xmit_dma()
584 sg_init_table(&ctx->sgl, 1); in omap_sham_xmit_dma()
585 ctx->sgl.page_link = ctx->sg->page_link; in omap_sham_xmit_dma()
586 ctx->sgl.offset = ctx->sg->offset; in omap_sham_xmit_dma()
587 sg_dma_len(&ctx->sgl) = len32; in omap_sham_xmit_dma()
588 sg_dma_address(&ctx->sgl) = sg_dma_address(ctx->sg); in omap_sham_xmit_dma()
590 tx = dmaengine_prep_slave_sg(dd->dma_lch, &ctx->sgl, 1, in omap_sham_xmit_dma()
607 ctx->digcnt += length; in omap_sham_xmit_dma()
622 static size_t omap_sham_append_buffer(struct omap_sham_reqctx *ctx, in omap_sham_append_buffer() argument
625 size_t count = min(length, ctx->buflen - ctx->bufcnt); in omap_sham_append_buffer()
627 count = min(count, ctx->total); in omap_sham_append_buffer()
630 memcpy(ctx->buffer + ctx->bufcnt, data, count); in omap_sham_append_buffer()
631 ctx->bufcnt += count; in omap_sham_append_buffer()
636 static size_t omap_sham_append_sg(struct omap_sham_reqctx *ctx) in omap_sham_append_sg() argument
641 while (ctx->sg) { in omap_sham_append_sg()
642 vaddr = kmap_atomic(sg_page(ctx->sg)); in omap_sham_append_sg()
643 vaddr += ctx->sg->offset; in omap_sham_append_sg()
645 count = omap_sham_append_buffer(ctx, in omap_sham_append_sg()
646 vaddr + ctx->offset, in omap_sham_append_sg()
647 ctx->sg->length - ctx->offset); in omap_sham_append_sg()
653 ctx->offset += count; in omap_sham_append_sg()
654 ctx->total -= count; in omap_sham_append_sg()
655 if (ctx->offset == ctx->sg->length) { in omap_sham_append_sg()
656 ctx->sg = sg_next(ctx->sg); in omap_sham_append_sg()
657 if (ctx->sg) in omap_sham_append_sg()
658 ctx->offset = 0; in omap_sham_append_sg()
660 ctx->total = 0; in omap_sham_append_sg()
668 struct omap_sham_reqctx *ctx, in omap_sham_xmit_dma_map() argument
673 ctx->dma_addr = dma_map_single(dd->dev, ctx->buffer, ctx->buflen, in omap_sham_xmit_dma_map()
675 if (dma_mapping_error(dd->dev, ctx->dma_addr)) { in omap_sham_xmit_dma_map()
676 dev_err(dd->dev, "dma %u bytes error\n", ctx->buflen); in omap_sham_xmit_dma_map()
680 ctx->flags &= ~BIT(FLAGS_SG); in omap_sham_xmit_dma_map()
682 ret = omap_sham_xmit_dma(dd, ctx->dma_addr, length, final, 0); in omap_sham_xmit_dma_map()
684 dma_unmap_single(dd->dev, ctx->dma_addr, ctx->buflen, in omap_sham_xmit_dma_map()
692 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_slow() local
696 omap_sham_append_sg(ctx); in omap_sham_update_dma_slow()
698 final = (ctx->flags & BIT(FLAGS_FINUP)) && !ctx->total; in omap_sham_update_dma_slow()
701 ctx->bufcnt, ctx->digcnt, final); in omap_sham_update_dma_slow()
703 if (final || (ctx->bufcnt == ctx->buflen && ctx->total)) { in omap_sham_update_dma_slow()
704 count = ctx->bufcnt; in omap_sham_update_dma_slow()
705 ctx->bufcnt = 0; in omap_sham_update_dma_slow()
706 return omap_sham_xmit_dma_map(dd, ctx, count, final); in omap_sham_update_dma_slow()
719 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_start() local
724 if (!ctx->total) in omap_sham_update_dma_start()
727 if (ctx->bufcnt || ctx->offset) in omap_sham_update_dma_start()
736 if (ctx->total < get_block_size(ctx)) in omap_sham_update_dma_start()
740 ctx->digcnt, ctx->bufcnt, ctx->total); in omap_sham_update_dma_start()
742 sg = ctx->sg; in omap_sham_update_dma_start()
743 bs = get_block_size(ctx); in omap_sham_update_dma_start()
752 length = min(ctx->total, sg->length); in omap_sham_update_dma_start()
755 if (!(ctx->flags & BIT(FLAGS_FINUP))) { in omap_sham_update_dma_start()
765 if (!dma_map_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE)) { in omap_sham_update_dma_start()
770 ctx->flags |= BIT(FLAGS_SG); in omap_sham_update_dma_start()
772 ctx->total -= length; in omap_sham_update_dma_start()
773 ctx->offset = length; /* offset where to start slow */ in omap_sham_update_dma_start()
775 final = (ctx->flags & BIT(FLAGS_FINUP)) && !ctx->total; in omap_sham_update_dma_start()
777 ret = omap_sham_xmit_dma(dd, sg_dma_address(ctx->sg), length, final, 1); in omap_sham_update_dma_start()
779 dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE); in omap_sham_update_dma_start()
786 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_cpu() local
789 if (!ctx->total) in omap_sham_update_cpu()
792 omap_sham_append_sg(ctx); in omap_sham_update_cpu()
794 final = (ctx->flags & BIT(FLAGS_FINUP)) && !ctx->total; in omap_sham_update_cpu()
797 ctx->bufcnt, ctx->digcnt, final); in omap_sham_update_cpu()
799 if (final || (ctx->bufcnt == ctx->buflen && ctx->total)) { in omap_sham_update_cpu()
800 bufcnt = ctx->bufcnt; in omap_sham_update_cpu()
801 ctx->bufcnt = 0; in omap_sham_update_cpu()
802 return omap_sham_xmit_cpu(dd, ctx->buffer, bufcnt, final); in omap_sham_update_cpu()
810 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_stop() local
814 if (ctx->flags & BIT(FLAGS_SG)) { in omap_sham_update_dma_stop()
815 dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE); in omap_sham_update_dma_stop()
816 if (ctx->sg->length == ctx->offset) { in omap_sham_update_dma_stop()
817 ctx->sg = sg_next(ctx->sg); in omap_sham_update_dma_stop()
818 if (ctx->sg) in omap_sham_update_dma_stop()
819 ctx->offset = 0; in omap_sham_update_dma_stop()
822 dma_unmap_single(dd->dev, ctx->dma_addr, ctx->buflen, in omap_sham_update_dma_stop()
833 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_init() local
849 ctx->dd = dd; in omap_sham_init()
851 ctx->flags = 0; in omap_sham_init()
858 ctx->flags |= FLAGS_MODE_MD5; in omap_sham_init()
862 ctx->flags |= FLAGS_MODE_SHA1; in omap_sham_init()
866 ctx->flags |= FLAGS_MODE_SHA224; in omap_sham_init()
870 ctx->flags |= FLAGS_MODE_SHA256; in omap_sham_init()
874 ctx->flags |= FLAGS_MODE_SHA384; in omap_sham_init()
878 ctx->flags |= FLAGS_MODE_SHA512; in omap_sham_init()
883 ctx->bufcnt = 0; in omap_sham_init()
884 ctx->digcnt = 0; in omap_sham_init()
885 ctx->buflen = BUFLEN; in omap_sham_init()
891 memcpy(ctx->buffer, bctx->ipad, bs); in omap_sham_init()
892 ctx->bufcnt = bs; in omap_sham_init()
895 ctx->flags |= BIT(FLAGS_HMAC); in omap_sham_init()
905 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_update_req() local
909 ctx->total, ctx->digcnt, (ctx->flags & BIT(FLAGS_FINUP)) != 0); in omap_sham_update_req()
911 if (ctx->flags & BIT(FLAGS_CPU)) in omap_sham_update_req()
917 dev_dbg(dd->dev, "update: err: %d, digcnt: %d\n", err, ctx->digcnt); in omap_sham_update_req()
925 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_final_req() local
928 if ((ctx->bufcnt <= get_block_size(ctx)) || dd->polling_mode) in omap_sham_final_req()
936 err = omap_sham_xmit_dma_map(dd, ctx, ctx->bufcnt, 1); in omap_sham_final_req()
938 err = omap_sham_xmit_cpu(dd, ctx->buffer, ctx->bufcnt, 1); in omap_sham_final_req()
940 ctx->bufcnt = 0; in omap_sham_final_req()
965 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_finish() local
966 struct omap_sham_dev *dd = ctx->dd; in omap_sham_finish()
969 if (ctx->digcnt) { in omap_sham_finish()
971 if ((ctx->flags & BIT(FLAGS_HMAC)) && in omap_sham_finish()
976 dev_dbg(dd->dev, "digcnt: %d, bufcnt: %d\n", ctx->digcnt, ctx->bufcnt); in omap_sham_finish()
983 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_finish_req() local
984 struct omap_sham_dev *dd = ctx->dd; in omap_sham_finish_req()
991 ctx->flags |= BIT(FLAGS_ERROR); in omap_sham_finish_req()
1011 struct omap_sham_reqctx *ctx; in omap_sham_handle_queue() local
1036 ctx = ahash_request_ctx(req); in omap_sham_handle_queue()
1039 ctx->op, req->nbytes); in omap_sham_handle_queue()
1045 if (ctx->digcnt) in omap_sham_handle_queue()
1049 if (ctx->op == OP_UPDATE) { in omap_sham_handle_queue()
1051 if (err != -EINPROGRESS && (ctx->flags & BIT(FLAGS_FINUP))) in omap_sham_handle_queue()
1054 } else if (ctx->op == OP_FINAL) { in omap_sham_handle_queue()
1069 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_enqueue() local
1073 ctx->op = op; in omap_sham_enqueue()
1080 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_update() local
1081 struct omap_sham_dev *dd = ctx->dd; in omap_sham_update()
1082 int bs = get_block_size(ctx); in omap_sham_update()
1087 ctx->total = req->nbytes; in omap_sham_update()
1088 ctx->sg = req->src; in omap_sham_update()
1089 ctx->offset = 0; in omap_sham_update()
1091 if (ctx->flags & BIT(FLAGS_FINUP)) { in omap_sham_update()
1092 if ((ctx->digcnt + ctx->bufcnt + ctx->total) < 9) { in omap_sham_update()
1098 omap_sham_append_sg(ctx); in omap_sham_update()
1100 } else if ((ctx->bufcnt + ctx->total <= bs) || in omap_sham_update()
1106 ctx->flags |= BIT(FLAGS_CPU); in omap_sham_update()
1108 } else if (ctx->bufcnt + ctx->total < ctx->buflen) { in omap_sham_update()
1109 omap_sham_append_sg(ctx); in omap_sham_update()
1114 ctx->flags |= BIT(FLAGS_CPU); in omap_sham_update()
1133 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_final_shash() local
1136 ctx->buffer, ctx->bufcnt, req->result); in omap_sham_final_shash()
1141 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_final() local
1143 ctx->flags |= BIT(FLAGS_FINUP); in omap_sham_final()
1145 if (ctx->flags & BIT(FLAGS_ERROR)) in omap_sham_final()
1150 if ((ctx->digcnt + ctx->bufcnt) < 9) in omap_sham_final()
1152 else if (ctx->bufcnt) in omap_sham_final()
1161 struct omap_sham_reqctx *ctx = ahash_request_ctx(req); in omap_sham_finup() local
1164 ctx->flags |= BIT(FLAGS_FINUP); in omap_sham_finup()