1*514c37e3STomas Winkler /* SPDX-License-Identifier: GPL-2.0 */ 2cf8ecce2SRamalingam C /* 3cf8ecce2SRamalingam C * Copyright © 2019 Intel Corporation 4cf8ecce2SRamalingam C * 5cf8ecce2SRamalingam C * Authors: 6cf8ecce2SRamalingam C * Ramalingam C <ramalingam.c@intel.com> 7cf8ecce2SRamalingam C */ 8cf8ecce2SRamalingam C 9cf8ecce2SRamalingam C #ifndef __MEI_HDCP_H__ 10cf8ecce2SRamalingam C #define __MEI_HDCP_H__ 11cf8ecce2SRamalingam C 12cf8ecce2SRamalingam C #include <drm/drm_hdcp.h> 13cf8ecce2SRamalingam C 14cf8ecce2SRamalingam C /* me_hdcp_status: Enumeration of all HDCP Status Codes */ 15cf8ecce2SRamalingam C enum me_hdcp_status { 16cf8ecce2SRamalingam C ME_HDCP_STATUS_SUCCESS = 0x0000, 17cf8ecce2SRamalingam C 18cf8ecce2SRamalingam C /* WiDi Generic Status Codes */ 19cf8ecce2SRamalingam C ME_HDCP_STATUS_INTERNAL_ERROR = 0x1000, 20cf8ecce2SRamalingam C ME_HDCP_STATUS_UNKNOWN_ERROR = 0x1001, 21cf8ecce2SRamalingam C ME_HDCP_STATUS_INCORRECT_API_VERSION = 0x1002, 22cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_FUNCTION = 0x1003, 23cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_BUFFER_LENGTH = 0x1004, 24cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_PARAMS = 0x1005, 25cf8ecce2SRamalingam C ME_HDCP_STATUS_AUTHENTICATION_FAILED = 0x1006, 26cf8ecce2SRamalingam C 27cf8ecce2SRamalingam C /* WiDi Status Codes */ 28cf8ecce2SRamalingam C ME_HDCP_INVALID_SESSION_STATE = 0x6000, 29cf8ecce2SRamalingam C ME_HDCP_SRM_FRAGMENT_UNEXPECTED = 0x6001, 30cf8ecce2SRamalingam C ME_HDCP_SRM_INVALID_LENGTH = 0x6002, 31cf8ecce2SRamalingam C ME_HDCP_SRM_FRAGMENT_OFFSET_INVALID = 0x6003, 32cf8ecce2SRamalingam C ME_HDCP_SRM_VERIFICATION_FAILED = 0x6004, 33cf8ecce2SRamalingam C ME_HDCP_SRM_VERSION_TOO_OLD = 0x6005, 34cf8ecce2SRamalingam C ME_HDCP_RX_CERT_VERIFICATION_FAILED = 0x6006, 35cf8ecce2SRamalingam C ME_HDCP_RX_REVOKED = 0x6007, 36cf8ecce2SRamalingam C ME_HDCP_H_VERIFICATION_FAILED = 0x6008, 37cf8ecce2SRamalingam C ME_HDCP_REPEATER_CHECK_UNEXPECTED = 0x6009, 38cf8ecce2SRamalingam C ME_HDCP_TOPOLOGY_MAX_EXCEEDED = 0x600A, 39cf8ecce2SRamalingam C ME_HDCP_V_VERIFICATION_FAILED = 0x600B, 40cf8ecce2SRamalingam C ME_HDCP_L_VERIFICATION_FAILED = 0x600C, 41cf8ecce2SRamalingam C ME_HDCP_STREAM_KEY_ALLOC_FAILED = 0x600D, 42cf8ecce2SRamalingam C ME_HDCP_BASE_KEY_RESET_FAILED = 0x600E, 43cf8ecce2SRamalingam C ME_HDCP_NONCE_GENERATION_FAILED = 0x600F, 44cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_E_KEY_STATE = 0x6010, 45cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_CS_ICV = 0x6011, 46cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_KB_KEY_STATE = 0x6012, 47cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_PAVP_MODE_ICV = 0x6013, 48cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_PAVP_MODE = 0x6014, 49cf8ecce2SRamalingam C ME_HDCP_STATUS_LC_MAX_ATTEMPTS = 0x6015, 50cf8ecce2SRamalingam C 51cf8ecce2SRamalingam C /* New status for HDCP 2.1 */ 52cf8ecce2SRamalingam C ME_HDCP_STATUS_MISMATCH_IN_M = 0x6016, 53cf8ecce2SRamalingam C 54cf8ecce2SRamalingam C /* New status code for HDCP 2.2 Rx */ 55cf8ecce2SRamalingam C ME_HDCP_STATUS_RX_PROV_NOT_ALLOWED = 0x6017, 56cf8ecce2SRamalingam C ME_HDCP_STATUS_RX_PROV_WRONG_SUBJECT = 0x6018, 57cf8ecce2SRamalingam C ME_HDCP_RX_NEEDS_PROVISIONING = 0x6019, 58cf8ecce2SRamalingam C ME_HDCP_BKSV_ICV_AUTH_FAILED = 0x6020, 59cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_STREAM_ID = 0x6021, 60cf8ecce2SRamalingam C ME_HDCP_STATUS_CHAIN_NOT_INITIALIZED = 0x6022, 61cf8ecce2SRamalingam C ME_HDCP_FAIL_NOT_EXPECTED = 0x6023, 62cf8ecce2SRamalingam C ME_HDCP_FAIL_HDCP_OFF = 0x6024, 63cf8ecce2SRamalingam C ME_HDCP_FAIL_INVALID_PAVP_MEMORY_MODE = 0x6025, 64cf8ecce2SRamalingam C ME_HDCP_FAIL_AES_ECB_FAILURE = 0x6026, 65cf8ecce2SRamalingam C ME_HDCP_FEATURE_NOT_SUPPORTED = 0x6027, 66cf8ecce2SRamalingam C ME_HDCP_DMA_READ_ERROR = 0x6028, 67cf8ecce2SRamalingam C ME_HDCP_DMA_WRITE_ERROR = 0x6029, 68cf8ecce2SRamalingam C ME_HDCP_FAIL_INVALID_PACKET_SIZE = 0x6030, 69cf8ecce2SRamalingam C ME_HDCP_H264_PARSING_ERROR = 0x6031, 70cf8ecce2SRamalingam C ME_HDCP_HDCP2_ERRATA_VIDEO_VIOLATION = 0x6032, 71cf8ecce2SRamalingam C ME_HDCP_HDCP2_ERRATA_AUDIO_VIOLATION = 0x6033, 72cf8ecce2SRamalingam C ME_HDCP_TX_ACTIVE_ERROR = 0x6034, 73cf8ecce2SRamalingam C ME_HDCP_MODE_CHANGE_ERROR = 0x6035, 74cf8ecce2SRamalingam C ME_HDCP_STREAM_TYPE_ERROR = 0x6036, 75cf8ecce2SRamalingam C ME_HDCP_STREAM_MANAGE_NOT_POSSIBLE = 0x6037, 76cf8ecce2SRamalingam C 77cf8ecce2SRamalingam C ME_HDCP_STATUS_PORT_INVALID_COMMAND = 0x6038, 78cf8ecce2SRamalingam C ME_HDCP_STATUS_UNSUPPORTED_PROTOCOL = 0x6039, 79cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_PORT_INDEX = 0x603a, 80cf8ecce2SRamalingam C ME_HDCP_STATUS_TX_AUTH_NEEDED = 0x603b, 81cf8ecce2SRamalingam C ME_HDCP_STATUS_NOT_INTEGRATED_PORT = 0x603c, 82cf8ecce2SRamalingam C ME_HDCP_STATUS_SESSION_MAX_REACHED = 0x603d, 83cf8ecce2SRamalingam C 84cf8ecce2SRamalingam C /* hdcp capable bit is not set in rx_caps(error is unique to DP) */ 85cf8ecce2SRamalingam C ME_HDCP_STATUS_NOT_HDCP_CAPABLE = 0x6041, 86cf8ecce2SRamalingam C 87cf8ecce2SRamalingam C ME_HDCP_STATUS_INVALID_STREAM_COUNT = 0x6042, 88cf8ecce2SRamalingam C }; 89cf8ecce2SRamalingam C 90cf8ecce2SRamalingam C #define HDCP_API_VERSION 0x00010000 91cf8ecce2SRamalingam C 92cf8ecce2SRamalingam C #define HDCP_M_LEN 16 93cf8ecce2SRamalingam C #define HDCP_KH_LEN 16 94cf8ecce2SRamalingam C 95cf8ecce2SRamalingam C /* Payload Buffer size(Excluding Header) for CMDs and corresponding response */ 96cf8ecce2SRamalingam C /* Wired_Tx_AKE */ 97cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN (4 + 1) 98cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_OUT (4 + 8 + 3) 99cf8ecce2SRamalingam C 100cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN (4 + 522 + 8 + 3) 101cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_MIN_OUT (4 + 1 + 3 + 16 + 16) 102cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_MAX_OUT (4 + 1 + 3 + 128) 103cf8ecce2SRamalingam C 104cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN (4 + 32) 105cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_OUT (4) 106cf8ecce2SRamalingam C 107cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN (4 + 16) 108cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_OUT (4) 109cf8ecce2SRamalingam C 110cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN (4) 111cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_CLOSE_SESSION_OUT (4) 112cf8ecce2SRamalingam C 113cf8ecce2SRamalingam C /* Wired_Tx_LC */ 114cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN (4) 115cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_OUT (4 + 8) 116cf8ecce2SRamalingam C 117cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN (4 + 32) 118cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_OUT (4) 119cf8ecce2SRamalingam C 120cf8ecce2SRamalingam C /* Wired_Tx_SKE */ 121cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN (4) 122cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_GET_SESSION_KEY_OUT (4 + 16 + 8) 123cf8ecce2SRamalingam C 124cf8ecce2SRamalingam C /* Wired_Tx_SKE */ 125cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN (4 + 1) 126cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_ENABLE_AUTH_OUT (4) 127cf8ecce2SRamalingam C 128cf8ecce2SRamalingam C /* Wired_Tx_Repeater */ 129cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN (4 + 2 + 3 + 16 + 155) 130cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_VERIFY_REPEATER_OUT (4 + 1 + 16) 131cf8ecce2SRamalingam C 132cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_MIN_IN (4 + 3 + \ 133cf8ecce2SRamalingam C 32 + 2 + 2) 134cf8ecce2SRamalingam C 135cf8ecce2SRamalingam C #define WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_OUT (4) 136cf8ecce2SRamalingam C 137cf8ecce2SRamalingam C /* hdcp_command_id: Enumeration of all WIRED HDCP Command IDs */ 138cf8ecce2SRamalingam C enum hdcp_command_id { 139cf8ecce2SRamalingam C _WIDI_COMMAND_BASE = 0x00030000, 140cf8ecce2SRamalingam C WIDI_INITIATE_HDCP2_SESSION = _WIDI_COMMAND_BASE, 141cf8ecce2SRamalingam C HDCP_GET_SRM_STATUS, 142cf8ecce2SRamalingam C HDCP_SEND_SRM_FRAGMENT, 143cf8ecce2SRamalingam C 144cf8ecce2SRamalingam C /* The wired HDCP Tx commands */ 145cf8ecce2SRamalingam C _WIRED_COMMAND_BASE = 0x00031000, 146cf8ecce2SRamalingam C WIRED_INITIATE_HDCP2_SESSION = _WIRED_COMMAND_BASE, 147cf8ecce2SRamalingam C WIRED_VERIFY_RECEIVER_CERT, 148cf8ecce2SRamalingam C WIRED_AKE_SEND_HPRIME, 149cf8ecce2SRamalingam C WIRED_AKE_SEND_PAIRING_INFO, 150cf8ecce2SRamalingam C WIRED_INIT_LOCALITY_CHECK, 151cf8ecce2SRamalingam C WIRED_VALIDATE_LOCALITY, 152cf8ecce2SRamalingam C WIRED_GET_SESSION_KEY, 153cf8ecce2SRamalingam C WIRED_ENABLE_AUTH, 154cf8ecce2SRamalingam C WIRED_VERIFY_REPEATER, 155cf8ecce2SRamalingam C WIRED_REPEATER_AUTH_STREAM_REQ, 156cf8ecce2SRamalingam C WIRED_CLOSE_SESSION, 157cf8ecce2SRamalingam C 158cf8ecce2SRamalingam C _WIRED_COMMANDS_COUNT, 159cf8ecce2SRamalingam C }; 160cf8ecce2SRamalingam C 161cf8ecce2SRamalingam C union encrypted_buff { 162cf8ecce2SRamalingam C u8 e_kpub_km[HDCP_2_2_E_KPUB_KM_LEN]; 163cf8ecce2SRamalingam C u8 e_kh_km_m[HDCP_2_2_E_KH_KM_M_LEN]; 164cf8ecce2SRamalingam C struct { 165cf8ecce2SRamalingam C u8 e_kh_km[HDCP_KH_LEN]; 166cf8ecce2SRamalingam C u8 m[HDCP_M_LEN]; 167cf8ecce2SRamalingam C } __packed; 168cf8ecce2SRamalingam C }; 169cf8ecce2SRamalingam C 170cf8ecce2SRamalingam C /* HDCP HECI message header. All header values are little endian. */ 171cf8ecce2SRamalingam C struct hdcp_cmd_header { 172cf8ecce2SRamalingam C u32 api_version; 173cf8ecce2SRamalingam C u32 command_id; 174cf8ecce2SRamalingam C enum me_hdcp_status status; 175cf8ecce2SRamalingam C /* Length of the HECI message (excluding the header) */ 176cf8ecce2SRamalingam C u32 buffer_len; 177cf8ecce2SRamalingam C } __packed; 178cf8ecce2SRamalingam C 179cf8ecce2SRamalingam C /* Empty command request or response. No data follows the header. */ 180cf8ecce2SRamalingam C struct hdcp_cmd_no_data { 181cf8ecce2SRamalingam C struct hdcp_cmd_header header; 182cf8ecce2SRamalingam C } __packed; 183cf8ecce2SRamalingam C 184cf8ecce2SRamalingam C /* Uniquely identifies the hdcp port being addressed for a given command. */ 185cf8ecce2SRamalingam C struct hdcp_port_id { 186cf8ecce2SRamalingam C u8 integrated_port_type; 187cf8ecce2SRamalingam C u8 physical_port; 188cf8ecce2SRamalingam C u16 reserved; 189cf8ecce2SRamalingam C } __packed; 190cf8ecce2SRamalingam C 191cf8ecce2SRamalingam C /* 192cf8ecce2SRamalingam C * Data structures for integrated wired HDCP2 Tx in 193cf8ecce2SRamalingam C * support of the AKE protocol 194cf8ecce2SRamalingam C */ 195cf8ecce2SRamalingam C /* HECI struct for integrated wired HDCP Tx session initiation. */ 196cf8ecce2SRamalingam C struct wired_cmd_initiate_hdcp2_session_in { 197cf8ecce2SRamalingam C struct hdcp_cmd_header header; 198cf8ecce2SRamalingam C struct hdcp_port_id port; 199cf8ecce2SRamalingam C u8 protocol; /* for HDMI vs DP */ 200cf8ecce2SRamalingam C } __packed; 201cf8ecce2SRamalingam C 202cf8ecce2SRamalingam C struct wired_cmd_initiate_hdcp2_session_out { 203cf8ecce2SRamalingam C struct hdcp_cmd_header header; 204cf8ecce2SRamalingam C struct hdcp_port_id port; 205cf8ecce2SRamalingam C u8 r_tx[HDCP_2_2_RTX_LEN]; 206cf8ecce2SRamalingam C struct hdcp2_tx_caps tx_caps; 207cf8ecce2SRamalingam C } __packed; 208cf8ecce2SRamalingam C 209cf8ecce2SRamalingam C /* HECI struct for ending an integrated wired HDCP Tx session. */ 210cf8ecce2SRamalingam C struct wired_cmd_close_session_in { 211cf8ecce2SRamalingam C struct hdcp_cmd_header header; 212cf8ecce2SRamalingam C struct hdcp_port_id port; 213cf8ecce2SRamalingam C } __packed; 214cf8ecce2SRamalingam C 215cf8ecce2SRamalingam C struct wired_cmd_close_session_out { 216cf8ecce2SRamalingam C struct hdcp_cmd_header header; 217cf8ecce2SRamalingam C struct hdcp_port_id port; 218cf8ecce2SRamalingam C } __packed; 219cf8ecce2SRamalingam C 220cf8ecce2SRamalingam C /* HECI struct for integrated wired HDCP Tx Rx Cert verification. */ 221cf8ecce2SRamalingam C struct wired_cmd_verify_receiver_cert_in { 222cf8ecce2SRamalingam C struct hdcp_cmd_header header; 223cf8ecce2SRamalingam C struct hdcp_port_id port; 224cf8ecce2SRamalingam C struct hdcp2_cert_rx cert_rx; 225cf8ecce2SRamalingam C u8 r_rx[HDCP_2_2_RRX_LEN]; 226cf8ecce2SRamalingam C u8 rx_caps[HDCP_2_2_RXCAPS_LEN]; 227cf8ecce2SRamalingam C } __packed; 228cf8ecce2SRamalingam C 229cf8ecce2SRamalingam C struct wired_cmd_verify_receiver_cert_out { 230cf8ecce2SRamalingam C struct hdcp_cmd_header header; 231cf8ecce2SRamalingam C struct hdcp_port_id port; 232cf8ecce2SRamalingam C u8 km_stored; 233cf8ecce2SRamalingam C u8 reserved[3]; 234cf8ecce2SRamalingam C union encrypted_buff ekm_buff; 235cf8ecce2SRamalingam C } __packed; 236cf8ecce2SRamalingam C 237cf8ecce2SRamalingam C /* HECI struct for verification of Rx's Hprime in a HDCP Tx session */ 238cf8ecce2SRamalingam C struct wired_cmd_ake_send_hprime_in { 239cf8ecce2SRamalingam C struct hdcp_cmd_header header; 240cf8ecce2SRamalingam C struct hdcp_port_id port; 241cf8ecce2SRamalingam C u8 h_prime[HDCP_2_2_H_PRIME_LEN]; 242cf8ecce2SRamalingam C } __packed; 243cf8ecce2SRamalingam C 244cf8ecce2SRamalingam C struct wired_cmd_ake_send_hprime_out { 245cf8ecce2SRamalingam C struct hdcp_cmd_header header; 246cf8ecce2SRamalingam C struct hdcp_port_id port; 247cf8ecce2SRamalingam C } __packed; 248cf8ecce2SRamalingam C 249cf8ecce2SRamalingam C /* 250cf8ecce2SRamalingam C * HECI struct for sending in AKE pairing data generated by the Rx in an 251cf8ecce2SRamalingam C * integrated wired HDCP Tx session. 252cf8ecce2SRamalingam C */ 253cf8ecce2SRamalingam C struct wired_cmd_ake_send_pairing_info_in { 254cf8ecce2SRamalingam C struct hdcp_cmd_header header; 255cf8ecce2SRamalingam C struct hdcp_port_id port; 256cf8ecce2SRamalingam C u8 e_kh_km[HDCP_2_2_E_KH_KM_LEN]; 257cf8ecce2SRamalingam C } __packed; 258cf8ecce2SRamalingam C 259cf8ecce2SRamalingam C struct wired_cmd_ake_send_pairing_info_out { 260cf8ecce2SRamalingam C struct hdcp_cmd_header header; 261cf8ecce2SRamalingam C struct hdcp_port_id port; 262cf8ecce2SRamalingam C } __packed; 263cf8ecce2SRamalingam C 264cf8ecce2SRamalingam C /* Data structures for integrated wired HDCP2 Tx in support of the LC protocol*/ 265cf8ecce2SRamalingam C /* 266cf8ecce2SRamalingam C * HECI struct for initiating locality check with an 267cf8ecce2SRamalingam C * integrated wired HDCP Tx session. 268cf8ecce2SRamalingam C */ 269cf8ecce2SRamalingam C struct wired_cmd_init_locality_check_in { 270cf8ecce2SRamalingam C struct hdcp_cmd_header header; 271cf8ecce2SRamalingam C struct hdcp_port_id port; 272cf8ecce2SRamalingam C } __packed; 273cf8ecce2SRamalingam C 274cf8ecce2SRamalingam C struct wired_cmd_init_locality_check_out { 275cf8ecce2SRamalingam C struct hdcp_cmd_header header; 276cf8ecce2SRamalingam C struct hdcp_port_id port; 277cf8ecce2SRamalingam C u8 r_n[HDCP_2_2_RN_LEN]; 278cf8ecce2SRamalingam C } __packed; 279cf8ecce2SRamalingam C 280cf8ecce2SRamalingam C /* 281cf8ecce2SRamalingam C * HECI struct for validating an Rx's LPrime value in an 282cf8ecce2SRamalingam C * integrated wired HDCP Tx session. 283cf8ecce2SRamalingam C */ 284cf8ecce2SRamalingam C struct wired_cmd_validate_locality_in { 285cf8ecce2SRamalingam C struct hdcp_cmd_header header; 286cf8ecce2SRamalingam C struct hdcp_port_id port; 287cf8ecce2SRamalingam C u8 l_prime[HDCP_2_2_L_PRIME_LEN]; 288cf8ecce2SRamalingam C } __packed; 289cf8ecce2SRamalingam C 290cf8ecce2SRamalingam C struct wired_cmd_validate_locality_out { 291cf8ecce2SRamalingam C struct hdcp_cmd_header header; 292cf8ecce2SRamalingam C struct hdcp_port_id port; 293cf8ecce2SRamalingam C } __packed; 294cf8ecce2SRamalingam C 295cf8ecce2SRamalingam C /* 296cf8ecce2SRamalingam C * Data structures for integrated wired HDCP2 Tx in support of the 297cf8ecce2SRamalingam C * SKE protocol 298cf8ecce2SRamalingam C */ 299cf8ecce2SRamalingam C /* HECI struct for creating session key */ 300cf8ecce2SRamalingam C struct wired_cmd_get_session_key_in { 301cf8ecce2SRamalingam C struct hdcp_cmd_header header; 302cf8ecce2SRamalingam C struct hdcp_port_id port; 303cf8ecce2SRamalingam C } __packed; 304cf8ecce2SRamalingam C 305cf8ecce2SRamalingam C struct wired_cmd_get_session_key_out { 306cf8ecce2SRamalingam C struct hdcp_cmd_header header; 307cf8ecce2SRamalingam C struct hdcp_port_id port; 308cf8ecce2SRamalingam C u8 e_dkey_ks[HDCP_2_2_E_DKEY_KS_LEN]; 309cf8ecce2SRamalingam C u8 r_iv[HDCP_2_2_RIV_LEN]; 310cf8ecce2SRamalingam C } __packed; 311cf8ecce2SRamalingam C 312cf8ecce2SRamalingam C /* HECI struct for the Tx enable authentication command */ 313cf8ecce2SRamalingam C struct wired_cmd_enable_auth_in { 314cf8ecce2SRamalingam C struct hdcp_cmd_header header; 315cf8ecce2SRamalingam C struct hdcp_port_id port; 316cf8ecce2SRamalingam C u8 stream_type; 317cf8ecce2SRamalingam C } __packed; 318cf8ecce2SRamalingam C 319cf8ecce2SRamalingam C struct wired_cmd_enable_auth_out { 320cf8ecce2SRamalingam C struct hdcp_cmd_header header; 321cf8ecce2SRamalingam C struct hdcp_port_id port; 322cf8ecce2SRamalingam C } __packed; 323cf8ecce2SRamalingam C 324cf8ecce2SRamalingam C /* 325cf8ecce2SRamalingam C * Data structures for integrated wired HDCP2 Tx in support of 326cf8ecce2SRamalingam C * the repeater protocols 327cf8ecce2SRamalingam C */ 328cf8ecce2SRamalingam C /* 329cf8ecce2SRamalingam C * HECI struct for verifying the downstream repeater's HDCP topology in an 330cf8ecce2SRamalingam C * integrated wired HDCP Tx session. 331cf8ecce2SRamalingam C */ 332cf8ecce2SRamalingam C struct wired_cmd_verify_repeater_in { 333cf8ecce2SRamalingam C struct hdcp_cmd_header header; 334cf8ecce2SRamalingam C struct hdcp_port_id port; 335cf8ecce2SRamalingam C u8 rx_info[HDCP_2_2_RXINFO_LEN]; 336cf8ecce2SRamalingam C u8 seq_num_v[HDCP_2_2_SEQ_NUM_LEN]; 337cf8ecce2SRamalingam C u8 v_prime[HDCP_2_2_V_PRIME_HALF_LEN]; 338cf8ecce2SRamalingam C u8 receiver_ids[HDCP_2_2_RECEIVER_IDS_MAX_LEN]; 339cf8ecce2SRamalingam C } __packed; 340cf8ecce2SRamalingam C 341cf8ecce2SRamalingam C struct wired_cmd_verify_repeater_out { 342cf8ecce2SRamalingam C struct hdcp_cmd_header header; 343cf8ecce2SRamalingam C struct hdcp_port_id port; 344cf8ecce2SRamalingam C u8 content_type_supported; 345cf8ecce2SRamalingam C u8 v[HDCP_2_2_V_PRIME_HALF_LEN]; 346cf8ecce2SRamalingam C } __packed; 347cf8ecce2SRamalingam C 348cf8ecce2SRamalingam C /* 349cf8ecce2SRamalingam C * HECI struct in support of stream management in an 350cf8ecce2SRamalingam C * integrated wired HDCP Tx session. 351cf8ecce2SRamalingam C */ 352cf8ecce2SRamalingam C struct wired_cmd_repeater_auth_stream_req_in { 353cf8ecce2SRamalingam C struct hdcp_cmd_header header; 354cf8ecce2SRamalingam C struct hdcp_port_id port; 355cf8ecce2SRamalingam C u8 seq_num_m[HDCP_2_2_SEQ_NUM_LEN]; 356cf8ecce2SRamalingam C u8 m_prime[HDCP_2_2_MPRIME_LEN]; 357cf8ecce2SRamalingam C __be16 k; 358cf8ecce2SRamalingam C struct hdcp2_streamid_type streams[1]; 359cf8ecce2SRamalingam C } __packed; 360cf8ecce2SRamalingam C 361cf8ecce2SRamalingam C struct wired_cmd_repeater_auth_stream_req_out { 362cf8ecce2SRamalingam C struct hdcp_cmd_header header; 363cf8ecce2SRamalingam C struct hdcp_port_id port; 364cf8ecce2SRamalingam C } __packed; 365cf8ecce2SRamalingam C 366a37fb1e4SRamalingam C enum mei_fw_ddi { 367a37fb1e4SRamalingam C MEI_DDI_INVALID_PORT = 0x0, 368a37fb1e4SRamalingam C 369a37fb1e4SRamalingam C MEI_DDI_B = 1, 370a37fb1e4SRamalingam C MEI_DDI_C, 371a37fb1e4SRamalingam C MEI_DDI_D, 372a37fb1e4SRamalingam C MEI_DDI_E, 373a37fb1e4SRamalingam C MEI_DDI_F, 374a37fb1e4SRamalingam C MEI_DDI_A = 7, 375a37fb1e4SRamalingam C MEI_DDI_RANGE_END = MEI_DDI_A, 376a37fb1e4SRamalingam C }; 377cf8ecce2SRamalingam C #endif /* __MEI_HDCP_H__ */ 378