• Home
  • Raw
  • Download

Lines Matching refs:dd

53 #define SHA_REG_IDIGEST(dd, x)		((dd)->pdata->idigest_ofs + ((x)*0x04))  argument
54 #define SHA_REG_DIN(dd, x) ((dd)->pdata->din_ofs + ((x) * 0x04)) argument
55 #define SHA_REG_DIGCNT(dd) ((dd)->pdata->digcnt_ofs) argument
67 #define SHA_REG_REV(dd) ((dd)->pdata->rev_ofs) argument
69 #define SHA_REG_MASK(dd) ((dd)->pdata->mask_ofs) argument
75 #define SHA_REG_SYSSTATUS(dd) ((dd)->pdata->sysstatus_ofs) argument
144 struct omap_sham_dev *dd; member
170 struct omap_sham_dev *dd; member
195 void (*write_ctrl)(struct omap_sham_dev *dd, size_t length,
197 void (*trigger)(struct omap_sham_dev *dd, size_t length);
198 int (*poll_irq)(struct omap_sham_dev *dd);
245 static inline u32 omap_sham_read(struct omap_sham_dev *dd, u32 offset) in omap_sham_read() argument
247 return __raw_readl(dd->io_base + offset); in omap_sham_read()
250 static inline void omap_sham_write(struct omap_sham_dev *dd, in omap_sham_write() argument
253 __raw_writel(value, dd->io_base + offset); in omap_sham_write()
256 static inline void omap_sham_write_mask(struct omap_sham_dev *dd, u32 address, in omap_sham_write_mask() argument
261 val = omap_sham_read(dd, address); in omap_sham_write_mask()
264 omap_sham_write(dd, address, val); in omap_sham_write_mask()
267 static inline int omap_sham_wait(struct omap_sham_dev *dd, u32 offset, u32 bit) in omap_sham_wait() argument
271 while (!(omap_sham_read(dd, offset) & bit)) { in omap_sham_wait()
282 struct omap_sham_dev *dd = ctx->dd; in omap_sham_copy_hash_omap2() local
286 for (i = 0; i < dd->pdata->digest_size / sizeof(u32); i++) { in omap_sham_copy_hash_omap2()
288 hash[i] = omap_sham_read(dd, SHA_REG_IDIGEST(dd, i)); in omap_sham_copy_hash_omap2()
290 omap_sham_write(dd, SHA_REG_IDIGEST(dd, i), hash[i]); in omap_sham_copy_hash_omap2()
297 struct omap_sham_dev *dd = ctx->dd; in omap_sham_copy_hash_omap4() local
301 struct crypto_ahash *tfm = crypto_ahash_reqtfm(dd->req); in omap_sham_copy_hash_omap4()
306 for (i = 0; i < dd->pdata->digest_size / sizeof(u32); i++) { in omap_sham_copy_hash_omap4()
308 opad[i] = omap_sham_read(dd, in omap_sham_copy_hash_omap4()
311 omap_sham_write(dd, SHA_REG_ODIGEST(i), in omap_sham_copy_hash_omap4()
335 if (test_bit(FLAGS_BE32_SHA1, &ctx->dd->flags)) in omap_sham_copy_ready_hash()
357 static int omap_sham_hw_init(struct omap_sham_dev *dd) in omap_sham_hw_init() argument
359 pm_runtime_get_sync(dd->dev); in omap_sham_hw_init()
361 if (!test_bit(FLAGS_INIT, &dd->flags)) { in omap_sham_hw_init()
362 set_bit(FLAGS_INIT, &dd->flags); in omap_sham_hw_init()
363 dd->err = 0; in omap_sham_hw_init()
369 static void omap_sham_write_ctrl_omap2(struct omap_sham_dev *dd, size_t length, in omap_sham_write_ctrl_omap2() argument
372 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_write_ctrl_omap2()
376 omap_sham_write(dd, SHA_REG_DIGCNT(dd), ctx->digcnt); in omap_sham_write_ctrl_omap2()
378 omap_sham_write_mask(dd, SHA_REG_MASK(dd), in omap_sham_write_ctrl_omap2()
395 omap_sham_write_mask(dd, SHA_REG_CTRL, val, mask); in omap_sham_write_ctrl_omap2()
398 static void omap_sham_trigger_omap2(struct omap_sham_dev *dd, size_t length) in omap_sham_trigger_omap2() argument
402 static int omap_sham_poll_irq_omap2(struct omap_sham_dev *dd) in omap_sham_poll_irq_omap2() argument
404 return omap_sham_wait(dd, SHA_REG_CTRL, SHA_REG_CTRL_INPUT_READY); in omap_sham_poll_irq_omap2()
407 static void omap_sham_write_n(struct omap_sham_dev *dd, u32 offset, in omap_sham_write_n() argument
411 omap_sham_write(dd, offset, *value); in omap_sham_write_n()
414 static void omap_sham_write_ctrl_omap4(struct omap_sham_dev *dd, size_t length, in omap_sham_write_ctrl_omap4() argument
417 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_write_ctrl_omap4()
427 struct crypto_ahash *tfm = crypto_ahash_reqtfm(dd->req); in omap_sham_write_ctrl_omap4()
435 omap_sham_write_n(dd, SHA_REG_ODIGEST(0), in omap_sham_write_ctrl_omap4()
453 dev_dbg(dd->dev, "ctrl: %08x, flags: %08lx\n", val, ctx->flags); in omap_sham_write_ctrl_omap4()
454 omap_sham_write_mask(dd, SHA_REG_MODE, val, mask); in omap_sham_write_ctrl_omap4()
455 omap_sham_write(dd, SHA_REG_IRQENA, SHA_REG_IRQENA_OUTPUT_RDY); in omap_sham_write_ctrl_omap4()
456 omap_sham_write_mask(dd, SHA_REG_MASK(dd), in omap_sham_write_ctrl_omap4()
462 static void omap_sham_trigger_omap4(struct omap_sham_dev *dd, size_t length) in omap_sham_trigger_omap4() argument
464 omap_sham_write(dd, SHA_REG_LENGTH, length); in omap_sham_trigger_omap4()
467 static int omap_sham_poll_irq_omap4(struct omap_sham_dev *dd) in omap_sham_poll_irq_omap4() argument
469 return omap_sham_wait(dd, SHA_REG_IRQSTATUS, in omap_sham_poll_irq_omap4()
473 static int omap_sham_xmit_cpu(struct omap_sham_dev *dd, const u8 *buf, in omap_sham_xmit_cpu() argument
476 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_xmit_cpu()
480 dev_dbg(dd->dev, "xmit_cpu: digcnt: %d, length: %d, final: %d\n", in omap_sham_xmit_cpu()
483 dd->pdata->write_ctrl(dd, length, final, 0); in omap_sham_xmit_cpu()
484 dd->pdata->trigger(dd, length); in omap_sham_xmit_cpu()
489 if (dd->pdata->poll_irq(dd)) in omap_sham_xmit_cpu()
493 set_bit(FLAGS_FINAL, &dd->flags); /* catch last interrupt */ in omap_sham_xmit_cpu()
495 set_bit(FLAGS_CPU, &dd->flags); in omap_sham_xmit_cpu()
500 omap_sham_write(dd, SHA_REG_DIN(dd, count), buffer[count]); in omap_sham_xmit_cpu()
507 struct omap_sham_dev *dd = param; in omap_sham_dma_callback() local
509 set_bit(FLAGS_DMA_READY, &dd->flags); in omap_sham_dma_callback()
510 tasklet_schedule(&dd->done_task); in omap_sham_dma_callback()
513 static int omap_sham_xmit_dma(struct omap_sham_dev *dd, dma_addr_t dma_addr, in omap_sham_xmit_dma() argument
516 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_xmit_dma()
521 dev_dbg(dd->dev, "xmit_dma: digcnt: %d, length: %d, final: %d\n", in omap_sham_xmit_dma()
526 cfg.dst_addr = dd->phys_base + SHA_REG_DIN(dd, 0); in omap_sham_xmit_dma()
530 ret = dmaengine_slave_config(dd->dma_lch, &cfg); in omap_sham_xmit_dma()
551 tx = dmaengine_prep_slave_sg(dd->dma_lch, &ctx->sgl, 1, in omap_sham_xmit_dma()
554 tx = dmaengine_prep_slave_single(dd->dma_lch, dma_addr, len32, in omap_sham_xmit_dma()
559 dev_err(dd->dev, "prep_slave_sg/single() failed\n"); in omap_sham_xmit_dma()
564 tx->callback_param = dd; in omap_sham_xmit_dma()
566 dd->pdata->write_ctrl(dd, length, final, 1); in omap_sham_xmit_dma()
571 set_bit(FLAGS_FINAL, &dd->flags); /* catch last interrupt */ in omap_sham_xmit_dma()
573 set_bit(FLAGS_DMA_ACTIVE, &dd->flags); in omap_sham_xmit_dma()
576 dma_async_issue_pending(dd->dma_lch); in omap_sham_xmit_dma()
578 dd->pdata->trigger(dd, length); in omap_sham_xmit_dma()
621 static int omap_sham_xmit_dma_map(struct omap_sham_dev *dd, in omap_sham_xmit_dma_map() argument
627 ctx->dma_addr = dma_map_single(dd->dev, ctx->buffer, ctx->buflen, in omap_sham_xmit_dma_map()
629 if (dma_mapping_error(dd->dev, ctx->dma_addr)) { in omap_sham_xmit_dma_map()
630 dev_err(dd->dev, "dma %u bytes error\n", ctx->buflen); in omap_sham_xmit_dma_map()
636 ret = omap_sham_xmit_dma(dd, ctx->dma_addr, length, final, 0); in omap_sham_xmit_dma_map()
638 dma_unmap_single(dd->dev, ctx->dma_addr, ctx->buflen, in omap_sham_xmit_dma_map()
644 static int omap_sham_update_dma_slow(struct omap_sham_dev *dd) in omap_sham_update_dma_slow() argument
646 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_slow()
654 dev_dbg(dd->dev, "slow: bufcnt: %u, digcnt: %d, final: %d\n", in omap_sham_update_dma_slow()
660 return omap_sham_xmit_dma_map(dd, ctx, count, final); in omap_sham_update_dma_slow()
671 static int omap_sham_update_dma_start(struct omap_sham_dev *dd) in omap_sham_update_dma_start() argument
673 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_start()
682 return omap_sham_update_dma_slow(dd); in omap_sham_update_dma_start()
691 return omap_sham_update_dma_slow(dd); in omap_sham_update_dma_start()
693 dev_dbg(dd->dev, "fast: digcnt: %d, bufcnt: %u, total: %u\n", in omap_sham_update_dma_start()
699 return omap_sham_update_dma_slow(dd); in omap_sham_update_dma_start()
703 return omap_sham_update_dma_slow(dd); in omap_sham_update_dma_start()
718 if (!dma_map_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE)) { in omap_sham_update_dma_start()
719 dev_err(dd->dev, "dma_map_sg error\n"); in omap_sham_update_dma_start()
730 ret = omap_sham_xmit_dma(dd, sg_dma_address(ctx->sg), length, final, 1); in omap_sham_update_dma_start()
732 dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE); in omap_sham_update_dma_start()
737 static int omap_sham_update_cpu(struct omap_sham_dev *dd) in omap_sham_update_cpu() argument
739 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_cpu()
746 return omap_sham_xmit_cpu(dd, ctx->buffer, bufcnt, 1); in omap_sham_update_cpu()
749 static int omap_sham_update_dma_stop(struct omap_sham_dev *dd) in omap_sham_update_dma_stop() argument
751 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req); in omap_sham_update_dma_stop()
753 dmaengine_terminate_all(dd->dma_lch); in omap_sham_update_dma_stop()
756 dma_unmap_sg(dd->dev, ctx->sg, 1, DMA_TO_DEVICE); in omap_sham_update_dma_stop()
763 dma_unmap_single(dd->dev, ctx->dma_addr, ctx->buflen, in omap_sham_update_dma_stop()
775 struct omap_sham_dev *dd = NULL, *tmp; in omap_sham_init() local
778 if (!tctx->dd) { in omap_sham_init()
780 dd = tmp; in omap_sham_init()
783 tctx->dd = dd; in omap_sham_init()
785 dd = tctx->dd; in omap_sham_init()
789 ctx->dd = dd; in omap_sham_init()
793 dev_dbg(dd->dev, "init: digest size: %d\n", in omap_sham_init()
816 if (!test_bit(FLAGS_AUTO_XOR, &dd->flags)) { in omap_sham_init()
830 static int omap_sham_update_req(struct omap_sham_dev *dd) in omap_sham_update_req() argument
832 struct ahash_request *req = dd->req; in omap_sham_update_req()
836 dev_dbg(dd->dev, "update_req: total: %u, digcnt: %d, finup: %d\n", in omap_sham_update_req()
840 err = omap_sham_update_cpu(dd); in omap_sham_update_req()
842 err = omap_sham_update_dma_start(dd); in omap_sham_update_req()
845 dev_dbg(dd->dev, "update: err: %d, digcnt: %d\n", err, ctx->digcnt); in omap_sham_update_req()
850 static int omap_sham_final_req(struct omap_sham_dev *dd) in omap_sham_final_req() argument
852 struct ahash_request *req = dd->req; in omap_sham_final_req()
861 err = omap_sham_xmit_dma_map(dd, ctx, ctx->bufcnt, 1); in omap_sham_final_req()
863 err = omap_sham_xmit_cpu(dd, ctx->buffer, ctx->bufcnt, 1); in omap_sham_final_req()
867 dev_dbg(dd->dev, "final_req: err: %d\n", err); in omap_sham_final_req()
894 struct omap_sham_dev *dd = ctx->dd; in omap_sham_finish() local
900 !test_bit(FLAGS_AUTO_XOR, &dd->flags)) in omap_sham_finish()
904 dev_dbg(dd->dev, "digcnt: %d, bufcnt: %d\n", ctx->digcnt, ctx->bufcnt); in omap_sham_finish()
912 struct omap_sham_dev *dd = ctx->dd; in omap_sham_finish_req() local
915 dd->pdata->copy_hash(req, 1); in omap_sham_finish_req()
916 if (test_bit(FLAGS_FINAL, &dd->flags)) in omap_sham_finish_req()
923 dd->flags &= ~(BIT(FLAGS_BUSY) | BIT(FLAGS_FINAL) | BIT(FLAGS_CPU) | in omap_sham_finish_req()
926 pm_runtime_put(dd->dev); in omap_sham_finish_req()
932 tasklet_schedule(&dd->done_task); in omap_sham_finish_req()
935 static int omap_sham_handle_queue(struct omap_sham_dev *dd, in omap_sham_handle_queue() argument
943 spin_lock_irqsave(&dd->lock, flags); in omap_sham_handle_queue()
945 ret = ahash_enqueue_request(&dd->queue, req); in omap_sham_handle_queue()
946 if (test_bit(FLAGS_BUSY, &dd->flags)) { in omap_sham_handle_queue()
947 spin_unlock_irqrestore(&dd->lock, flags); in omap_sham_handle_queue()
950 backlog = crypto_get_backlog(&dd->queue); in omap_sham_handle_queue()
951 async_req = crypto_dequeue_request(&dd->queue); in omap_sham_handle_queue()
953 set_bit(FLAGS_BUSY, &dd->flags); in omap_sham_handle_queue()
954 spin_unlock_irqrestore(&dd->lock, flags); in omap_sham_handle_queue()
963 dd->req = req; in omap_sham_handle_queue()
966 dev_dbg(dd->dev, "handling new req, op: %lu, nbytes: %d\n", in omap_sham_handle_queue()
969 err = omap_sham_hw_init(dd); in omap_sham_handle_queue()
975 dd->pdata->copy_hash(req, 0); in omap_sham_handle_queue()
978 err = omap_sham_update_req(dd); in omap_sham_handle_queue()
981 err = omap_sham_final_req(dd); in omap_sham_handle_queue()
983 err = omap_sham_final_req(dd); in omap_sham_handle_queue()
990 dev_dbg(dd->dev, "exit, err: %d\n", err); in omap_sham_handle_queue()
999 struct omap_sham_dev *dd = tctx->dd; in omap_sham_enqueue() local
1003 return omap_sham_handle_queue(dd, req); in omap_sham_enqueue()
1114 struct omap_sham_dev *dd = NULL, *tmp; in omap_sham_setkey() local
1118 if (!tctx->dd) { in omap_sham_setkey()
1120 dd = tmp; in omap_sham_setkey()
1123 tctx->dd = dd; in omap_sham_setkey()
1125 dd = tctx->dd; in omap_sham_setkey()
1146 if (!test_bit(FLAGS_AUTO_XOR, &dd->flags)) { in omap_sham_setkey()
1427 struct omap_sham_dev *dd = (struct omap_sham_dev *)data; in omap_sham_done_task() local
1430 if (!test_bit(FLAGS_BUSY, &dd->flags)) { in omap_sham_done_task()
1431 omap_sham_handle_queue(dd, NULL); in omap_sham_done_task()
1435 if (test_bit(FLAGS_CPU, &dd->flags)) { in omap_sham_done_task()
1436 if (test_and_clear_bit(FLAGS_OUTPUT_READY, &dd->flags)) in omap_sham_done_task()
1438 } else if (test_bit(FLAGS_DMA_READY, &dd->flags)) { in omap_sham_done_task()
1439 if (test_and_clear_bit(FLAGS_DMA_ACTIVE, &dd->flags)) { in omap_sham_done_task()
1440 omap_sham_update_dma_stop(dd); in omap_sham_done_task()
1441 if (dd->err) { in omap_sham_done_task()
1442 err = dd->err; in omap_sham_done_task()
1446 if (test_and_clear_bit(FLAGS_OUTPUT_READY, &dd->flags)) { in omap_sham_done_task()
1448 clear_bit(FLAGS_DMA_READY, &dd->flags); in omap_sham_done_task()
1449 err = omap_sham_update_dma_start(dd); in omap_sham_done_task()
1458 dev_dbg(dd->dev, "update done: err: %d\n", err); in omap_sham_done_task()
1460 omap_sham_finish_req(dd->req, err); in omap_sham_done_task()
1463 static irqreturn_t omap_sham_irq_common(struct omap_sham_dev *dd) in omap_sham_irq_common() argument
1465 if (!test_bit(FLAGS_BUSY, &dd->flags)) { in omap_sham_irq_common()
1466 dev_warn(dd->dev, "Interrupt when no active requests.\n"); in omap_sham_irq_common()
1468 set_bit(FLAGS_OUTPUT_READY, &dd->flags); in omap_sham_irq_common()
1469 tasklet_schedule(&dd->done_task); in omap_sham_irq_common()
1477 struct omap_sham_dev *dd = dev_id; in omap_sham_irq_omap2() local
1479 if (unlikely(test_bit(FLAGS_FINAL, &dd->flags))) in omap_sham_irq_omap2()
1481 omap_sham_write_mask(dd, SHA_REG_CTRL, 0, SHA_REG_CTRL_LENGTH); in omap_sham_irq_omap2()
1483 omap_sham_write_mask(dd, SHA_REG_CTRL, SHA_REG_CTRL_OUTPUT_READY, in omap_sham_irq_omap2()
1485 omap_sham_read(dd, SHA_REG_CTRL); in omap_sham_irq_omap2()
1487 return omap_sham_irq_common(dd); in omap_sham_irq_omap2()
1492 struct omap_sham_dev *dd = dev_id; in omap_sham_irq_omap4() local
1494 omap_sham_write_mask(dd, SHA_REG_MASK(dd), 0, SHA_REG_MASK_IT_EN); in omap_sham_irq_omap4()
1496 return omap_sham_irq_common(dd); in omap_sham_irq_omap4()
1575 static int omap_sham_get_res_of(struct omap_sham_dev *dd, in omap_sham_get_res_of() argument
1596 dd->irq = of_irq_to_resource(node, 0, NULL); in omap_sham_get_res_of()
1597 if (!dd->irq) { in omap_sham_get_res_of()
1603 dd->dma = -1; /* Dummy value that's unused */ in omap_sham_get_res_of()
1604 dd->pdata = match->data; in omap_sham_get_res_of()
1614 static int omap_sham_get_res_of(struct omap_sham_dev *dd, in omap_sham_get_res_of() argument
1621 static int omap_sham_get_res_pdev(struct omap_sham_dev *dd, in omap_sham_get_res_pdev() argument
1638 dd->irq = platform_get_irq(pdev, 0); in omap_sham_get_res_pdev()
1639 if (dd->irq < 0) { in omap_sham_get_res_pdev()
1641 err = dd->irq; in omap_sham_get_res_pdev()
1652 dd->dma = r->start; in omap_sham_get_res_pdev()
1655 dd->pdata = &omap_sham_pdata_omap2; in omap_sham_get_res_pdev()
1663 struct omap_sham_dev *dd; in omap_sham_probe() local
1670 dd = kzalloc(sizeof(struct omap_sham_dev), GFP_KERNEL); in omap_sham_probe()
1671 if (dd == NULL) { in omap_sham_probe()
1676 dd->dev = dev; in omap_sham_probe()
1677 platform_set_drvdata(pdev, dd); in omap_sham_probe()
1679 INIT_LIST_HEAD(&dd->list); in omap_sham_probe()
1680 spin_lock_init(&dd->lock); in omap_sham_probe()
1681 tasklet_init(&dd->done_task, omap_sham_done_task, (unsigned long)dd); in omap_sham_probe()
1682 crypto_init_queue(&dd->queue, OMAP_SHAM_QUEUE_LENGTH); in omap_sham_probe()
1684 err = (dev->of_node) ? omap_sham_get_res_of(dd, dev, &res) : in omap_sham_probe()
1685 omap_sham_get_res_pdev(dd, pdev, &res); in omap_sham_probe()
1689 dd->io_base = devm_request_and_ioremap(dev, &res); in omap_sham_probe()
1690 if (!dd->io_base) { in omap_sham_probe()
1695 dd->phys_base = res.start; in omap_sham_probe()
1697 err = request_irq(dd->irq, dd->pdata->intr_hdlr, IRQF_TRIGGER_LOW, in omap_sham_probe()
1698 dev_name(dev), dd); in omap_sham_probe()
1707 dd->dma_lch = dma_request_slave_channel_compat(mask, omap_dma_filter_fn, in omap_sham_probe()
1708 &dd->dma, dev, "rx"); in omap_sham_probe()
1709 if (!dd->dma_lch) { in omap_sham_probe()
1711 dd->dma); in omap_sham_probe()
1716 dd->flags |= dd->pdata->flags; in omap_sham_probe()
1720 rev = omap_sham_read(dd, SHA_REG_REV(dd)); in omap_sham_probe()
1724 (rev & dd->pdata->major_mask) >> dd->pdata->major_shift, in omap_sham_probe()
1725 (rev & dd->pdata->minor_mask) >> dd->pdata->minor_shift); in omap_sham_probe()
1728 list_add_tail(&dd->list, &sham.dev_list); in omap_sham_probe()
1731 for (i = 0; i < dd->pdata->algs_info_size; i++) { in omap_sham_probe()
1732 for (j = 0; j < dd->pdata->algs_info[i].size; j++) { in omap_sham_probe()
1734 &dd->pdata->algs_info[i].algs_list[j]); in omap_sham_probe()
1738 dd->pdata->algs_info[i].registered++; in omap_sham_probe()
1745 for (i = dd->pdata->algs_info_size - 1; i >= 0; i--) in omap_sham_probe()
1746 for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) in omap_sham_probe()
1748 &dd->pdata->algs_info[i].algs_list[j]); in omap_sham_probe()
1750 dma_release_channel(dd->dma_lch); in omap_sham_probe()
1752 free_irq(dd->irq, dd); in omap_sham_probe()
1754 kfree(dd); in omap_sham_probe()
1755 dd = NULL; in omap_sham_probe()
1764 static struct omap_sham_dev *dd; in omap_sham_remove() local
1767 dd = platform_get_drvdata(pdev); in omap_sham_remove()
1768 if (!dd) in omap_sham_remove()
1771 list_del(&dd->list); in omap_sham_remove()
1773 for (i = dd->pdata->algs_info_size - 1; i >= 0; i--) in omap_sham_remove()
1774 for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--) in omap_sham_remove()
1776 &dd->pdata->algs_info[i].algs_list[j]); in omap_sham_remove()
1777 tasklet_kill(&dd->done_task); in omap_sham_remove()
1779 dma_release_channel(dd->dma_lch); in omap_sham_remove()
1780 free_irq(dd->irq, dd); in omap_sham_remove()
1781 kfree(dd); in omap_sham_remove()
1782 dd = NULL; in omap_sham_remove()