Commit | Line | Data |
---|---|---|
93f1c150 EB |
1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* | |
3 | * MMC crypto engine (inline encryption) support | |
4 | * | |
5 | * Copyright 2020 Google LLC | |
6 | */ | |
7 | ||
8 | #include <linux/blk-crypto.h> | |
9 | #include <linux/mmc/host.h> | |
10 | ||
11 | #include "core.h" | |
12 | #include "crypto.h" | |
13 | #include "queue.h" | |
14 | ||
15 | void mmc_crypto_set_initial_state(struct mmc_host *host) | |
16 | { | |
17 | /* Reset might clear all keys, so reprogram all the keys. */ | |
18 | if (host->caps2 & MMC_CAP2_CRYPTO) | |
cb77cb5a | 19 | blk_crypto_reprogram_all_keys(&host->crypto_profile); |
93f1c150 EB |
20 | } |
21 | ||
22 | void mmc_crypto_setup_queue(struct request_queue *q, struct mmc_host *host) | |
23 | { | |
24 | if (host->caps2 & MMC_CAP2_CRYPTO) | |
cb77cb5a | 25 | blk_crypto_register(&host->crypto_profile, q); |
93f1c150 EB |
26 | } |
27 | EXPORT_SYMBOL_GPL(mmc_crypto_setup_queue); | |
28 | ||
29 | void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq) | |
30 | { | |
31 | struct request *req = mmc_queue_req_to_req(mqrq); | |
32 | struct mmc_request *mrq = &mqrq->brq.mrq; | |
cb77cb5a | 33 | struct blk_crypto_keyslot *keyslot; |
93f1c150 | 34 | |
86c639ce | 35 | if (!req->crypt_ctx) |
93f1c150 EB |
36 | return; |
37 | ||
86c639ce | 38 | mrq->crypto_ctx = req->crypt_ctx; |
cb77cb5a EB |
39 | |
40 | keyslot = req->crypt_keyslot; | |
41 | if (keyslot) | |
42 | mrq->crypto_key_slot = blk_crypto_keyslot_index(keyslot); | |
93f1c150 EB |
43 | } |
44 | EXPORT_SYMBOL_GPL(mmc_crypto_prepare_req); |