14c283fdaSBhawanpreet Lakha /* 2bf62221eSNicholas Kazlauskas * Copyright 2018 Advanced Micro Devices, Inc. 34c283fdaSBhawanpreet Lakha * 44c283fdaSBhawanpreet Lakha * Permission is hereby granted, free of charge, to any person obtaining a 54c283fdaSBhawanpreet Lakha * copy of this software and associated documentation files (the "Software"), 64c283fdaSBhawanpreet Lakha * to deal in the Software without restriction, including without limitation 74c283fdaSBhawanpreet Lakha * the rights to use, copy, modify, merge, publish, distribute, sublicense, 84c283fdaSBhawanpreet Lakha * and/or sell copies of the Software, and to permit persons to whom the 94c283fdaSBhawanpreet Lakha * Software is furnished to do so, subject to the following conditions: 104c283fdaSBhawanpreet Lakha * 114c283fdaSBhawanpreet Lakha * The above copyright notice and this permission notice shall be included in 124c283fdaSBhawanpreet Lakha * all copies or substantial portions of the Software. 134c283fdaSBhawanpreet Lakha * 144c283fdaSBhawanpreet Lakha * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 154c283fdaSBhawanpreet Lakha * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 164c283fdaSBhawanpreet Lakha * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 174c283fdaSBhawanpreet Lakha * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 184c283fdaSBhawanpreet Lakha * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 194c283fdaSBhawanpreet Lakha * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 204c283fdaSBhawanpreet Lakha * OTHER DEALINGS IN THE SOFTWARE. 214c283fdaSBhawanpreet Lakha * 224c283fdaSBhawanpreet Lakha * Authors: AMD 234c283fdaSBhawanpreet Lakha * 244c283fdaSBhawanpreet Lakha */ 254c283fdaSBhawanpreet Lakha 264c283fdaSBhawanpreet Lakha #ifndef MOD_HDCP_H_ 274c283fdaSBhawanpreet Lakha #define MOD_HDCP_H_ 284c283fdaSBhawanpreet Lakha 294c283fdaSBhawanpreet Lakha #include "os_types.h" 304c283fdaSBhawanpreet Lakha #include "signal_types.h" 314c283fdaSBhawanpreet Lakha 324c283fdaSBhawanpreet Lakha /* Forward Declarations */ 334c283fdaSBhawanpreet Lakha struct mod_hdcp; 344c283fdaSBhawanpreet Lakha 354c283fdaSBhawanpreet Lakha #define MAX_NUM_OF_DISPLAYS 6 364c283fdaSBhawanpreet Lakha #define MAX_NUM_OF_ATTEMPTS 4 374c283fdaSBhawanpreet Lakha #define MAX_NUM_OF_ERROR_TRACE 10 384c283fdaSBhawanpreet Lakha 394c283fdaSBhawanpreet Lakha /* detailed return status */ 404c283fdaSBhawanpreet Lakha enum mod_hdcp_status { 414c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_SUCCESS = 0, 424c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_FAILURE, 434c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_RESET_NEEDED, 444c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_DISPLAY_OUT_OF_BOUND, 454c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_DISPLAY_NOT_FOUND, 464c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_INVALID_STATE, 474c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_NOT_IMPLEMENTED, 484c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_INTERNAL_POLICY_FAILURE, 494c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_UPDATE_TOPOLOGY_FAILURE, 504c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_CREATE_PSP_SERVICE_FAILURE, 514c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_DESTROY_PSP_SERVICE_FAILURE, 524c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_CREATE_SESSION_FAILURE, 534c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_DESTROY_SESSION_FAILURE, 544c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_VALIDATE_ENCRYPTION_FAILURE, 554c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_NOT_HDCP_REPEATER, 564c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_NOT_CAPABLE, 574c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_R0_PRIME_PENDING, 584c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_VALIDATE_RX_FAILURE, 593744ee2cSWenjing Liu MOD_HDCP_STATUS_HDCP1_BKSV_REVOKED, 604c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_KSV_LIST_NOT_READY, 614c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_VALIDATE_KSV_LIST_FAILURE, 623744ee2cSWenjing Liu MOD_HDCP_STATUS_HDCP1_KSV_LIST_REVOKED, 6349c4a8b6SJoseph Gravenor MOD_HDCP_STATUS_HDCP1_ENABLE_ENCRYPTION_FAILURE, 644c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_ENABLE_STREAM_ENCRYPTION_FAILURE, 654c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_MAX_CASCADE_EXCEEDED_FAILURE, 664c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_MAX_DEVS_EXCEEDED_FAILURE, 674c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_DEVICE_COUNT_MISMATCH_FAILURE, 684c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_LINK_INTEGRITY_FAILURE, 694c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_REAUTH_REQUEST_ISSUED, 704c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_LINK_MAINTENANCE_FAILURE, 714c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP1_INVALID_BKSV, 724c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_DDC_FAILURE, /* TODO: specific errors */ 734c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_INVALID_OPERATION, 744c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_NOT_CAPABLE, 754c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_CREATE_SESSION_FAILURE, 764c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_DESTROY_SESSION_FAILURE, 774c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_PREP_AKE_INIT_FAILURE, 784c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_AKE_CERT_PENDING, 794c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_H_PRIME_PENDING, 804c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_PAIRING_INFO_PENDING, 814c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_AKE_CERT_FAILURE, 8251466b3fSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_AKE_CERT_REVOKED, 834c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_H_PRIME_FAILURE, 844c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_PAIRING_INFO_FAILURE, 854c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_PREP_LC_INIT_FAILURE, 864c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_L_PRIME_PENDING, 874c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_L_PRIME_FAILURE, 884c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_PREP_EKS_FAILURE, 894c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_ENABLE_ENCRYPTION_FAILURE, 904c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_NOT_READY, 914c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_RX_ID_LIST_FAILURE, 9251466b3fSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_REVOKED, 9349c4a8b6SJoseph Gravenor MOD_HDCP_STATUS_HDCP2_ENABLE_STREAM_ENCRYPTION_FAILURE, 944c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_STREAM_READY_PENDING, 954c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_VALIDATE_STREAM_READY_FAILURE, 964c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_PREPARE_STREAM_MANAGEMENT_FAILURE, 974c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_REAUTH_REQUEST, 984c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_REAUTH_LINK_INTEGRITY_FAILURE, 994c283fdaSBhawanpreet Lakha MOD_HDCP_STATUS_HDCP2_DEVICE_COUNT_MISMATCH_FAILURE, 100bf62221eSNicholas Kazlauskas MOD_HDCP_STATUS_UNSUPPORTED_PSP_VER_FAILURE, 1014c283fdaSBhawanpreet Lakha }; 1024c283fdaSBhawanpreet Lakha 1034c283fdaSBhawanpreet Lakha struct mod_hdcp_displayport { 1044c283fdaSBhawanpreet Lakha uint8_t rev; 105aac6d439SWenjing Liu uint8_t assr_enabled; 106aac6d439SWenjing Liu uint8_t mst_enabled; 1074c283fdaSBhawanpreet Lakha }; 1084c283fdaSBhawanpreet Lakha 1094c283fdaSBhawanpreet Lakha struct mod_hdcp_hdmi { 1104c283fdaSBhawanpreet Lakha uint8_t reserved; 1114c283fdaSBhawanpreet Lakha }; 1124c283fdaSBhawanpreet Lakha enum mod_hdcp_operation_mode { 1134c283fdaSBhawanpreet Lakha MOD_HDCP_MODE_OFF, 1144c283fdaSBhawanpreet Lakha MOD_HDCP_MODE_DEFAULT, 115b6a1a0e7SWenjing Liu MOD_HDCP_MODE_DP 1164c283fdaSBhawanpreet Lakha }; 1174c283fdaSBhawanpreet Lakha 1184c283fdaSBhawanpreet Lakha enum mod_hdcp_display_state { 1194c283fdaSBhawanpreet Lakha MOD_HDCP_DISPLAY_INACTIVE = 0, 1204c283fdaSBhawanpreet Lakha MOD_HDCP_DISPLAY_ACTIVE, 1214c283fdaSBhawanpreet Lakha MOD_HDCP_DISPLAY_ENCRYPTION_ENABLED 1224c283fdaSBhawanpreet Lakha }; 1234c283fdaSBhawanpreet Lakha 124bf62221eSNicholas Kazlauskas struct mod_hdcp_psp_caps { 125bf62221eSNicholas Kazlauskas uint8_t dtm_v3_supported; 126bf62221eSNicholas Kazlauskas uint8_t opm_state_query_supported; 127bf62221eSNicholas Kazlauskas }; 128bf62221eSNicholas Kazlauskas 1294fe1fdccSWenjing Liu enum mod_hdcp_display_disable_option { 1304fe1fdccSWenjing Liu MOD_HDCP_DISPLAY_NOT_DISABLE = 0, 1314fe1fdccSWenjing Liu MOD_HDCP_DISPLAY_DISABLE_AUTHENTICATION, 1324fe1fdccSWenjing Liu MOD_HDCP_DISPLAY_DISABLE_ENCRYPTION, 1334fe1fdccSWenjing Liu }; 1344fe1fdccSWenjing Liu 1354c283fdaSBhawanpreet Lakha struct mod_hdcp_ddc { 1364c283fdaSBhawanpreet Lakha void *handle; 1374c283fdaSBhawanpreet Lakha struct { 1384c283fdaSBhawanpreet Lakha bool (*read_i2c)(void *handle, 1394c283fdaSBhawanpreet Lakha uint32_t address, 1404c283fdaSBhawanpreet Lakha uint8_t offset, 1414c283fdaSBhawanpreet Lakha uint8_t *data, 1424c283fdaSBhawanpreet Lakha uint32_t size); 1434c283fdaSBhawanpreet Lakha bool (*write_i2c)(void *handle, 1444c283fdaSBhawanpreet Lakha uint32_t address, 1454c283fdaSBhawanpreet Lakha const uint8_t *data, 1464c283fdaSBhawanpreet Lakha uint32_t size); 1474c283fdaSBhawanpreet Lakha bool (*read_dpcd)(void *handle, 1484c283fdaSBhawanpreet Lakha uint32_t address, 1494c283fdaSBhawanpreet Lakha uint8_t *data, 1504c283fdaSBhawanpreet Lakha uint32_t size); 1514c283fdaSBhawanpreet Lakha bool (*write_dpcd)(void *handle, 1524c283fdaSBhawanpreet Lakha uint32_t address, 1534c283fdaSBhawanpreet Lakha const uint8_t *data, 1544c283fdaSBhawanpreet Lakha uint32_t size); 1554c283fdaSBhawanpreet Lakha } funcs; 1564c283fdaSBhawanpreet Lakha }; 1574c283fdaSBhawanpreet Lakha 1584c283fdaSBhawanpreet Lakha struct mod_hdcp_psp { 1594c283fdaSBhawanpreet Lakha void *handle; 1604c283fdaSBhawanpreet Lakha void *funcs; 161bf62221eSNicholas Kazlauskas struct mod_hdcp_psp_caps caps; 1624c283fdaSBhawanpreet Lakha }; 1634c283fdaSBhawanpreet Lakha 1644c283fdaSBhawanpreet Lakha struct mod_hdcp_display_adjustment { 1654fe1fdccSWenjing Liu uint8_t disable : 2; 1664fe1fdccSWenjing Liu uint8_t reserved : 6; 1674c283fdaSBhawanpreet Lakha }; 1684c283fdaSBhawanpreet Lakha 1694c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment_hdcp1 { 1704c283fdaSBhawanpreet Lakha uint8_t disable : 1; 1714c283fdaSBhawanpreet Lakha uint8_t postpone_encryption : 1; 1727bc3807fSGeorge Shen uint8_t min_auth_retries_wa : 1; 1737bc3807fSGeorge Shen uint8_t reserved : 5; 1744c283fdaSBhawanpreet Lakha }; 1754c283fdaSBhawanpreet Lakha 17623eb4191SBhawanpreet Lakha enum mod_hdcp_force_hdcp_type { 17723eb4191SBhawanpreet Lakha MOD_HDCP_FORCE_TYPE_MAX = 0, 17823eb4191SBhawanpreet Lakha MOD_HDCP_FORCE_TYPE_0, 17923eb4191SBhawanpreet Lakha MOD_HDCP_FORCE_TYPE_1 18023eb4191SBhawanpreet Lakha }; 18123eb4191SBhawanpreet Lakha 1824c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment_hdcp2 { 1834c283fdaSBhawanpreet Lakha uint8_t disable : 1; 18423eb4191SBhawanpreet Lakha uint8_t force_type : 2; 1854c283fdaSBhawanpreet Lakha uint8_t force_no_stored_km : 1; 1864c283fdaSBhawanpreet Lakha uint8_t increase_h_prime_timeout: 1; 18723eb4191SBhawanpreet Lakha uint8_t reserved : 3; 1884c283fdaSBhawanpreet Lakha }; 1894c283fdaSBhawanpreet Lakha 1904c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment { 1914c283fdaSBhawanpreet Lakha uint8_t auth_delay; 1924c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment_hdcp1 hdcp1; 1934c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment_hdcp2 hdcp2; 1944c283fdaSBhawanpreet Lakha }; 1954c283fdaSBhawanpreet Lakha 1964c283fdaSBhawanpreet Lakha struct mod_hdcp_error { 1974c283fdaSBhawanpreet Lakha enum mod_hdcp_status status; 1984c283fdaSBhawanpreet Lakha uint8_t state_id; 1994c283fdaSBhawanpreet Lakha }; 2004c283fdaSBhawanpreet Lakha 2014c283fdaSBhawanpreet Lakha struct mod_hdcp_trace { 2024c283fdaSBhawanpreet Lakha struct mod_hdcp_error errors[MAX_NUM_OF_ERROR_TRACE]; 2034c283fdaSBhawanpreet Lakha uint8_t error_count; 2044c283fdaSBhawanpreet Lakha }; 2054c283fdaSBhawanpreet Lakha 2064c283fdaSBhawanpreet Lakha enum mod_hdcp_encryption_status { 2074c283fdaSBhawanpreet Lakha MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF = 0, 2084c283fdaSBhawanpreet Lakha MOD_HDCP_ENCRYPTION_STATUS_HDCP1_ON, 2094c283fdaSBhawanpreet Lakha MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON, 21045375a50SBhawanpreet Lakha MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON, 21145375a50SBhawanpreet Lakha MOD_HDCP_ENCRYPTION_STATUS_HDCP2_ON 2124c283fdaSBhawanpreet Lakha }; 2134c283fdaSBhawanpreet Lakha 2144c283fdaSBhawanpreet Lakha /* per link events dm has to notify to hdcp module */ 2154c283fdaSBhawanpreet Lakha enum mod_hdcp_event { 2164c283fdaSBhawanpreet Lakha MOD_HDCP_EVENT_CALLBACK = 0, 2174c283fdaSBhawanpreet Lakha MOD_HDCP_EVENT_WATCHDOG_TIMEOUT, 2184c283fdaSBhawanpreet Lakha MOD_HDCP_EVENT_CPIRQ 2194c283fdaSBhawanpreet Lakha }; 2204c283fdaSBhawanpreet Lakha 2214c283fdaSBhawanpreet Lakha /* output flags from module requesting timer operations */ 2224c283fdaSBhawanpreet Lakha struct mod_hdcp_output { 2234c283fdaSBhawanpreet Lakha uint8_t callback_needed; 2244c283fdaSBhawanpreet Lakha uint8_t callback_stop; 2254c283fdaSBhawanpreet Lakha uint8_t watchdog_timer_needed; 2264c283fdaSBhawanpreet Lakha uint8_t watchdog_timer_stop; 2274c283fdaSBhawanpreet Lakha uint16_t callback_delay; 2284c283fdaSBhawanpreet Lakha uint16_t watchdog_timer_delay; 2294c283fdaSBhawanpreet Lakha }; 2304c283fdaSBhawanpreet Lakha 2314c283fdaSBhawanpreet Lakha /* used to represent per display info */ 2324c283fdaSBhawanpreet Lakha struct mod_hdcp_display { 2334c283fdaSBhawanpreet Lakha enum mod_hdcp_display_state state; 2344c283fdaSBhawanpreet Lakha uint8_t index; 2354c283fdaSBhawanpreet Lakha uint8_t controller; 2364c283fdaSBhawanpreet Lakha uint8_t dig_fe; 237bf62221eSNicholas Kazlauskas uint8_t stream_enc_idx; 2384c283fdaSBhawanpreet Lakha union { 2394c283fdaSBhawanpreet Lakha uint8_t vc_id; 2404c283fdaSBhawanpreet Lakha }; 2414c283fdaSBhawanpreet Lakha struct mod_hdcp_display_adjustment adjust; 2424c283fdaSBhawanpreet Lakha }; 2434c283fdaSBhawanpreet Lakha 2444c283fdaSBhawanpreet Lakha /* used to represent per link info */ 2454c283fdaSBhawanpreet Lakha /* in case a link has multiple displays, they share the same link info */ 2464c283fdaSBhawanpreet Lakha struct mod_hdcp_link { 2474c283fdaSBhawanpreet Lakha enum mod_hdcp_operation_mode mode; 2484c283fdaSBhawanpreet Lakha uint8_t dig_be; 2494c283fdaSBhawanpreet Lakha uint8_t ddc_line; 250bf62221eSNicholas Kazlauskas uint8_t link_enc_idx; 251bf62221eSNicholas Kazlauskas uint8_t phy_idx; 252bf62221eSNicholas Kazlauskas uint8_t hdcp_supported_informational; 2534c283fdaSBhawanpreet Lakha union { 2544c283fdaSBhawanpreet Lakha struct mod_hdcp_displayport dp; 2554c283fdaSBhawanpreet Lakha struct mod_hdcp_hdmi hdmi; 2564c283fdaSBhawanpreet Lakha }; 2574c283fdaSBhawanpreet Lakha struct mod_hdcp_link_adjustment adjust; 2584c283fdaSBhawanpreet Lakha }; 2594c283fdaSBhawanpreet Lakha 2604c283fdaSBhawanpreet Lakha /* a query structure for a display's hdcp information */ 2614c283fdaSBhawanpreet Lakha struct mod_hdcp_display_query { 2624c283fdaSBhawanpreet Lakha const struct mod_hdcp_display *display; 2634c283fdaSBhawanpreet Lakha const struct mod_hdcp_link *link; 2644c283fdaSBhawanpreet Lakha const struct mod_hdcp_trace *trace; 2654c283fdaSBhawanpreet Lakha enum mod_hdcp_encryption_status encryption_status; 2664c283fdaSBhawanpreet Lakha }; 2674c283fdaSBhawanpreet Lakha 2684c283fdaSBhawanpreet Lakha /* contains values per on external display configuration change */ 2694c283fdaSBhawanpreet Lakha struct mod_hdcp_config { 2704c283fdaSBhawanpreet Lakha struct mod_hdcp_psp psp; 2714c283fdaSBhawanpreet Lakha struct mod_hdcp_ddc ddc; 2724c283fdaSBhawanpreet Lakha uint8_t index; 2734c283fdaSBhawanpreet Lakha }; 2744c283fdaSBhawanpreet Lakha 2754c283fdaSBhawanpreet Lakha /* dm allocates memory of mod_hdcp per dc_link on dm init based on memory size*/ 2764c283fdaSBhawanpreet Lakha size_t mod_hdcp_get_memory_size(void); 2774c283fdaSBhawanpreet Lakha 2784c283fdaSBhawanpreet Lakha /* called per link on link creation */ 2794c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_setup(struct mod_hdcp *hdcp, 2804c283fdaSBhawanpreet Lakha struct mod_hdcp_config *config); 2814c283fdaSBhawanpreet Lakha 2824c283fdaSBhawanpreet Lakha /* called per link on link destroy */ 2834c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_teardown(struct mod_hdcp *hdcp); 2844c283fdaSBhawanpreet Lakha 285*40ef288fSWenjing Liu /* called per display after stream is enabled */ 2864c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_add_display(struct mod_hdcp *hdcp, 2874c283fdaSBhawanpreet Lakha struct mod_hdcp_link *link, struct mod_hdcp_display *display, 2884c283fdaSBhawanpreet Lakha struct mod_hdcp_output *output); 2894c283fdaSBhawanpreet Lakha 290*40ef288fSWenjing Liu /* called per display before stream is disabled */ 2914c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_remove_display(struct mod_hdcp *hdcp, 2924c283fdaSBhawanpreet Lakha uint8_t index, struct mod_hdcp_output *output); 2934c283fdaSBhawanpreet Lakha 294*40ef288fSWenjing Liu /* called per display to apply new authentication adjustment */ 295*40ef288fSWenjing Liu enum mod_hdcp_status mod_hdcp_update_authentication(struct mod_hdcp *hdcp, 296*40ef288fSWenjing Liu uint8_t index, 297*40ef288fSWenjing Liu struct mod_hdcp_link_adjustment *link_adjust, 298*40ef288fSWenjing Liu struct mod_hdcp_display_adjustment *display_adjust, 299*40ef288fSWenjing Liu struct mod_hdcp_output *output); 300*40ef288fSWenjing Liu 3014c283fdaSBhawanpreet Lakha /* called to query hdcp information on a specific index */ 3024c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_query_display(struct mod_hdcp *hdcp, 3034c283fdaSBhawanpreet Lakha uint8_t index, struct mod_hdcp_display_query *query); 3044c283fdaSBhawanpreet Lakha 3054c283fdaSBhawanpreet Lakha /* called per link on connectivity change */ 3064c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_reset_connection(struct mod_hdcp *hdcp, 3074c283fdaSBhawanpreet Lakha struct mod_hdcp_output *output); 3084c283fdaSBhawanpreet Lakha 3094c283fdaSBhawanpreet Lakha /* called per link on events (i.e. callback, watchdog, CP_IRQ) */ 3104c283fdaSBhawanpreet Lakha enum mod_hdcp_status mod_hdcp_process_event(struct mod_hdcp *hdcp, 3114c283fdaSBhawanpreet Lakha enum mod_hdcp_event event, struct mod_hdcp_output *output); 3124c283fdaSBhawanpreet Lakha 3134c283fdaSBhawanpreet Lakha /* called to convert enum mod_hdcp_status to c string */ 3144c283fdaSBhawanpreet Lakha char *mod_hdcp_status_to_str(int32_t status); 3154c283fdaSBhawanpreet Lakha 3164c283fdaSBhawanpreet Lakha /* called to convert state id to c string */ 3174c283fdaSBhawanpreet Lakha char *mod_hdcp_state_id_to_str(int32_t id); 3184c283fdaSBhawanpreet Lakha 3194c283fdaSBhawanpreet Lakha /* called to convert signal type to operation mode */ 3204c283fdaSBhawanpreet Lakha enum mod_hdcp_operation_mode mod_hdcp_signal_type_to_operation_mode( 3214c283fdaSBhawanpreet Lakha enum signal_type signal); 3224c283fdaSBhawanpreet Lakha #endif /* MOD_HDCP_H_ */ 323