162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Cadence MHDP8546 DP bridge driver. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2020 Cadence Design Systems, Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef CDNS_MHDP8546_HDCP_H 1062306a36Sopenharmony_ci#define CDNS_MHDP8546_HDCP_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "cdns-mhdp8546-core.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define HDCP_MAX_RECEIVERS 32 1562306a36Sopenharmony_ci#define HDCP_RECEIVER_ID_SIZE_BYTES 5 1662306a36Sopenharmony_ci#define HDCP_STATUS_SIZE 0x5 1762306a36Sopenharmony_ci#define HDCP_PORT_STS_AUTH 0x1 1862306a36Sopenharmony_ci#define HDCP_PORT_STS_LAST_ERR_SHIFT 0x5 1962306a36Sopenharmony_ci#define HDCP_PORT_STS_LAST_ERR_MASK (0x0F << 5) 2062306a36Sopenharmony_ci#define GET_HDCP_PORT_STS_LAST_ERR(__sts__) \ 2162306a36Sopenharmony_ci (((__sts__) & HDCP_PORT_STS_LAST_ERR_MASK) >> \ 2262306a36Sopenharmony_ci HDCP_PORT_STS_LAST_ERR_SHIFT) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define HDCP_CONFIG_1_4 BIT(0) /* use HDCP 1.4 only */ 2562306a36Sopenharmony_ci#define HDCP_CONFIG_2_2 BIT(1) /* use HDCP 2.2 only */ 2662306a36Sopenharmony_ci/* use All HDCP versions */ 2762306a36Sopenharmony_ci#define HDCP_CONFIG_ALL (BIT(0) | BIT(1)) 2862306a36Sopenharmony_ci#define HDCP_CONFIG_NONE 0 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cienum { 3162306a36Sopenharmony_ci HDCP_GENERAL_SET_LC_128, 3262306a36Sopenharmony_ci HDCP_SET_SEED, 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cienum { 3662306a36Sopenharmony_ci HDCP_TRAN_CONFIGURATION, 3762306a36Sopenharmony_ci HDCP2X_TX_SET_PUBLIC_KEY_PARAMS, 3862306a36Sopenharmony_ci HDCP2X_TX_SET_DEBUG_RANDOM_NUMBERS, 3962306a36Sopenharmony_ci HDCP2X_TX_RESPOND_KM, 4062306a36Sopenharmony_ci HDCP1_TX_SEND_KEYS, 4162306a36Sopenharmony_ci HDCP1_TX_SEND_RANDOM_AN, 4262306a36Sopenharmony_ci HDCP_TRAN_STATUS_CHANGE, 4362306a36Sopenharmony_ci HDCP2X_TX_IS_KM_STORED, 4462306a36Sopenharmony_ci HDCP2X_TX_STORE_KM, 4562306a36Sopenharmony_ci HDCP_TRAN_IS_REC_ID_VALID, 4662306a36Sopenharmony_ci HDCP_TRAN_RESPOND_RECEIVER_ID_VALID, 4762306a36Sopenharmony_ci HDCP_TRAN_TEST_KEYS, 4862306a36Sopenharmony_ci HDCP2X_TX_SET_KM_KEY_PARAMS, 4962306a36Sopenharmony_ci HDCP_NUM_OF_SUPPORTED_MESSAGES 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cienum { 5362306a36Sopenharmony_ci HDCP_CONTENT_TYPE_0, 5462306a36Sopenharmony_ci HDCP_CONTENT_TYPE_1, 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define DRM_HDCP_CHECK_PERIOD_MS (128 * 16) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define HDCP_PAIRING_R_ID 5 6062306a36Sopenharmony_ci#define HDCP_PAIRING_M_LEN 16 6162306a36Sopenharmony_ci#define HDCP_KM_LEN 16 6262306a36Sopenharmony_ci#define HDCP_PAIRING_M_EKH 16 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct cdns_hdcp_pairing_data { 6562306a36Sopenharmony_ci u8 receiver_id[HDCP_PAIRING_R_ID]; 6662306a36Sopenharmony_ci u8 m[HDCP_PAIRING_M_LEN]; 6762306a36Sopenharmony_ci u8 km[HDCP_KM_LEN]; 6862306a36Sopenharmony_ci u8 ekh[HDCP_PAIRING_M_EKH]; 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cienum { 7262306a36Sopenharmony_ci HDCP_TX_2, 7362306a36Sopenharmony_ci HDCP_TX_1, 7462306a36Sopenharmony_ci HDCP_TX_BOTH, 7562306a36Sopenharmony_ci}; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#define DLP_MODULUS_N 384 7862306a36Sopenharmony_ci#define DLP_E 3 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cistruct cdns_hdcp_tx_public_key_param { 8162306a36Sopenharmony_ci u8 N[DLP_MODULUS_N]; 8262306a36Sopenharmony_ci u8 E[DLP_E]; 8362306a36Sopenharmony_ci}; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciint cdns_mhdp_hdcp_set_public_key_param(struct cdns_mhdp_device *mhdp, 8662306a36Sopenharmony_ci struct cdns_hdcp_tx_public_key_param *val); 8762306a36Sopenharmony_ciint cdns_mhdp_hdcp_set_lc(struct cdns_mhdp_device *mhdp, u8 *val); 8862306a36Sopenharmony_ciint cdns_mhdp_hdcp_enable(struct cdns_mhdp_device *mhdp, u8 content_type); 8962306a36Sopenharmony_ciint cdns_mhdp_hdcp_disable(struct cdns_mhdp_device *mhdp); 9062306a36Sopenharmony_civoid cdns_mhdp_hdcp_init(struct cdns_mhdp_device *mhdp); 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci#endif 93