Home | History | Annotate | Download | only in I2CLibPei
      1 /** @file
      2   MicroSecondDelay implementation of ACPI Timer.
      3 
      4   Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials are licensed and made available under
      7   the terms and conditions of the BSD License that accompanies this distribution.
      8   The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php.
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 --*/
     15 
     16 #include "PiPei.h"
     17 #include "I2CAccess.h"
     18 #include "I2CDelayPei.h"
     19 #include <Library/DebugLib.h>
     20 #include <Library/PeiServicesTablePointerLib.h>
     21 #include <Ppi/Stall.h>
     22 
     23 /**
     24   Stalls the CPU for at least the given number of microseconds.
     25   Stalls the CPU for the number of microseconds specified by MicroSeconds.
     26 
     27   @param  MicroSeconds  The minimum number of microseconds to delay.
     28 
     29   @return EFI_STATUS
     30 
     31 **/
     32 EFI_STATUS
     33 EFIAPI
     34 MicroSecondDelay (
     35   IN      UINTN                     MicroSeconds
     36   )
     37 {
     38 
     39   EFI_PEI_STALL_PPI              *StallPpi;
     40   EFI_STATUS                     Status;
     41   CONST EFI_PEI_SERVICES         **PeiServices;
     42 
     43   PeiServices = GetPeiServicesTablePointer();
     44 
     45 
     46   Status = (**PeiServices).LocatePpi (PeiServices, &gEfiPeiStallPpiGuid, 0, NULL, &StallPpi);
     47   ASSERT(!EFI_ERROR(Status));
     48 
     49   StallPpi->Stall (PeiServices, StallPpi, MicroSeconds);
     50 
     51   return EFI_SUCCESS;
     52 }
     53