From 8a4a9d2125b28e003f0492a6450269d3b5f1578a Mon Sep 17 00:00:00 2001 From: qwang12 Date: Wed, 27 Jun 2007 08:43:57 +0000 Subject: [PATCH] add in Metronome.inf git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2797 6f19259b-4bc3-4df7-8a09-765794883524 --- .../MonotonicCounterRuntimeDxe/CommonHeader.h | 37 +++++ .../MonotonicCounterRuntimeDxe/Metronome.c | 134 ++++++++++++++++++ .../MonotonicCounterRuntimeDxe/Metronome.dxs | 31 ++++ .../MonotonicCounterRuntimeDxe/Metronome.h | 89 ++++++++++++ .../MonotonicCounterRuntimeDxe/Metronome.inf | 87 ++++++++++++ .../MonotonicCounterRuntimeDxe/Metronome.msa | 62 ++++++++ 6 files changed, 440 insertions(+) create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/CommonHeader.h create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.c create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.dxs create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.h create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.inf create mode 100644 Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.msa diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/CommonHeader.h b/Nt32Pkg/MonotonicCounterRuntimeDxe/CommonHeader.h new file mode 100644 index 0000000000..7eb12c16a7 --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/CommonHeader.h @@ -0,0 +1,37 @@ +/**@file + Common header file shared by all source files. + + This file includes package header files, library classes and protocol, PPI & GUID definitions. + + Copyright (c) 2006 - 2007, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +**/ + +#ifndef __COMMON_HEADER_H_ +#define __COMMON_HEADER_H_ + + +// +// The package level header files this module uses +// +#include +#include +// +// The protocols, PPI and GUID defintions for this module +// +#include +// +// The Library classes this module consumes +// +#include +#include +#include +#include +#include + +#endif diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.c b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.c new file mode 100644 index 0000000000..b02741b45c --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.c @@ -0,0 +1,134 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + Metronome.c + +Abstract: + + NT Emulation Metronome Architectural Protocol Driver as defined in DXE CIS + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +#include "Metronome.h" + +// +// Global Variables +// +EFI_METRONOME_ARCH_PROTOCOL mMetronome = { + WinNtMetronomeDriverWaitForTick, + TICK_PERIOD +}; + +// +// Worker Functions +// + +EFI_STATUS +EFIAPI +WinNtMetronomeDriverWaitForTick ( + IN EFI_METRONOME_ARCH_PROTOCOL *This, + IN UINT32 TickNumber + ) +/*++ + +Routine Description: + + The WaitForTick() function waits for the number of ticks specified by + TickNumber from a known time source in the platform. If TickNumber of + ticks are detected, then EFI_SUCCESS is returned. The actual time passed + between entry of this function and the first tick is between 0 and + TickPeriod 100 nS units. If you want to guarantee that at least TickPeriod + time has elapsed, wait for two ticks. This function waits for a hardware + event to determine when a tick occurs. It is possible for interrupt + processing, or exception processing to interrupt the execution of the + WaitForTick() function. Depending on the hardware source for the ticks, it + is possible for a tick to be missed. This function cannot guarantee that + ticks will not be missed. If a timeout occurs waiting for the specified + number of ticks, then EFI_TIMEOUT is returned. + +Arguments: + + This - The EFI_METRONOME_ARCH_PROTOCOL instance. + TickNumber - Number of ticks to wait. + +Returns: + + EFI_SUCCESS - The wait for the number of ticks specified by TickNumber + succeeded. + +--*/ +{ + UINT64 SleepTime; + + // + // Calculate the time to sleep. Win API smallest unit to sleep is 1 millisec + // Tick Period is in 100ns units, divide by 10000 to convert to ms + // + SleepTime = DivU64x32 (MultU64x32 ((UINT64) TickNumber, TICK_PERIOD) + 9999, 10000); + gWinNt->Sleep ((UINT32) SleepTime); + + return EFI_SUCCESS; +} + + +EFI_STATUS +EFIAPI +WinNtMetronomeDriverInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + Initialize the Metronome Architectural Protocol driver + +Arguments: + + ImageHandle - ImageHandle of the loaded driver + + + SystemTable - Pointer to the System Table + +Returns: + + EFI_SUCCESS - Metronome Architectural Protocol created + + EFI_OUT_OF_RESOURCES - Not enough resources available to initialize driver. + + EFI_DEVICE_ERROR - A device error occured attempting to initialize the driver. + +--*/ +{ + EFI_STATUS Status; + EFI_HANDLE Handle; + + + // + // Install the Metronome Architectural Protocol onto a new handle + // + Handle = NULL; + Status = gBS->InstallProtocolInterface ( + &Handle, + &gEfiMetronomeArchProtocolGuid, + EFI_NATIVE_INTERFACE, + &mMetronome + ); + + return Status; +} diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.dxs b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.dxs new file mode 100644 index 0000000000..4da4839b53 --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.dxs @@ -0,0 +1,31 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + Metronome.dxs + +Abstract: + + Dependency expression source file. + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +#include + +DEPENDENCY_START + TRUE +DEPENDENCY_END diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.h b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.h new file mode 100644 index 0000000000..b2b40eeadc --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.h @@ -0,0 +1,89 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + Metronome.h + +Abstract: + + NT Emulation Metronome Architectural Protocol Driver as defined in DXE CIS + +--*/ + +#ifndef _NT_THUNK_METRONOME_H_ +#define _NT_THUNK_METRONOME_H_ + + + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +// +// Period of on tick in 100 nanosecond units +// +#define TICK_PERIOD 2000 + +// +// Function Prototypes +// + +EFI_STATUS +EFIAPI +WinNtMetronomeDriverInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + ImageHandle - TODO: add argument description + SystemTable - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +EFI_STATUS +EFIAPI +WinNtMetronomeDriverWaitForTick ( + IN EFI_METRONOME_ARCH_PROTOCOL *This, + IN UINT32 TickNumber + ) +/*++ + +Routine Description: + + TODO: Add function description + +Arguments: + + This - TODO: add argument description + TickNumber - TODO: add argument description + +Returns: + + TODO: add return values + +--*/ +; + +#endif diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.inf b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.inf new file mode 100644 index 0000000000..75e03cde72 --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.inf @@ -0,0 +1,87 @@ +#/** @file +# NT Emulation Metronome Architectural Protocol Driver as defined in DXE CIS +# +# This metronome module simulates metronome by Sleep WinAPI. +# Copyright (c) 2006 - 2007, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = Metronome + FILE_GUID = 154CAB4A-52B5-46CD-99C3-4368ABBACFFD + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = WinNtMetronomeDriverInitialize + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + Metronome.dxs + Metronome.h + Metronome.c + CommonHeader.h + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + UefiBootServicesTableLib + WinNtLib + UefiDriverEntryPoint + DebugLib + BaseLib + + +################################################################################ +# +# Protocol C Name Section - list of Protocol and Protocol Notify C Names +# that this module uses or produces. +# +################################################################################ + +[Protocols] + gEfiMetronomeArchProtocolGuid # PROTOCOL ALWAYS_PRODUCED + diff --git a/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.msa b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.msa new file mode 100644 index 0000000000..e4dc0b144b --- /dev/null +++ b/Nt32Pkg/MonotonicCounterRuntimeDxe/Metronome.msa @@ -0,0 +1,62 @@ + + + + Metronome + DXE_DRIVER + 154CAB4A-52B5-46CD-99C3-4368ABBACFFD + 1.0 + NT Emulation Metronome Architectural Protocol Driver as defined in DXE CIS + This metronome module simulates metronome by Sleep WinAPI. + Copyright (c) 2006 - 2007, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 + false + Metronome + + + + BaseLib + + + DebugLib + + + UefiDriverEntryPoint + + + WinNtLib + + + UefiBootServicesTableLib + + + + Metronome.c + Metronome.h + Metronome.dxs + + + + + + + + gEfiMetronomeArchProtocolGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + WinNtMetronomeDriverInitialize + + + \ No newline at end of file -- 2.39.2