Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Cadence MHDP8546 DP bridge driver.
0004  *
0005  * Copyright (C) 2020 Cadence Design Systems, Inc.
0006  *
0007  */
0008 
0009 #ifndef CDNS_MHDP8546_HDCP_H
0010 #define CDNS_MHDP8546_HDCP_H
0011 
0012 #include "cdns-mhdp8546-core.h"
0013 
0014 #define HDCP_MAX_RECEIVERS 32
0015 #define HDCP_RECEIVER_ID_SIZE_BYTES 5
0016 #define HDCP_STATUS_SIZE         0x5
0017 #define HDCP_PORT_STS_AUTH       0x1
0018 #define HDCP_PORT_STS_LAST_ERR_SHIFT 0x5
0019 #define HDCP_PORT_STS_LAST_ERR_MASK  (0x0F << 5)
0020 #define GET_HDCP_PORT_STS_LAST_ERR(__sts__) \
0021     (((__sts__) & HDCP_PORT_STS_LAST_ERR_MASK) >> \
0022     HDCP_PORT_STS_LAST_ERR_SHIFT)
0023 
0024 #define HDCP_CONFIG_1_4     BIT(0) /* use HDCP 1.4 only */
0025 #define HDCP_CONFIG_2_2     BIT(1) /* use HDCP 2.2 only */
0026 /* use All HDCP versions */
0027 #define HDCP_CONFIG_ALL     (BIT(0) | BIT(1))
0028 #define HDCP_CONFIG_NONE    0
0029 
0030 enum {
0031     HDCP_GENERAL_SET_LC_128,
0032     HDCP_SET_SEED,
0033 };
0034 
0035 enum {
0036     HDCP_TRAN_CONFIGURATION,
0037     HDCP2X_TX_SET_PUBLIC_KEY_PARAMS,
0038     HDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS,
0039     HDCP2X_TX_RESPOND_KM,
0040     HDCP1_TX_SEND_KEYS,
0041     HDCP1_TX_SEND_RANDOM_AN,
0042     HDCP_TRAN_STATUS_CHANGE,
0043     HDCP2X_TX_IS_KM_STORED,
0044     HDCP2X_TX_STORE_KM,
0045     HDCP_TRAN_IS_REC_ID_VALID,
0046     HDCP_TRAN_RESPOND_RECEIVER_ID_VALID,
0047     HDCP_TRAN_TEST_KEYS,
0048     HDCP2X_TX_SET_KM_KEY_PARAMS,
0049     HDCP_NUM_OF_SUPPORTED_MESSAGES
0050 };
0051 
0052 enum {
0053     HDCP_CONTENT_TYPE_0,
0054     HDCP_CONTENT_TYPE_1,
0055 };
0056 
0057 #define DRM_HDCP_CHECK_PERIOD_MS (128 * 16)
0058 
0059 #define HDCP_PAIRING_R_ID 5
0060 #define HDCP_PAIRING_M_LEN 16
0061 #define HDCP_KM_LEN 16
0062 #define HDCP_PAIRING_M_EKH 16
0063 
0064 struct cdns_hdcp_pairing_data {
0065     u8 receiver_id[HDCP_PAIRING_R_ID];
0066     u8 m[HDCP_PAIRING_M_LEN];
0067     u8 km[HDCP_KM_LEN];
0068     u8 ekh[HDCP_PAIRING_M_EKH];
0069 };
0070 
0071 enum {
0072     HDCP_TX_2,
0073     HDCP_TX_1,
0074     HDCP_TX_BOTH,
0075 };
0076 
0077 #define DLP_MODULUS_N 384
0078 #define DLP_E 3
0079 
0080 struct cdns_hdcp_tx_public_key_param {
0081     u8 N[DLP_MODULUS_N];
0082     u8 E[DLP_E];
0083 };
0084 
0085 int cdns_mhdp_hdcp_set_public_key_param(struct cdns_mhdp_device *mhdp,
0086                     struct cdns_hdcp_tx_public_key_param *val);
0087 int cdns_mhdp_hdcp_set_lc(struct cdns_mhdp_device *mhdp, u8 *val);
0088 int cdns_mhdp_hdcp_enable(struct cdns_mhdp_device *mhdp, u8 content_type);
0089 int cdns_mhdp_hdcp_disable(struct cdns_mhdp_device *mhdp);
0090 void cdns_mhdp_hdcp_init(struct cdns_mhdp_device *mhdp);
0091 
0092 #endif