Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}