+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
- Stall.c\r
-\r
-Abstract:\r
-\r
- Tiano Miscellaneous Services Stall service implementation\r
-\r
---*/\r
-\r
-//\r
-// Include statements\r
-//\r
-\r
-#include <DxeMain.h>\r
-\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-CoreStall (\r
- IN UINTN Microseconds\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Introduces a fine-grained stall.\r
-\r
-Arguments:\r
-\r
- Microseconds The number of microseconds to stall execution\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Execution was stalled for at least the requested amount\r
- of microseconds.\r
-\r
- EFI_NOT_AVAILABLE_YET - gMetronome is not available yet\r
-\r
---*/\r
-{\r
- UINT32 Counter;\r
- UINT32 Remainder;\r
-\r
- if (gMetronome == NULL) {\r
- return EFI_NOT_AVAILABLE_YET;\r
- }\r
-\r
- //\r
- // Calculate the number of ticks by dividing the number of microseconds by\r
- // the TickPeriod.\r
- // Calcullation is based on 100ns unit.\r
- //\r
- Counter = (UINT32) DivU64x32Remainder (\r
- Microseconds * 10,\r
- gMetronome->TickPeriod,\r
- &Remainder\r
- );\r
-\r
- //\r
- // Call WaitForTick for Counter + 1 ticks to try to guarantee Counter tick\r
- // periods, thus attempting to ensure Microseconds of stall time.\r
- //\r
- if (Remainder != 0) {\r
- Counter++;\r
- }\r
-\r
- gMetronome->WaitForTick (gMetronome, Counter);\r
-\r
- return EFI_SUCCESS;\r
-}\r