Home | History | Annotate | Line # | Download | only in drm
      1  1.1  riastrad /*	$NetBSD: drm_hdcp.h,v 1.2 2021/12/18 23:45:46 riastradh Exp $	*/
      2  1.1  riastrad 
      3  1.1  riastrad /* SPDX-License-Identifier: MIT */
      4  1.1  riastrad /*
      5  1.1  riastrad  * Copyright (C) 2017 Google, Inc.
      6  1.1  riastrad  *
      7  1.1  riastrad  * Authors:
      8  1.1  riastrad  * Sean Paul <seanpaul (at) chromium.org>
      9  1.1  riastrad  */
     10  1.1  riastrad 
     11  1.1  riastrad #ifndef _DRM_HDCP_H_INCLUDED_
     12  1.1  riastrad #define _DRM_HDCP_H_INCLUDED_
     13  1.1  riastrad 
     14  1.1  riastrad #include <linux/types.h>
     15  1.1  riastrad 
     16  1.1  riastrad /* Period of hdcp checks (to ensure we're still authenticated) */
     17  1.1  riastrad #define DRM_HDCP_CHECK_PERIOD_MS		(128 * 16)
     18  1.1  riastrad #define DRM_HDCP2_CHECK_PERIOD_MS		500
     19  1.1  riastrad 
     20  1.1  riastrad /* Shared lengths/masks between HDMI/DVI/DisplayPort */
     21  1.1  riastrad #define DRM_HDCP_AN_LEN				8
     22  1.1  riastrad #define DRM_HDCP_BSTATUS_LEN			2
     23  1.1  riastrad #define DRM_HDCP_KSV_LEN			5
     24  1.1  riastrad #define DRM_HDCP_RI_LEN				2
     25  1.1  riastrad #define DRM_HDCP_V_PRIME_PART_LEN		4
     26  1.1  riastrad #define DRM_HDCP_V_PRIME_NUM_PARTS		5
     27  1.1  riastrad #define DRM_HDCP_NUM_DOWNSTREAM(x)		(x & 0x7f)
     28  1.1  riastrad #define DRM_HDCP_MAX_CASCADE_EXCEEDED(x)	(x & BIT(3))
     29  1.1  riastrad #define DRM_HDCP_MAX_DEVICE_EXCEEDED(x)		(x & BIT(7))
     30  1.1  riastrad 
     31  1.1  riastrad /* Slave address for the HDCP registers in the receiver */
     32  1.1  riastrad #define DRM_HDCP_DDC_ADDR			0x3A
     33  1.1  riastrad 
     34  1.1  riastrad /* HDCP register offsets for HDMI/DVI devices */
     35  1.1  riastrad #define DRM_HDCP_DDC_BKSV			0x00
     36  1.1  riastrad #define DRM_HDCP_DDC_RI_PRIME			0x08
     37  1.1  riastrad #define DRM_HDCP_DDC_AKSV			0x10
     38  1.1  riastrad #define DRM_HDCP_DDC_AN				0x18
     39  1.1  riastrad #define DRM_HDCP_DDC_V_PRIME(h)			(0x20 + h * 4)
     40  1.1  riastrad #define DRM_HDCP_DDC_BCAPS			0x40
     41  1.1  riastrad #define  DRM_HDCP_DDC_BCAPS_REPEATER_PRESENT	BIT(6)
     42  1.1  riastrad #define  DRM_HDCP_DDC_BCAPS_KSV_FIFO_READY	BIT(5)
     43  1.1  riastrad #define DRM_HDCP_DDC_BSTATUS			0x41
     44  1.1  riastrad #define DRM_HDCP_DDC_KSV_FIFO			0x43
     45  1.1  riastrad 
     46  1.1  riastrad #define DRM_HDCP_1_4_SRM_ID			0x8
     47  1.1  riastrad #define DRM_HDCP_1_4_VRL_LENGTH_SIZE		3
     48  1.1  riastrad #define DRM_HDCP_1_4_DCP_SIG_SIZE		40
     49  1.1  riastrad 
     50  1.1  riastrad /* Protocol message definition for HDCP2.2 specification */
     51  1.1  riastrad /*
     52  1.1  riastrad  * Protected content streams are classified into 2 types:
     53  1.1  riastrad  * - Type0: Can be transmitted with HDCP 1.4+
     54  1.1  riastrad  * - Type1: Can be transmitted with HDCP 2.2+
     55  1.1  riastrad  */
     56  1.1  riastrad #define HDCP_STREAM_TYPE0			0x00
     57  1.1  riastrad #define HDCP_STREAM_TYPE1			0x01
     58  1.1  riastrad 
     59  1.1  riastrad /* HDCP2.2 Msg IDs */
     60  1.1  riastrad #define HDCP_2_2_NULL_MSG			1
     61  1.1  riastrad #define HDCP_2_2_AKE_INIT			2
     62  1.1  riastrad #define HDCP_2_2_AKE_SEND_CERT			3
     63  1.1  riastrad #define HDCP_2_2_AKE_NO_STORED_KM		4
     64  1.1  riastrad #define HDCP_2_2_AKE_STORED_KM			5
     65  1.1  riastrad #define HDCP_2_2_AKE_SEND_HPRIME		7
     66  1.1  riastrad #define HDCP_2_2_AKE_SEND_PAIRING_INFO		8
     67  1.1  riastrad #define HDCP_2_2_LC_INIT			9
     68  1.1  riastrad #define HDCP_2_2_LC_SEND_LPRIME			10
     69  1.1  riastrad #define HDCP_2_2_SKE_SEND_EKS			11
     70  1.1  riastrad #define HDCP_2_2_REP_SEND_RECVID_LIST		12
     71  1.1  riastrad #define HDCP_2_2_REP_SEND_ACK			15
     72  1.1  riastrad #define HDCP_2_2_REP_STREAM_MANAGE		16
     73  1.1  riastrad #define HDCP_2_2_REP_STREAM_READY		17
     74  1.1  riastrad 
     75  1.1  riastrad #define HDCP_2_2_RTX_LEN			8
     76  1.1  riastrad #define HDCP_2_2_RRX_LEN			8
     77  1.1  riastrad 
     78  1.1  riastrad #define HDCP_2_2_K_PUB_RX_MOD_N_LEN		128
     79  1.1  riastrad #define HDCP_2_2_K_PUB_RX_EXP_E_LEN		3
     80  1.1  riastrad #define HDCP_2_2_K_PUB_RX_LEN			(HDCP_2_2_K_PUB_RX_MOD_N_LEN + \
     81  1.1  riastrad 						 HDCP_2_2_K_PUB_RX_EXP_E_LEN)
     82  1.1  riastrad 
     83  1.1  riastrad #define HDCP_2_2_DCP_LLC_SIG_LEN		384
     84  1.1  riastrad 
     85  1.1  riastrad #define HDCP_2_2_E_KPUB_KM_LEN			128
     86  1.1  riastrad #define HDCP_2_2_E_KH_KM_M_LEN			(16 + 16)
     87  1.1  riastrad #define HDCP_2_2_H_PRIME_LEN			32
     88  1.1  riastrad #define HDCP_2_2_E_KH_KM_LEN			16
     89  1.1  riastrad #define HDCP_2_2_RN_LEN				8
     90  1.1  riastrad #define HDCP_2_2_L_PRIME_LEN			32
     91  1.1  riastrad #define HDCP_2_2_E_DKEY_KS_LEN			16
     92  1.1  riastrad #define HDCP_2_2_RIV_LEN			8
     93  1.1  riastrad #define HDCP_2_2_SEQ_NUM_LEN			3
     94  1.1  riastrad #define HDCP_2_2_V_PRIME_HALF_LEN		(HDCP_2_2_L_PRIME_LEN / 2)
     95  1.1  riastrad #define HDCP_2_2_RECEIVER_ID_LEN		DRM_HDCP_KSV_LEN
     96  1.1  riastrad #define HDCP_2_2_MAX_DEVICE_COUNT		31
     97  1.1  riastrad #define HDCP_2_2_RECEIVER_IDS_MAX_LEN		(HDCP_2_2_RECEIVER_ID_LEN * \
     98  1.1  riastrad 						 HDCP_2_2_MAX_DEVICE_COUNT)
     99  1.1  riastrad #define HDCP_2_2_MPRIME_LEN			32
    100  1.1  riastrad 
    101  1.1  riastrad /* Following Macros take a byte at a time for bit(s) masking */
    102  1.1  riastrad /*
    103  1.1  riastrad  * TODO: This has to be changed for DP MST, as multiple stream on
    104  1.1  riastrad  * same port is possible.
    105  1.1  riastrad  * For HDCP2.2 on HDMI and DP SST this value is always 1.
    106  1.1  riastrad  */
    107  1.1  riastrad #define HDCP_2_2_MAX_CONTENT_STREAMS_CNT	1
    108  1.1  riastrad #define HDCP_2_2_TXCAP_MASK_LEN			2
    109  1.1  riastrad #define HDCP_2_2_RXCAPS_LEN			3
    110  1.1  riastrad #define HDCP_2_2_RX_REPEATER(x)			((x) & BIT(0))
    111  1.1  riastrad #define HDCP_2_2_DP_HDCP_CAPABLE(x)		((x) & BIT(1))
    112  1.1  riastrad #define HDCP_2_2_RXINFO_LEN			2
    113  1.1  riastrad 
    114  1.1  riastrad /* HDCP1.x compliant device in downstream */
    115  1.1  riastrad #define HDCP_2_2_HDCP1_DEVICE_CONNECTED(x)	((x) & BIT(0))
    116  1.1  riastrad 
    117  1.1  riastrad /* HDCP2.0 Compliant repeater in downstream */
    118  1.1  riastrad #define HDCP_2_2_HDCP_2_0_REP_CONNECTED(x)	((x) & BIT(1))
    119  1.1  riastrad #define HDCP_2_2_MAX_CASCADE_EXCEEDED(x)	((x) & BIT(2))
    120  1.1  riastrad #define HDCP_2_2_MAX_DEVS_EXCEEDED(x)		((x) & BIT(3))
    121  1.1  riastrad #define HDCP_2_2_DEV_COUNT_LO(x)		(((x) & (0xF << 4)) >> 4)
    122  1.1  riastrad #define HDCP_2_2_DEV_COUNT_HI(x)		((x) & BIT(0))
    123  1.1  riastrad #define HDCP_2_2_DEPTH(x)			(((x) & (0x7 << 1)) >> 1)
    124  1.1  riastrad 
    125  1.1  riastrad struct hdcp2_cert_rx {
    126  1.1  riastrad 	u8	receiver_id[HDCP_2_2_RECEIVER_ID_LEN];
    127  1.1  riastrad 	u8	kpub_rx[HDCP_2_2_K_PUB_RX_LEN];
    128  1.1  riastrad 	u8	reserved[2];
    129  1.1  riastrad 	u8	dcp_signature[HDCP_2_2_DCP_LLC_SIG_LEN];
    130  1.1  riastrad } __packed;
    131  1.1  riastrad 
    132  1.1  riastrad struct hdcp2_streamid_type {
    133  1.1  riastrad 	u8	stream_id;
    134  1.1  riastrad 	u8	stream_type;
    135  1.1  riastrad } __packed;
    136  1.1  riastrad 
    137  1.1  riastrad /*
    138  1.1  riastrad  * The TxCaps field specified in the HDCP HDMI, DP specs
    139  1.1  riastrad  * This field is big endian as specified in the errata.
    140  1.1  riastrad  */
    141  1.1  riastrad struct hdcp2_tx_caps {
    142  1.1  riastrad 	/* Transmitter must set this to 0x2 */
    143  1.1  riastrad 	u8	version;
    144  1.1  riastrad 
    145  1.1  riastrad 	/* Reserved for HDCP and DP Spec. Read as Zero */
    146  1.1  riastrad 	u8	tx_cap_mask[HDCP_2_2_TXCAP_MASK_LEN];
    147  1.1  riastrad } __packed;
    148  1.1  riastrad 
    149  1.1  riastrad /* Main structures for HDCP2.2 protocol communication */
    150  1.1  riastrad struct hdcp2_ake_init {
    151  1.1  riastrad 	u8			msg_id;
    152  1.1  riastrad 	u8			r_tx[HDCP_2_2_RTX_LEN];
    153  1.1  riastrad 	struct hdcp2_tx_caps	tx_caps;
    154  1.1  riastrad } __packed;
    155  1.1  riastrad 
    156  1.1  riastrad struct hdcp2_ake_send_cert {
    157  1.1  riastrad 	u8			msg_id;
    158  1.1  riastrad 	struct hdcp2_cert_rx	cert_rx;
    159  1.1  riastrad 	u8			r_rx[HDCP_2_2_RRX_LEN];
    160  1.1  riastrad 	u8			rx_caps[HDCP_2_2_RXCAPS_LEN];
    161  1.1  riastrad } __packed;
    162  1.1  riastrad 
    163  1.1  riastrad struct hdcp2_ake_no_stored_km {
    164  1.1  riastrad 	u8	msg_id;
    165  1.1  riastrad 	u8	e_kpub_km[HDCP_2_2_E_KPUB_KM_LEN];
    166  1.1  riastrad } __packed;
    167  1.1  riastrad 
    168  1.1  riastrad struct hdcp2_ake_stored_km {
    169  1.1  riastrad 	u8	msg_id;
    170  1.1  riastrad 	u8	e_kh_km_m[HDCP_2_2_E_KH_KM_M_LEN];
    171  1.1  riastrad } __packed;
    172  1.1  riastrad 
    173  1.1  riastrad struct hdcp2_ake_send_hprime {
    174  1.1  riastrad 	u8	msg_id;
    175  1.1  riastrad 	u8	h_prime[HDCP_2_2_H_PRIME_LEN];
    176  1.1  riastrad } __packed;
    177  1.1  riastrad 
    178  1.1  riastrad struct hdcp2_ake_send_pairing_info {
    179  1.1  riastrad 	u8	msg_id;
    180  1.1  riastrad 	u8	e_kh_km[HDCP_2_2_E_KH_KM_LEN];
    181  1.1  riastrad } __packed;
    182  1.1  riastrad 
    183  1.1  riastrad struct hdcp2_lc_init {
    184  1.1  riastrad 	u8	msg_id;
    185  1.1  riastrad 	u8	r_n[HDCP_2_2_RN_LEN];
    186  1.1  riastrad } __packed;
    187  1.1  riastrad 
    188  1.1  riastrad struct hdcp2_lc_send_lprime {
    189  1.1  riastrad 	u8	msg_id;
    190  1.1  riastrad 	u8	l_prime[HDCP_2_2_L_PRIME_LEN];
    191  1.1  riastrad } __packed;
    192  1.1  riastrad 
    193  1.1  riastrad struct hdcp2_ske_send_eks {
    194  1.1  riastrad 	u8	msg_id;
    195  1.1  riastrad 	u8	e_dkey_ks[HDCP_2_2_E_DKEY_KS_LEN];
    196  1.1  riastrad 	u8	riv[HDCP_2_2_RIV_LEN];
    197  1.1  riastrad } __packed;
    198  1.1  riastrad 
    199  1.1  riastrad struct hdcp2_rep_send_receiverid_list {
    200  1.1  riastrad 	u8	msg_id;
    201  1.1  riastrad 	u8	rx_info[HDCP_2_2_RXINFO_LEN];
    202  1.1  riastrad 	u8	seq_num_v[HDCP_2_2_SEQ_NUM_LEN];
    203  1.1  riastrad 	u8	v_prime[HDCP_2_2_V_PRIME_HALF_LEN];
    204  1.1  riastrad 	u8	receiver_ids[HDCP_2_2_RECEIVER_IDS_MAX_LEN];
    205  1.1  riastrad } __packed;
    206  1.1  riastrad 
    207  1.1  riastrad struct hdcp2_rep_send_ack {
    208  1.1  riastrad 	u8	msg_id;
    209  1.1  riastrad 	u8	v[HDCP_2_2_V_PRIME_HALF_LEN];
    210  1.1  riastrad } __packed;
    211  1.1  riastrad 
    212  1.1  riastrad struct hdcp2_rep_stream_manage {
    213  1.1  riastrad 	u8			msg_id;
    214  1.1  riastrad 	u8			seq_num_m[HDCP_2_2_SEQ_NUM_LEN];
    215  1.1  riastrad 	__be16			k;
    216  1.1  riastrad 	struct hdcp2_streamid_type streams[HDCP_2_2_MAX_CONTENT_STREAMS_CNT];
    217  1.1  riastrad } __packed;
    218  1.1  riastrad 
    219  1.1  riastrad struct hdcp2_rep_stream_ready {
    220  1.1  riastrad 	u8	msg_id;
    221  1.1  riastrad 	u8	m_prime[HDCP_2_2_MPRIME_LEN];
    222  1.1  riastrad } __packed;
    223  1.1  riastrad 
    224  1.1  riastrad /* HDCP2.2 TIMEOUTs in mSec */
    225  1.1  riastrad #define HDCP_2_2_CERT_TIMEOUT_MS		100
    226  1.1  riastrad #define HDCP_2_2_HPRIME_NO_PAIRED_TIMEOUT_MS	1000
    227  1.1  riastrad #define HDCP_2_2_HPRIME_PAIRED_TIMEOUT_MS	200
    228  1.1  riastrad #define HDCP_2_2_PAIRING_TIMEOUT_MS		200
    229  1.1  riastrad #define	HDCP_2_2_HDMI_LPRIME_TIMEOUT_MS		20
    230  1.1  riastrad #define HDCP_2_2_DP_LPRIME_TIMEOUT_MS		7
    231  1.1  riastrad #define HDCP_2_2_RECVID_LIST_TIMEOUT_MS		3000
    232  1.1  riastrad #define HDCP_2_2_STREAM_READY_TIMEOUT_MS	100
    233  1.1  riastrad 
    234  1.1  riastrad /* HDMI HDCP2.2 Register Offsets */
    235  1.1  riastrad #define HDCP_2_2_HDMI_REG_VER_OFFSET		0x50
    236  1.1  riastrad #define HDCP_2_2_HDMI_REG_WR_MSG_OFFSET		0x60
    237  1.1  riastrad #define HDCP_2_2_HDMI_REG_RXSTATUS_OFFSET	0x70
    238  1.1  riastrad #define HDCP_2_2_HDMI_REG_RD_MSG_OFFSET		0x80
    239  1.1  riastrad #define HDCP_2_2_HDMI_REG_DBG_OFFSET		0xC0
    240  1.1  riastrad 
    241  1.1  riastrad #define HDCP_2_2_HDMI_SUPPORT_MASK		BIT(2)
    242  1.1  riastrad #define HDCP_2_2_RX_CAPS_VERSION_VAL		0x02
    243  1.1  riastrad #define HDCP_2_2_SEQ_NUM_MAX			0xFFFFFF
    244  1.1  riastrad #define	HDCP_2_2_DELAY_BEFORE_ENCRYPTION_EN	200
    245  1.1  riastrad 
    246  1.1  riastrad /* Below macros take a byte at a time and mask the bit(s) */
    247  1.1  riastrad #define HDCP_2_2_HDMI_RXSTATUS_LEN		2
    248  1.1  riastrad #define HDCP_2_2_HDMI_RXSTATUS_MSG_SZ_HI(x)	((x) & 0x3)
    249  1.1  riastrad #define HDCP_2_2_HDMI_RXSTATUS_READY(x)		((x) & BIT(2))
    250  1.1  riastrad #define HDCP_2_2_HDMI_RXSTATUS_REAUTH_REQ(x)	((x) & BIT(3))
    251  1.1  riastrad 
    252  1.1  riastrad /*
    253  1.1  riastrad  * Helper functions to convert 24bit big endian hdcp sequence number to
    254  1.1  riastrad  * host format and back
    255  1.1  riastrad  */
    256  1.1  riastrad static inline
    257  1.1  riastrad u32 drm_hdcp_be24_to_cpu(const u8 seq_num[HDCP_2_2_SEQ_NUM_LEN])
    258  1.1  riastrad {
    259  1.1  riastrad 	return (u32)(seq_num[2] | seq_num[1] << 8 | seq_num[0] << 16);
    260  1.1  riastrad }
    261  1.1  riastrad 
    262  1.1  riastrad static inline
    263  1.1  riastrad void drm_hdcp_cpu_to_be24(u8 seq_num[HDCP_2_2_SEQ_NUM_LEN], u32 val)
    264  1.1  riastrad {
    265  1.1  riastrad 	seq_num[0] = val >> 16;
    266  1.1  riastrad 	seq_num[1] = val >> 8;
    267  1.1  riastrad 	seq_num[2] = val;
    268  1.1  riastrad }
    269  1.1  riastrad 
    270  1.1  riastrad #define DRM_HDCP_SRM_GEN1_MAX_BYTES		(5 * 1024)
    271  1.1  riastrad #define DRM_HDCP_1_4_SRM_ID			0x8
    272  1.1  riastrad #define DRM_HDCP_SRM_ID_MASK			(0xF << 4)
    273  1.1  riastrad #define DRM_HDCP_1_4_VRL_LENGTH_SIZE		3
    274  1.1  riastrad #define DRM_HDCP_1_4_DCP_SIG_SIZE		40
    275  1.1  riastrad #define DRM_HDCP_2_SRM_ID			0x9
    276  1.1  riastrad #define DRM_HDCP_2_INDICATOR			0x1
    277  1.1  riastrad #define DRM_HDCP_2_INDICATOR_MASK		0xF
    278  1.1  riastrad #define DRM_HDCP_2_VRL_LENGTH_SIZE		3
    279  1.1  riastrad #define DRM_HDCP_2_DCP_SIG_SIZE			384
    280  1.1  riastrad #define DRM_HDCP_2_NO_OF_DEV_PLUS_RESERVED_SZ	4
    281  1.1  riastrad #define DRM_HDCP_2_KSV_COUNT_2_LSBITS(byte)	(((byte) & 0xC) >> 6)
    282  1.1  riastrad 
    283  1.1  riastrad struct hdcp_srm_header {
    284  1.1  riastrad 	u8 srm_id;
    285  1.1  riastrad 	u8 reserved;
    286  1.1  riastrad 	__be16 srm_version;
    287  1.1  riastrad 	u8 srm_gen_no;
    288  1.1  riastrad } __packed;
    289  1.1  riastrad 
    290  1.1  riastrad struct drm_device;
    291  1.1  riastrad struct drm_connector;
    292  1.1  riastrad 
    293  1.1  riastrad bool drm_hdcp_check_ksvs_revoked(struct drm_device *dev,
    294  1.1  riastrad 				 u8 *ksvs, u32 ksv_count);
    295  1.1  riastrad int drm_connector_attach_content_protection_property(
    296  1.1  riastrad 		struct drm_connector *connector, bool hdcp_content_type);
    297  1.1  riastrad void drm_hdcp_update_content_protection(struct drm_connector *connector,
    298  1.1  riastrad 					u64 val);
    299  1.1  riastrad 
    300  1.1  riastrad /* Content Type classification for HDCP2.2 vs others */
    301  1.1  riastrad #define DRM_MODE_HDCP_CONTENT_TYPE0		0
    302  1.1  riastrad #define DRM_MODE_HDCP_CONTENT_TYPE1		1
    303  1.1  riastrad 
    304  1.1  riastrad #endif
    305