/******************************************************************************
 *
 * 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
 *
 ******************************************************************************
 *
 * hdcp_tran.h
 *
 ******************************************************************************
 */

#ifndef HDCP_TRAN_H
#define HDCP_TRAN_H

#include "hdcp.h"

/**
 *  \file
 *  \brief general HDCP2 transmitter function and data structures
 */

/* supported HDCP TX ports */
typedef enum {
	HDCP_TX_PORT_0,
	HDCP_TX_PORT_1,
	HDCP_TX_PORT_2,
	HDCP_TX_PORT_3,
	HDCP_TX_NUM_OF_PORTS,
} HDCP_TX_PORT;

/* HDCP TX ports working mode (HDCP 2.2 or 1.4) */
typedef enum {
	HDCP_TX_2,		/* lock only with HDCP2 */
	HDCP_TX_1,		/* lock only with HDCP1 */
	HDCP_TX_BOTH,		/* lock on HDCP2 or 1 depend on other side */
} HDCP_TX_MODE;

/* HDCP TX ports stream type (relevant if receiver is repeater) */
typedef enum {
	HDCP_CONTENT_TYPE_0,	/* May be transmitted by The HDCP Repeater to all HDCP Devices. */
	HDCP_CONTENT_TYPE_1,	/* Must not be transmitted by the HDCP Repeater to HDCP 1.x-compliant Devices and HDCP 2.0-compliant Repeaters */
} HDCP_TX_CONTENT_STREAM_TYPE;

/* HDCP TX ports stream packet status */
typedef enum {
	HDCP_CONTENT_NEED_TO_SEND,
	HDCP_CONTENT_SENT_AND_WAIT_FOR_RESPOND,
	HDCP_CONTENT_SENT_AND_FAILED,
	HDCP_CONTENT_SUCCESS,
} HDCP_TX_CONTENT_STREAM_STATUS;

/* HDCP TX ports working mode (HDCP 2.2 or 1.4) */
typedef enum {
	HDCP_TX_NOT_ACTIVE,
	HDCP_TX_NOT_CONFIGURED,
	HDCP_TX_START,
	HDCP_TX_WAIT_FOR_RX_TYPE,
	HDCP_TX_ACTION
} HDCP_TX_STATE;

typedef union {
	struct {
		HDCP_TX_MODE port_supported_modes:2;
		HDCP_TX_MODE port_cur_mode:2;
		HDCP_TX_STATE port_state:4;
		HDCP_TX_CONTENT_STREAM_TYPE contentType:1;
		HDCP_TX_CONTENT_STREAM_STATUS content_status:2;
		u8 statusWasUpdated:1;
		u8 errorWasUpdated:1;
		u8 ENABLE_1_1_FEATURES:1;
		u8 ENABLE_1_1_FEATURES_onCurrentConnection:1;
		u8 hdmi_mode:1;
		u8 irq:1;
	} fields;
	u32 bits;
} U_HDCP_TRANS_PORT_DATA_STATUS;

/* struct holding data needed to the HDCP transmitter */
#define TX_PORT_STATUS_EXTRA_DATA 3
typedef struct {

	U_HDCP_TRANS_PORT_DATA_STATUS status;
	u16 port_status;
	u8 port_status_extraData[TX_PORT_STATUS_EXTRA_DATA];
	u32 seq_num_M;		/* for sending content stream manage */
	u32 seq_num_V;
	u8 rxTxBuffer[RX_TX_HDCP_TRANS_MAX_BUFFER];

	u8 recieverIdListCommand[(128 * 5) + 4];
	u32 recieverIdListSize;
	MB_TYPE mailBoxType;

} S_HDCP_TRANS_PORT_DATA;

typedef struct {
	S_HDCP_TRANS_PORT_DATA port[HDCP_TX_NUM_OF_PORTS];
} S_HDCP_TRANS_DATA;

/* HDCP TX ports working mode (HDCP 2.2 or 1.4) */

/**
 *
 *  \brief transmitter supported API (via mail box)
 */
