Lines Matching defs:hdcp

31 #include "hdcp.h"
33 static void push_error_status(struct mod_hdcp *hdcp,
36 struct mod_hdcp_trace *trace = &hdcp->connection.trace;
40 trace->errors[trace->error_count].state_id = hdcp->state.id;
42 HDCP_ERROR_TRACE(hdcp, status);
45 if (is_hdcp1(hdcp)) {
46 hdcp->connection.hdcp1_retry_count++;
47 } else if (is_hdcp2(hdcp)) {
48 hdcp->connection.hdcp2_retry_count++;
52 static uint8_t is_cp_desired_hdcp1(struct mod_hdcp *hdcp)
57 * hdcp is not desired
60 if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
61 !hdcp->connection.displays[i].adjust.disable) {
67 return (hdcp->connection.hdcp1_retry_count < MAX_NUM_OF_ATTEMPTS) &&
69 !hdcp->connection.link.adjust.hdcp1.disable;
72 static uint8_t is_cp_desired_hdcp2(struct mod_hdcp *hdcp)
77 * hdcp is not desired
80 if (hdcp->connection.displays[i].state != MOD_HDCP_DISPLAY_INACTIVE &&
81 !hdcp->connection.displays[i].adjust.disable) {
87 return (hdcp->connection.hdcp2_retry_count < MAX_NUM_OF_ATTEMPTS) &&
89 !hdcp->connection.link.adjust.hdcp2.disable &&
90 !hdcp->connection.is_hdcp2_revoked;
93 static enum mod_hdcp_status execution(struct mod_hdcp *hdcp,
99 if (is_in_initialized_state(hdcp)) {
106 } else if (is_in_cp_not_desired_state(hdcp)) {
111 /* update topology event if hdcp is not desired */
112 status = mod_hdcp_add_display_topology(hdcp);
113 } else if (is_in_hdcp1_states(hdcp)) {
114 status = mod_hdcp_hdcp1_execution(hdcp, event_ctx, &input->hdcp1);
115 } else if (is_in_hdcp1_dp_states(hdcp)) {
116 status = mod_hdcp_hdcp1_dp_execution(hdcp,
118 } else if (is_in_hdcp2_states(hdcp)) {
119 status = mod_hdcp_hdcp2_execution(hdcp, event_ctx, &input->hdcp2);
120 } else if (is_in_hdcp2_dp_states(hdcp)) {
121 status = mod_hdcp_hdcp2_dp_execution(hdcp,
128 static enum mod_hdcp_status transition(struct mod_hdcp *hdcp,
138 if (is_in_initialized_state(hdcp)) {
139 if (is_dp_hdcp(hdcp))
140 if (is_cp_desired_hdcp2(hdcp)) {
142 set_state_id(hdcp, output, D2_A0_DETERMINE_RX_HDCP_CAPABLE);
143 } else if (is_cp_desired_hdcp1(hdcp)) {
145 set_state_id(hdcp, output, D1_A0_DETERMINE_RX_HDCP_CAPABLE);
148 set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
150 else if (is_hdmi_dvi_sl_hdcp(hdcp))
151 if (is_cp_desired_hdcp2(hdcp)) {
153 set_state_id(hdcp, output, H2_A0_KNOWN_HDCP2_CAPABLE_RX);
154 } else if (is_cp_desired_hdcp1(hdcp)) {
156 set_state_id(hdcp, output, H1_A0_WAIT_FOR_ACTIVE_RX);
159 set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
163 set_state_id(hdcp, output, HDCP_CP_NOT_DESIRED);
165 } else if (is_in_cp_not_desired_state(hdcp)) {
166 increment_stay_counter(hdcp);
167 } else if (is_in_hdcp1_states(hdcp)) {
168 status = mod_hdcp_hdcp1_transition(hdcp,
170 } else if (is_in_hdcp1_dp_states(hdcp)) {
171 status = mod_hdcp_hdcp1_dp_transition(hdcp,
173 } else if (is_in_hdcp2_states(hdcp)) {
174 status = mod_hdcp_hdcp2_transition(hdcp,
176 } else if (is_in_hdcp2_dp_states(hdcp)) {
177 status = mod_hdcp_hdcp2_dp_transition(hdcp,
186 static enum mod_hdcp_status reset_authentication(struct mod_hdcp *hdcp,
191 if (is_hdcp1(hdcp)) {
192 if (hdcp->auth.trans_input.hdcp1.create_session != UNKNOWN) {
196 mod_hdcp_hdcp1_destroy_session(hdcp);
199 if (hdcp->auth.trans_input.hdcp1.add_topology == PASS) {
200 status = mod_hdcp_remove_display_topology(hdcp);
207 HDCP_TOP_RESET_AUTH_TRACE(hdcp);
208 memset(&hdcp->auth, 0, sizeof(struct mod_hdcp_authentication));
209 memset(&hdcp->state, 0, sizeof(struct mod_hdcp_state));
210 set_state_id(hdcp, output, HDCP_INITIALIZED);
211 } else if (is_hdcp2(hdcp)) {
212 if (hdcp->auth.trans_input.hdcp2.create_session == PASS) {
213 status = mod_hdcp_hdcp2_destroy_session(hdcp);
220 if (hdcp->auth.trans_input.hdcp2.add_topology == PASS) {
221 status = mod_hdcp_remove_display_topology(hdcp);
228 HDCP_TOP_RESET_AUTH_TRACE(hdcp);
229 memset(&hdcp->auth, 0, sizeof(struct mod_hdcp_authentication));
230 memset(&hdcp->state, 0, sizeof(struct mod_hdcp_state));
231 set_state_id(hdcp, output, HDCP_INITIALIZED);
232 } else if (is_in_cp_not_desired_state(hdcp)) {
233 status = mod_hdcp_remove_display_topology(hdcp);
239 HDCP_TOP_RESET_AUTH_TRACE(hdcp);
240 memset(&hdcp->auth, 0, sizeof(struct mod_hdcp_authentication));
241 memset(&hdcp->state, 0, sizeof(struct mod_hdcp_state));
242 set_state_id(hdcp, output, HDCP_INITIALIZED);
252 static enum mod_hdcp_status reset_connection(struct mod_hdcp *hdcp,
259 status = reset_authentication(hdcp, output);
263 if (current_state(hdcp) != HDCP_UNINITIALIZED) {
264 HDCP_TOP_RESET_CONN_TRACE(hdcp);
265 set_state_id(hdcp, output, HDCP_UNINITIALIZED);
267 memset(&hdcp->connection, 0, sizeof(hdcp->connection));
280 enum mod_hdcp_status mod_hdcp_setup(struct mod_hdcp *hdcp,
286 memset(hdcp, 0, sizeof(struct mod_hdcp));
288 hdcp->config = *config;
289 HDCP_TOP_INTERFACE_TRACE(hdcp);
290 status = reset_connection(hdcp, &output);
292 push_error_status(hdcp, status);
296 enum mod_hdcp_status mod_hdcp_teardown(struct mod_hdcp *hdcp)
301 HDCP_TOP_INTERFACE_TRACE(hdcp);
303 status = reset_connection(hdcp, &output);
305 memset(hdcp, 0, sizeof(struct mod_hdcp));
307 push_error_status(hdcp, status);
311 enum mod_hdcp_status mod_hdcp_add_display(struct mod_hdcp *hdcp,
318 HDCP_TOP_INTERFACE_TRACE_WITH_INDEX(hdcp, display->index);
328 if (get_active_display_at_index(hdcp, display->index)) {
334 display_container = get_empty_display_container(hdcp);
341 status = reset_authentication(hdcp, output);
346 hdcp->connection.link = *link;
350 reset_retry_counts(hdcp);
353 memset(&hdcp->connection.trace, 0, sizeof(hdcp->connection.trace));
356 if (current_state(hdcp) != HDCP_INITIALIZED)
357 set_state_id(hdcp, output, HDCP_INITIALIZED);
358 callback_in_ms(hdcp->connection.link.adjust.auth_delay * 1000, output);
361 push_error_status(hdcp, status);
366 enum mod_hdcp_status mod_hdcp_remove_display(struct mod_hdcp *hdcp,
372 HDCP_TOP_INTERFACE_TRACE_WITH_INDEX(hdcp, index);
376 display = get_active_display_at_index(hdcp, index);
383 status = reset_authentication(hdcp, output);
391 reset_retry_counts(hdcp);
394 memset(&hdcp->connection.trace, 0, sizeof(hdcp->connection.trace));
397 if (get_active_display_count(hdcp) > 0)
398 callback_in_ms(hdcp->connection.link.adjust.auth_delay * 1000,
402 push_error_status(hdcp, status);
406 enum mod_hdcp_status mod_hdcp_query_display(struct mod_hdcp *hdcp,
413 display = get_active_display_at_index(hdcp, index);
420 query->link = &hdcp->connection.link;
422 query->trace = &hdcp->connection.trace;
426 if (is_hdcp1(hdcp)) {
428 } else if (is_hdcp2(hdcp)) {
444 enum mod_hdcp_status mod_hdcp_reset_connection(struct mod_hdcp *hdcp,
449 HDCP_TOP_INTERFACE_TRACE(hdcp);
450 status = reset_connection(hdcp, output);
452 push_error_status(hdcp, status);
457 enum mod_hdcp_status mod_hdcp_process_event(struct mod_hdcp *hdcp,
463 HDCP_EVENT_TRACE(hdcp, event);
469 exec_status = execution(hdcp, &event_ctx, &hdcp->auth.trans_input);
471 hdcp, &event_ctx, &hdcp->auth.trans_input, output);
476 push_error_status(hdcp, status);
479 push_error_status(hdcp, status);
484 HDCP_FULL_DDC_TRACE(hdcp);
485 reset_status = reset_authentication(hdcp, output);
487 push_error_status(hdcp, reset_status);