AGESA_STATUS agesawrapper_amdinitenv(void) { AGESA_STATUS status; AMD_INTERFACE_PARAMS AmdParamStruct; AMD_ENV_PARAMS *EnvParam; /* Initialize heap space */ EmptyHeap(); memset(&AmdParamStruct, 0, sizeof(AMD_INTERFACE_PARAMS)); AmdParamStruct.AgesaFunctionName = AMD_INIT_ENV; AmdParamStruct.AllocationMethod = PostMemDram; AmdParamStruct.StdHeader.AltImageBasePtr = 0; AmdParamStruct.StdHeader.CalloutPtr = &GetBiosCallout; AmdParamStruct.StdHeader.Func = 0; AmdParamStruct.StdHeader.ImageBasePtr = 0; AmdCreateStruct(&AmdParamStruct); EnvParam = (AMD_ENV_PARAMS *) AmdParamStruct.NewStructPtr; status = AmdInitEnv(EnvParam); AGESA_EVENTLOG(status, &EnvParam->StdHeader); AmdReleaseStruct(&AmdParamStruct); return status; }
AGESA_STATUS agesawrapper_amdinitenv(void) { AGESA_STATUS status; AMD_INTERFACE_PARAMS AmdParamStruct; AMD_ENV_PARAMS *EnvParam; LibAmdMemFill (&AmdParamStruct, 0, sizeof (AMD_INTERFACE_PARAMS), &(AmdParamStruct.StdHeader)); AmdParamStruct.AgesaFunctionName = AMD_INIT_ENV; AmdParamStruct.AllocationMethod = PostMemDram; AmdParamStruct.StdHeader.AltImageBasePtr = 0; AmdParamStruct.StdHeader.CalloutPtr = &GetBiosCallout; AmdParamStruct.StdHeader.Func = 0; AmdParamStruct.StdHeader.ImageBasePtr = 0; status = AmdCreateStruct (&AmdParamStruct); EnvParam = (AMD_ENV_PARAMS *)AmdParamStruct.NewStructPtr; EnvParam->FchInterface.AzaliaController = AzEnable; EnvParam->FchInterface.SataClass = CONFIG_HUDSON_SATA_MODE; EnvParam->FchInterface.SataEnable = !((CONFIG_HUDSON_SATA_MODE == 0) || (CONFIG_HUDSON_SATA_MODE == 3)); EnvParam->FchInterface.IdeEnable = (CONFIG_HUDSON_SATA_MODE == 0) || (CONFIG_HUDSON_SATA_MODE == 3); EnvParam->FchInterface.SataIdeMode = (CONFIG_HUDSON_SATA_MODE == 3); EnvParam->GnbEnvConfiguration.IommuSupport = FALSE; status = AmdInitEnv (EnvParam); if (status != AGESA_SUCCESS) agesawrapper_amdreadeventlog(EnvParam->StdHeader.HeapStatus); /* Initialize Subordinate Bus Number and Secondary Bus Number * In platform BIOS this address is allocated by PCI enumeration code Modify D1F0x18 */ return status; }
EFI_STATUS EFIAPI AgesaDxeDriverEntryPoint ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; AMD_INTERFACE_PARAMS AmdInterfaceParams; AGESA_STATUS AgesaStatus; AMD_ENV_PARAMS AmdInitEnvParams; EFI_EVENT ReadyToBootEvent; EFI_HANDLE Handle; AMD_BUFFER_MANAGER_PROTOCOL *BufferMgr; // // Initialize Global Variable // // // Initialize the configuration structure and private data area // // Allocate memory for the private data Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (AGESA_DXE_PRIVATE_DATA), &mAgesaDxePrivate); ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { return Status; } // // Install the AMD_AGESA_MMIO_PROTOCOL // mAgesaDxePrivate->MmioMapManager.AmdMmioMapManager = AmdMmioMapManager; Handle = NULL; gBS->InstallProtocolInterface ( &Handle, &gAmdAgesaMmioProtocolGuid, EFI_NATIVE_INTERFACE, &mAgesaDxePrivate->MmioMapManager ); // // Initialize the private data structure // mAgesaDxePrivate->Signature = AGESA_DXE_PRIVATE_DATA_SIGNATURE; // // Create the first buffer for AGESA_ALLOCATE_BUFFER Manager // Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (AGESA_DXE_BUFFER_MANAGER), &mAgesaDxePrivate->BufferManagerPtr ); ASSERT_EFI_ERROR (Status); if (EFI_ERROR (Status)) { return Status; } ZeroMem (mAgesaDxePrivate->BufferManagerPtr, sizeof (AGESA_DXE_BUFFER_MANAGER)); mAgesaDxePrivate->BufferManagerPtr->NextAgesaBufferManagerPtr = NULL; AgesaBufferManager = mAgesaDxePrivate->BufferManagerPtr; // // Rebuild persist heap from HOB. // Status = RebuildHeap (&mAgesaDxePrivate->HeapManagerPtr); if (EFI_ERROR (Status)) { return EFI_OUT_OF_RESOURCES; } // // Invoke AmdInitEnv // ZeroMem (&AmdInterfaceParams, sizeof (AMD_INTERFACE_PARAMS)); ZeroMem (&AmdInitEnvParams, sizeof (AMD_ENV_PARAMS)); AmdInterfaceParams.StdHeader.ImageBasePtr = 0; AmdInterfaceParams.StdHeader.HeapStatus = HEAP_SYSTEM_MEM; AmdInterfaceParams.AllocationMethod = ByHost; AmdInterfaceParams.AgesaFunctionName = AMD_INIT_ENV; AmdInterfaceParams.NewStructPtr = &AmdInitEnvParams; AmdInterfaceParams.NewStructSize = sizeof (AMD_ENV_PARAMS); AgesaStatus = AmdCreateStruct (&AmdInterfaceParams); AmdInitEnvParams.StdHeader = AmdInterfaceParams.StdHeader; OemCustomizeInitEnv (gBS, &AmdInitEnvParams); AgesaStatus = AmdInitEnv (&AmdInitEnvParams); OemHookAfterInitEnv (gBS, &AmdInitEnvParams); if ((AgesaStatus == AGESA_CRITICAL) || (AgesaStatus == AGESA_FATAL)) { return EFI_DEVICE_ERROR; } // // Install AmdBufferManagerProtocol which notifies other dependent drivers // Status = gBS->AllocatePool ( EfiBootServicesData, sizeof (AMD_BUFFER_MANAGER_PROTOCOL), &BufferMgr ); ASSERT_EFI_ERROR (Status); BufferMgr->StdHeader = AmdInitEnvParams.StdHeader; BufferMgr->DxeBufferManager = mAgesaDxePrivate->BufferManagerPtr; BufferMgr->AmdBufferCallout = AgesaDxeCallout; Handle = NULL; gBS->InstallProtocolInterface ( &Handle, &gAmdBufferManagerProtocolGuid, EFI_NATIVE_INTERFACE, BufferMgr ); // // Register the event handling function for AmdInitMid to be launched after // PciIo protocol // Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, InvokeAmdInitMid, NULL, &PciIoProtocolInstallEventGuid, &PciIoEvent ); Status = gBS->RegisterProtocolNotify ( &gEfiPciIoProtocolGuid, PciIoEvent, &mRegistrationForPciIo ); // // Set up call back for AmdInitLate after AmdInitMid has been launched. // Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, InvokeAmdInitLate, NULL, &AmdInitMidProtocolInstallEventGuid, &AmdInitMidEvent ); Status = gBS->RegisterProtocolNotify ( &gAmdDxeInitMidProtocolGuid, AmdInitMidEvent, &(mRegistrationForAmdInitMid) ); // // Initialize AMD CPU Interface protocol // mAgesaDxePrivate->CpuInterface.CreateProcessorTables = AmdCpuCreateProcessorTables; // S3 Interface // Register the event handling function to produce // resulting Smbios image. // Status = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, TPL_NOTIFY, AgesaInitRtb, NULL, &gEfiEventReadyToBootGuid, &ReadyToBootEvent ); return EFI_SUCCESS; }