Lines Matching full:hdcp
29 #include "hdcp.h"
34 static void hdcp2_message_init(struct mod_hdcp *hdcp, in hdcp2_message_init() argument
37 in->session_handle = hdcp->auth.id; in hdcp2_message_init()
48 struct mod_hdcp *hdcp, uint8_t index) in mod_hdcp_remove_display_from_topology() argument
50 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_remove_display_from_topology()
53 get_active_display_at_index(hdcp, index); in mod_hdcp_remove_display_from_topology()
76 HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index); in mod_hdcp_remove_display_from_topology()
82 enum mod_hdcp_status mod_hdcp_add_display_to_topology(struct mod_hdcp *hdcp, in mod_hdcp_add_display_to_topology() argument
85 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_add_display_to_topology()
87 struct mod_hdcp_link *link = &hdcp->connection.link; in mod_hdcp_add_display_to_topology()
108 if (is_dp_hdcp(hdcp)) in mod_hdcp_add_display_to_topology()
122 HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index); in mod_hdcp_add_display_to_topology()
129 enum mod_hdcp_status mod_hdcp_hdcp1_create_session(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_create_session() argument
132 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_create_session()
133 struct mod_hdcp_display *display = get_first_active_display(hdcp); in mod_hdcp_hdcp1_create_session()
138 DRM_ERROR("Failed to create hdcp session. HDCP TA is not initialized."); in mod_hdcp_hdcp1_create_session()
152 hdcp->auth.id = hdcp_cmd->out_msg.hdcp1_create_session.session_handle; in mod_hdcp_hdcp1_create_session()
157 hdcp->auth.msg.hdcp1.ainfo = hdcp_cmd->out_msg.hdcp1_create_session.ainfo_primary; in mod_hdcp_hdcp1_create_session()
158 memcpy(hdcp->auth.msg.hdcp1.aksv, hdcp_cmd->out_msg.hdcp1_create_session.aksv_primary, in mod_hdcp_hdcp1_create_session()
159 sizeof(hdcp->auth.msg.hdcp1.aksv)); in mod_hdcp_hdcp1_create_session()
160 memcpy(hdcp->auth.msg.hdcp1.an, hdcp_cmd->out_msg.hdcp1_create_session.an_primary, in mod_hdcp_hdcp1_create_session()
161 sizeof(hdcp->auth.msg.hdcp1.an)); in mod_hdcp_hdcp1_create_session()
168 enum mod_hdcp_status mod_hdcp_hdcp1_destroy_session(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_destroy_session() argument
171 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_destroy_session()
180 hdcp_cmd->in_msg.hdcp1_destroy_session.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_destroy_session()
188 HDCP_TOP_HDCP1_DESTROY_SESSION_TRACE(hdcp); in mod_hdcp_hdcp1_destroy_session()
190 if (is_display_encryption_enabled(&hdcp->displays[i])) { in mod_hdcp_hdcp1_destroy_session()
191 hdcp->displays[i].state = in mod_hdcp_hdcp1_destroy_session()
194 hdcp, hdcp->displays[i].index); in mod_hdcp_hdcp1_destroy_session()
202 enum mod_hdcp_status mod_hdcp_hdcp1_validate_rx(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_validate_rx() argument
204 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_validate_rx()
212 hdcp_cmd->in_msg.hdcp1_first_part_authentication.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_validate_rx()
214 memcpy(hdcp_cmd->in_msg.hdcp1_first_part_authentication.bksv_primary, hdcp->auth.msg.hdcp1.bksv, in mod_hdcp_hdcp1_validate_rx()
217 hdcp_cmd->in_msg.hdcp1_first_part_authentication.r0_prime_primary = hdcp->auth.msg.hdcp1.r0p; in mod_hdcp_hdcp1_validate_rx()
218 hdcp_cmd->in_msg.hdcp1_first_part_authentication.bcaps = hdcp->auth.msg.hdcp1.bcaps; in mod_hdcp_hdcp1_validate_rx()
228 hdcp->connection.is_repeater = 1; in mod_hdcp_hdcp1_validate_rx()
231 hdcp->connection.is_repeater = 0; in mod_hdcp_hdcp1_validate_rx()
234 hdcp->connection.is_hdcp1_revoked = 1; in mod_hdcp_hdcp1_validate_rx()
243 enum mod_hdcp_status mod_hdcp_hdcp1_enable_encryption(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_enable_encryption() argument
245 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_enable_encryption()
247 struct mod_hdcp_display *display = get_first_active_display(hdcp); in mod_hdcp_hdcp1_enable_encryption()
254 hdcp_cmd->in_msg.hdcp1_enable_encryption.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_enable_encryption()
261 } else if (!is_dp_mst_hdcp(hdcp)) { in mod_hdcp_hdcp1_enable_encryption()
263 HDCP_HDCP1_ENABLED_TRACE(hdcp, display->index); in mod_hdcp_hdcp1_enable_encryption()
270 enum mod_hdcp_status mod_hdcp_hdcp1_validate_ksvlist_vp(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_validate_ksvlist_vp() argument
272 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_validate_ksvlist_vp()
280 hdcp_cmd->in_msg.hdcp1_second_part_authentication.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_validate_ksvlist_vp()
282 …hdcp_cmd->in_msg.hdcp1_second_part_authentication.ksv_list_size = hdcp->auth.msg.hdcp1.ksvlist_siz… in mod_hdcp_hdcp1_validate_ksvlist_vp()
283 memcpy(hdcp_cmd->in_msg.hdcp1_second_part_authentication.ksv_list, hdcp->auth.msg.hdcp1.ksvlist, in mod_hdcp_hdcp1_validate_ksvlist_vp()
284 hdcp->auth.msg.hdcp1.ksvlist_size); in mod_hdcp_hdcp1_validate_ksvlist_vp()
286 memcpy(hdcp_cmd->in_msg.hdcp1_second_part_authentication.v_prime, hdcp->auth.msg.hdcp1.vp, in mod_hdcp_hdcp1_validate_ksvlist_vp()
287 sizeof(hdcp->auth.msg.hdcp1.vp)); in mod_hdcp_hdcp1_validate_ksvlist_vp()
290 is_dp_hdcp(hdcp) ? hdcp->auth.msg.hdcp1.binfo_dp : hdcp->auth.msg.hdcp1.bstatus; in mod_hdcp_hdcp1_validate_ksvlist_vp()
301 hdcp->connection.is_hdcp1_revoked = 1; in mod_hdcp_hdcp1_validate_ksvlist_vp()
311 enum mod_hdcp_status mod_hdcp_hdcp1_enable_dp_stream_encryption(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_enable_dp_stream_encryption() argument
314 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_enable_dp_stream_encryption()
324 if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE) in mod_hdcp_hdcp1_enable_dp_stream_encryption()
329 hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_enable_dp_stream_encryption()
330 hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index; in mod_hdcp_hdcp1_enable_dp_stream_encryption()
340 hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED; in mod_hdcp_hdcp1_enable_dp_stream_encryption()
341 HDCP_HDCP1_ENABLED_TRACE(hdcp, hdcp->displays[i].index); in mod_hdcp_hdcp1_enable_dp_stream_encryption()
348 enum mod_hdcp_status mod_hdcp_hdcp1_link_maintenance(struct mod_hdcp *hdcp) in mod_hdcp_hdcp1_link_maintenance() argument
350 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp1_link_maintenance()
359 hdcp_cmd->in_msg.hdcp1_get_encryption_status.session_handle = hdcp->auth.id; in mod_hdcp_hdcp1_link_maintenance()
374 enum mod_hdcp_status mod_hdcp_hdcp1_get_link_encryption_status(struct mod_hdcp *hdcp, in mod_hdcp_hdcp1_get_link_encryption_status() argument
379 if (mod_hdcp_hdcp1_link_maintenance(hdcp) != MOD_HDCP_STATUS_SUCCESS) in mod_hdcp_hdcp1_get_link_encryption_status()
387 enum mod_hdcp_status mod_hdcp_hdcp2_create_session(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_create_session() argument
389 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_create_session()
391 struct mod_hdcp_display *display = get_first_active_display(hdcp); in mod_hdcp_hdcp2_create_session()
396 DRM_ERROR("Failed to create hdcp session, HDCP TA is not initialized"); in mod_hdcp_hdcp2_create_session()
410 if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_0) in mod_hdcp_hdcp2_create_session()
413 else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_1) in mod_hdcp_hdcp2_create_session()
416 else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_MAX) in mod_hdcp_hdcp2_create_session()
428 hdcp->auth.id = hdcp_cmd->out_msg.hdcp2_create_session_v2.session_handle; in mod_hdcp_hdcp2_create_session()
434 enum mod_hdcp_status mod_hdcp_hdcp2_destroy_session(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_destroy_session() argument
436 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_destroy_session()
445 hdcp_cmd->in_msg.hdcp2_destroy_session.session_handle = hdcp->auth.id; in mod_hdcp_hdcp2_destroy_session()
453 HDCP_TOP_HDCP2_DESTROY_SESSION_TRACE(hdcp); in mod_hdcp_hdcp2_destroy_session()
455 if (is_display_encryption_enabled(&hdcp->displays[i])) { in mod_hdcp_hdcp2_destroy_session()
456 hdcp->displays[i].state = in mod_hdcp_hdcp2_destroy_session()
459 hdcp, hdcp->displays[i].index); in mod_hdcp_hdcp2_destroy_session()
467 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_ake_init(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_prepare_ake_init() argument
469 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_prepare_ake_init()
482 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_prepare_ake_init()
492 memcpy(&hdcp->auth.msg.hdcp2.ake_init[0], &msg_out->prepare.transmitter_message[0], in mod_hdcp_hdcp2_prepare_ake_init()
493 sizeof(hdcp->auth.msg.hdcp2.ake_init)); in mod_hdcp_hdcp2_prepare_ake_init()
499 enum mod_hdcp_status mod_hdcp_hdcp2_validate_ake_cert(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_validate_ake_cert() argument
501 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_validate_ake_cert()
514 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_validate_ake_cert()
519 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.ake_cert, in mod_hdcp_hdcp2_validate_ake_cert()
520 sizeof(hdcp->auth.msg.hdcp2.ake_cert)); in mod_hdcp_hdcp2_validate_ake_cert()
532 memcpy(hdcp->auth.msg.hdcp2.ake_no_stored_km, in mod_hdcp_hdcp2_validate_ake_cert()
534 sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km)); in mod_hdcp_hdcp2_validate_ake_cert()
536 memcpy(hdcp->auth.msg.hdcp2.ake_stored_km, in mod_hdcp_hdcp2_validate_ake_cert()
537 &msg_out->prepare.transmitter_message[sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km)], in mod_hdcp_hdcp2_validate_ake_cert()
538 sizeof(hdcp->auth.msg.hdcp2.ake_stored_km)); in mod_hdcp_hdcp2_validate_ake_cert()
542 hdcp->connection.is_km_stored = in mod_hdcp_hdcp2_validate_ake_cert()
544 hdcp->connection.is_repeater = in mod_hdcp_hdcp2_validate_ake_cert()
549 hdcp->connection.is_hdcp2_revoked = 1; in mod_hdcp_hdcp2_validate_ake_cert()
557 enum mod_hdcp_status mod_hdcp_hdcp2_validate_h_prime(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_validate_h_prime() argument
559 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_validate_h_prime()
572 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_validate_h_prime()
577 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.ake_h_prime, in mod_hdcp_hdcp2_validate_h_prime()
578 sizeof(hdcp->auth.msg.hdcp2.ake_h_prime)); in mod_hdcp_hdcp2_validate_h_prime()
580 if (!hdcp->connection.is_km_stored) { in mod_hdcp_hdcp2_validate_h_prime()
583 memcpy(&msg_in->process.receiver_message[sizeof(hdcp->auth.msg.hdcp2.ake_h_prime)], in mod_hdcp_hdcp2_validate_h_prime()
584 hdcp->auth.msg.hdcp2.ake_pairing_info, sizeof(hdcp->auth.msg.hdcp2.ake_pairing_info)); in mod_hdcp_hdcp2_validate_h_prime()
595 else if (!hdcp->connection.is_km_stored && in mod_hdcp_hdcp2_validate_h_prime()
603 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_lc_init(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_prepare_lc_init() argument
605 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_prepare_lc_init()
618 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_prepare_lc_init()
629 memcpy(hdcp->auth.msg.hdcp2.lc_init, &msg_out->prepare.transmitter_message[0], in mod_hdcp_hdcp2_prepare_lc_init()
630 sizeof(hdcp->auth.msg.hdcp2.lc_init)); in mod_hdcp_hdcp2_prepare_lc_init()
636 enum mod_hdcp_status mod_hdcp_hdcp2_validate_l_prime(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_validate_l_prime() argument
638 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_validate_l_prime()
651 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_validate_l_prime()
656 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.lc_l_prime, in mod_hdcp_hdcp2_validate_l_prime()
657 sizeof(hdcp->auth.msg.hdcp2.lc_l_prime)); in mod_hdcp_hdcp2_validate_l_prime()
671 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_eks(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_prepare_eks() argument
673 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_prepare_eks()
686 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_prepare_eks()
690 if (is_dp_hdcp(hdcp)) in mod_hdcp_hdcp2_prepare_eks()
699 memcpy(hdcp->auth.msg.hdcp2.ske_eks, in mod_hdcp_hdcp2_prepare_eks()
701 sizeof(hdcp->auth.msg.hdcp2.ske_eks)); in mod_hdcp_hdcp2_prepare_eks()
703 sizeof(hdcp->auth.msg.hdcp2.ske_eks); in mod_hdcp_hdcp2_prepare_eks()
705 if (is_dp_hdcp(hdcp)) { in mod_hdcp_hdcp2_prepare_eks()
706 memcpy(hdcp->auth.msg.hdcp2.content_stream_type_dp, in mod_hdcp_hdcp2_prepare_eks()
707 &msg_out->prepare.transmitter_message[sizeof(hdcp->auth.msg.hdcp2.ske_eks)], in mod_hdcp_hdcp2_prepare_eks()
708 sizeof(hdcp->auth.msg.hdcp2.content_stream_type_dp)); in mod_hdcp_hdcp2_prepare_eks()
716 enum mod_hdcp_status mod_hdcp_hdcp2_enable_encryption(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_enable_encryption() argument
718 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_enable_encryption()
720 struct mod_hdcp_display *display = get_first_active_display(hdcp); in mod_hdcp_hdcp2_enable_encryption()
731 hdcp_cmd->in_msg.hdcp2_set_encryption.session_handle = hdcp->auth.id; in mod_hdcp_hdcp2_enable_encryption()
738 } else if (!is_dp_mst_hdcp(hdcp)) { in mod_hdcp_hdcp2_enable_encryption()
740 HDCP_HDCP2_ENABLED_TRACE(hdcp, display->index); in mod_hdcp_hdcp2_enable_encryption()
747 enum mod_hdcp_status mod_hdcp_hdcp2_validate_rx_id_list(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_validate_rx_id_list() argument
749 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_validate_rx_id_list()
763 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_validate_rx_id_list()
766 msg_in->process.msg1_desc.msg_size = sizeof(hdcp->auth.msg.hdcp2.rx_id_list); in mod_hdcp_hdcp2_validate_rx_id_list()
767 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.rx_id_list, in mod_hdcp_hdcp2_validate_rx_id_list()
768 sizeof(hdcp->auth.msg.hdcp2.rx_id_list)); in mod_hdcp_hdcp2_validate_rx_id_list()
779 memcpy(hdcp->auth.msg.hdcp2.repeater_auth_ack, in mod_hdcp_hdcp2_validate_rx_id_list()
781 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_ack)); in mod_hdcp_hdcp2_validate_rx_id_list()
785 hdcp->connection.is_km_stored = msg_out->process.is_km_stored ? 1 : 0; in mod_hdcp_hdcp2_validate_rx_id_list()
786 hdcp->connection.is_repeater = msg_out->process.is_repeater ? 1 : 0; in mod_hdcp_hdcp2_validate_rx_id_list()
790 hdcp->connection.is_hdcp2_revoked = 1; in mod_hdcp_hdcp2_validate_rx_id_list()
798 enum mod_hdcp_status mod_hdcp_hdcp2_enable_dp_stream_encryption(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_enable_dp_stream_encryption() argument
800 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_enable_dp_stream_encryption()
812 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_enable_dp_stream_encryption()
816 if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE) in mod_hdcp_hdcp2_enable_dp_stream_encryption()
819 hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index; in mod_hdcp_hdcp2_enable_dp_stream_encryption()
820 hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.session_handle = hdcp->auth.id; in mod_hdcp_hdcp2_enable_dp_stream_encryption()
828 hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED; in mod_hdcp_hdcp2_enable_dp_stream_encryption()
829 HDCP_HDCP2_ENABLED_TRACE(hdcp, hdcp->displays[i].index); in mod_hdcp_hdcp2_enable_dp_stream_encryption()
841 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_stream_management(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_prepare_stream_management() argument
844 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_prepare_stream_management()
857 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_prepare_stream_management()
868 hdcp->auth.msg.hdcp2.stream_manage_size = msg_out->prepare.msg1_desc.msg_size; in mod_hdcp_hdcp2_prepare_stream_management()
870 memcpy(hdcp->auth.msg.hdcp2.repeater_auth_stream_manage, in mod_hdcp_hdcp2_prepare_stream_management()
872 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_manage)); in mod_hdcp_hdcp2_prepare_stream_management()
878 enum mod_hdcp_status mod_hdcp_hdcp2_validate_stream_ready(struct mod_hdcp *hdcp) in mod_hdcp_hdcp2_validate_stream_ready() argument
880 struct psp_context *psp = hdcp->config.psp.handle; in mod_hdcp_hdcp2_validate_stream_ready()
893 hdcp2_message_init(hdcp, msg_in); in mod_hdcp_hdcp2_validate_stream_ready()
897 msg_in->process.msg1_desc.msg_size = sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready); in mod_hdcp_hdcp2_validate_stream_ready()
899 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.repeater_auth_stream_ready, in mod_hdcp_hdcp2_validate_stream_ready()
900 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready)); in mod_hdcp_hdcp2_validate_stream_ready()