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