13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
23d0407baSopenharmony_ci/*
33d0407baSopenharmony_ci * CQHCI crypto engine (inline encryption) support
43d0407baSopenharmony_ci *
53d0407baSopenharmony_ci * Copyright 2020 Google LLC
63d0407baSopenharmony_ci */
73d0407baSopenharmony_ci
83d0407baSopenharmony_ci#ifndef LINUX_MMC_CQHCI_CRYPTO_H
93d0407baSopenharmony_ci#define LINUX_MMC_CQHCI_CRYPTO_H
103d0407baSopenharmony_ci
113d0407baSopenharmony_ci#include <linux/mmc/host.h>
123d0407baSopenharmony_ci
133d0407baSopenharmony_ci#include "cqhci.h"
143d0407baSopenharmony_ci
153d0407baSopenharmony_ci#ifdef CONFIG_MMC_CRYPTO
163d0407baSopenharmony_ci
173d0407baSopenharmony_ciint cqhci_crypto_init(struct cqhci_host *host);
183d0407baSopenharmony_ci
193d0407baSopenharmony_ci/*
203d0407baSopenharmony_ci * Returns the crypto bits that should be set in bits 64-127 of the
213d0407baSopenharmony_ci * task descriptor.
223d0407baSopenharmony_ci */
233d0407baSopenharmony_cistatic inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
243d0407baSopenharmony_ci{
253d0407baSopenharmony_ci	if (!mrq->crypto_ctx)
263d0407baSopenharmony_ci		return 0;
273d0407baSopenharmony_ci
283d0407baSopenharmony_ci	/* We set max_dun_bytes_supported=4, so all DUNs should be 32-bit. */
293d0407baSopenharmony_ci	WARN_ON_ONCE(mrq->crypto_ctx->bc_dun[0] > U32_MAX);
303d0407baSopenharmony_ci
313d0407baSopenharmony_ci	return CQHCI_CRYPTO_ENABLE_BIT |
323d0407baSopenharmony_ci	       CQHCI_CRYPTO_KEYSLOT(mrq->crypto_key_slot) |
333d0407baSopenharmony_ci	       mrq->crypto_ctx->bc_dun[0];
343d0407baSopenharmony_ci}
353d0407baSopenharmony_ci
363d0407baSopenharmony_ci#else /* CONFIG_MMC_CRYPTO */
373d0407baSopenharmony_ci
383d0407baSopenharmony_cistatic inline int cqhci_crypto_init(struct cqhci_host *host)
393d0407baSopenharmony_ci{
403d0407baSopenharmony_ci	return 0;
413d0407baSopenharmony_ci}
423d0407baSopenharmony_ci
433d0407baSopenharmony_cistatic inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
443d0407baSopenharmony_ci{
453d0407baSopenharmony_ci	return 0;
463d0407baSopenharmony_ci}
473d0407baSopenharmony_ci
483d0407baSopenharmony_ci#endif /* !CONFIG_MMC_CRYPTO */
493d0407baSopenharmony_ci
503d0407baSopenharmony_ci#endif /* LINUX_MMC_CQHCI_CRYPTO_H */
51