コード例 #1
0
int fmpfw_hash_final(struct fmp_info *info, struct hash_data *hdata, void *output)
{
	int ret = 0;
	unsigned long addr;
	struct device *dev = info->dev;
	struct hmac_sha256_fmpfw_info *fmpfw_info = hdata->fmpfw_info;

	memset(output, 0, hdata->digestsize);
	fmpfw_info->s.step = FINAL;
	fmpfw_info->s.output = (uint32_t)virt_to_phys(output);
	__flush_dcache_area(fmpfw_info, sizeof(*fmpfw_info));
	addr = virt_to_phys(fmpfw_info);

	reinit_completion(&hdata->async.result->completion);
	__dma_unmap_area((void *)output, hdata->digestsize, DMA_FROM_DEVICE);
	if (fmpfw_info->hmac_mode) {
		ret = exynos_smc(SMC_CMD_FMP, FMP_FW_HMAC_SHA2_TEST, addr, 0);
		if (unlikely(ret)) {
			dev_err(dev, "Fail to smc call for FMPFW HMAC SHA256 final. ret = 0x%x\n", ret);
			ret = -EFAULT;
		}
	} else {
		ret = exynos_smc(SMC_CMD_FMP, FMP_FW_SHA2_TEST, addr, 0);
		if (unlikely(ret)) {
			dev_err(dev, "Fail to smc call for FMPFW SHA256 final. ret = 0x%x\n", ret);
			ret = -EFAULT;
		}
	}
	__dma_unmap_area((void *)output, hdata->digestsize, DMA_FROM_DEVICE);

	if (fmpfw_info->hmac_mode)
		dev_info(dev, "fmp fw hmac sha256 F/W final is done\n");
	else
		dev_info(dev, "fmp fw sha256 F/W final is done\n");

	kfree(fmpfw_info);
	return waitfor(info, hdata->async.result, ret);
}
コード例 #2
0
ファイル: dma-mapping.c プロジェクト: bristot/linux
void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
		size_t size, enum dma_data_direction dir)
{
	__dma_unmap_area(phys_to_virt(paddr), size, dir);
}