13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
33d0407baSopenharmony_ci * Author Huicong Xu <xhc@rock-chips.com>
43d0407baSopenharmony_ci *
53d0407baSopenharmony_ci * This software is licensed under the terms of the GNU General Public
63d0407baSopenharmony_ci * License version 2, as published by the Free Software Foundation, and
73d0407baSopenharmony_ci * may be copied, distributed, and modified under those terms.
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * This program is distributed in the hope that it will be useful,
103d0407baSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
113d0407baSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
123d0407baSopenharmony_ci * GNU General Public License for more details.
133d0407baSopenharmony_ci */
143d0407baSopenharmony_ci
153d0407baSopenharmony_ci#ifndef DW_HDMI_HDCP_H
163d0407baSopenharmony_ci#define DW_HDMI_HDCP_H
173d0407baSopenharmony_ci
183d0407baSopenharmony_ci#include <linux/miscdevice.h>
193d0407baSopenharmony_ci
203d0407baSopenharmony_ci#define DW_HDCP_DRIVER_NAME "dw-hdmi-hdcp"
213d0407baSopenharmony_ci#define HDCP_PRIVATE_KEY_SIZE   280
223d0407baSopenharmony_ci#define HDCP_KEY_SHA_SIZE       20
233d0407baSopenharmony_ci
243d0407baSopenharmony_cistruct hdcp_keys {
253d0407baSopenharmony_ci	u8 KSV[8];
263d0407baSopenharmony_ci	u8 devicekey[HDCP_PRIVATE_KEY_SIZE];
273d0407baSopenharmony_ci	u8 sha1[HDCP_KEY_SHA_SIZE];
283d0407baSopenharmony_ci};
293d0407baSopenharmony_ci
303d0407baSopenharmony_cistruct dw_hdcp {
313d0407baSopenharmony_ci	bool enable;
323d0407baSopenharmony_ci	int retry_times;
333d0407baSopenharmony_ci	int remaining_times;
343d0407baSopenharmony_ci	char *seeds;
353d0407baSopenharmony_ci	int invalidkey;
363d0407baSopenharmony_ci	char *invalidkeys;
373d0407baSopenharmony_ci	int hdcp2_enable;
383d0407baSopenharmony_ci	int status;
393d0407baSopenharmony_ci	u32 reg_io_width;
403d0407baSopenharmony_ci
413d0407baSopenharmony_ci	struct miscdevice mdev;
423d0407baSopenharmony_ci	struct hdcp_keys *keys;
433d0407baSopenharmony_ci	struct device *dev;
443d0407baSopenharmony_ci	struct dw_hdmi *hdmi;
453d0407baSopenharmony_ci	void __iomem *regs;
463d0407baSopenharmony_ci
473d0407baSopenharmony_ci	void (*write)(struct dw_hdmi *hdmi, u8 val, int offset);
483d0407baSopenharmony_ci	u8 (*read)(struct dw_hdmi *hdmi, int offset);
493d0407baSopenharmony_ci	int (*hdcp_start)(struct dw_hdcp *hdcp);
503d0407baSopenharmony_ci	int (*hdcp_stop)(struct dw_hdcp *hdcp);
513d0407baSopenharmony_ci	void (*hdcp_isr)(struct dw_hdcp *hdcp, int hdcp_int);
523d0407baSopenharmony_ci};
533d0407baSopenharmony_ci
543d0407baSopenharmony_ci#endif
55