| 266 | } |
| 267 | |
| 268 | EFI_STATUS SaveHdaDumpTxt() |
| 269 | { |
| 270 | EFI_STATUS Status = EFI_NOT_FOUND; |
| 271 | AUDIO_IO_PRIVATE_DATA *AudioIoPrivateData; |
| 272 | HDA_CODEC_DEV *HdaCodecDev; |
| 273 | // EFI_HDA_CODEC_INFO_PROTOCOL *HdaCodecInfo; |
| 274 | HDA_FUNC_GROUP *AudioFuncGroup; |
| 275 | EFI_HDA_IO_PROTOCOL *HdaIo; |
| 276 | XStringW MiscPath = SWPrintf("%ls\\misc", OEMPath.wc_str()); |
| 277 | CHAR8 *MemLogStart; |
| 278 | UINTN MemLogStartLen; |
| 279 | |
| 280 | // Print each codec found. |
| 281 | for (UINTN i = 0; i < AudioList.size(); i++) { |
| 282 | MemLogStartLen = GetMemLogLen(); |
| 283 | MemLogStart = GetMemLogBuffer() + MemLogStartLen; |
| 284 | |
| 285 | HdaLog("HdaCodecDump Start\n"); |
| 286 | |
| 287 | Status = gBS->HandleProtocol(AudioList[i].Handle, &gEfiAudioIoProtocolGuid, (VOID**)&AudioIo); |
| 288 | |
| 289 | if (EFI_ERROR(Status)) |
| 290 | continue; |
| 291 | |
| 292 | AudioIoPrivateData = AUDIO_IO_PRIVATE_DATA_FROM_THIS(AudioIo); |
| 293 | |
| 294 | if (!AudioIoPrivateData || !AudioIoPrivateData->HdaCodecDev || |
| 295 | !AudioIoPrivateData->HdaCodecDev->HdaIo || !AudioIoPrivateData->HdaCodecDev->AudioFuncGroup) |
| 296 | continue; |
| 297 | |
| 298 | HdaCodecDev = AudioIoPrivateData->HdaCodecDev; |
| 299 | // HdaCodecInfo = &HdaCodecDev->HdaCodecInfoData->HdaCodecInfo; |
| 300 | AudioFuncGroup = HdaCodecDev->AudioFuncGroup; |
| 301 | HdaIo = HdaCodecDev->HdaIo; |
| 302 | |
| 303 | // Get name. |
| 304 | HdaLog("Codec: %ls\n", HdaCodecDev->Name); |
| 305 | |
| 306 | // Get address |
| 307 | UINT8 CodecAddress; |
| 308 | Status = HdaIo->GetAddress(HdaIo, &CodecAddress); |
| 309 | HdaLog("Address: %hhu\n", CodecAddress); |
| 310 | |
| 311 | // Get AFG ID. |
| 312 | HdaLog("AFG Function Id: 0x%1hhX (unsol %hhu)\n", AudioFuncGroup->NodeId, AudioFuncGroup->UnsolCapable); |
| 313 | |
| 314 | HdaLog("Vendor ID: 0x%08X\n", HdaCodecDev->VendorId); |
| 315 | HdaLog("Revision ID: 0x%08X\n", HdaCodecDev->RevisionId); |
| 316 | |
| 317 | // Get supported rates/formats. |
| 318 | if ((AudioFuncGroup->SupportedPcmRates != 0) || (AudioFuncGroup->SupportedFormats != 0)) { |
| 319 | HdaLog("Default PCM:\n"); |
| 320 | HdaCodecDumpPrintRatesFormats(AudioFuncGroup->SupportedPcmRates, AudioFuncGroup->SupportedFormats); |
| 321 | } else |
| 322 | HdaLog("Default PCM: N/A\n"); |
| 323 | |
| 324 | // Get default amp caps. |
| 325 | HdaLog("Default Amp-In caps: "); |
no test coverage detected