cdns-mhdp8546-hdcp.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Cadence MHDP8546 DP bridge driver.
  4. *
  5. * Copyright (C) 2020 Cadence Design Systems, Inc.
  6. *
  7. */
  8. #ifndef CDNS_MHDP8546_HDCP_H
  9. #define CDNS_MHDP8546_HDCP_H
  10. #include "cdns-mhdp8546-core.h"
  11. #define HDCP_MAX_RECEIVERS 32
  12. #define HDCP_RECEIVER_ID_SIZE_BYTES 5
  13. #define HDCP_STATUS_SIZE 0x5
  14. #define HDCP_PORT_STS_AUTH 0x1
  15. #define HDCP_PORT_STS_LAST_ERR_SHIFT 0x5
  16. #define HDCP_PORT_STS_LAST_ERR_MASK (0x0F << 5)
  17. #define GET_HDCP_PORT_STS_LAST_ERR(__sts__) \
  18. (((__sts__) & HDCP_PORT_STS_LAST_ERR_MASK) >> \
  19. HDCP_PORT_STS_LAST_ERR_SHIFT)
  20. #define HDCP_CONFIG_1_4 BIT(0) /* use HDCP 1.4 only */
  21. #define HDCP_CONFIG_2_2 BIT(1) /* use HDCP 2.2 only */
  22. /* use All HDCP versions */
  23. #define HDCP_CONFIG_ALL (BIT(0) | BIT(1))
  24. #define HDCP_CONFIG_NONE 0
  25. enum {
  26. HDCP_GENERAL_SET_LC_128,
  27. HDCP_SET_SEED,
  28. };
  29. enum {
  30. HDCP_TRAN_CONFIGURATION,
  31. HDCP2X_TX_SET_PUBLIC_KEY_PARAMS,
  32. HDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS,
  33. HDCP2X_TX_RESPOND_KM,
  34. HDCP1_TX_SEND_KEYS,
  35. HDCP1_TX_SEND_RANDOM_AN,
  36. HDCP_TRAN_STATUS_CHANGE,
  37. HDCP2X_TX_IS_KM_STORED,
  38. HDCP2X_TX_STORE_KM,
  39. HDCP_TRAN_IS_REC_ID_VALID,
  40. HDCP_TRAN_RESPOND_RECEIVER_ID_VALID,
  41. HDCP_TRAN_TEST_KEYS,
  42. HDCP2X_TX_SET_KM_KEY_PARAMS,
  43. HDCP_NUM_OF_SUPPORTED_MESSAGES
  44. };
  45. enum {
  46. HDCP_CONTENT_TYPE_0,
  47. HDCP_CONTENT_TYPE_1,
  48. };
  49. #define DRM_HDCP_CHECK_PERIOD_MS (128 * 16)
  50. #define HDCP_PAIRING_R_ID 5
  51. #define HDCP_PAIRING_M_LEN 16
  52. #define HDCP_KM_LEN 16
  53. #define HDCP_PAIRING_M_EKH 16
  54. struct cdns_hdcp_pairing_data {
  55. u8 receiver_id[HDCP_PAIRING_R_ID];
  56. u8 m[HDCP_PAIRING_M_LEN];
  57. u8 km[HDCP_KM_LEN];
  58. u8 ekh[HDCP_PAIRING_M_EKH];
  59. };
  60. enum {
  61. HDCP_TX_2,
  62. HDCP_TX_1,
  63. HDCP_TX_BOTH,
  64. };
  65. #define DLP_MODULUS_N 384
  66. #define DLP_E 3
  67. struct cdns_hdcp_tx_public_key_param {
  68. u8 N[DLP_MODULUS_N];
  69. u8 E[DLP_E];
  70. };
  71. int cdns_mhdp_hdcp_set_public_key_param(struct cdns_mhdp_device *mhdp,
  72. struct cdns_hdcp_tx_public_key_param *val);
  73. int cdns_mhdp_hdcp_set_lc(struct cdns_mhdp_device *mhdp, u8 *val);
  74. int cdns_mhdp_hdcp_enable(struct cdns_mhdp_device *mhdp, u8 content_type);
  75. int cdns_mhdp_hdcp_disable(struct cdns_mhdp_device *mhdp);
  76. void cdns_mhdp_hdcp_init(struct cdns_mhdp_device *mhdp);
  77. #endif