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