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