290 lines
7.9 KiB
C
290 lines
7.9 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2016-2017 Cadence Design Systems, Inc.
|
|
* All rights reserved worldwide.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation and/or
|
|
* other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
|
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* Copyright 2017 NXP
|
|
*
|
|
******************************************************************************
|
|
*
|
|
* This file was auto-generated. Do not edit it manually.
|
|
*
|
|
******************************************************************************
|
|
*
|
|
* hdcp2.h
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
#ifndef HDCP2_H
|
|
#define HDCP2_H
|
|
#include "mailBox.h"
|
|
/* HDCP 2 registers
|
|
* and general use function for HDCP2 (transmitter and receiver)
|
|
* Author - yehonatan levin - cadence */
|
|
/**
|
|
* \file
|
|
* \brief HDCP 2 registers
|
|
* and general use function for HDCP2 (trasmiter and reciever)
|
|
*/
|
|
|
|
/* HDCP2 register list */
|
|
|
|
#ifdef DP_TX
|
|
#define HDCP2_RTX 0x69000
|
|
#define HDCP2_TX_CAPS 0x69008
|
|
#define HDCP2_CERT_RX 0x6900B
|
|
#define HDCP2_RRX 0x69215
|
|
#define HDCP2_RX_CAPS 0x6921D
|
|
#define HDCP2_EKPUB_KM 0x69220
|
|
#define HDCP2_EKH_KM_WR 0x692A0
|
|
#define HDCP2_M 0x692B0
|
|
#define HDCP2_H_TAG 0x692C0
|
|
#define HDCP2_EKH_KM_RD 0x692E0
|
|
#define HDCP2_RN 0x692F0
|
|
#define HDCP2_L_TAG 0x692F8
|
|
#define HDCP2_EDKEY_KS 0x69318
|
|
#define HDCP2_RIV 0x69328
|
|
#define HDCP2_RX_INFO 0x69330
|
|
#define HDCP2_SEQ_NUM_V 0x69332
|
|
#define HDCP2_V_TAG 0x69335
|
|
#define HDCP2_RECEIVER_ID_LIST 0x69345
|
|
#define HDCP2_V 0x693E0
|
|
#define HDCP2_SEQ_NUM_M 0x693F0
|
|
#define HDCP2_K 0x693F3
|
|
#define HDCP2_STREAM_ID_TYPE 0x693F5
|
|
#define HDCP2_M_TAG 0x69473
|
|
#define HDCP2_RXSTATUS 0x69493
|
|
#define HDCP2_RSVD 0x69494
|
|
#define HDCP2_DBG 0x69518
|
|
|
|
#else /* HDMI */
|
|
#define HDCP2_HDCP14 0x0
|
|
#define HDCP2_RSVD1 0x44
|
|
#define HDCP2_HDCP2_VERSION 0x50
|
|
#define HDCP2_RSVD2 0x51
|
|
#define HDCP2_WRITE_MESSAGE 0x60
|
|
#define HDCP2_RSVD3 0x61
|
|
#define HDCP2_RXSTATUS 0x70
|
|
#define HDCP2_RSVD4 0x72
|
|
#define HDCP2_READ_MESSAGE 0x80
|
|
#define HDCP2_RSVD5 0x81
|
|
#define HDCP2_DBG 0xC0
|
|
#endif
|
|
|
|
/* HDCP2 commands */
|
|
#define HDCP2_CMD_AKE_INIT 2
|
|
#define HDCP2_CMD_AKE_SEND_CERT 3
|
|
#define HDCP2_CMD_AKE_NO_STORED_KM 4
|
|
#define HDCP2_CMD_AKE_STORED_KM 5
|
|
#define HDCP2_CMD_AKE_SEND_H_PRIME 7
|
|
#define HDCP2_CMD_AKE_SEND_PAIRING_INFO 8
|
|
#define HDCP2_CMD_LC_INIT 9
|
|
#define HDCP2_CMD_LC_SEND_L_PRIME 10
|
|
#define HDCP2_SKE_SEND_EKS 11
|
|
#define HDCP2_REPEATER_AUTH_SEND_RECEIVER_ID_LIST 12
|
|
#define HDCP2_REPEATER_AUTH_SEND_ACK 15
|
|
#define HDCP2_REPEATER_AUTH_STREAM_MANAGE 16
|
|
#define HDCP2_REPEATER_AUTH_STREAM_READY 17
|
|
|
|
/* values */
|
|
#define HDCP2_VAL_HDCP2_VERSION_SUPPORTED 2
|
|
|
|
#define LC_128_LEN 16
|
|
extern u8 pHdcpLc128[LC_128_LEN];
|
|
|
|
typedef enum {
|
|
HDCP2_NOT_FINISHED = 0x11,
|
|
HDCP2_FINISHED
|
|
} HDCP_2_REC_RES;
|
|
|
|
/* command structs */
|
|
/* AKE INIT */
|
|
typedef struct {
|
|
u8 version;
|
|
u8 transmitter_capability_mask[2];
|
|
} S_HDCP2_TXCAPS;
|
|
|
|
typedef struct {
|
|
u8 rtx[8];
|
|
S_HDCP2_TXCAPS txcaps;
|
|
} S_HDCP2_CMD_AKE_INIT;
|
|
|
|
/* AKE_SEND_CERT */
|
|
|
|
typedef struct {
|
|
u8 cert_rx[522];
|
|
u8 r_rx[8];
|
|
u8 rxcaps[3];
|
|
} S_HDCP2_CMD_AKE_SEND_CERT;
|
|
|
|
/* AKE_NO_STORED_KM */
|
|
|
|
typedef struct {
|
|
u8 ekpub_km[128];
|
|
} S_HDCP2_CMD_AKE_NO_STORED_KM;
|
|
|
|
/* AKE_STORED_KM */
|
|
|
|
typedef struct {
|
|
u8 ekh_km[16];
|
|
u8 m[16];
|
|
} S_HDCP2_CMD_AKE_STORED_KM;
|
|
|
|
/* AKE_SEND_H_PRIME */
|
|
|
|
typedef struct {
|
|
u8 h[32];
|
|
} S_HDCP2_CMD_AKE_SEND_H_PRIME;
|
|
|
|
/* AKE_SEND_PAIRING_INFO */
|
|
|
|
typedef struct {
|
|
u8 Ekh_Km[16];
|
|
} S_HDCP2_CMD_AKE_SEND_PAIRING_INFO;
|
|
|
|
/* LC_Init */
|
|
|
|
typedef struct {
|
|
u8 rn[8];
|
|
} S_HDCP2_CMD_LC_Init;
|
|
|
|
/* LC_Send_L_Prime */
|
|
|
|
typedef struct {
|
|
u8 l[32];
|
|
} S_HDCP2_CMD_LC_Send_L_Prime;
|
|
|
|
/* LC_Send_Eks */
|
|
|
|
typedef struct {
|
|
u8 Edkey_Ks[16];
|
|
u8 Riv[8];
|
|
} S_HDCP2_CMD_SKE_Send_Eks;
|
|
|
|
/* REPEATER_AUTH_SEND_RECEIVER_ID_LIST */
|
|
|
|
typedef struct {
|
|
u8 RxInfo[2];
|
|
u8 seq_num_V[3];
|
|
u8 V[16]; /* max device count * 5 */
|
|
} S_HDCP2_CMD_REPEATER_AUTH_SEND_RECEIVER_ID_LIST;
|
|
|
|
/* HDCP2_RxInfo bits */
|
|
typedef struct {
|
|
u16 HDCP1_DEVICE_DOWNSTREAM:1;
|
|
u16 HDCP2_0_REPEATER_DOWNSTREAM:1;
|
|
u16 MAX_CASCADE_EXCEEDED:1;
|
|
u16 MAX_DEVS_EXCEEDED:1;
|
|
u16 DEVICE_COUNT:5;
|
|
u16 DEPTH:3;
|
|
} S_HDCP2_RX_INFO_BITS;
|
|
|
|
typedef union {
|
|
S_HDCP2_RX_INFO_BITS bits;
|
|
u16 value16Bit;
|
|
} U_HDCP2_RX_INFO;
|
|
|
|
/* REPEATER_AUTH_SEND_ACK */
|
|
|
|
typedef struct {
|
|
u8 v[16];
|
|
} S_HDCP2_CMD_REPEATER_AUTH_SEND_ACK;
|
|
|
|
/* REPEATER_AUTH_STREAM_MANAGE */
|
|
|
|
typedef struct {
|
|
u8 seq_num_m[3];
|
|
u8 k[2];
|
|
u8 streamId_Type[2]; /* should be k*2 by spec??? */
|
|
} S_HDCP2_CMD_REPEATER_AUTH_STREAM_MANAGE;
|
|
|
|
/* REPEATER_AUTH_STREAM_READY */
|
|
|
|
typedef struct {
|
|
u8 m[32];
|
|
} S_HDCP2_CMD_REPEATER_AUTH_STREAM_READY;
|
|
|
|
/* HDCP2_RXSTATUS bits */
|
|
#ifdef DP_TX
|
|
typedef struct {
|
|
|
|
u8 READY:1;
|
|
u8 H_AVAILABLE:1;
|
|
u8 PAIRING_AVAILABLE:1;
|
|
u8 REAUTH_REQ:1;
|
|
u8 LINK_INTEGRITY_FAILURE:1;
|
|
u8 RSVD:3;
|
|
} S_HDCP2_RX_STATUS_BITS;
|
|
#else
|
|
typedef struct {
|
|
u16 Message_Size:10;
|
|
u16 READY:1;
|
|
u16 REAUTH_REQ:1;
|
|
u16 RSVD:4;
|
|
} S_HDCP2_RX_STATUS_BITS;
|
|
|
|
#endif
|
|
|
|
typedef union {
|
|
S_HDCP2_RX_STATUS_BITS bits;
|
|
u16 value16Bit;
|
|
} U_HDCP2_RX_STATUS;
|
|
|
|
/* HDCP ports mail box messages */
|
|
typedef enum {
|
|
HDCP_GENERAL_SET_LC_128 = 0,
|
|
HDCP_SET_SEED,
|
|
} HDCP_GENERAL_MSG;
|
|
|
|
/**
|
|
* \brief get command length for specific command
|
|
*
|
|
* \param [in] offset offset of the command
|
|
* \return Return_Description
|
|
*
|
|
*/
|
|
u32 hdcp2_commandLen(u32 offset);
|
|
/**
|
|
* \brief message length for specific message
|
|
*
|
|
* \param [in] msg the message
|
|
* \return the size of this message
|
|
*
|
|
*/
|
|
u32 hdcp2_MsgcommandLen(u8 msg);
|
|
|
|
#endif
|