MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / GetOutputs

Function GetOutputs

rEFIt_UEFI/Platform/StartupSound.cpp:405–466  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

403}
404
405VOID GetOutputs()
406{
407 EFI_STATUS Status;
408 // Audio I/O.
409 EFI_HANDLE *AudioIoHandles = NULL;
410 UINTN AudioIoHandleCount = 0;
411 AUDIO_IO_PRIVATE_DATA *AudioIoPrivateData;
412 EFI_AUDIO_IO_PROTOCOL *AudioIoTmp = NULL;
413 HDA_CODEC_DEV *HdaCodecDev;
414 EFI_AUDIO_IO_PROTOCOL_PORT *HdaOutputPorts = NULL;
415 UINTN OutputPortsCount = 0;
416
417 UINTN h;
418
419 AudioList.setEmpty();
420
421 // Get Audio I/O protocols.
422 Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiAudioIoProtocolGuid, NULL, &AudioIoHandleCount, &AudioIoHandles);
423 if (EFI_ERROR(Status)) {
424 MsgLog("No AudioIoProtocols, status=%s\n", efiStrError(Status));
425 return;
426 }
427
428 for (h = 0; h < AudioIoHandleCount; h++) {
429 UINTN i;
430 Status = gBS->HandleProtocol(AudioIoHandles[h], &gEfiAudioIoProtocolGuid, (VOID**)&AudioIoTmp);
431 if (EFI_ERROR(Status)) {
432 DBG("dont handle AudioIo at %llu\n", h);
433 continue;
434 }
435 // Get output ports.
436 Status = AudioIoTmp->GetOutputs(AudioIoTmp, &HdaOutputPorts, &OutputPortsCount);
437 if (EFI_ERROR(Status)) {
438 continue;
439 }
440 if ( OutputPortsCount > 255 ) {
441 // SetupPlayback cannot handle index > 255 because parameter is UINT8
442 DBG("GetOutputs() : OutputPortsCount > 255.\n");
443 OutputPortsCount = 255;
444 }
445 AudioIoPrivateData = AUDIO_IO_PRIVATE_DATA_FROM_THIS(AudioIoTmp);
446 if (!AudioIoPrivateData) {
447 continue;
448 }
449 HdaCodecDev = AudioIoPrivateData->HdaCodecDev;
450 for (i = 0; i < OutputPortsCount; i++) {
451 HDA_OUTPUTS* hdaOutputPtr = new HDA_OUTPUTS();
452 HDA_OUTPUTS& hdaOutput = *hdaOutputPtr;
453 // HdaCodecDev->OutputPorts[i];
454 hdaOutput.Name.takeValueFrom(HdaCodecDev->Name);
455 hdaOutput.Handle = AudioIoHandles[h];
456 hdaOutput.Device = HdaOutputPorts[i].Device;
457 hdaOutput.Index = (UINT8)i; // safe cast : OutputPortsCount is <= 255.
458 AudioList.AddReference(hdaOutputPtr, true);
459 }
460 }
461
462 Status = GetStoredOutput();

Callers 1

RefitMainFunction · 0.85

Calls 4

GetStoredOutputFunction · 0.85
efiStrErrorFunction · 0.50
setEmptyMethod · 0.45
AddReferenceMethod · 0.45

Tested by

no test coverage detected