Home | History | Annotate | Line # | Download | only in hdcp
      1 /*	$NetBSD: amdgpu_hdcp_log.c,v 1.3 2021/12/19 12:02:39 riastradh Exp $	*/
      2 
      3 /*
      4  * Copyright 2019 Advanced Micro Devices, Inc.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * OTHER DEALINGS IN THE SOFTWARE.
     23  *
     24  * Authors: AMD
     25  *
     26  */
     27 
     28 
     29 #include <sys/cdefs.h>
     30 __KERNEL_RCSID(0, "$NetBSD: amdgpu_hdcp_log.c,v 1.3 2021/12/19 12:02:39 riastradh Exp $");
     31 
     32 #include "hdcp.h"
     33 
     34 void mod_hdcp_dump_binary_message(uint8_t *msg, uint32_t msg_size,
     35 		uint8_t *buf, uint32_t buf_size)
     36 {
     37 	const uint8_t bytes_per_line = 16,
     38 			byte_size = 3,
     39 			newline_size = 1,
     40 			terminator_size = 1;
     41 	uint32_t line_count = msg_size / bytes_per_line,
     42 			trailing_bytes = msg_size % bytes_per_line;
     43 	uint32_t target_size = (byte_size * bytes_per_line + newline_size) * line_count +
     44 			byte_size * trailing_bytes + newline_size + terminator_size;
     45 	uint32_t buf_pos = 0;
     46 	uint32_t i = 0;
     47 
     48 	if (buf_size >= target_size) {
     49 		for (i = 0; i < msg_size; i++) {
     50 			if (i % bytes_per_line == 0)
     51 				buf[buf_pos++] = '\n';
     52 			snprintf(&buf[buf_pos], sizeof(buf) - buf_pos, "%02X ", msg[i]);
     53 			buf_pos += byte_size;
     54 		}
     55 		buf[buf_pos++] = '\0';
     56 	}
     57 }
     58 
     59 const char *mod_hdcp_status_to_str(int32_t status)
     60 {
     61 	switch (status) {
     62 	case MOD_HDCP_STATUS_SUCCESS:
     63 		return "MOD_HDCP_STATUS_SUCCESS";
     64 	case MOD_HDCP_STATUS_FAILURE:
     65 		return "MOD_HDCP_STATUS_FAILURE";
     66 	case MOD_HDCP_STATUS_RESET_NEEDED:
     67 		return "MOD_HDCP_STATUS_RESET_NEEDED";
     68 	case MOD_HDCP_STATUS_DISPLAY_OUT_OF_BOUND:
     69 		return "MOD_HDCP_STATUS_DISPLAY_OUT_OF_BOUND";
     70 	case MOD_HDCP_STATUS_DISPLAY_NOT_FOUND:
     71 		return "MOD_HDCP_STATUS_DISPLAY_NOT_FOUND";
     72 	case MOD_HDCP_STATUS_INVALID_STATE:
     73 		return "MOD_HDCP_STATUS_INVALID_STATE";
     74 	case MOD_HDCP_STATUS_NOT_IMPLEMENTED:
     75 		return "MOD_HDCP_STATUS_NOT_IMPLEMENTED";
     76 	case MOD_HDCP_STATUS_INTERNAL_POLICY_FAILURE:
     77 		return "MOD_HDCP_STATUS_INTERNAL_POLICY_FAILURE";
     78 	case MOD_HDCP_STATUS_UPDATE_TOPOLOGY_FAILURE:
     79 		return "MOD_HDCP_STATUS_UPDATE_TOPOLOGY_FAILURE";
     80 	case MOD_HDCP_STATUS_CREATE_PSP_SERVICE_FAILURE:
     81 		return "MOD_HDCP_STATUS_CREATE_PSP_SERVICE_FAILURE";
     82 	case MOD_HDCP_STATUS_DESTROY_PSP_SERVICE_FAILURE:
     83 		return "MOD_HDCP_STATUS_DESTROY_PSP_SERVICE_FAILURE";
     84 	case MOD_HDCP_STATUS_HDCP1_CREATE_SESSION_FAILURE:
     85 		return "MOD_HDCP_STATUS_HDCP1_CREATE_SESSION_FAILURE";
     86 	case MOD_HDCP_STATUS_HDCP1_DESTROY_SESSION_FAILURE:
     87 		return "MOD_HDCP_STATUS_HDCP1_DESTROY_SESSION_FAILURE";
     88 	case MOD_HDCP_STATUS_HDCP1_VALIDATE_ENCRYPTION_FAILURE:
     89 		return "MOD_HDCP_STATUS_HDCP1_VALIDATE_ENCRYPTION_FAILURE";
     90 	case MOD_HDCP_STATUS_HDCP1_NOT_HDCP_REPEATER:
     91 		return "MOD_HDCP_STATUS_HDCP1_NOT_HDCP_REPEATER";
     92 	case MOD_HDCP_STATUS_HDCP1_NOT_CAPABLE:
     93 		return "MOD_HDCP_STATUS_HDCP1_NOT_CAPABLE";
     94 	case MOD_HDCP_STATUS_HDCP1_R0_PRIME_PENDING:
     95 		return "MOD_HDCP_STATUS_HDCP1_R0_PRIME_PENDING";
     96 	case MOD_HDCP_STATUS_HDCP1_VALIDATE_RX_FAILURE:
     97 		return "MOD_HDCP_STATUS_HDCP1_VALIDATE_RX_FAILURE";
     98 	case MOD_HDCP_STATUS_HDCP1_KSV_LIST_NOT_READY:
     99 		return "MOD_HDCP_STATUS_HDCP1_KSV_LIST_NOT_READY";
    100 	case MOD_HDCP_STATUS_HDCP1_VALIDATE_KSV_LIST_FAILURE:
    101 		return "MOD_HDCP_STATUS_HDCP1_VALIDATE_KSV_LIST_FAILURE";
    102 	case MOD_HDCP_STATUS_HDCP1_ENABLE_ENCRYPTION:
    103 		return "MOD_HDCP_STATUS_HDCP1_ENABLE_ENCRYPTION";
    104 	case MOD_HDCP_STATUS_HDCP1_ENABLE_STREAM_ENCRYPTION_FAILURE:
    105 		return "MOD_HDCP_STATUS_HDCP1_ENABLE_STREAM_ENCRYPTION_FAILURE";
    106 	case MOD_HDCP_STATUS_HDCP1_MAX_CASCADE_EXCEEDED_FAILURE:
    107 		return "MOD_HDCP_STATUS_HDCP1_MAX_CASCADE_EXCEEDED_FAILURE";
    108 	case MOD_HDCP_STATUS_HDCP1_MAX_DEVS_EXCEEDED_FAILURE:
    109 		return "MOD_HDCP_STATUS_HDCP1_MAX_DEVS_EXCEEDED_FAILURE";
    110 	case MOD_HDCP_STATUS_HDCP1_DEVICE_COUNT_MISMATCH_FAILURE:
    111 		return "MOD_HDCP_STATUS_HDCP1_DEVICE_COUNT_MISMATCH_FAILURE";
    112 	case MOD_HDCP_STATUS_HDCP1_LINK_INTEGRITY_FAILURE:
    113 		return "MOD_HDCP_STATUS_HDCP1_LINK_INTEGRITY_FAILURE";
    114 	case MOD_HDCP_STATUS_HDCP1_REAUTH_REQUEST_ISSUED:
    115 		return "MOD_HDCP_STATUS_HDCP1_REAUTH_REQUEST_ISSUED";
    116 	case MOD_HDCP_STATUS_HDCP1_LINK_MAINTENANCE_FAILURE:
    117 		return "MOD_HDCP_STATUS_HDCP1_LINK_MAINTENANCE_FAILURE";
    118 	case MOD_HDCP_STATUS_HDCP1_INVALID_BKSV:
    119 		return "MOD_HDCP_STATUS_HDCP1_INVALID_BKSV";
    120 	case MOD_HDCP_STATUS_DDC_FAILURE:
    121 		return "MOD_HDCP_STATUS_DDC_FAILURE";
    122 	case MOD_HDCP_STATUS_INVALID_OPERATION:
    123 		return "MOD_HDCP_STATUS_INVALID_OPERATION";
    124 	case MOD_HDCP_STATUS_HDCP2_NOT_CAPABLE:
    125 		return "MOD_HDCP_STATUS_HDCP2_NOT_CAPABLE";
    126 	case MOD_HDCP_STATUS_HDCP2_CREATE_SESSION_FAILURE:
    127 		return "MOD_HDCP_STATUS_HDCP2_CREATE_SESSION_FAILURE";
    128 	case MOD_HDCP_STATUS_HDCP2_DESTROY_SESSION_FAILURE:
    129 		return "MOD_HDCP_STATUS_HDCP2_DESTROY_SESSION_FAILURE";
    130 	case MOD_HDCP_STATUS_HDCP2_PREP_AKE_INIT_FAILURE:
    131 		return "MOD_HDCP_STATUS_HDCP2_PREP_AKE_INIT_FAILURE";
    132 	case MOD_HDCP_STATUS_HDCP2_AKE_CERT_PENDING:
    133 		return "MOD_HDCP_STATUS_HDCP2_AKE_CERT_PENDING";
    134 	case MOD_HDCP_STATUS_HDCP2_H_PRIME_PENDING:
    135 		return "MOD_HDCP_STATUS_HDCP2_H_PRIME_PENDING";
    136 	case MOD_HDCP_STATUS_HDCP2_PAIRING_INFO_PENDING:
    137 		return "MOD_HDCP_STATUS_HDCP2_PAIRING_INFO_PENDING";
    138 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_AKE_CERT_FAILURE:
    139 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_AKE_CERT_FAILURE";
    140 	case MOD_HDCP_STATUS_HDCP2_AKE_CERT_REVOKED:
    141 		return "MOD_HDCP_STATUS_HDCP2_AKE_CERT_REVOKED";
    142 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_H_PRIME_FAILURE:
    143 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_H_PRIME_FAILURE";
    144 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_PAIRING_INFO_FAILURE:
    145 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_PAIRING_INFO_FAILURE";
    146 	case MOD_HDCP_STATUS_HDCP2_PREP_LC_INIT_FAILURE:
    147 		return "MOD_HDCP_STATUS_HDCP2_PREP_LC_INIT_FAILURE";
    148 	case MOD_HDCP_STATUS_HDCP2_L_PRIME_PENDING:
    149 		return "MOD_HDCP_STATUS_HDCP2_L_PRIME_PENDING";
    150 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_L_PRIME_FAILURE:
    151 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_L_PRIME_FAILURE";
    152 	case MOD_HDCP_STATUS_HDCP2_PREP_EKS_FAILURE:
    153 		return "MOD_HDCP_STATUS_HDCP2_PREP_EKS_FAILURE";
    154 	case MOD_HDCP_STATUS_HDCP2_ENABLE_ENCRYPTION_FAILURE:
    155 		return "MOD_HDCP_STATUS_HDCP2_ENABLE_ENCRYPTION_FAILURE";
    156 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_RX_ID_LIST_FAILURE:
    157 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_RX_ID_LIST_FAILURE";
    158 	case MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_REVOKED:
    159 		return "MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_REVOKED";
    160 	case MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_NOT_READY:
    161 		return "MOD_HDCP_STATUS_HDCP2_RX_ID_LIST_NOT_READY";
    162 	case MOD_HDCP_STATUS_HDCP2_ENABLE_STREAM_ENCRYPTION:
    163 		return "MOD_HDCP_STATUS_HDCP2_ENABLE_STREAM_ENCRYPTION";
    164 	case MOD_HDCP_STATUS_HDCP2_STREAM_READY_PENDING:
    165 		return "MOD_HDCP_STATUS_HDCP2_STREAM_READY_PENDING";
    166 	case MOD_HDCP_STATUS_HDCP2_VALIDATE_STREAM_READY_FAILURE:
    167 		return "MOD_HDCP_STATUS_HDCP2_VALIDATE_STREAM_READY_FAILURE";
    168 	case MOD_HDCP_STATUS_HDCP2_PREPARE_STREAM_MANAGEMENT_FAILURE:
    169 		return "MOD_HDCP_STATUS_HDCP2_PREPARE_STREAM_MANAGEMENT_FAILURE";
    170 	case MOD_HDCP_STATUS_HDCP2_REAUTH_REQUEST:
    171 		return "MOD_HDCP_STATUS_HDCP2_REAUTH_REQUEST";
    172 	case MOD_HDCP_STATUS_HDCP2_REAUTH_LINK_INTEGRITY_FAILURE:
    173 		return "MOD_HDCP_STATUS_HDCP2_REAUTH_LINK_INTEGRITY_FAILURE";
    174 	case MOD_HDCP_STATUS_HDCP2_DEVICE_COUNT_MISMATCH_FAILURE:
    175 		return "MOD_HDCP_STATUS_HDCP2_DEVICE_COUNT_MISMATCH_FAILURE";
    176 	default:
    177 		return "MOD_HDCP_STATUS_UNKNOWN";
    178 	}
    179 }
    180 
    181 const char *mod_hdcp_state_id_to_str(int32_t id)
    182 {
    183 	switch (id) {
    184 	case HDCP_UNINITIALIZED:
    185 		return "HDCP_UNINITIALIZED";
    186 	case HDCP_INITIALIZED:
    187 		return "HDCP_INITIALIZED";
    188 	case HDCP_CP_NOT_DESIRED:
    189 		return "HDCP_CP_NOT_DESIRED";
    190 	case H1_A0_WAIT_FOR_ACTIVE_RX:
    191 		return "H1_A0_WAIT_FOR_ACTIVE_RX";
    192 	case H1_A1_EXCHANGE_KSVS:
    193 		return "H1_A1_EXCHANGE_KSVS";
    194 	case H1_A2_COMPUTATIONS_A3_VALIDATE_RX_A6_TEST_FOR_REPEATER:
    195 		return "H1_A2_COMPUTATIONS_A3_VALIDATE_RX_A6_TEST_FOR_REPEATER";
    196 	case H1_A45_AUTHENTICATED:
    197 		return "H1_A45_AUTHENTICATED";
    198 	case H1_A8_WAIT_FOR_READY:
    199 		return "H1_A8_WAIT_FOR_READY";
    200 	case H1_A9_READ_KSV_LIST:
    201 		return "H1_A9_READ_KSV_LIST";
    202 	case D1_A0_DETERMINE_RX_HDCP_CAPABLE:
    203 		return "D1_A0_DETERMINE_RX_HDCP_CAPABLE";
    204 	case D1_A1_EXCHANGE_KSVS:
    205 		return "D1_A1_EXCHANGE_KSVS";
    206 	case D1_A23_WAIT_FOR_R0_PRIME:
    207 		return "D1_A23_WAIT_FOR_R0_PRIME";
    208 	case D1_A2_COMPUTATIONS_A3_VALIDATE_RX_A5_TEST_FOR_REPEATER:
    209 		return "D1_A2_COMPUTATIONS_A3_VALIDATE_RX_A5_TEST_FOR_REPEATER";
    210 	case D1_A4_AUTHENTICATED:
    211 		return "D1_A4_AUTHENTICATED";
    212 	case D1_A6_WAIT_FOR_READY:
    213 		return "D1_A6_WAIT_FOR_READY";
    214 	case D1_A7_READ_KSV_LIST:
    215 		return "D1_A7_READ_KSV_LIST";
    216 	case H2_A0_KNOWN_HDCP2_CAPABLE_RX:
    217 		return "H2_A0_KNOWN_HDCP2_CAPABLE_RX";
    218 	case H2_A1_SEND_AKE_INIT:
    219 		return "H2_A1_SEND_AKE_INIT";
    220 	case H2_A1_VALIDATE_AKE_CERT:
    221 		return "H2_A1_VALIDATE_AKE_CERT";
    222 	case H2_A1_SEND_NO_STORED_KM:
    223 		return "H2_A1_SEND_NO_STORED_KM";
    224 	case H2_A1_READ_H_PRIME:
    225 		return "H2_A1_READ_H_PRIME";
    226 	case H2_A1_READ_PAIRING_INFO_AND_VALIDATE_H_PRIME:
    227 		return "H2_A1_READ_PAIRING_INFO_AND_VALIDATE_H_PRIME";
    228 	case H2_A1_SEND_STORED_KM:
    229 		return "H2_A1_SEND_STORED_KM";
    230 	case H2_A1_VALIDATE_H_PRIME:
    231 		return "H2_A1_VALIDATE_H_PRIME";
    232 	case H2_A2_LOCALITY_CHECK:
    233 		return "H2_A2_LOCALITY_CHECK";
    234 	case H2_A3_EXCHANGE_KS_AND_TEST_FOR_REPEATER:
    235 		return "H2_A3_EXCHANGE_KS_AND_TEST_FOR_REPEATER";
    236 	case H2_ENABLE_ENCRYPTION:
    237 		return "H2_ENABLE_ENCRYPTION";
    238 	case H2_A5_AUTHENTICATED:
    239 		return "H2_A5_AUTHENTICATED";
    240 	case H2_A6_WAIT_FOR_RX_ID_LIST:
    241 		return "H2_A6_WAIT_FOR_RX_ID_LIST";
    242 	case H2_A78_VERIFY_RX_ID_LIST_AND_SEND_ACK:
    243 		return "H2_A78_VERIFY_RX_ID_LIST_AND_SEND_ACK";
    244 	case H2_A9_SEND_STREAM_MANAGEMENT:
    245 		return "H2_A9_SEND_STREAM_MANAGEMENT";
    246 	case H2_A9_VALIDATE_STREAM_READY:
    247 		return "H2_A9_VALIDATE_STREAM_READY";
    248 	case D2_A0_DETERMINE_RX_HDCP_CAPABLE:
    249 		return "D2_A0_DETERMINE_RX_HDCP_CAPABLE";
    250 	case D2_A1_SEND_AKE_INIT:
    251 		return "D2_A1_SEND_AKE_INIT";
    252 	case D2_A1_VALIDATE_AKE_CERT:
    253 		return "D2_A1_VALIDATE_AKE_CERT";
    254 	case D2_A1_SEND_NO_STORED_KM:
    255 		return "D2_A1_SEND_NO_STORED_KM";
    256 	case D2_A1_READ_H_PRIME:
    257 		return "D2_A1_READ_H_PRIME";
    258 	case D2_A1_READ_PAIRING_INFO_AND_VALIDATE_H_PRIME:
    259 		return "D2_A1_READ_PAIRING_INFO_AND_VALIDATE_H_PRIME";
    260 	case D2_A1_SEND_STORED_KM:
    261 		return "D2_A1_SEND_STORED_KM";
    262 	case D2_A1_VALIDATE_H_PRIME:
    263 		return "D2_A1_VALIDATE_H_PRIME";
    264 	case D2_A2_LOCALITY_CHECK:
    265 		return "D2_A2_LOCALITY_CHECK";
    266 	case D2_A34_EXCHANGE_KS_AND_TEST_FOR_REPEATER:
    267 		return "D2_A34_EXCHANGE_KS_AND_TEST_FOR_REPEATER";
    268 	case D2_SEND_CONTENT_STREAM_TYPE:
    269 		return "D2_SEND_CONTENT_STREAM_TYPE";
    270 	case D2_ENABLE_ENCRYPTION:
    271 		return "D2_ENABLE_ENCRYPTION";
    272 	case D2_A5_AUTHENTICATED:
    273 		return "D2_A5_AUTHENTICATED";
    274 	case D2_A6_WAIT_FOR_RX_ID_LIST:
    275 		return "D2_A6_WAIT_FOR_RX_ID_LIST";
    276 	case D2_A78_VERIFY_RX_ID_LIST_AND_SEND_ACK:
    277 		return "D2_A78_VERIFY_RX_ID_LIST_AND_SEND_ACK";
    278 	case D2_A9_SEND_STREAM_MANAGEMENT:
    279 		return "D2_A9_SEND_STREAM_MANAGEMENT";
    280 	case D2_A9_VALIDATE_STREAM_READY:
    281 		return "D2_A9_VALIDATE_STREAM_READY";
    282 	default:
    283 		return "UNKNOWN_STATE_ID";
    284 	};
    285 }
    286 
    287