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