crypto-qti-common.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef _CRYPTO_QTI_COMMON_H
  6. #define _CRYPTO_QTI_COMMON_H
  7. #include <linux/blk-crypto.h>
  8. #include <linux/errno.h>
  9. #include <linux/types.h>
  10. #include <linux/device.h>
  11. #include <linux/delay.h>
  12. #define RAW_SECRET_SIZE 32
  13. #define QTI_ICE_MAX_BIST_CHECK_COUNT 100
  14. #define QTI_ICE_TYPE_NAME_LEN 8
  15. /* Storage types for crypto */
  16. #define UFS_CE 10
  17. #define SDCC_CE 20
  18. struct ice_mmio_data {
  19. void __iomem *ice_base_mmio;
  20. #if (IS_ENABLED(CONFIG_QTI_HW_KEY_MANAGER) || IS_ENABLED(CONFIG_QTI_HW_KEY_MANAGER_V1))
  21. void __iomem *ice_hwkm_mmio;
  22. #endif
  23. #if IS_ENABLED(CONFIG_QTI_HW_KEY_MANAGER_V1)
  24. struct device *dev;
  25. void __iomem *km_base;
  26. struct resource *km_res;
  27. struct list_head clk_list_head;
  28. bool is_hwkm_clk_available;
  29. bool is_hwkm_enabled;
  30. #endif
  31. };
  32. #if IS_ENABLED(CONFIG_QTI_CRYPTO_COMMON)
  33. int crypto_qti_init_crypto(void *mmio_data);
  34. int crypto_qti_enable(void *mmio_data);
  35. void crypto_qti_disable(void);
  36. int crypto_qti_debug(const struct ice_mmio_data *mmio_data);
  37. int crypto_qti_keyslot_program(const struct ice_mmio_data *mmio_data,
  38. const struct blk_crypto_key *key,
  39. unsigned int slot, u8 data_unit_mask,
  40. int capid, int storage_type);
  41. int crypto_qti_keyslot_evict(const struct ice_mmio_data *mmio_data,
  42. unsigned int slot, int storage_type);
  43. int crypto_qti_derive_raw_secret(const struct ice_mmio_data *mmio_data, const u8 *wrapped_key,
  44. unsigned int wrapped_key_size, u8 *secret,
  45. unsigned int secret_size);
  46. #else
  47. static inline int crypto_qti_init_crypto(void *mmio_data)
  48. {
  49. return -EOPNOTSUPP;
  50. }
  51. static inline int crypto_qti_enable(void *mmio_data)
  52. {
  53. return -EOPNOTSUPP;
  54. }
  55. static inline void crypto_qti_disable(void)
  56. {}
  57. static inline int crypto_qti_debug(const struct ice_mmio_data *mmio_data)
  58. {
  59. return -EOPNOTSUPP;
  60. }
  61. static inline int crypto_qti_keyslot_program(const struct ice_mmio_data *mmio_data,
  62. const struct blk_crypto_key *key,
  63. unsigned int slot,
  64. u8 data_unit_mask,
  65. int capid, int storage_type)
  66. {
  67. return -EOPNOTSUPP;
  68. }
  69. static inline int crypto_qti_keyslot_evict(const struct ice_mmio_data *mmio_data,
  70. unsigned int slot, int storage_type)
  71. {
  72. return -EOPNOTSUPP;
  73. }
  74. static inline int crypto_qti_derive_raw_secret(const struct ice_mmio_data *mmio_data,
  75. const u8 *wrapped_key,
  76. unsigned int wrapped_key_size,
  77. u8 *secret,
  78. unsigned int secret_size)
  79. {
  80. return -EOPNOTSUPP;
  81. }
  82. #endif /* CONFIG_QTI_CRYPTO_COMMON */
  83. #endif /* _CRYPTO_QTI_COMMON_H */