typedef enum {
	HDCP_TX_CONFIGURATION,	/*!< use this command to set HDCP transmitter type and wake it up (or stop ), 1 byte with following bits :  Bit (0-1)= 0 - support only HDCP 2, 1 - support only HDCP 1, 2 - support both HDCP, Bit 2 - active (to activate port set to 1), to stop port set to 0 */
	HDCP2_TX_SET_PUBLIC_KEY_PARAMS,	/*!< use it to set public key for the HDCP2.x transmitter(HDCP2.x), Modulus n - 384 bytes,  E - 3 bytes */
	HDCP2_TX_SET_DEBUG_RANDOM_NUMBERS,	/*!< use this command to enforce  the random parameters (for debug only!), instead of the random data generated by the embedded RNG.Use this command after HDCP_TX_SET_PUBLIC_KEY_PARAMS command. Relevant to (HDCP2.x), data is : KM 16 bytes,RN 8 bytes,KS 16 bytes,RIV 8 bytes,RTX 8 bytes */
	HDCP2_TX_RESPOND_KM,	/*!< If km is stored, return all parameters, else there is no extra data(HDCP2.x), data is : Receiver ID (5 bytes),m (16 bytes),Km (16 bytes),Ekh(Km)(16 bytes) */
	HDCP1_TX_SEND_KEYS,	/*!< send keys needed for HDCP 1, data is :  AKSV (5 bytes), ksv (7*40 = 280 bytes) */
	HDCP1_TX_SEND_RANDOM_AN,	/*!< set AN, use it for debug purpose, if not use, it will be random number, data is (8 bytes) */
	HDCP_TX_STATUS_CHANGE,	/*!< Will be called in port status change event by cadence HDCP IP, Status for the port:Bit 0 - AUTHENTICATED (1 - link is authenticated), Bit 1 - receiver is REPEATER (1 for repeater, 0 not),Bit 2 - 0 for HDCP1, 1 for HDCP2,     */
	HDCP2_TX_IS_KM_STORED,	/*!< controller check if KM is stored by host(HDCP2.x), data is : Receiver ID (5 bytes) */
	HDCP2_TX_STORE_KM,	/*!< controller ask host to store KM, host may store it on non-volatile memory for faster authentication(HDCP2.x), data is : Receiver ID (5 bytes),m (16 bytes),Km(16 bytes),Ekh(Km),(16 bytes) */
	HDCP_TX_IS_RECEIVER_ID_VALID,	/*!< controller check if receivers ID are not in revocation list, input is->first byte for number of receivers, then list of receivers (5 bytes each) */
	HDCP_TX_RESPOND_RECEIVER_ID_VALID,	/*!< If receivers ID are valid return 1, otherwise return 0, same for HDCP1,HDCP2 */
	HDCP_TX_TEST_KEYS,	/*!< compare HDCP keys with facsimile key */
	HDCP2_TX_SET_KM_KEY_PARAMS,	/*!< This Command is used to load customer defined Key for km-key encryption into the HDCP2.x transmitter controller. */
} HDCP_TRNAS_MAIL_BOX_MSG;
		   /** @} *///

/* HDCP_TX_CONFIGURATION */

/* bits 0-1 HDCP_TX_MODE */
#define HDCP_TX_CONFIGURATION_MODE_OFFSET                       0
#define HDCP_TX_CONFIGURATION_MODE_LEN                          2
#define HDCP_TX_CONFIGURATION_RUN                               2
#define HDCP_TX_CONFIGURATION_RPTR_CONTENT_STREAM_MNGR_OFFSET   3
#define HDCP_TX_CONFIGURATION_RPTR                              4
#define HDCP_TX_ENABLE_1_1_FEATURES                             5
#define HDCP_TX_SECOND_LINK                                     6
#define HDCP_TX_HDMI_MODE                                       7

#define HDCP_TX_CONFIGURATION_ENABLE_KM_KEY_MASK (1 << 4)

