/*++ Routine Description: SMI handler to restore ACPI mode Arguments: DispatchHandle - The handle of this callback, obtained when registering DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT Returns: None. --*/ EFI_STATUS EFIAPI AmdSmiBeforePciS3RestoreCallback ( IN EFI_HANDLE DispatchHandle, IN CONST FCH_SMM_SW_REGISTER_CONTEXT *DispatchContext, IN OUT FCH_SMM_SW_CONTEXT *SwContext, IN OUT UINTN *SizeOfSwContext ) { FCH_DATA_BLOCK *pFchPolicy; EFI_STATUS Status; UINT8 Index; UINT8 *pData; Status = EFI_SUCCESS; // Restore entire FCH PCI IRQ routing space (C00/C01) pData = mFchPciIrqRoutingTable; Index = 0xFF; do { Index++; LibFchSmmIoWrite (&gSmst->SmmIo, SMM_IO_UINT8, FCH_IOMAP_REGC00, &Index); LibFchSmmIoWrite (&gSmst->SmmIo, SMM_IO_UINT8, FCH_IOMAP_REGC01, pData++); } while (Index != 0xFF); pFchPolicy = &gFchInitInSmm.FchPolicy; FchInitS3EarlyRestore (pFchPolicy); return Status; }
AGESA_STATUS agesawrapper_fchs3earlyrestore(void) { AGESA_STATUS status = AGESA_SUCCESS; FCH_DATA_BLOCK FchParams; AMD_CONFIG_PARAMS StdHeader; StdHeader.HeapStatus = HEAP_SYSTEM_MEM; StdHeader.HeapBasePtr = GetHeapBase(&StdHeader) + 0x10; StdHeader.AltImageBasePtr = 0; StdHeader.CalloutPtr = &GetBiosCallout; StdHeader.Func = 0; StdHeader.ImageBasePtr = 0; LibAmdMemFill (&FchParams, 0, sizeof (FchParams), &StdHeader); FchParams.StdHeader = &StdHeader; s3_resume_init_data(&FchParams); FchInitS3EarlyRestore(&FchParams); return status; }
/*++ Routine Description: SMI handler to restore ACPI mode Arguments: DispatchHandle - The handle of this callback, obtained when registering DispatchContext - Pointer to the EFI_SMM_SW_DISPATCH_CONTEXT Returns: None. --*/ EFI_STATUS EFIAPI AmdSmiBeforePciS3RestoreCallback ( IN EFI_HANDLE DispatchHandle, IN FCH_SMM_SW_REGISTER_CONTEXT *DispatchContext ) { FCH_DATA_BLOCK *pFchPolicy; EFI_STATUS Status; UINT8 Index; UINT8 *pData; Status = EFI_SUCCESS; // Restore entire FCH PCI IRQ routing space (C00/C01) pData = mFchPciIrqRoutingTable; Index = 0xFF; do { Index++; LibAmdIoWrite (AccessWidth8, FCH_IOMAP_REGC00, &Index, NULL); LibAmdIoWrite (AccessWidth8, FCH_IOMAP_REGC01, pData++, NULL); } while (Index != 0xFF); pFchPolicy = &gFchInitInSmm.FchPolicy; FchInitS3EarlyRestore (pFchPolicy); return Status; }
AGESA_STATUS fchs3earlyrestore(AMD_CONFIG_PARAMS *StdHeader) { FCH_DATA_BLOCK FchParams; /* FIXME: Recover FCH_DATA_BLOCK from CBMEM. */ s3_resume_init_data(&FchParams); FchParams.StdHeader = StdHeader; FchInitS3EarlyRestore(&FchParams); return AGESA_SUCCESS; }
AGESA_STATUS agesawrapper_fchs3earlyrestore (void) { FCH_DATA_BLOCK FchParams; AMD_CONFIG_PARAMS StdHeader; StdHeader.HeapStatus = HEAP_SYSTEM_MEM; StdHeader.HeapBasePtr = (uintptr_t) GetHeapBase() + 0x10; StdHeader.AltImageBasePtr = 0; StdHeader.CalloutPtr = &GetBiosCallout; StdHeader.Func = 0; StdHeader.ImageBasePtr = 0; FchParams.StdHeader = &StdHeader; s3_resume_init_data(&FchParams); FchInitS3EarlyRestore(&FchParams); return AGESA_SUCCESS; }