Merge branch 'for-5.15/logitech' into for-linus
[linux-2.6-microblaze.git] / drivers / scsi / ufs / ufshcd-crypto.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright 2019 Google LLC
4  */
5
6 #ifndef _UFSHCD_CRYPTO_H
7 #define _UFSHCD_CRYPTO_H
8
9 #ifdef CONFIG_SCSI_UFS_CRYPTO
10 #include "ufshcd.h"
11 #include "ufshci.h"
12
13 static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
14                                               struct ufshcd_lrb *lrbp)
15 {
16         if (!rq || !rq->crypt_keyslot) {
17                 lrbp->crypto_key_slot = -1;
18                 return;
19         }
20
21         lrbp->crypto_key_slot = blk_ksm_get_slot_idx(rq->crypt_keyslot);
22         lrbp->data_unit_num = rq->crypt_ctx->bc_dun[0];
23 }
24
25 static inline void
26 ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
27                                    u32 *dword_1, u32 *dword_3)
28 {
29         if (lrbp->crypto_key_slot >= 0) {
30                 *dword_0 |= UTP_REQ_DESC_CRYPTO_ENABLE_CMD;
31                 *dword_0 |= lrbp->crypto_key_slot;
32                 *dword_1 = lower_32_bits(lrbp->data_unit_num);
33                 *dword_3 = upper_32_bits(lrbp->data_unit_num);
34         }
35 }
36
37 bool ufshcd_crypto_enable(struct ufs_hba *hba);
38
39 int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba);
40
41 void ufshcd_init_crypto(struct ufs_hba *hba);
42
43 void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
44                                             struct request_queue *q);
45
46 #else /* CONFIG_SCSI_UFS_CRYPTO */
47
48 static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
49                                               struct ufshcd_lrb *lrbp) { }
50
51 static inline void
52 ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
53                                    u32 *dword_1, u32 *dword_3) { }
54
55 static inline bool ufshcd_crypto_enable(struct ufs_hba *hba)
56 {
57         return false;
58 }
59
60 static inline int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
61 {
62         return 0;
63 }
64
65 static inline void ufshcd_init_crypto(struct ufs_hba *hba) { }
66
67 static inline void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
68                                                 struct request_queue *q) { }
69
70 #endif /* CONFIG_SCSI_UFS_CRYPTO */
71
72 #endif /* _UFSHCD_CRYPTO_H */