Home | History | Annotate | Download | only in PiSmmCpuDxeSmm
      1 /** @file
      2 SMM profile header file.
      3 
      4 Copyright (c) 2012 - 2015, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _SMM_PROFILE_H_
     16 #define _SMM_PROFILE_H_
     17 
     18 #include "SmmProfileInternal.h"
     19 
     20 ///
     21 /// MSR Register Index
     22 ///
     23 #define MSR_IA32_MISC_ENABLE                  0x1A0
     24 
     25 //
     26 // External functions
     27 //
     28 
     29 /**
     30   Initialize processor environment for SMM profile.
     31 
     32   @param  CpuIndex  The index of the processor.
     33 
     34 **/
     35 VOID
     36 ActivateSmmProfile (
     37   IN UINTN CpuIndex
     38   );
     39 
     40 /**
     41   Initialize SMM profile in SMM CPU entry point.
     42 
     43   @param[in] Cr3  The base address of the page tables to use in SMM.
     44 
     45 **/
     46 VOID
     47 InitSmmProfile (
     48   UINT32  Cr3
     49   );
     50 
     51 /**
     52   Increase SMI number in each SMI entry.
     53 
     54 **/
     55 VOID
     56 SmmProfileRecordSmiNum (
     57   VOID
     58   );
     59 
     60 /**
     61   The Page fault handler to save SMM profile data.
     62 
     63   @param  Rip        The RIP when exception happens.
     64   @param  ErrorCode  The Error code of exception.
     65 
     66 **/
     67 VOID
     68 SmmProfilePFHandler (
     69   UINTN Rip,
     70   UINTN ErrorCode
     71   );
     72 
     73 /**
     74   Updates page table to make some memory ranges (like system memory) absent
     75   and make some memory ranges (like MMIO) present and execute disable. It also
     76   update 2MB-page to 4KB-page for some memory ranges.
     77 
     78 **/
     79 VOID
     80 SmmProfileStart (
     81   VOID
     82   );
     83 
     84 /**
     85   Page fault IDT handler for SMM Profile.
     86 
     87 **/
     88 VOID
     89 EFIAPI
     90 PageFaultIdtHandlerSmmProfile (
     91   VOID
     92   );
     93 
     94 
     95 /**
     96   Check if XD feature is supported by a processor.
     97 
     98 **/
     99 VOID
    100 CheckFeatureSupported (
    101   VOID
    102   );
    103 
    104 /**
    105   Enable XD feature.
    106 
    107 **/
    108 VOID
    109 ActivateXd (
    110   VOID
    111   );
    112 
    113 /**
    114   Update page table according to protected memory ranges and the 4KB-page mapped memory ranges.
    115 
    116 **/
    117 VOID
    118 InitPaging (
    119   VOID
    120   );
    121 
    122 /**
    123   Check if XD and BTS features are supported by all processors.
    124 
    125 **/
    126 VOID
    127 CheckProcessorFeature (
    128   VOID
    129   );
    130 
    131 extern BOOLEAN    mXdSupported;
    132 extern BOOLEAN    mXdEnabled;
    133 
    134 #endif // _SMM_PROFILE_H_
    135