17947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney/** @file
27947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneySemaphore mechanism to indicate to the BSP that an AP has exited SMM
37947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinneyafter SMBASE relocation.
47947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
57947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyCopyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
67947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyThis program and the accompanying materials
77947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinneyare licensed and made available under the terms and conditions of the BSD License
87947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinneywhich accompanies this distribution.  The full text of the license may be found at
97947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinneyhttp://opensource.org/licenses/bsd-license.php
107947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
117947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
127947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
137947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
147947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney**/
157947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
167947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney#include "PiSmmCpuDxeSmm.h"
177947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
187947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyUINTN             mSmmRelocationOriginalAddress;
197947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinneyvolatile BOOLEAN  *mRebasedFlag;
207947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
217947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney/**
227947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  Hook return address of SMM Save State so that semaphore code
237947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  can be executed immediately after AP exits SMM to indicate to
247947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  the BSP that an AP has exited SMM after SMBASE relocation.
257947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
267947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  @param[in] CpuIndex     The processor index.
277947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  @param[in] RebasedFlag  A pointer to a flag that is set to TRUE
287947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                          immediately after AP exits SMM.
297947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
307947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney**/
317947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneyVOID
327947da3cccb5dfc973fe9ad9d814477ed978aea1Michael KinneySemaphoreHook (
337947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  IN UINTN             CpuIndex,
347947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  IN volatile BOOLEAN  *RebasedFlag
357947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  )
367947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney{
377947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  SMRAM_SAVE_STATE_MAP  *CpuState;
387947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
397947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  mRebasedFlag = RebasedFlag;
407947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney
417947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  CpuState = (SMRAM_SAVE_STATE_MAP *)(UINTN)(SMM_DEFAULT_SMBASE + SMRAM_SAVE_STATE_MAP_OFFSET);
427947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney  mSmmRelocationOriginalAddress = (UINTN)HookReturnFromSmm (
437947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                                           CpuIndex,
447947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                                           CpuState,
457947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                                           (UINT64)(UINTN)&SmmRelocationSemaphoreComplete,
467947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                                           (UINT64)(UINTN)&SmmRelocationSemaphoreComplete
477947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney                                           );
487947da3cccb5dfc973fe9ad9d814477ed978aea1Michael Kinney}
49