1 /* SPDX-License-Identifier: (GPL-2.0+) */ 2 /* 3 * Copyright © 2017-2019 Intel Corporation 4 * 5 * Authors: 6 * Ramalingam C <ramalingam.c@intel.com> 7 */ 8 9 #ifndef _I915_HDCP_INTERFACE_H_ 10 #define _I915_HDCP_INTERFACE_H_ 11 12 #include <linux/mutex.h> 13 #include <linux/device.h> 14 #include <drm/display/drm_hdcp.h> 15 16 /** 17 * enum hdcp_port_type - HDCP port implementation type defined by ME/GSC FW 18 * @HDCP_PORT_TYPE_INVALID: Invalid hdcp port type 19 * @HDCP_PORT_TYPE_INTEGRATED: In-Host HDCP2.x port 20 * @HDCP_PORT_TYPE_LSPCON: HDCP2.2 discrete wired Tx port with LSPCON 21 * (HDMI 2.0) solution 22 * @HDCP_PORT_TYPE_CPDP: HDCP2.2 discrete wired Tx port using the CPDP (DP 1.3) 23 * solution 24 */ 25 enum hdcp_port_type { 26 HDCP_PORT_TYPE_INVALID, 27 HDCP_PORT_TYPE_INTEGRATED, 28 HDCP_PORT_TYPE_LSPCON, 29 HDCP_PORT_TYPE_CPDP 30 }; 31 32 /** 33 * enum hdcp_wired_protocol - HDCP adaptation used on the port 34 * @HDCP_PROTOCOL_INVALID: Invalid HDCP adaptation protocol 35 * @HDCP_PROTOCOL_HDMI: HDMI adaptation of HDCP used on the port 36 * @HDCP_PROTOCOL_DP: DP adaptation of HDCP used on the port 37 */ 38 enum hdcp_wired_protocol { 39 HDCP_PROTOCOL_INVALID, 40 HDCP_PROTOCOL_HDMI, 41 HDCP_PROTOCOL_DP 42 }; 43 44 enum hdcp_ddi { 45 HDCP_DDI_INVALID_PORT = 0x0, 46 47 HDCP_DDI_B = 1, 48 HDCP_DDI_C, 49 HDCP_DDI_D, 50 HDCP_DDI_E, 51 HDCP_DDI_F, 52 HDCP_DDI_A = 7, 53 HDCP_DDI_RANGE_END = HDCP_DDI_A, 54 }; 55 56 /** 57 * enum hdcp_tc - ME/GSC Firmware defined index for transcoders 58 * @HDCP_INVALID_TRANSCODER: Index for Invalid transcoder 59 * @HDCP_TRANSCODER_EDP: Index for EDP Transcoder 60 * @HDCP_TRANSCODER_DSI0: Index for DSI0 Transcoder 61 * @HDCP_TRANSCODER_DSI1: Index for DSI1 Transcoder 62 * @HDCP_TRANSCODER_A: Index for Transcoder A 63 * @HDCP_TRANSCODER_B: Index for Transcoder B 64 * @HDCP_TRANSCODER_C: Index for Transcoder C 65 * @HDCP_TRANSCODER_D: Index for Transcoder D 66 */ 67 enum hdcp_transcoder { 68 HDCP_INVALID_TRANSCODER = 0x00, 69 HDCP_TRANSCODER_EDP, 70 HDCP_TRANSCODER_DSI0, 71 HDCP_TRANSCODER_DSI1, 72 HDCP_TRANSCODER_A = 0x10, 73 HDCP_TRANSCODER_B, 74 HDCP_TRANSCODER_C, 75 HDCP_TRANSCODER_D 76 }; 77 78 /** 79 * struct hdcp_port_data - intel specific HDCP port data 80 * @hdcp_ddi: ddi index as per ME/GSC FW 81 * @hdcp_transcoder: transcoder index as per ME/GSC FW 82 * @port_type: HDCP port type as per ME/GSC FW classification 83 * @protocol: HDCP adaptation as per ME/GSC FW 84 * @k: No of streams transmitted on a port. Only on DP MST this is != 1 85 * @seq_num_m: Count of RepeaterAuth_Stream_Manage msg propagated. 86 * Initialized to 0 on AKE_INIT. Incremented after every successful 87 * transmission of RepeaterAuth_Stream_Manage message. When it rolls 88 * over re-Auth has to be triggered. 89 * @streams: struct hdcp2_streamid_type[k]. Defines the type and id for the 90 * streams 91 */ 92 struct hdcp_port_data { 93 enum hdcp_ddi hdcp_ddi; 94 enum hdcp_transcoder hdcp_transcoder; 95 u8 port_type; 96 u8 protocol; 97 u16 k; 98 u32 seq_num_m; 99 struct hdcp2_streamid_type *streams; 100 }; 101 102 /** 103 * struct i915_hdcp_ops- ops for HDCP2.2 services. 104 * @owner: Module providing the ops 105 * @initiate_hdcp2_session: Initiate a Wired HDCP2.2 Tx Session. 106 * And Prepare AKE_Init. 107 * @verify_receiver_cert_prepare_km: Verify the Receiver Certificate 108 * AKE_Send_Cert and prepare 109 AKE_Stored_Km/AKE_No_Stored_Km 110 * @verify_hprime: Verify AKE_Send_H_prime 111 * @store_pairing_info: Store pairing info received 112 * @initiate_locality_check: Prepare LC_Init 113 * @verify_lprime: Verify lprime 114 * @get_session_key: Prepare SKE_Send_Eks 115 * @repeater_check_flow_prepare_ack: Validate the Downstream topology 116 * and prepare rep_ack 117 * @verify_mprime: Verify mprime 118 * @enable_hdcp_authentication: Mark a port as authenticated. 119 * @close_hdcp_session: Close the Wired HDCP Tx session per port. 120 * This also disables the authenticated state of the port. 121 */ 122 struct i915_hdcp_ops { 123 /** 124 * @owner: hdcp module 125 */ 126 struct module *owner; 127 128 int (*initiate_hdcp2_session)(struct device *dev, 129 struct hdcp_port_data *data, 130 struct hdcp2_ake_init *ake_data); 131 int (*verify_receiver_cert_prepare_km)(struct device *dev, 132 struct hdcp_port_data *data, 133 struct hdcp2_ake_send_cert 134 *rx_cert, 135 bool *km_stored, 136 struct hdcp2_ake_no_stored_km 137 *ek_pub_km, 138 size_t *msg_sz); 139 int (*verify_hprime)(struct device *dev, 140 struct hdcp_port_data *data, 141 struct hdcp2_ake_send_hprime *rx_hprime); 142 int (*store_pairing_info)(struct device *dev, 143 struct hdcp_port_data *data, 144 struct hdcp2_ake_send_pairing_info 145 *pairing_info); 146 int (*initiate_locality_check)(struct device *dev, 147 struct hdcp_port_data *data, 148 struct hdcp2_lc_init *lc_init_data); 149 int (*verify_lprime)(struct device *dev, 150 struct hdcp_port_data *data, 151 struct hdcp2_lc_send_lprime *rx_lprime); 152 int (*get_session_key)(struct device *dev, 153 struct hdcp_port_data *data, 154 struct hdcp2_ske_send_eks *ske_data); 155 int (*repeater_check_flow_prepare_ack)(struct device *dev, 156 struct hdcp_port_data *data, 157 struct hdcp2_rep_send_receiverid_list 158 *rep_topology, 159 struct hdcp2_rep_send_ack 160 *rep_send_ack); 161 int (*verify_mprime)(struct device *dev, 162 struct hdcp_port_data *data, 163 struct hdcp2_rep_stream_ready *stream_ready); 164 int (*enable_hdcp_authentication)(struct device *dev, 165 struct hdcp_port_data *data); 166 int (*close_hdcp_session)(struct device *dev, 167 struct hdcp_port_data *data); 168 }; 169 170 /** 171 * struct i915_hdcp_arbiter - Used for communication between i915 172 * and hdcp drivers for the HDCP2.2 services 173 * @hdcp_dev: device that provide the HDCP2.2 service from MEI Bus. 174 * @hdcp_ops: Ops implemented by hdcp driver or intel_hdcp_gsc , used by i915 driver. 175 */ 176 struct i915_hdcp_arbiter { 177 struct device *hdcp_dev; 178 const struct i915_hdcp_ops *ops; 179 180 /* To protect the above members. */ 181 struct mutex mutex; 182 }; 183 184 /* fw_hdcp_status: Enumeration of all HDCP Status Codes */ 185 enum fw_hdcp_status { 186 FW_HDCP_STATUS_SUCCESS = 0x0000, 187 188 /* WiDi Generic Status Codes */ 189 FW_HDCP_STATUS_INTERNAL_ERROR = 0x1000, 190 FW_HDCP_STATUS_UNKNOWN_ERROR = 0x1001, 191 FW_HDCP_STATUS_INCORRECT_API_VERSION = 0x1002, 192 FW_HDCP_STATUS_INVALID_FUNCTION = 0x1003, 193 FW_HDCP_STATUS_INVALID_BUFFER_LENGTH = 0x1004, 194 FW_HDCP_STATUS_INVALID_PARAMS = 0x1005, 195 FW_HDCP_STATUS_AUTHENTICATION_FAILED = 0x1006, 196 197 /* WiDi Status Codes */ 198 FW_HDCP_INVALID_SESSION_STATE = 0x6000, 199 FW_HDCP_SRM_FRAGMENT_UNEXPECTED = 0x6001, 200 FW_HDCP_SRM_INVALID_LENGTH = 0x6002, 201 FW_HDCP_SRM_FRAGMENT_OFFSET_INVALID = 0x6003, 202 FW_HDCP_SRM_VERIFICATION_FAILED = 0x6004, 203 FW_HDCP_SRM_VERSION_TOO_OLD = 0x6005, 204 FW_HDCP_RX_CERT_VERIFICATION_FAILED = 0x6006, 205 FW_HDCP_RX_REVOKED = 0x6007, 206 FW_HDCP_H_VERIFICATION_FAILED = 0x6008, 207 FW_HDCP_REPEATER_CHECK_UNEXPECTED = 0x6009, 208 FW_HDCP_TOPOLOGY_MAX_EXCEEDED = 0x600A, 209 FW_HDCP_V_VERIFICATION_FAILED = 0x600B, 210 FW_HDCP_L_VERIFICATION_FAILED = 0x600C, 211 FW_HDCP_STREAM_KEY_ALLOC_FAILED = 0x600D, 212 FW_HDCP_BASE_KEY_RESET_FAILED = 0x600E, 213 FW_HDCP_NONCE_GENERATION_FAILED = 0x600F, 214 FW_HDCP_STATUS_INVALID_E_KEY_STATE = 0x6010, 215 FW_HDCP_STATUS_INVALID_CS_ICV = 0x6011, 216 FW_HDCP_STATUS_INVALID_KB_KEY_STATE = 0x6012, 217 FW_HDCP_STATUS_INVALID_PAVP_MODE_ICV = 0x6013, 218 FW_HDCP_STATUS_INVALID_PAVP_MODE = 0x6014, 219 FW_HDCP_STATUS_LC_MAX_ATTEMPTS = 0x6015, 220 221 /* New status for HDCP 2.1 */ 222 FW_HDCP_STATUS_MISMATCH_IN_M = 0x6016, 223 224 /* New status code for HDCP 2.2 Rx */ 225 FW_HDCP_STATUS_RX_PROV_NOT_ALLOWED = 0x6017, 226 FW_HDCP_STATUS_RX_PROV_WRONG_SUBJECT = 0x6018, 227 FW_HDCP_RX_NEEDS_PROVISIONING = 0x6019, 228 FW_HDCP_BKSV_ICV_AUTH_FAILED = 0x6020, 229 FW_HDCP_STATUS_INVALID_STREAM_ID = 0x6021, 230 FW_HDCP_STATUS_CHAIN_NOT_INITIALIZED = 0x6022, 231 FW_HDCP_FAIL_NOT_EXPECTED = 0x6023, 232 FW_HDCP_FAIL_HDCP_OFF = 0x6024, 233 FW_HDCP_FAIL_INVALID_PAVP_MEMORY_MODE = 0x6025, 234 FW_HDCP_FAIL_AES_ECB_FAILURE = 0x6026, 235 FW_HDCP_FEATURE_NOT_SUPPORTED = 0x6027, 236 FW_HDCP_DMA_READ_ERROR = 0x6028, 237 FW_HDCP_DMA_WRITE_ERROR = 0x6029, 238 FW_HDCP_FAIL_INVALID_PACKET_SIZE = 0x6030, 239 FW_HDCP_H264_PARSING_ERROR = 0x6031, 240 FW_HDCP_HDCP2_ERRATA_VIDEO_VIOLATION = 0x6032, 241 FW_HDCP_HDCP2_ERRATA_AUDIO_VIOLATION = 0x6033, 242 FW_HDCP_TX_ACTIVE_ERROR = 0x6034, 243 FW_HDCP_MODE_CHANGE_ERROR = 0x6035, 244 FW_HDCP_STREAM_TYPE_ERROR = 0x6036, 245 FW_HDCP_STREAM_MANAGE_NOT_POSSIBLE = 0x6037, 246 247 FW_HDCP_STATUS_PORT_INVALID_COMMAND = 0x6038, 248 FW_HDCP_STATUS_UNSUPPORTED_PROTOCOL = 0x6039, 249 FW_HDCP_STATUS_INVALID_PORT_INDEX = 0x603a, 250 FW_HDCP_STATUS_TX_AUTH_NEEDED = 0x603b, 251 FW_HDCP_STATUS_NOT_INTEGRATED_PORT = 0x603c, 252 FW_HDCP_STATUS_SESSION_MAX_REACHED = 0x603d, 253 254 /* hdcp capable bit is not set in rx_caps(error is unique to DP) */ 255 FW_HDCP_STATUS_NOT_HDCP_CAPABLE = 0x6041, 256 257 FW_HDCP_STATUS_INVALID_STREAM_COUNT = 0x6042, 258 }; 259 260 #define HDCP_API_VERSION 0x00010000 261 262 #define HDCP_M_LEN 16 263 #define HDCP_KH_LEN 16 264 265 /* Payload Buffer size(Excluding Header) for CMDs and corresponding response */ 266 /* Wired_Tx_AKE */ 267 #define WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_IN (4 + 1) 268 #define WIRED_CMD_BUF_LEN_INITIATE_HDCP2_SESSION_OUT (4 + 8 + 3) 269 270 #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_IN (4 + 522 + 8 + 3) 271 #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_MIN_OUT (4 + 1 + 3 + 16 + 16) 272 #define WIRED_CMD_BUF_LEN_VERIFY_RECEIVER_CERT_MAX_OUT (4 + 1 + 3 + 128) 273 274 #define WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_IN (4 + 32) 275 #define WIRED_CMD_BUF_LEN_AKE_SEND_HPRIME_OUT (4) 276 277 #define WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_IN (4 + 16) 278 #define WIRED_CMD_BUF_LEN_SEND_PAIRING_INFO_OUT (4) 279 280 #define WIRED_CMD_BUF_LEN_CLOSE_SESSION_IN (4) 281 #define WIRED_CMD_BUF_LEN_CLOSE_SESSION_OUT (4) 282 283 /* Wired_Tx_LC */ 284 #define WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_IN (4) 285 #define WIRED_CMD_BUF_LEN_INIT_LOCALITY_CHECK_OUT (4 + 8) 286 287 #define WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN (4 + 32) 288 #define WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_OUT (4) 289 290 /* Wired_Tx_SKE */ 291 #define WIRED_CMD_BUF_LEN_GET_SESSION_KEY_IN (4) 292 #define WIRED_CMD_BUF_LEN_GET_SESSION_KEY_OUT (4 + 16 + 8) 293 294 /* Wired_Tx_SKE */ 295 #define WIRED_CMD_BUF_LEN_ENABLE_AUTH_IN (4 + 1) 296 #define WIRED_CMD_BUF_LEN_ENABLE_AUTH_OUT (4) 297 298 /* Wired_Tx_Repeater */ 299 #define WIRED_CMD_BUF_LEN_VERIFY_REPEATER_IN (4 + 2 + 3 + 16 + 155) 300 #define WIRED_CMD_BUF_LEN_VERIFY_REPEATER_OUT (4 + 1 + 16) 301 302 #define WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_MIN_IN (4 + 3 + \ 303 32 + 2 + 2) 304 305 #define WIRED_CMD_BUF_LEN_REPEATER_AUTH_STREAM_REQ_OUT (4) 306 307 /* hdcp_command_id: Enumeration of all WIRED HDCP Command IDs */ 308 enum hdcp_command_id { 309 _WIDI_COMMAND_BASE = 0x00030000, 310 WIDI_INITIATE_HDCP2_SESSION = _WIDI_COMMAND_BASE, 311 HDCP_GET_SRM_STATUS, 312 HDCP_SEND_SRM_FRAGMENT, 313 314 /* The wired HDCP Tx commands */ 315 _WIRED_COMMAND_BASE = 0x00031000, 316 WIRED_INITIATE_HDCP2_SESSION = _WIRED_COMMAND_BASE, 317 WIRED_VERIFY_RECEIVER_CERT, 318 WIRED_AKE_SEND_HPRIME, 319 WIRED_AKE_SEND_PAIRING_INFO, 320 WIRED_INIT_LOCALITY_CHECK, 321 WIRED_VALIDATE_LOCALITY, 322 WIRED_GET_SESSION_KEY, 323 WIRED_ENABLE_AUTH, 324 WIRED_VERIFY_REPEATER, 325 WIRED_REPEATER_AUTH_STREAM_REQ, 326 WIRED_CLOSE_SESSION, 327 328 _WIRED_COMMANDS_COUNT, 329 }; 330 331 union encrypted_buff { 332 u8 e_kpub_km[HDCP_2_2_E_KPUB_KM_LEN]; 333 u8 e_kh_km_m[HDCP_2_2_E_KH_KM_M_LEN]; 334 struct { 335 u8 e_kh_km[HDCP_KH_LEN]; 336 u8 m[HDCP_M_LEN]; 337 } __packed; 338 }; 339 340 /* HDCP HECI message header. All header values are little endian. */ 341 struct hdcp_cmd_header { 342 u32 api_version; 343 u32 command_id; 344 enum fw_hdcp_status status; 345 /* Length of the HECI message (excluding the header) */ 346 u32 buffer_len; 347 } __packed; 348 349 /* Empty command request or response. No data follows the header. */ 350 struct hdcp_cmd_no_data { 351 struct hdcp_cmd_header header; 352 } __packed; 353 354 /* Uniquely identifies the hdcp port being addressed for a given command. */ 355 struct hdcp_port_id { 356 u8 integrated_port_type; 357 /* physical_port is used until Gen11.5. Must be zero for Gen11.5+ */ 358 u8 physical_port; 359 /* attached_transcoder is for Gen11.5+. Set to zero for <Gen11.5 */ 360 u8 attached_transcoder; 361 u8 reserved; 362 } __packed; 363 364 /* 365 * Data structures for integrated wired HDCP2 Tx in 366 * support of the AKE protocol 367 */ 368 /* HECI struct for integrated wired HDCP Tx session initiation. */ 369 struct wired_cmd_initiate_hdcp2_session_in { 370 struct hdcp_cmd_header header; 371 struct hdcp_port_id port; 372 u8 protocol; /* for HDMI vs DP */ 373 } __packed; 374 375 struct wired_cmd_initiate_hdcp2_session_out { 376 struct hdcp_cmd_header header; 377 struct hdcp_port_id port; 378 u8 r_tx[HDCP_2_2_RTX_LEN]; 379 struct hdcp2_tx_caps tx_caps; 380 } __packed; 381 382 /* HECI struct for ending an integrated wired HDCP Tx session. */ 383 struct wired_cmd_close_session_in { 384 struct hdcp_cmd_header header; 385 struct hdcp_port_id port; 386 } __packed; 387 388 struct wired_cmd_close_session_out { 389 struct hdcp_cmd_header header; 390 struct hdcp_port_id port; 391 } __packed; 392 393 /* HECI struct for integrated wired HDCP Tx Rx Cert verification. */ 394 struct wired_cmd_verify_receiver_cert_in { 395 struct hdcp_cmd_header header; 396 struct hdcp_port_id port; 397 struct hdcp2_cert_rx cert_rx; 398 u8 r_rx[HDCP_2_2_RRX_LEN]; 399 u8 rx_caps[HDCP_2_2_RXCAPS_LEN]; 400 } __packed; 401 402 struct wired_cmd_verify_receiver_cert_out { 403 struct hdcp_cmd_header header; 404 struct hdcp_port_id port; 405 u8 km_stored; 406 u8 reserved[3]; 407 union encrypted_buff ekm_buff; 408 } __packed; 409 410 /* HECI struct for verification of Rx's Hprime in a HDCP Tx session */ 411 struct wired_cmd_ake_send_hprime_in { 412 struct hdcp_cmd_header header; 413 struct hdcp_port_id port; 414 u8 h_prime[HDCP_2_2_H_PRIME_LEN]; 415 } __packed; 416 417 struct wired_cmd_ake_send_hprime_out { 418 struct hdcp_cmd_header header; 419 struct hdcp_port_id port; 420 } __packed; 421 422 /* 423 * HECI struct for sending in AKE pairing data generated by the Rx in an 424 * integrated wired HDCP Tx session. 425 */ 426 struct wired_cmd_ake_send_pairing_info_in { 427 struct hdcp_cmd_header header; 428 struct hdcp_port_id port; 429 u8 e_kh_km[HDCP_2_2_E_KH_KM_LEN]; 430 } __packed; 431 432 struct wired_cmd_ake_send_pairing_info_out { 433 struct hdcp_cmd_header header; 434 struct hdcp_port_id port; 435 } __packed; 436 437 /* Data structures for integrated wired HDCP2 Tx in support of the LC protocol*/ 438 /* 439 * HECI struct for initiating locality check with an 440 * integrated wired HDCP Tx session. 441 */ 442 struct wired_cmd_init_locality_check_in { 443 struct hdcp_cmd_header header; 444 struct hdcp_port_id port; 445 } __packed; 446 447 struct wired_cmd_init_locality_check_out { 448 struct hdcp_cmd_header header; 449 struct hdcp_port_id port; 450 u8 r_n[HDCP_2_2_RN_LEN]; 451 } __packed; 452 453 /* 454 * HECI struct for validating an Rx's LPrime value in an 455 * integrated wired HDCP Tx session. 456 */ 457 struct wired_cmd_validate_locality_in { 458 struct hdcp_cmd_header header; 459 struct hdcp_port_id port; 460 u8 l_prime[HDCP_2_2_L_PRIME_LEN]; 461 } __packed; 462 463 struct wired_cmd_validate_locality_out { 464 struct hdcp_cmd_header header; 465 struct hdcp_port_id port; 466 } __packed; 467 468 /* 469 * Data structures for integrated wired HDCP2 Tx in support of the 470 * SKE protocol 471 */ 472 /* HECI struct for creating session key */ 473 struct wired_cmd_get_session_key_in { 474 struct hdcp_cmd_header header; 475 struct hdcp_port_id port; 476 } __packed; 477 478 struct wired_cmd_get_session_key_out { 479 struct hdcp_cmd_header header; 480 struct hdcp_port_id port; 481 u8 e_dkey_ks[HDCP_2_2_E_DKEY_KS_LEN]; 482 u8 r_iv[HDCP_2_2_RIV_LEN]; 483 } __packed; 484 485 /* HECI struct for the Tx enable authentication command */ 486 struct wired_cmd_enable_auth_in { 487 struct hdcp_cmd_header header; 488 struct hdcp_port_id port; 489 u8 stream_type; 490 } __packed; 491 492 struct wired_cmd_enable_auth_out { 493 struct hdcp_cmd_header header; 494 struct hdcp_port_id port; 495 } __packed; 496 497 /* 498 * Data structures for integrated wired HDCP2 Tx in support of 499 * the repeater protocols 500 */ 501 /* 502 * HECI struct for verifying the downstream repeater's HDCP topology in an 503 * integrated wired HDCP Tx session. 504 */ 505 struct wired_cmd_verify_repeater_in { 506 struct hdcp_cmd_header header; 507 struct hdcp_port_id port; 508 u8 rx_info[HDCP_2_2_RXINFO_LEN]; 509 u8 seq_num_v[HDCP_2_2_SEQ_NUM_LEN]; 510 u8 v_prime[HDCP_2_2_V_PRIME_HALF_LEN]; 511 u8 receiver_ids[HDCP_2_2_RECEIVER_IDS_MAX_LEN]; 512 } __packed; 513 514 struct wired_cmd_verify_repeater_out { 515 struct hdcp_cmd_header header; 516 struct hdcp_port_id port; 517 u8 content_type_supported; 518 u8 v[HDCP_2_2_V_PRIME_HALF_LEN]; 519 } __packed; 520 521 /* 522 * HECI struct in support of stream management in an 523 * integrated wired HDCP Tx session. 524 */ 525 struct wired_cmd_repeater_auth_stream_req_in { 526 struct hdcp_cmd_header header; 527 struct hdcp_port_id port; 528 u8 seq_num_m[HDCP_2_2_SEQ_NUM_LEN]; 529 u8 m_prime[HDCP_2_2_MPRIME_LEN]; 530 __be16 k; 531 struct hdcp2_streamid_type streams[]; 532 } __packed; 533 534 struct wired_cmd_repeater_auth_stream_req_out { 535 struct hdcp_cmd_header header; 536 struct hdcp_port_id port; 537 } __packed; 538 539 #endif /* _I915_HDCP_INTERFACE_H_ */ 540