Lines Matching defs:hdcp

28 #include "hdcp.h"
35 static inline enum mod_hdcp_status check_receiver_id_list_ready(struct mod_hdcp *hdcp)
39 if (is_dp_hdcp(hdcp))
40 is_ready = HDCP_2_2_DP_RXSTATUS_READY(hdcp->auth.msg.hdcp2.rxstatus_dp) ? 1 : 0;
42 is_ready = (HDCP_2_2_HDMI_RXSTATUS_READY(hdcp->auth.msg.hdcp2.rxstatus[1]) &&
43 get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus) != 0) ? 1 : 0;
48 static inline enum mod_hdcp_status check_hdcp2_capable(struct mod_hdcp *hdcp)
52 if (is_dp_hdcp(hdcp))
53 status = (hdcp->auth.msg.hdcp2.rxcaps_dp[0] == HDCP_2_2_RX_CAPS_VERSION_VAL) &&
54 HDCP_2_2_DP_HDCP_CAPABLE(hdcp->auth.msg.hdcp2.rxcaps_dp[2]) ?
58 status = (hdcp->auth.msg.hdcp2.hdcp2version_hdmi & HDCP_2_2_HDMI_SUPPORT_MASK) ?
65 struct mod_hdcp *hdcp)
69 if (is_dp_hdcp(hdcp))
70 ret = HDCP_2_2_DP_RXSTATUS_REAUTH_REQ(hdcp->auth.msg.hdcp2.rxstatus_dp) ?
74 ret = HDCP_2_2_HDMI_RXSTATUS_REAUTH_REQ(hdcp->auth.msg.hdcp2.rxstatus[1]) ?
81 struct mod_hdcp *hdcp)
83 return HDCP_2_2_DP_RXSTATUS_LINK_FAILED(hdcp->auth.msg.hdcp2.rxstatus_dp) ?
88 static enum mod_hdcp_status check_ake_cert_available(struct mod_hdcp *hdcp)
92 if (is_dp_hdcp(hdcp)) {
95 status = mod_hdcp_read_rxstatus(hdcp);
97 const uint16_t size = get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
98 status = (size == sizeof(hdcp->auth.msg.hdcp2.ake_cert)) ?
106 static enum mod_hdcp_status check_h_prime_available(struct mod_hdcp *hdcp)
110 status = mod_hdcp_read_rxstatus(hdcp);
114 if (is_dp_hdcp(hdcp)) {
115 status = HDCP_2_2_DP_RXSTATUS_H_PRIME(hdcp->auth.msg.hdcp2.rxstatus_dp) ?
119 const uint16_t size = get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
120 status = (size == sizeof(hdcp->auth.msg.hdcp2.ake_h_prime)) ?
128 static enum mod_hdcp_status check_pairing_info_available(struct mod_hdcp *hdcp)
132 status = mod_hdcp_read_rxstatus(hdcp);
136 if (is_dp_hdcp(hdcp)) {
137 status = HDCP_2_2_DP_RXSTATUS_PAIRING(hdcp->auth.msg.hdcp2.rxstatus_dp) ?
141 const uint16_t size = get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
142 status = (size == sizeof(hdcp->auth.msg.hdcp2.ake_pairing_info)) ?
150 static enum mod_hdcp_status poll_l_prime_available(struct mod_hdcp *hdcp)
157 if (is_dp_hdcp(hdcp))
163 status = mod_hdcp_read_rxstatus(hdcp);
167 const uint16_t size = get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
168 status = (size == sizeof(hdcp->auth.msg.hdcp2.lc_l_prime)) ?
177 static enum mod_hdcp_status check_stream_ready_available(struct mod_hdcp *hdcp)
181 if (is_dp_hdcp(hdcp)) {
184 status = mod_hdcp_read_rxstatus(hdcp);
187 const uint16_t size = get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
188 status = (size == sizeof(hdcp->auth.msg.hdcp2.repeater_auth_stream_ready)) ?
196 static inline uint8_t get_device_count(struct mod_hdcp *hdcp)
198 return HDCP_2_2_DEV_COUNT_LO(hdcp->auth.msg.hdcp2.rx_id_list[2]) +
199 (HDCP_2_2_DEV_COUNT_HI(hdcp->auth.msg.hdcp2.rx_id_list[1]) << 4);
202 static enum mod_hdcp_status check_device_count(struct mod_hdcp *hdcp)
205 if (get_device_count(hdcp) == 0)
210 /* panel is possibly not included in DEVICE_COUNT) + get_device_count(hdcp). */
211 /* Device count must be greater than or equal to tracked hdcp displays. */
212 return ((1 + get_device_count(hdcp)) < get_active_display_count(hdcp)) ?
217 static uint8_t process_rxstatus(struct mod_hdcp *hdcp,
224 hdcp, "rxstatus_read"))
228 hdcp, "reauth_request_check"))
230 if (is_dp_hdcp(hdcp)) {
233 hdcp, "link_integrity_check_dp"))
236 if (hdcp->connection.is_repeater)
237 if (check_receiver_id_list_ready(hdcp) ==
239 HDCP_INPUT_PASS_TRACE(hdcp, "rx_id_list_ready");
241 if (is_dp_hdcp(hdcp))
242 hdcp->auth.msg.hdcp2.rx_id_list_size =
243 sizeof(hdcp->auth.msg.hdcp2.rx_id_list);
245 hdcp->auth.msg.hdcp2.rx_id_list_size =
246 get_hdmi_rxstatus_msg_size(hdcp->auth.msg.hdcp2.rxstatus);
252 static enum mod_hdcp_status known_hdcp2_capable_rx(struct mod_hdcp *hdcp,
265 hdcp, "hdcp2version_read"))
269 hdcp, "hdcp2_capable"))
275 static enum mod_hdcp_status send_ake_init(struct mod_hdcp *hdcp,
288 hdcp, "create_session"))
292 hdcp, "ake_init_prepare"))
296 hdcp, "ake_init_write"))
302 static enum mod_hdcp_status validate_ake_cert(struct mod_hdcp *hdcp,
315 if (is_hdmi_dvi_sl_hdcp(hdcp))
318 hdcp, "ake_cert_available"))
322 hdcp, "ake_cert_read"))
326 hdcp, "ake_cert_validation"))
332 static enum mod_hdcp_status send_no_stored_km(struct mod_hdcp *hdcp,
345 hdcp, "no_stored_km_write"))
351 static enum mod_hdcp_status read_h_prime(struct mod_hdcp *hdcp,
366 hdcp, "h_prime_available"))
371 hdcp, "h_prime_read"))
378 struct mod_hdcp *hdcp,
393 hdcp, "pairing_available"))
397 hdcp, "pairing_info_read"))
401 hdcp, "h_prime_validation"))
407 static enum mod_hdcp_status send_stored_km(struct mod_hdcp *hdcp,
420 hdcp, "stored_km_write"))
426 static enum mod_hdcp_status validate_h_prime(struct mod_hdcp *hdcp,
441 hdcp, "h_prime_available"))
445 hdcp, "h_prime_read"))
449 hdcp, "h_prime_validation"))
455 static enum mod_hdcp_status locality_check_sw(struct mod_hdcp *hdcp,
463 hdcp, "lc_init_write"))
465 if (is_dp_hdcp(hdcp))
470 hdcp, "l_prime_available_poll"))
474 hdcp, "l_prime_read"))
480 static enum mod_hdcp_status locality_check_fw(struct mod_hdcp *hdcp,
488 hdcp, "l_prime_read"))
495 static enum mod_hdcp_status locality_check(struct mod_hdcp *hdcp,
500 const bool use_fw = hdcp->config.ddc.funcs.atomic_write_poll_read_i2c
501 && hdcp->config.ddc.funcs.atomic_write_poll_read_aux
502 && !hdcp->connection.link.adjust.hdcp2.force_sw_locality_check;
511 hdcp, "lc_init_prepare"))
514 status = (use_fw ? locality_check_fw : locality_check_sw)(hdcp, event_ctx, input);
520 hdcp, "l_prime_validation"))
526 static enum mod_hdcp_status exchange_ks_and_test_for_repeater(struct mod_hdcp *hdcp,
539 hdcp, "eks_prepare"))
543 hdcp, "eks_write"))
549 static enum mod_hdcp_status enable_encryption(struct mod_hdcp *hdcp,
561 process_rxstatus(hdcp, event_ctx, input, &status);
565 if (is_hdmi_dvi_sl_hdcp(hdcp)) {
566 if (!process_rxstatus(hdcp, event_ctx, input, &status))
573 hdcp, "enable_encryption"))
575 if (is_dp_mst_hdcp(hdcp)) {
579 hdcp, "stream_encryption_dp"))
586 static enum mod_hdcp_status authenticated(struct mod_hdcp *hdcp,
598 process_rxstatus(hdcp, event_ctx, input, &status);
603 static enum mod_hdcp_status wait_for_rx_id_list(struct mod_hdcp *hdcp,
616 if (!process_rxstatus(hdcp, event_ctx, input, &status))
626 static enum mod_hdcp_status verify_rx_id_list_and_send_ack(struct mod_hdcp *hdcp,
638 process_rxstatus(hdcp, event_ctx, input, &status);
644 &status, hdcp, "receiver_id_list_read"))
648 &status, hdcp, "device_count_check"))
652 &status, hdcp, "rx_id_list_validation"))
656 &status, hdcp, "repeater_auth_ack_write"))
662 static enum mod_hdcp_status send_stream_management(struct mod_hdcp *hdcp,
674 process_rxstatus(hdcp, event_ctx, input, &status);
678 if (is_hdmi_dvi_sl_hdcp(hdcp)) {
679 if (!process_rxstatus(hdcp, event_ctx, input, &status))
686 &status, hdcp, "prepare_stream_manage"))
691 &status, hdcp, "stream_manage_write"))
697 static enum mod_hdcp_status validate_stream_ready(struct mod_hdcp *hdcp,
710 process_rxstatus(hdcp, event_ctx, input, &status);
714 if (is_hdmi_dvi_sl_hdcp(hdcp)) {
715 if (!process_rxstatus(hdcp, event_ctx, input, &status))
720 if (is_hdmi_dvi_sl_hdcp(hdcp))
723 &status, hdcp, "stream_ready_available"))
727 &status, hdcp, "stream_ready_read"))
731 &status, hdcp, "stream_ready_validation"))
738 static enum mod_hdcp_status determine_rx_hdcp_capable_dp(struct mod_hdcp *hdcp,
751 &status, hdcp, "rx_caps_read_dp"))
755 hdcp, "hdcp2_capable_check"))
761 static enum mod_hdcp_status send_content_stream_type_dp(struct mod_hdcp *hdcp,
773 if (!process_rxstatus(hdcp, event_ctx, input, &status))
777 hdcp, "content_stream_type_write"))
783 enum mod_hdcp_status mod_hdcp_hdcp2_execution(struct mod_hdcp *hdcp,
789 switch (current_state(hdcp)) {
791 status = known_hdcp2_capable_rx(hdcp, event_ctx, input);
794 status = send_ake_init(hdcp, event_ctx, input);
797 status = validate_ake_cert(hdcp, event_ctx, input);
800 status = send_no_stored_km(hdcp, event_ctx, input);
803 status = read_h_prime(hdcp, event_ctx, input);
806 status = read_pairing_info_and_validate_h_prime(hdcp,
810 status = send_stored_km(hdcp, event_ctx, input);
813 status = validate_h_prime(hdcp, event_ctx, input);
816 status = locality_check(hdcp, event_ctx, input);
819 status = exchange_ks_and_test_for_repeater(hdcp, event_ctx, input);
822 status = enable_encryption(hdcp, event_ctx, input);
825 status = authenticated(hdcp, event_ctx, input);
828 status = wait_for_rx_id_list(hdcp, event_ctx, input);
831 status = verify_rx_id_list_and_send_ack(hdcp, event_ctx, input);
834 status = send_stream_management(hdcp, event_ctx, input);
837 status = validate_stream_ready(hdcp, event_ctx, input);
847 enum mod_hdcp_status mod_hdcp_hdcp2_dp_execution(struct mod_hdcp *hdcp,
853 switch (current_state(hdcp)) {
855 status = determine_rx_hdcp_capable_dp(hdcp, event_ctx, input);
858 status = send_ake_init(hdcp, event_ctx, input);
861 status = validate_ake_cert(hdcp, event_ctx, input);
864 status = send_no_stored_km(hdcp, event_ctx, input);
867 status = read_h_prime(hdcp, event_ctx, input);
870 status = read_pairing_info_and_validate_h_prime(hdcp,
874 status = send_stored_km(hdcp, event_ctx, input);
877 status = validate_h_prime(hdcp, event_ctx, input);
880 status = locality_check(hdcp, event_ctx, input);
883 status = exchange_ks_and_test_for_repeater(hdcp,
887 status = send_content_stream_type_dp(hdcp, event_ctx, input);
890 status = enable_encryption(hdcp, event_ctx, input);
893 status = authenticated(hdcp, event_ctx, input);
896 status = wait_for_rx_id_list(hdcp, event_ctx, input);
899 status = verify_rx_id_list_and_send_ack(hdcp, event_ctx, input);
902 status = send_stream_management(hdcp, event_ctx, input);
905 status = validate_stream_ready(hdcp, event_ctx, input);