/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2021 Rockchip Electronics Co. Ltd. * * Author: Shunqing Chen */ #ifndef __RK_HDMIRX_HDCP_H__ #define __RK_HDMIRX_HDCP_H__ #include #define HDCP_KEY_SIZE 308 #define HDCP_KEY_SEED_SIZE 2 #define KSV_LEN 5 #define HEADER 10 #define SHAMAX 20 #define PRIVATE_KEY_SIZE 280 #define KEY_SHA_SIZE 20 #define KEY_DATA_SIZE 314 #define VENDOR_DATA_SIZE (KEY_DATA_SIZE + 16) #define HDMIRX_HDCP1X_ID 13 #define HDCP_SIG_MAGIC 0x4B534541 /* "AESK" */ #define HDCP_FLG_AES 1 enum hdmirx_hdcp_enable { HDCP_1X_ENABLE = 0x1, HDCP_2X_ENABLE = 0x2, }; struct hdcp_key_data_t { unsigned int signature; unsigned int length; unsigned int crc; unsigned int flags; unsigned char data[0]; }; struct rk_hdmirx_hdcp { u8 enable; u8 hdcp_support; int hdcp2_enable; int status; struct miscdevice mdev; bool keys_is_load; bool test_key_load; bool aes_encrypt; struct device *dev; struct rk_hdmirx_dev *hdmirx; void (*write)(struct rk_hdmirx_dev *hdmirx, int reg, u32 val); u32 (*read)(struct rk_hdmirx_dev *hdmirx, int reg); void (*hpd_config)(struct rk_hdmirx_dev *hdmirx, bool en); bool (*tx_5v_power)(struct rk_hdmirx_dev *hdmirx); int (*hdcp_start)(struct rk_hdmirx_hdcp *hdcp); int (*hdcp_stop)(struct rk_hdmirx_hdcp *hdcp); void (*hdcp2_connect_ctrl)(struct rk_hdmirx_hdcp *hdcp, bool en); }; struct rk_hdmirx_hdcp *rk_hdmirx_hdcp_register(struct rk_hdmirx_hdcp *hdcp); void rk_hdmirx_hdcp_unregister(struct rk_hdmirx_hdcp *hdcp); #endif /* __RK_HDMIRX_HDCP_H__ */