From 95099d4622f8cb224d94e314c7a8e0df60b13f87 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 09 Dec 2023 08:38:01 +0000
Subject: [PATCH] enable docker ppp
---
kernel/drivers/scsi/ufs/ufshcd-crypto.h | 177 +++++++++++++++--------------------------------------------
1 files changed, 45 insertions(+), 132 deletions(-)
diff --git a/kernel/drivers/scsi/ufs/ufshcd-crypto.h b/kernel/drivers/scsi/ufs/ufshcd-crypto.h
index f223a06..83b0e50 100644
--- a/kernel/drivers/scsi/ufs/ufshcd-crypto.h
+++ b/kernel/drivers/scsi/ufs/ufshcd-crypto.h
@@ -7,168 +7,81 @@
#define _UFSHCD_CRYPTO_H
#ifdef CONFIG_SCSI_UFS_CRYPTO
-#include <linux/keyslot-manager.h>
#include "ufshcd.h"
#include "ufshci.h"
-static inline int ufshcd_num_keyslots(struct ufs_hba *hba)
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+ struct ufshcd_lrb *lrbp)
{
- return hba->crypto_capabilities.config_count + 1;
+ if (!rq || !rq->crypt_keyslot) {
+ lrbp->crypto_key_slot = -1;
+ return;
+ }
+
+ lrbp->crypto_key_slot = blk_ksm_get_slot_idx(rq->crypt_keyslot);
+ lrbp->data_unit_num = rq->crypt_ctx->bc_dun[0];
}
-static inline bool ufshcd_keyslot_valid(struct ufs_hba *hba, unsigned int slot)
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+ u32 *dword_1, u32 *dword_3)
{
- /*
- * The actual number of configurations supported is (CFGC+1), so slot
- * numbers range from 0 to config_count inclusive.
- */
- return slot < ufshcd_num_keyslots(hba);
+ if (lrbp->crypto_key_slot >= 0) {
+ *dword_0 |= UTP_REQ_DESC_CRYPTO_ENABLE_CMD;
+ *dword_0 |= lrbp->crypto_key_slot;
+ *dword_1 = lower_32_bits(lrbp->data_unit_num);
+ *dword_3 = upper_32_bits(lrbp->data_unit_num);
+ }
}
-static inline bool ufshcd_hba_is_crypto_supported(struct ufs_hba *hba)
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+ struct ufshcd_lrb *lrbp)
{
- return hba->crypto_capabilities.reg_val != 0;
+ if (!(hba->quirks & UFSHCD_QUIRK_KEYS_IN_PRDT))
+ return;
+
+ if (!lrbp->cmd->request->crypt_ctx)
+ return;
+
+ memzero_explicit(lrbp->ucd_prdt_ptr,
+ hba->sg_entry_size * scsi_sg_count(lrbp->cmd));
}
-static inline bool ufshcd_is_crypto_enabled(struct ufs_hba *hba)
-{
- return hba->caps & UFSHCD_CAP_CRYPTO;
-}
+bool ufshcd_crypto_enable(struct ufs_hba *hba);
-/* Functions implementing UFSHCI v2.1 specification behaviour */
-int ufshcd_crypto_cap_find(struct ufs_hba *hba,
- enum blk_crypto_mode_num crypto_mode,
- unsigned int data_unit_size);
+int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba);
-int ufshcd_prepare_lrbp_crypto_spec(struct ufs_hba *hba,
- struct scsi_cmnd *cmd,
- struct ufshcd_lrb *lrbp);
-
-void ufshcd_crypto_enable_spec(struct ufs_hba *hba);
-
-void ufshcd_crypto_disable_spec(struct ufs_hba *hba);
-
-struct keyslot_mgmt_ll_ops;
-int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba,
- const struct keyslot_mgmt_ll_ops *ksm_ops);
-
-void ufshcd_crypto_setup_rq_keyslot_manager_spec(struct ufs_hba *hba,
- struct request_queue *q);
-
-void ufshcd_crypto_destroy_rq_keyslot_manager_spec(struct ufs_hba *hba,
- struct request_queue *q);
-
-static inline bool ufshcd_lrbp_crypto_enabled(struct ufshcd_lrb *lrbp)
-{
- return lrbp->crypto_enable;
-}
-
-/* Crypto Variant Ops Support */
-void ufshcd_crypto_enable(struct ufs_hba *hba);
-
-void ufshcd_crypto_disable(struct ufs_hba *hba);
-
-int ufshcd_hba_init_crypto(struct ufs_hba *hba);
+void ufshcd_init_crypto(struct ufs_hba *hba);
void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
struct request_queue *q);
-void ufshcd_crypto_destroy_rq_keyslot_manager(struct ufs_hba *hba,
- struct request_queue *q);
-
-int ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba,
- struct scsi_cmnd *cmd,
- struct ufshcd_lrb *lrbp);
-
-int ufshcd_map_sg_crypto(struct ufs_hba *hba, struct ufshcd_lrb *lrbp);
-
-int ufshcd_complete_lrbp_crypto(struct ufs_hba *hba,
- struct scsi_cmnd *cmd,
- struct ufshcd_lrb *lrbp);
-
-void ufshcd_crypto_debug(struct ufs_hba *hba);
-
-int ufshcd_crypto_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op);
-
-int ufshcd_crypto_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op);
-
-void ufshcd_crypto_set_vops(struct ufs_hba *hba,
- struct ufs_hba_crypto_variant_ops *crypto_vops);
-
#else /* CONFIG_SCSI_UFS_CRYPTO */
-static inline bool ufshcd_keyslot_valid(struct ufs_hba *hba,
- unsigned int slot)
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+ struct ufshcd_lrb *lrbp) { }
+
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+ u32 *dword_1, u32 *dword_3) { }
+
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+ struct ufshcd_lrb *lrbp) { }
+
+static inline bool ufshcd_crypto_enable(struct ufs_hba *hba)
{
return false;
}
-static inline bool ufshcd_hba_is_crypto_supported(struct ufs_hba *hba)
-{
- return false;
-}
-
-static inline bool ufshcd_is_crypto_enabled(struct ufs_hba *hba)
-{
- return false;
-}
-
-static inline void ufshcd_crypto_enable(struct ufs_hba *hba) { }
-
-static inline void ufshcd_crypto_disable(struct ufs_hba *hba) { }
-
-static inline int ufshcd_hba_init_crypto(struct ufs_hba *hba)
+static inline int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
{
return 0;
}
+
+static inline void ufshcd_init_crypto(struct ufs_hba *hba) { }
static inline void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
struct request_queue *q) { }
-
-static inline void ufshcd_crypto_destroy_rq_keyslot_manager(struct ufs_hba *hba,
- struct request_queue *q) { }
-
-static inline int ufshcd_prepare_lrbp_crypto(struct ufs_hba *hba,
- struct scsi_cmnd *cmd,
- struct ufshcd_lrb *lrbp)
-{
- return 0;
-}
-
-static inline int ufshcd_map_sg_crypto(struct ufs_hba *hba,
- struct ufshcd_lrb *lrbp)
-{
- return 0;
-}
-
-static inline bool ufshcd_lrbp_crypto_enabled(struct ufshcd_lrb *lrbp)
-{
- return false;
-}
-
-static inline int ufshcd_complete_lrbp_crypto(struct ufs_hba *hba,
- struct scsi_cmnd *cmd,
- struct ufshcd_lrb *lrbp)
-{
- return 0;
-}
-
-static inline void ufshcd_crypto_debug(struct ufs_hba *hba) { }
-
-static inline int ufshcd_crypto_suspend(struct ufs_hba *hba,
- enum ufs_pm_op pm_op)
-{
- return 0;
-}
-
-static inline int ufshcd_crypto_resume(struct ufs_hba *hba,
- enum ufs_pm_op pm_op)
-{
- return 0;
-}
-
-static inline void ufshcd_crypto_set_vops(struct ufs_hba *hba,
- struct ufs_hba_crypto_variant_ops *crypto_vops) { }
#endif /* CONFIG_SCSI_UFS_CRYPTO */
--
Gitblit v1.6.2