Lines Matching full:connector
66 bool intel_hdcp_capable(struct intel_connector *connector) in intel_hdcp_capable() argument
68 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_capable()
69 const struct intel_hdcp_shim *shim = connector->hdcp.shim; in intel_hdcp_capable()
87 bool intel_hdcp2_capable(struct intel_connector *connector) in intel_hdcp2_capable() argument
89 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp2_capable()
90 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp2_capable()
91 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_capable()
290 int intel_hdcp_validate_v_prime(struct intel_connector *connector, in intel_hdcp_validate_v_prime() argument
294 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_validate_v_prime()
295 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_validate_v_prime()
296 enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; in intel_hdcp_validate_v_prime()
534 int intel_hdcp_auth_downstream(struct intel_connector *connector) in intel_hdcp_auth_downstream() argument
536 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_auth_downstream()
537 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_auth_downstream()
538 const struct intel_hdcp_shim *shim = connector->hdcp.shim; in intel_hdcp_auth_downstream()
595 ret = intel_hdcp_validate_v_prime(connector, shim, in intel_hdcp_auth_downstream()
617 static int intel_hdcp_auth(struct intel_connector *connector) in intel_hdcp_auth() argument
619 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_auth()
620 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_auth()
621 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_auth()
623 enum transcoder cpu_transcoder = connector->hdcp.cpu_transcoder; in intel_hdcp_auth()
776 return intel_hdcp_auth_downstream(connector); in intel_hdcp_auth()
782 static int _intel_hdcp_disable(struct intel_connector *connector) in _intel_hdcp_disable() argument
784 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in _intel_hdcp_disable()
785 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in _intel_hdcp_disable()
786 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp_disable()
793 connector->base.name, connector->base.base.id); in _intel_hdcp_disable()
798 * connector/pipe and exit. in _intel_hdcp_disable()
833 static int _intel_hdcp_enable(struct intel_connector *connector) in _intel_hdcp_enable() argument
835 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in _intel_hdcp_enable()
836 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp_enable()
840 connector->base.name, connector->base.base.id); in _intel_hdcp_enable()
861 ret = intel_hdcp_auth(connector); in _intel_hdcp_enable()
870 _intel_hdcp_disable(connector); in _intel_hdcp_enable()
883 static void intel_hdcp_update_value(struct intel_connector *connector, in intel_hdcp_update_value() argument
886 struct drm_device *dev = connector->base.dev; in intel_hdcp_update_value()
887 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_update_value()
888 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_update_value()
890 drm_WARN_ON(connector->base.dev, !mutex_is_locked(&hdcp->mutex)); in intel_hdcp_update_value()
906 drm_connector_get(&connector->base); in intel_hdcp_update_value()
912 static int intel_hdcp_check_link(struct intel_connector *connector) in intel_hdcp_check_link() argument
914 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_check_link()
915 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_check_link()
916 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_check_link()
937 connector->base.name, connector->base.base.id, in intel_hdcp_check_link()
940 intel_hdcp_update_value(connector, in intel_hdcp_check_link()
946 if (hdcp->shim->check_link(dig_port, connector)) { in intel_hdcp_check_link()
948 intel_hdcp_update_value(connector, in intel_hdcp_check_link()
956 connector->base.name, connector->base.base.id); in intel_hdcp_check_link()
958 ret = _intel_hdcp_disable(connector); in intel_hdcp_check_link()
961 intel_hdcp_update_value(connector, in intel_hdcp_check_link()
967 ret = _intel_hdcp_enable(connector); in intel_hdcp_check_link()
970 intel_hdcp_update_value(connector, in intel_hdcp_check_link()
986 struct intel_connector *connector = intel_hdcp_to_connector(hdcp); in intel_hdcp_prop_work() local
987 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_prop_work()
998 drm_hdcp_update_content_protection(&connector->base, in intel_hdcp_prop_work()
1004 drm_connector_put(&connector->base); in intel_hdcp_prop_work()
1014 hdcp2_prepare_ake_init(struct intel_connector *connector, in hdcp2_prepare_ake_init() argument
1017 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_prepare_ake_init()
1018 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_ake_init()
1040 hdcp2_verify_rx_cert_prepare_km(struct intel_connector *connector, in hdcp2_verify_rx_cert_prepare_km() argument
1046 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_verify_rx_cert_prepare_km()
1047 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_rx_cert_prepare_km()
1070 static int hdcp2_verify_hprime(struct intel_connector *connector, in hdcp2_verify_hprime() argument
1073 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_verify_hprime()
1074 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_hprime()
1095 hdcp2_store_pairing_info(struct intel_connector *connector, in hdcp2_store_pairing_info() argument
1098 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_store_pairing_info()
1099 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_store_pairing_info()
1121 hdcp2_prepare_lc_init(struct intel_connector *connector, in hdcp2_prepare_lc_init() argument
1124 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_prepare_lc_init()
1125 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_lc_init()
1147 hdcp2_verify_lprime(struct intel_connector *connector, in hdcp2_verify_lprime() argument
1150 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_verify_lprime()
1151 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_lprime()
1172 static int hdcp2_prepare_skey(struct intel_connector *connector, in hdcp2_prepare_skey() argument
1175 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_prepare_skey()
1176 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_prepare_skey()
1198 hdcp2_verify_rep_topology_prepare_ack(struct intel_connector *connector, in hdcp2_verify_rep_topology_prepare_ack() argument
1203 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_verify_rep_topology_prepare_ack()
1204 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_rep_topology_prepare_ack()
1228 hdcp2_verify_mprime(struct intel_connector *connector, in hdcp2_verify_mprime() argument
1231 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_verify_mprime()
1232 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_verify_mprime()
1252 static int hdcp2_authenticate_port(struct intel_connector *connector) in hdcp2_authenticate_port() argument
1254 struct hdcp_port_data *data = &connector->hdcp.port_data; in hdcp2_authenticate_port()
1255 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authenticate_port()
1276 static int hdcp2_close_mei_session(struct intel_connector *connector) in hdcp2_close_mei_session() argument
1278 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_close_mei_session()
1291 &connector->hdcp.port_data); in hdcp2_close_mei_session()
1297 static int hdcp2_deauthenticate_port(struct intel_connector *connector) in hdcp2_deauthenticate_port() argument
1299 return hdcp2_close_mei_session(connector); in hdcp2_deauthenticate_port()
1303 static int hdcp2_authentication_key_exchange(struct intel_connector *connector) in hdcp2_authentication_key_exchange() argument
1305 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_authentication_key_exchange()
1306 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authentication_key_exchange()
1307 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authentication_key_exchange()
1323 ret = hdcp2_prepare_ake_init(connector, &msgs.ake_init); in hdcp2_authentication_key_exchange()
1355 ret = hdcp2_verify_rx_cert_prepare_km(connector, &msgs.send_cert, in hdcp2_authentication_key_exchange()
1370 ret = hdcp2_verify_hprime(connector, &msgs.send_hprime); in hdcp2_authentication_key_exchange()
1383 ret = hdcp2_store_pairing_info(connector, &msgs.pairing_info); in hdcp2_authentication_key_exchange()
1392 static int hdcp2_locality_check(struct intel_connector *connector) in hdcp2_locality_check() argument
1394 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_locality_check()
1395 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_locality_check()
1404 ret = hdcp2_prepare_lc_init(connector, &msgs.lc_init); in hdcp2_locality_check()
1420 ret = hdcp2_verify_lprime(connector, &msgs.send_lprime); in hdcp2_locality_check()
1428 static int hdcp2_session_key_exchange(struct intel_connector *connector) in hdcp2_session_key_exchange() argument
1430 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_session_key_exchange()
1431 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_session_key_exchange()
1435 ret = hdcp2_prepare_skey(connector, &send_eks); in hdcp2_session_key_exchange()
1448 int hdcp2_propagate_stream_management_info(struct intel_connector *connector) in hdcp2_propagate_stream_management_info() argument
1450 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_propagate_stream_management_info()
1451 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_propagate_stream_management_info()
1452 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_propagate_stream_management_info()
1485 ret = hdcp2_verify_mprime(connector, &msgs.stream_ready); in hdcp2_propagate_stream_management_info()
1500 int hdcp2_authenticate_repeater_topology(struct intel_connector *connector) in hdcp2_authenticate_repeater_topology() argument
1502 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_authenticate_repeater_topology()
1503 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_authenticate_repeater_topology()
1504 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authenticate_repeater_topology()
1552 ret = hdcp2_verify_rep_topology_prepare_ack(connector, in hdcp2_authenticate_repeater_topology()
1567 static int hdcp2_authenticate_repeater(struct intel_connector *connector) in hdcp2_authenticate_repeater() argument
1571 ret = hdcp2_authenticate_repeater_topology(connector); in hdcp2_authenticate_repeater()
1575 return hdcp2_propagate_stream_management_info(connector); in hdcp2_authenticate_repeater()
1578 static int hdcp2_authenticate_sink(struct intel_connector *connector) in hdcp2_authenticate_sink() argument
1580 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_authenticate_sink()
1581 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_authenticate_sink()
1582 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_authenticate_sink()
1586 ret = hdcp2_authentication_key_exchange(connector); in hdcp2_authenticate_sink()
1592 ret = hdcp2_locality_check(connector); in hdcp2_authenticate_sink()
1599 ret = hdcp2_session_key_exchange(connector); in hdcp2_authenticate_sink()
1614 ret = hdcp2_authenticate_repeater(connector); in hdcp2_authenticate_sink()
1623 ret = hdcp2_authenticate_port(connector); in hdcp2_authenticate_sink()
1630 static int hdcp2_enable_encryption(struct intel_connector *connector) in hdcp2_enable_encryption() argument
1632 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_enable_encryption()
1633 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_enable_encryption()
1634 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_enable_encryption()
1670 static int hdcp2_disable_encryption(struct intel_connector *connector) in hdcp2_disable_encryption() argument
1672 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in hdcp2_disable_encryption()
1673 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in hdcp2_disable_encryption()
1674 struct intel_hdcp *hdcp = &connector->hdcp; in hdcp2_disable_encryption()
1707 static int hdcp2_authenticate_and_encrypt(struct intel_connector *connector) in hdcp2_authenticate_and_encrypt() argument
1709 struct drm_i915_private *i915 = to_i915(connector->base.dev); in hdcp2_authenticate_and_encrypt()
1713 ret = hdcp2_authenticate_sink(connector); in hdcp2_authenticate_and_encrypt()
1720 if (hdcp2_deauthenticate_port(connector) < 0) in hdcp2_authenticate_and_encrypt()
1730 ret = hdcp2_enable_encryption(connector); in hdcp2_authenticate_and_encrypt()
1734 if (hdcp2_deauthenticate_port(connector) < 0) in hdcp2_authenticate_and_encrypt()
1742 static int _intel_hdcp2_enable(struct intel_connector *connector) in _intel_hdcp2_enable() argument
1744 struct drm_i915_private *i915 = to_i915(connector->base.dev); in _intel_hdcp2_enable()
1745 struct intel_hdcp *hdcp = &connector->hdcp; in _intel_hdcp2_enable()
1749 connector->base.name, connector->base.base.id, in _intel_hdcp2_enable()
1752 ret = hdcp2_authenticate_and_encrypt(connector); in _intel_hdcp2_enable()
1760 connector->base.name, connector->base.base.id, in _intel_hdcp2_enable()
1767 static int _intel_hdcp2_disable(struct intel_connector *connector) in _intel_hdcp2_disable() argument
1769 struct drm_i915_private *i915 = to_i915(connector->base.dev); in _intel_hdcp2_disable()
1773 connector->base.name, connector->base.base.id); in _intel_hdcp2_disable()
1775 ret = hdcp2_disable_encryption(connector); in _intel_hdcp2_disable()
1777 if (hdcp2_deauthenticate_port(connector) < 0) in _intel_hdcp2_disable()
1780 connector->hdcp.hdcp2_encrypted = false; in _intel_hdcp2_disable()
1786 static int intel_hdcp2_check_link(struct intel_connector *connector) in intel_hdcp2_check_link() argument
1788 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp2_check_link()
1789 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp2_check_link()
1790 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_check_link()
1811 intel_hdcp_update_value(connector, in intel_hdcp2_check_link()
1820 intel_hdcp_update_value(connector, in intel_hdcp2_check_link()
1833 ret = hdcp2_authenticate_repeater_topology(connector); in intel_hdcp2_check_link()
1835 intel_hdcp_update_value(connector, in intel_hdcp2_check_link()
1842 connector->base.name, connector->base.base.id, in intel_hdcp2_check_link()
1847 connector->base.name, connector->base.base.id); in intel_hdcp2_check_link()
1850 ret = _intel_hdcp2_disable(connector); in intel_hdcp2_check_link()
1854 connector->base.name, connector->base.base.id, ret); in intel_hdcp2_check_link()
1855 intel_hdcp_update_value(connector, in intel_hdcp2_check_link()
1860 ret = _intel_hdcp2_enable(connector); in intel_hdcp2_check_link()
1864 connector->base.name, connector->base.base.id, in intel_hdcp2_check_link()
1866 intel_hdcp_update_value(connector, in intel_hdcp2_check_link()
1882 struct intel_connector *connector = intel_hdcp_to_connector(hdcp); in intel_hdcp_check_work() local
1884 if (drm_connector_is_unregistered(&connector->base)) in intel_hdcp_check_work()
1887 if (!intel_hdcp2_check_link(connector)) in intel_hdcp_check_work()
1890 else if (!intel_hdcp_check_link(connector)) in intel_hdcp_check_work()
1947 static int initialize_hdcp_port_data(struct intel_connector *connector, in initialize_hdcp_port_data() argument
1951 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in initialize_hdcp_port_data()
1952 struct intel_hdcp *hdcp = &connector->hdcp; in initialize_hdcp_port_data()
2026 static void intel_hdcp2_init(struct intel_connector *connector, enum port port, in intel_hdcp2_init() argument
2029 struct drm_i915_private *i915 = to_i915(connector->base.dev); in intel_hdcp2_init()
2030 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp2_init()
2033 ret = initialize_hdcp_port_data(connector, port, shim); in intel_hdcp2_init()
2042 int intel_hdcp_init(struct intel_connector *connector, in intel_hdcp_init() argument
2046 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_init()
2047 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_init()
2053 if (is_hdcp2_supported(dev_priv) && !connector->mst_port) in intel_hdcp_init()
2054 intel_hdcp2_init(connector, port, shim); in intel_hdcp_init()
2057 drm_connector_attach_content_protection_property(&connector->base, in intel_hdcp_init()
2074 int intel_hdcp_enable(struct intel_connector *connector, in intel_hdcp_enable() argument
2077 struct drm_i915_private *dev_priv = to_i915(connector->base.dev); in intel_hdcp_enable()
2078 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_enable()
2079 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_enable()
2100 if (intel_hdcp2_capable(connector)) { in intel_hdcp_enable()
2101 ret = _intel_hdcp2_enable(connector); in intel_hdcp_enable()
2110 if (ret && intel_hdcp_capable(connector) && in intel_hdcp_enable()
2112 ret = _intel_hdcp_enable(connector); in intel_hdcp_enable()
2117 intel_hdcp_update_value(connector, in intel_hdcp_enable()
2127 int intel_hdcp_disable(struct intel_connector *connector) in intel_hdcp_disable() argument
2129 struct intel_digital_port *dig_port = intel_attached_dig_port(connector); in intel_hdcp_disable()
2130 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_disable()
2142 intel_hdcp_update_value(connector, in intel_hdcp_disable()
2145 ret = _intel_hdcp2_disable(connector); in intel_hdcp_disable()
2147 ret = _intel_hdcp_disable(connector); in intel_hdcp_disable()
2161 struct intel_connector *connector = in intel_hdcp_update_pipe() local
2162 to_intel_connector(conn_state->connector); in intel_hdcp_update_pipe()
2163 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_update_pipe()
2166 if (!connector->hdcp.shim) in intel_hdcp_update_pipe()
2181 intel_hdcp_disable(connector); in intel_hdcp_update_pipe()
2204 intel_hdcp_enable(connector, in intel_hdcp_update_pipe()
2223 void intel_hdcp_cleanup(struct intel_connector *connector) in intel_hdcp_cleanup() argument
2225 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_cleanup()
2231 * If the connector is registered, it's possible userspace could kick in intel_hdcp_cleanup()
2234 drm_WARN_ON(connector->base.dev, in intel_hdcp_cleanup()
2235 connector->base.registration_state == DRM_CONNECTOR_REGISTERED); in intel_hdcp_cleanup()
2238 * Now that the connector is not registered, check_work won't be run, in intel_hdcp_cleanup()
2246 * function. Instead, we rely on the connector references grabbed before in intel_hdcp_cleanup()
2247 * scheduling prop_work to ensure the connector is alive when prop_work in intel_hdcp_cleanup()
2252 drm_WARN_ON(connector->base.dev, work_pending(&hdcp->prop_work)); in intel_hdcp_cleanup()
2260 void intel_hdcp_atomic_check(struct drm_connector *connector, in intel_hdcp_atomic_check() argument
2270 * If the connector is being disabled with CP enabled, mark it in intel_hdcp_atomic_check()
2271 * desired so it's re-enabled when the connector is brought back in intel_hdcp_atomic_check()
2308 void intel_hdcp_handle_cp_irq(struct intel_connector *connector) in intel_hdcp_handle_cp_irq() argument
2310 struct intel_hdcp *hdcp = &connector->hdcp; in intel_hdcp_handle_cp_irq()
2315 atomic_inc(&connector->hdcp.cp_irq_count); in intel_hdcp_handle_cp_irq()
2316 wake_up_all(&connector->hdcp.cp_irq_queue); in intel_hdcp_handle_cp_irq()