Lines Matching refs:hdcp

29 #include "hdcp.h"
34 static void hdcp2_message_init(struct mod_hdcp *hdcp,
37 in->session_handle = hdcp->auth.id;
49 struct mod_hdcp *hdcp, uint8_t index)
51 struct psp_context *psp = hdcp->config.psp.handle;
54 get_active_display_at_index(hdcp, index);
77 HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index);
85 struct mod_hdcp *hdcp, uint8_t index)
87 struct psp_context *psp = hdcp->config.psp.handle;
90 get_active_display_at_index(hdcp, index);
111 status = remove_display_from_topology_v2(hdcp, index);
116 HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index);
123 struct mod_hdcp *hdcp, struct mod_hdcp_display *display)
125 struct psp_context *psp = hdcp->config.psp.handle;
127 struct mod_hdcp_link *link = &hdcp->connection.link;
148 if (is_dp_hdcp(hdcp))
162 HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
170 struct mod_hdcp *hdcp, struct mod_hdcp_display *display)
172 struct psp_context *psp = hdcp->config.psp.handle;
174 struct mod_hdcp_link *link = &hdcp->connection.link;
195 if (is_dp_hdcp(hdcp))
214 status = add_display_to_topology_v2(hdcp, display);
218 HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
225 struct mod_hdcp *hdcp, uint8_t index)
229 if (hdcp->config.psp.caps.dtm_v3_supported)
230 status = remove_display_from_topology_v3(hdcp, index);
232 status = remove_display_from_topology_v2(hdcp, index);
237 enum mod_hdcp_status mod_hdcp_add_display_to_topology(struct mod_hdcp *hdcp,
242 if (hdcp->config.psp.caps.dtm_v3_supported)
243 status = add_display_to_topology_v3(hdcp, display);
245 status = add_display_to_topology_v2(hdcp, display);
250 enum mod_hdcp_status mod_hdcp_hdcp1_create_session(struct mod_hdcp *hdcp)
253 struct psp_context *psp = hdcp->config.psp.handle;
254 struct mod_hdcp_display *display = get_first_active_display(hdcp);
259 DRM_ERROR("Failed to create hdcp session. HDCP TA is not initialized.");
273 hdcp->auth.id = hdcp_cmd->out_msg.hdcp1_create_session.session_handle;
278 hdcp->auth.msg.hdcp1.ainfo = hdcp_cmd->out_msg.hdcp1_create_session.ainfo_primary;
279 memcpy(hdcp->auth.msg.hdcp1.aksv, hdcp_cmd->out_msg.hdcp1_create_session.aksv_primary,
280 sizeof(hdcp->auth.msg.hdcp1.aksv));
281 memcpy(hdcp->auth.msg.hdcp1.an, hdcp_cmd->out_msg.hdcp1_create_session.an_primary,
282 sizeof(hdcp->auth.msg.hdcp1.an));
289 enum mod_hdcp_status mod_hdcp_hdcp1_destroy_session(struct mod_hdcp *hdcp)
292 struct psp_context *psp = hdcp->config.psp.handle;
301 hdcp_cmd->in_msg.hdcp1_destroy_session.session_handle = hdcp->auth.id;
309 HDCP_TOP_HDCP1_DESTROY_SESSION_TRACE(hdcp);
311 if (is_display_encryption_enabled(&hdcp->displays[i])) {
312 hdcp->displays[i].state =
315 hdcp, hdcp->displays[i].index);
323 enum mod_hdcp_status mod_hdcp_hdcp1_validate_rx(struct mod_hdcp *hdcp)
325 struct psp_context *psp = hdcp->config.psp.handle;
333 hdcp_cmd->in_msg.hdcp1_first_part_authentication.session_handle = hdcp->auth.id;
335 memcpy(hdcp_cmd->in_msg.hdcp1_first_part_authentication.bksv_primary, hdcp->auth.msg.hdcp1.bksv,
338 hdcp_cmd->in_msg.hdcp1_first_part_authentication.r0_prime_primary = hdcp->auth.msg.hdcp1.r0p;
339 hdcp_cmd->in_msg.hdcp1_first_part_authentication.bcaps = hdcp->auth.msg.hdcp1.bcaps;
349 hdcp->connection.is_repeater = 1;
352 hdcp->connection.is_repeater = 0;
355 hdcp->connection.is_hdcp1_revoked = 1;
364 enum mod_hdcp_status mod_hdcp_hdcp1_enable_encryption(struct mod_hdcp *hdcp)
366 struct psp_context *psp = hdcp->config.psp.handle;
368 struct mod_hdcp_display *display = get_first_active_display(hdcp);
375 hdcp_cmd->in_msg.hdcp1_enable_encryption.session_handle = hdcp->auth.id;
382 } else if (!is_dp_mst_hdcp(hdcp)) {
384 HDCP_HDCP1_ENABLED_TRACE(hdcp, display->index);
391 enum mod_hdcp_status mod_hdcp_hdcp1_validate_ksvlist_vp(struct mod_hdcp *hdcp)
393 struct psp_context *psp = hdcp->config.psp.handle;
401 hdcp_cmd->in_msg.hdcp1_second_part_authentication.session_handle = hdcp->auth.id;
403 hdcp_cmd->in_msg.hdcp1_second_part_authentication.ksv_list_size = hdcp->auth.msg.hdcp1.ksvlist_size;
404 memcpy(hdcp_cmd->in_msg.hdcp1_second_part_authentication.ksv_list, hdcp->auth.msg.hdcp1.ksvlist,
405 hdcp->auth.msg.hdcp1.ksvlist_size);
407 memcpy(hdcp_cmd->in_msg.hdcp1_second_part_authentication.v_prime, hdcp->auth.msg.hdcp1.vp,
408 sizeof(hdcp->auth.msg.hdcp1.vp));
411 is_dp_hdcp(hdcp) ? hdcp->auth.msg.hdcp1.binfo_dp : hdcp->auth.msg.hdcp1.bstatus;
422 hdcp->connection.is_hdcp1_revoked = 1;
432 enum mod_hdcp_status mod_hdcp_hdcp1_enable_dp_stream_encryption(struct mod_hdcp *hdcp)
435 struct psp_context *psp = hdcp->config.psp.handle;
445 if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE)
450 hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.session_handle = hdcp->auth.id;
451 hdcp_cmd->in_msg.hdcp1_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index;
461 hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
462 HDCP_HDCP1_ENABLED_TRACE(hdcp, hdcp->displays[i].index);
469 enum mod_hdcp_status mod_hdcp_hdcp1_link_maintenance(struct mod_hdcp *hdcp)
471 struct psp_context *psp = hdcp->config.psp.handle;
480 hdcp_cmd->in_msg.hdcp1_get_encryption_status.session_handle = hdcp->auth.id;
495 enum mod_hdcp_status mod_hdcp_hdcp2_create_session(struct mod_hdcp *hdcp)
497 struct psp_context *psp = hdcp->config.psp.handle;
499 struct mod_hdcp_display *display = get_first_active_display(hdcp);
504 DRM_ERROR("Failed to create hdcp session, HDCP TA is not initialized");
521 if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_0)
524 else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_1)
527 else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_MAX)
539 hdcp->auth.id = hdcp_cmd->out_msg.hdcp2_create_session_v2.session_handle;
545 enum mod_hdcp_status mod_hdcp_hdcp2_destroy_session(struct mod_hdcp *hdcp)
547 struct psp_context *psp = hdcp->config.psp.handle;
556 hdcp_cmd->in_msg.hdcp2_destroy_session.session_handle = hdcp->auth.id;
564 HDCP_TOP_HDCP2_DESTROY_SESSION_TRACE(hdcp);
566 if (is_display_encryption_enabled(&hdcp->displays[i])) {
567 hdcp->displays[i].state =
570 hdcp, hdcp->displays[i].index);
578 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_ake_init(struct mod_hdcp *hdcp)
580 struct psp_context *psp = hdcp->config.psp.handle;
593 hdcp2_message_init(hdcp, msg_in);
603 memcpy(&hdcp->auth.msg.hdcp2.ake_init[0], &msg_out->prepare.transmitter_message[0],
604 sizeof(hdcp->auth.msg.hdcp2.ake_init));
610 enum mod_hdcp_status mod_hdcp_hdcp2_validate_ake_cert(struct mod_hdcp *hdcp)
612 struct psp_context *psp = hdcp->config.psp.handle;
625 hdcp2_message_init(hdcp, msg_in);
630 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.ake_cert,
631 sizeof(hdcp->auth.msg.hdcp2.ake_cert));
643 memcpy(hdcp->auth.msg.hdcp2.ake_no_stored_km,
645 sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km));
647 memcpy(hdcp->auth.msg.hdcp2.ake_stored_km,
648 &msg_out->prepare.transmitter_message[sizeof(hdcp->auth.msg.hdcp2.ake_no_stored_km)],
649 sizeof(hdcp->auth.msg.hdcp2.ake_stored_km));
653 hdcp->connection.is_km_stored =
655 hdcp->connection.is_repeater =
660 hdcp->connection.is_hdcp2_revoked = 1;
670 enum mod_hdcp_status mod_hdcp_hdcp2_validate_h_prime(struct mod_hdcp *hdcp)
672 struct psp_context *psp = hdcp->config.psp.handle;
685 hdcp2_message_init(hdcp, msg_in);
690 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.ake_h_prime,
691 sizeof(hdcp->auth.msg.hdcp2.ake_h_prime));
693 if (!hdcp->connection.is_km_stored) {
696 memcpy(&msg_in->process.receiver_message[sizeof(hdcp->auth.msg.hdcp2.ake_h_prime)],
697 hdcp->auth.msg.hdcp2.ake_pairing_info, sizeof(hdcp->auth.msg.hdcp2.ake_pairing_info));
708 else if (!hdcp->connection.is_km_stored &&
716 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_lc_init(struct mod_hdcp *hdcp)
718 struct psp_context *psp = hdcp->config.psp.handle;
731 hdcp2_message_init(hdcp, msg_in);
742 memcpy(hdcp->auth.msg.hdcp2.lc_init, &msg_out->prepare.transmitter_message[0],
743 sizeof(hdcp->auth.msg.hdcp2.lc_init));
749 enum mod_hdcp_status mod_hdcp_hdcp2_validate_l_prime(struct mod_hdcp *hdcp)
751 struct psp_context *psp = hdcp->config.psp.handle;
764 hdcp2_message_init(hdcp, msg_in);
769 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.lc_l_prime,
770 sizeof(hdcp->auth.msg.hdcp2.lc_l_prime));
784 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_eks(struct mod_hdcp *hdcp)
786 struct psp_context *psp = hdcp->config.psp.handle;
799 hdcp2_message_init(hdcp, msg_in);
803 if (is_dp_hdcp(hdcp))
812 memcpy(hdcp->auth.msg.hdcp2.ske_eks,
814 sizeof(hdcp->auth.msg.hdcp2.ske_eks));
816 sizeof(hdcp->auth.msg.hdcp2.ske_eks);
818 if (is_dp_hdcp(hdcp)) {
819 memcpy(hdcp->auth.msg.hdcp2.content_stream_type_dp,
820 &msg_out->prepare.transmitter_message[sizeof(hdcp->auth.msg.hdcp2.ske_eks)],
821 sizeof(hdcp->auth.msg.hdcp2.content_stream_type_dp));
829 enum mod_hdcp_status mod_hdcp_hdcp2_enable_encryption(struct mod_hdcp *hdcp)
831 struct psp_context *psp = hdcp->config.psp.handle;
833 struct mod_hdcp_display *display = get_first_active_display(hdcp);
844 hdcp_cmd->in_msg.hdcp2_set_encryption.session_handle = hdcp->auth.id;
851 } else if (!is_dp_mst_hdcp(hdcp)) {
853 HDCP_HDCP2_ENABLED_TRACE(hdcp, display->index);
860 enum mod_hdcp_status mod_hdcp_hdcp2_validate_rx_id_list(struct mod_hdcp *hdcp)
862 struct psp_context *psp = hdcp->config.psp.handle;
876 hdcp2_message_init(hdcp, msg_in);
879 msg_in->process.msg1_desc.msg_size = sizeof(hdcp->auth.msg.hdcp2.rx_id_list);
880 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.rx_id_list,
881 sizeof(hdcp->auth.msg.hdcp2.rx_id_list));
892 memcpy(hdcp->auth.msg.hdcp2.repeater_auth_ack,
894 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_ack));
898 hdcp->connection.is_km_stored = msg_out->process.is_km_stored ? 1 : 0;
899 hdcp->connection.is_repeater = msg_out->process.is_repeater ? 1 : 0;
903 hdcp->connection.is_hdcp2_revoked = 1;
913 enum mod_hdcp_status mod_hdcp_hdcp2_enable_dp_stream_encryption(struct mod_hdcp *hdcp)
915 struct psp_context *psp = hdcp->config.psp.handle;
927 hdcp2_message_init(hdcp, msg_in);
931 if (hdcp->displays[i].adjust.disable || hdcp->displays[i].state != MOD_HDCP_DISPLAY_ACTIVE)
934 hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.display_handle = hdcp->displays[i].index;
935 hdcp_cmd->in_msg.hdcp2_enable_dp_stream_encryption.session_handle = hdcp->auth.id;
943 hdcp->displays[i].state = MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED;
944 HDCP_HDCP2_ENABLED_TRACE(hdcp, hdcp->displays[i].index);
956 enum mod_hdcp_status mod_hdcp_hdcp2_prepare_stream_management(struct mod_hdcp *hdcp)
959 struct psp_context *psp = hdcp->config.psp.handle;
972 hdcp2_message_init(hdcp, msg_in);
983 hdcp->auth.msg.hdcp2.stream_manage_size = msg_out->prepare.msg1_desc.msg_size;
985 memcpy(hdcp->auth.msg.hdcp2.repeater_auth_stream_manage,
987 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_manage));
993 enum mod_hdcp_status mod_hdcp_hdcp2_validate_stream_ready(struct mod_hdcp *hdcp)
995 struct psp_context *psp = hdcp->config.psp.handle;
1008 hdcp2_message_init(hdcp, msg_in);
1012 msg_in->process.msg1_desc.msg_size = sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready);
1014 memcpy(&msg_in->process.receiver_message[0], hdcp->auth.msg.hdcp2.repeater_auth_stream_ready,
1015 sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready));