/* SPDX-License-Identifier: LGPL-2.1-only OR BSD-3-Clause */
/******************************************************************************
 *
 * This file is provided under a dual license.  When you use or
 * distribute this software, you may choose to be licensed under
 * version 2.1 of the GNU Lesser General Public License
 * ("LGPLv2.1 License") or BSD License.
 *
 * LGPLv2.1 License
 *
 * Copyright(C) 2019 MediaTek Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2.1 of the GNU Lesser General Public
 * License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html for more
 * details.
 *
 * BSD LICENSE
 *
 * Copyright(C) 2019 MediaTek Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * 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.
 *  * 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.
 *
 *****************************************************************************/

/*-----------------------------------------------------------------------------
 * $RCSfile: x_drm_drv.h,v $
 * $Revision: #2 $
 * $Date: 2015/08/08 $
 * $Author: xiaojun.zhu $
 * $CCRevision:  $
 * $SWAuthor:  $
 * $MD5HEX:  $
 *
 * Description:
 *         
 *---------------------------------------------------------------------------*/

#ifndef _X_DRM_DRV_H_
#define _X_DRM_DRV_H_
/*-----------------------------------------------------------------------------
                    include files
 ----------------------------------------------------------------------------*/
#include "x_common.h"
#include "x_rm.h"
#include "u_drm_drv.h"

#ifdef __cplusplus
 extern "C" {
#endif
/*-----------------------------------------------------------------------------
                    macros, defines, typedefs, enums
 ----------------------------------------------------------------------------*/

#define DRM_TYPE_PLAYREADY_DRM ((DRM_TYPE_T)4)

/* This structure defines the divx drm crypto info. */
typedef struct _DIVX_DRM_CRYPTO_INFO_T
{
#define DIVX_DRM_AUDIO_PROTECTION ((UINT8)1 << 0)
    UINT8 ui1_flag;
    UINT8 ui1_frame_keys_count;
    UINT8 ui1_protected_audio_offset;   
    UINT8 ui1_protected_audio_crypto_size;
    UINT8 aui1_frame_keys[128/*VIDEO_KEY_COUNT_MAX*/][16/*VIDEO_KEY_SIZE_BYTES*/];
} DIVX_DRM_CRYPTO_INFO_T;

/* This structure defines the divx drm info for driver. */
typedef struct _DIVX_DRM_INFO_DRV_T
{
    DIVX_DRM_CRYPTO_INFO_T* pt_divx_drm_crypto_info;
} DIVX_DRM_INFO_DRV_T;

typedef enum
{

    DRM_CRYPTO_KEY_UNKNOWN,
    DRM_CRYPTO_KEY_AES,
    DRM_CRYPTO_KEY_RC4,
    DRM_CRYPTO_KEY_AES_PROTECTED    
}DRM_CRYPTO_KEY_TYPE;

typedef struct _PREADY_CRYPTO_INFO_T
{
    DRM_CRYPTO_KEY_TYPE   e_crypto_key_type;
    
    UINT8                  aui1_crypto_key_info[128];
    UINT32                 ui4_crypto_key_size;
} PREADY_CRYPTO_INFO_T;

/* This structure defines the drm info for driver. */
typedef struct _DRM_INFO_DRV_T
{
    DRM_TYPE_T t_drm_type;
    union _DRM_INFO_UNION_DRV_T
    {
        DIVX_DRM_INFO_DRV_T t_divx_drm_info_drv;
        PREADY_CRYPTO_INFO_T t_playready_crypto_info;
    } u;
} DRM_INFO_DRV_T;

/* DivX DRM *******************************************************************/
/* Get operations */
#define DIVX_DRM_GET_TYPE_HW_SECRET_KEY (RM_GET_TYPE_LAST_ENTRY + ((DRV_GET_TYPE_T)0))
 
#define DIVX_DRM_HW_SECRET_KEY_SIZE_BYTE 32
 
/* DIVX_DRM_GET_TYPE_HW_SECRET_KEY */
typedef struct _DIVX_DRM_HW_SECRET_KEY_T
{
    UINT8 aui1_divx_drm_hw_secret_key[DIVX_DRM_HW_SECRET_KEY_SIZE_BYTE];
} DIVX_DRM_HW_SECRET_KEY_T;

/*-----------------------------------------------------------------------------
                    extern data declarations
 ----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
                    data declarations
 ----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
                    functions declarations
 ----------------------------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* _X_DRM_DRV_H_ */