/* HDCP_TX_STATUS_CHANGE bits */
#define HDCP_STATUS_AUTHENTICATED           0
#define HDCP_STATUS_REPEATER                1
#define HDCP_STATUS_HDCP2                   2
#define HDCP_STATUS_STRAM_MANAGE_SUCCESS    4
#define HDCP_STATUS_ERROR_TYPE              5
#define HDCP_STATUS_1_1_FEATURES            9

/**
 *
 *  \brief different error types for HDCP_TX_STATUS_CHANGE
 */
typedef enum {
	HDCP_TRAN_ERR_No_error,
	HDCP_TRAN_ERR_HPD_is_down,
	HDCP_TRAN_ERR_SRM_failure,
	HDCP_TRAN_ERR_signature_verification,
	HDCP_TRAN_ERR_h_tag_diff_h,
	HDCP_TRAN_ERR_v_tag_diff_v,
	HDCP_TRAN_ERR_locality_check,
	HDCP_TRAN_ERR_Ddc,
	HDCP_TRAN_ERR_REAUTH_REQ,
	HDCP_TRAN_ERR_topology,
	HDCP_TRAN_ERR_HDCP_RSVD1,
	HDCP_TRAN_ERR_HDMI_capability,
	HDCP_TRAN_ERR_RI,
	HDCP_TRAN_ERR_watchDog_expired,
} HDCP_TRNAS_ERR_TYPE;

/* HDCP2_TX_SET_PUBLIC_KEY_PARAMS */
#define DLP_MODULUS_N 384
#define DLP_E 3
typedef struct {
	u8 N[DLP_MODULUS_N];
	u8 E[DLP_E];
} S_HDCP_TRANS_PUBLIC_KEY_PARAMS;

/* HDCP2_TX_SET_KM_KEY_PARAMS */
#define DLP_KM_KEY 16
typedef struct {
	u8 KM_KEY[DLP_KM_KEY];
} S_HDCP_TRANS_KM_KEY_PARAMS;

/* HDCP2_TX_SET_DEBUG_RANDOM_NUMBERS */
#define DEBUG_RANDOM_NUMBERS_KM_LEN 16
#define DEBUG_RANDOM_NUMBERS_RN_LEN 8
#define DEBUG_RANDOM_NUMBERS_KS_LEN 16
#define DEBUG_RANDOM_NUMBERS_RIV_LEN 8
#define DEBUG_RANDOM_NUMBERS_RTX_LEN 8

typedef struct {
	u8 km[DEBUG_RANDOM_NUMBERS_KM_LEN];
	u8 rn[DEBUG_RANDOM_NUMBERS_RN_LEN];
	u8 ks[DEBUG_RANDOM_NUMBERS_KS_LEN];
	u8 riv[DEBUG_RANDOM_NUMBERS_RIV_LEN];
	u8 rtx[DEBUG_RANDOM_NUMBERS_RTX_LEN];
} S_HDCP_TRANS_DEBUG_RANDOM_NUMBERS;

#define HDCP_PAIRING_M_LEN 16
#define HDCP_PAIRING_M_EKH 16
#define HDCP_PAIRING_R_ID 5

typedef struct {
	u8 receiver_id[HDCP_PAIRING_R_ID];
	u8 m[HDCP_PAIRING_M_LEN];
	u8 km[DEBUG_RANDOM_NUMBERS_KM_LEN];
	u8 ekh[HDCP_PAIRING_M_EKH];
} S_HDCP_TRANS_PAIRING_DATA;

typedef struct {
	u8 Receiver_ID[HDCP_PAIRING_R_ID];
} S_HDCP_TRANS_REVOCATION_LIST;

/* HDCP1_TX_SEND_KEYS */
#define AKSV_SIZE (5)
#define HDCPT1_KSV_SIZE (7 * 40)

typedef struct {
	u8 AKSV[AKSV_SIZE];
	u8 KSV[HDCPT1_KSV_SIZE];
} S_HDCP_TX_MAIL_BOX_CMD_HDCP1_TX_SEND_KEYS;

#define AN_SIZE (8)

/* HDCP2_TX_SESSION_KEY */
#define HDCP_SESSION_KEY_LEN 16

#endif //HDCP_TRAN_H
