mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	UefiCpuPkg/PiSmmCpuDxeSmm: Add IsInSmmRanges() to check SMM range
Internal function IsInSmmRanges() is added t check SMM range by saved SMM ranges beside by mCpuHotPlugData.SmrrBase/mCpuHotPlugData.SmrrSiz. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
		
							parent
							
								
									7ed6f78145
								
							
						
					
					
						commit
						97f1061e8b
					
				@ -1,7 +1,7 @@
 | 
				
			|||||||
/** @file
 | 
					/** @file
 | 
				
			||||||
Enable SMM profile.
 | 
					Enable SMM profile.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
					Copyright (c) 2012 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
 | 
					Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This program and the accompanying materials
 | 
					This program and the accompanying materials
 | 
				
			||||||
@ -246,6 +246,33 @@ DebugExceptionHandler (
 | 
				
			|||||||
  ClearTrapFlag (SystemContext);
 | 
					  ClearTrapFlag (SystemContext);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  Check if the input address is in SMM ranges.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @param[in]  Address       The input address.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @retval TRUE     The input address is in SMM.
 | 
				
			||||||
 | 
					  @retval FALSE    The input address is not in SMM.
 | 
				
			||||||
 | 
					**/
 | 
				
			||||||
 | 
					BOOLEAN
 | 
				
			||||||
 | 
					IsInSmmRanges (
 | 
				
			||||||
 | 
					  IN EFI_PHYSICAL_ADDRESS   Address
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  UINTN  Index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ((Address < mCpuHotPlugData.SmrrBase) || (Address >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) {
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  for (Index = 0; Index < mSmmCpuSmramRangeCount; Index++) {
 | 
				
			||||||
 | 
					    if (Address >= mSmmCpuSmramRanges[Index].CpuStart &&
 | 
				
			||||||
 | 
					        Address < mSmmCpuSmramRanges[Index].CpuStart + mSmmCpuSmramRanges[Index].PhysicalSize) {
 | 
				
			||||||
 | 
					      return TRUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
  Check if the memory address will be mapped by 4KB-page.
 | 
					  Check if the memory address will be mapped by 4KB-page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -261,7 +288,6 @@ IsAddressValid (
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  UINTN  Index;
 | 
					  UINTN  Index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  *Nx = FALSE;
 | 
					 | 
				
			||||||
  if (FeaturePcdGet (PcdCpuSmmProfileEnable)) {
 | 
					  if (FeaturePcdGet (PcdCpuSmmProfileEnable)) {
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Check configuration
 | 
					    // Check configuration
 | 
				
			||||||
@ -276,9 +302,9 @@ IsAddressValid (
 | 
				
			|||||||
    return FALSE;
 | 
					    return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    if ((Address < mCpuHotPlugData.SmrrBase) ||
 | 
					 | 
				
			||||||
        (Address >= mCpuHotPlugData.SmrrBase + mCpuHotPlugData.SmrrSize)) {
 | 
					 | 
				
			||||||
    *Nx = TRUE;
 | 
					    *Nx = TRUE;
 | 
				
			||||||
 | 
					    if (IsInSmmRanges (Address)) {
 | 
				
			||||||
 | 
					      *Nx = FALSE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user