kernel_samsung_a34x-permissive/drivers/gpu/drm/mediatek/ca/tci.h
2024-04-28 15:51:13 +02:00

184 lines
3.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#ifndef __TCI_H__
#define __TCI_H__
typedef uint32_t tciCommandId_t;
typedef uint32_t tciResponseId_t;
typedef uint32_t tciReturnCode_t;
typedef uint32_t TEE_VA_TYPE;
#define RET_COMPARE_PASS 0
#define RET_COMPARE_FAIL 1
#define RET_NEW_DEVICE 2
#define RET_STORED_DEVICE 3
#define AN_LEN 8
#define AKSV_LEN 5
#define BKSV_LEN 5
#define CERT_LEN 522
#define EKM_LEN 16
#define M_LEN 16
#define ENC_KM_LEN 128
#define RXX_LEN 8
#define CAPS_LEN 3
#define RN_LEN 8
#define RIV_LEN 8
#define TYPE_HDCP_PARAM_AN 10
#define TYPE_HDCP_PARAM_RST_1 11
#define TYPE_HDCP_PARAM_RST_2 12
#define TYPE_HDCP_ENABLE_ENCRYPT 13
#define TYPE_HDCP_DISABLE_ENCRYPT 14
//for test
#define TYPE_HDCP13_KEY 20
#define TYPE_HDCP22_KEY 21
struct cryptokeys_t {
uint8_t type;
uint32_t len;
TEE_VA_TYPE key;
};
/**
* TCI command header.
*/
struct tciCommandHeader_t {
tciCommandId_t commandId;
};
/**
* TCI response header.
*/
struct tciResponseHeader_t {
tciResponseId_t responseId;
tciReturnCode_t returnCode;
};
struct cmdHDCPInitForVerion_t {
uint32_t version;
bool needLoadKey;
};
struct cmdHDCPWriteVal_t {
uint8_t type;
uint8_t len;
TEE_VA_TYPE val;
};
struct cmdHDCPCalculateLm_t {
uint8_t bksv[BKSV_LEN];
};
struct cmdHDCPGetAksv_t {
uint8_t aksv[AKSV_LEN];
};
struct cmdHDCPSha1_t {
uint32_t message_len;
TEE_VA_TYPE message_addr;
};
struct cmdHDCPAKECertificate_t {
uint8_t certification[CERT_LEN];
bool bStored;
uint8_t m[M_LEN];
uint8_t ekm[EKM_LEN];
};
struct cmdHDCPAKEParing_t {
uint8_t ekm[EKM_LEN];
};
struct cmdHDCPEncKm_t {
uint8_t encKm[ENC_KM_LEN];
};
struct cmdHDCPAKEHPrime_t {
uint8_t rtx[RXX_LEN];
uint8_t rrx[RXX_LEN];
uint8_t rxCaps[CAPS_LEN];
uint8_t txCaps[CAPS_LEN];
uint32_t rxH_len;
TEE_VA_TYPE rxH;
};
struct cmdHDCPLcLPrime_t {
uint8_t rn[RN_LEN];
uint32_t rxL_len;
TEE_VA_TYPE rxL;
};
struct cmdHDCPSKEEks_t {
uint8_t riv[RIV_LEN];
uint32_t eks_len;
TEE_VA_TYPE eks;
};
struct cmdHDCPCompare_t {
uint32_t rx_val_len;
TEE_VA_TYPE rx_val;
uint32_t param_len;
TEE_VA_TYPE param;
uint32_t out_len;
TEE_VA_TYPE out;
};
union tcicmdBody_t {
/* init with special HDCP version */
struct cmdHDCPInitForVerion_t cmdHDCPInitForVerion;
/* write uint32 data to hw */
struct cmdHDCPWriteVal_t cmdHDCPWriteVal;
/* get aksv */
struct cmdHDCPGetAksv_t cmdHDCPGetAksv;
/* calculate r0 */
struct cmdHDCPCalculateLm_t cmdHDCPCalculateLm;
/* generate signature for certificate*/
struct cmdHDCPAKECertificate_t cmdHDCPAKECertificate;
/* to store ekm*/
struct cmdHDCPAKEParing_t cmdHDCPAKEParing;
/* encrypt km for V2.2 */
struct cmdHDCPEncKm_t cmdHDCPEncKm;
/* compute H prime */
struct cmdHDCPAKEHPrime_t cmdHDCPAKEHPrime;
/* compute L prime */
struct cmdHDCPLcLPrime_t cmdHDCPLcLPrime;
/* compute eks */
struct cmdHDCPSKEEks_t cmdHDCPSKEEks;
/* compare */
struct cmdHDCPCompare_t cmdHDCPCompare;
/* for test only */
struct cryptokeys_t cryptokeys;
} __attribute__ ((__packed__));
struct cmdHDCP_t {
/* request tci header */
struct tciCommandHeader_t commandHeader;
/* response tci header */
struct tciResponseHeader_t responseHeader;
uint32_t drHandle;
union tcicmdBody_t cmdBody;
};
/**
* TCI message data.
* It's union structure
*/
union tciMessage_t {
/* request tci include header and other parameters */
struct cmdHDCP_t cmdHDCP;
};
/**
* Overall TCI structure.
*/
struct tci_t {
union tciMessage_t message; /**< TCI message */
};
const static uint64_t TCI_LENGTH = sizeof(struct tci_t);
#endif //__TCI_H__