From 3cbfba02fef9dae07a041fdbf2e89611d72d6f90 Mon Sep 17 00:00:00 2001 From: David Wei Date: Mon, 12 Jan 2015 09:37:20 +0000 Subject: Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to https://svn.code.sf.net/p/edk2/code/trunk/edk2/, which are for MinnowBoard MAX open source project. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Wei Reviewed-by: Mike Wu Reviewed-by: Hot Tian git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524 --- Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c | 190 ++++++++++++++++++++++++++ Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h | 69 ++++++++++ Vlv2TbltDevicePkg/Metronome/Metronome.inf | 54 ++++++++ 3 files changed, 313 insertions(+) create mode 100644 Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c create mode 100644 Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h create mode 100644 Vlv2TbltDevicePkg/Metronome/Metronome.inf (limited to 'Vlv2TbltDevicePkg/Metronome') diff --git a/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c b/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c new file mode 100644 index 000000000..5cae2f29f --- /dev/null +++ b/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.c @@ -0,0 +1,190 @@ +/** @file + + Copyright (c) 2004 - 2014, 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 that 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: + + + LegacyMetronome.c + +Abstract: + + This contains the installation function for the driver. + +--*/ + +#include "LegacyMetronome.h" + +// +// Handle for the Metronome Architectural Protocol instance produced by this driver +// +EFI_HANDLE mMetronomeHandle = NULL; + +// +// The Metronome Architectural Protocol instance produced by this driver +// +EFI_METRONOME_ARCH_PROTOCOL mMetronome = { + WaitForTick, + TICK_PERIOD +}; + +// +// The CPU I/O Protocol used to access system hardware +// +EFI_CPU_IO_PROTOCOL *mCpuIo = NULL; + +// +// Worker Functions +// + +/** + Write an 8 bit value to an I/O port and save it to the S3 script + + @param Port IO Port + @param Data Data in IO Port + + @retval None. + +**/ +VOID +ScriptWriteIo8 ( + UINT16 Port, + UINT8 Data + ) +{ + mCpuIo->Io.Write ( + mCpuIo, + EfiCpuIoWidthUint8, + Port, + 1, + &Data + ); + +} + +/** + + Read the refresh bit from the REFRESH_PORT + + @param None. + + @retval Refresh bit. + +**/ +UINT8 +ReadRefresh ( + VOID + ) +{ + UINT8 Data; + + mCpuIo->Io.Read ( + mCpuIo, + EfiCpuIoWidthUint8, + REFRESH_PORT, + 1, + &Data + ); + return (UINT8) (Data & REFRESH_ON); +} + +/** + + Waits for the TickNumber of ticks from a known platform time source. + + @param This Pointer to the protocol instance. + @param TickNumber Tick Number to be waited + + + @retval EFI_SUCCESS If number of ticks occurred. + @retval EFI_NOT_FOUND Could not locate CPU IO protocol + +**/ +EFI_STATUS +EFIAPI +WaitForTick ( + IN EFI_METRONOME_ARCH_PROTOCOL *This, + IN UINT32 TickNumber + ) +{ + // + // Wait for TickNumber toggles of the Refresh bit + // + for (; TickNumber != 0x00; TickNumber--) { + while (ReadRefresh () == REFRESH_ON) + ; + while (ReadRefresh () == REFRESH_OFF) + ; + } + + return EFI_SUCCESS; +} + +// +// Driver Entry Point +// +/** + Install the LegacyMetronome driver. Loads a Metronome Arch Protocol based + on the Port 61 timer. + + @param ImageHandle Handle for the image of this driver + @param SystemTable Pointer to the EFI System Table + + @retval EFI_SUCCESS Metronome Architectural Protocol Installed + +**/ +EFI_STATUS +EFIAPI +InstallLegacyMetronome ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Make sure the Metronome Architectural Protocol is not already installed in the system + // + ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiMetronomeArchProtocolGuid); + + // + // Get the CPU I/O Protocol that this driver requires + // If the CPU I/O Protocol is not found, then ASSERT because the dependency expression + // should guarantee that it is present in the handle database. + // + Status = gBS->LocateProtocol ( + &gEfiCpuIoProtocolGuid, + NULL, + (void **)&mCpuIo + ); + ASSERT_EFI_ERROR (Status); + + // + // Program port 61 timer 1 as refresh timer. We could use ACPI timer in the + // future. + // + ScriptWriteIo8 (TIMER1_CONTROL_PORT, LOAD_COUNTER1_LSB); + ScriptWriteIo8 (TIMER1_COUNT_PORT, COUNTER1_COUNT); + + // + // Install on a new handle + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &mMetronomeHandle, + &gEfiMetronomeArchProtocolGuid, + &mMetronome, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} diff --git a/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h b/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h new file mode 100644 index 000000000..b9c32da1f --- /dev/null +++ b/Vlv2TbltDevicePkg/Metronome/LegacyMetronome.h @@ -0,0 +1,69 @@ +/*++ + + Copyright (c) 2004 - 2014, 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 that 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: + + LegacyMetronome.h + +Abstract: + + Driver implementing the EFI 2.0 metronome protocol using the legacy PORT 61 + timer. + +--*/ + +#ifndef _LEGACY_METRONOME_H +#define _LEGACY_METRONOME_H + +// +// Statements that include other files +// +#include "Protocol/Metronome.h" +#include "Protocol/CpuIo.h" +#include "Library/DebugLib.h" +#include "Library/UefiBootServicesTableLib.h" + + +// +// Private definitions +// +#define TICK_PERIOD 300 +#define REFRESH_PORT 0x61 +#define REFRESH_ON 0x10 +#define REFRESH_OFF 0x00 +#define TIMER1_CONTROL_PORT 0x43 +#define TIMER1_COUNT_PORT 0x41 +#define LOAD_COUNTER1_LSB 0x54 +#define COUNTER1_COUNT 0x12 + +// +// Function Prototypes +// +/** + Waits for the TickNumber of ticks from a known platform time source. + + @param This Pointer to the protocol instance. + @param TickNumber Tick Number to be waited + + @retval EFI_SUCCESS If number of ticks occurred. + @retval EFI_NOT_FOUND Could not locate CPU IO protocol + +**/ +EFI_STATUS +EFIAPI +WaitForTick ( + IN EFI_METRONOME_ARCH_PROTOCOL *This, + IN UINT32 TickNumber + ); + +#endif diff --git a/Vlv2TbltDevicePkg/Metronome/Metronome.inf b/Vlv2TbltDevicePkg/Metronome/Metronome.inf new file mode 100644 index 000000000..85237bd98 --- /dev/null +++ b/Vlv2TbltDevicePkg/Metronome/Metronome.inf @@ -0,0 +1,54 @@ +# +# +# Copyright (c) 1999 - 2014, 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 that 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: +# +# LegacyMetronome.inf +# +# Abstract: +# +# Component description file for LegacyMetronome module +# +#--*/ +[defines] + INF_VERSION = 0x00010005 + BASE_NAME = LegacyMetronome + FILE_GUID = 07A9330A-F347-11d4-9A49-0090273FC14D + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = InstallLegacyMetronome + +[sources.common] + LegacyMetronome.c + LegacyMetronome.h + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + UefiDriverEntryPoint + UefiBootServicesTableLib + DevicePathLib + UefiLib + +[Protocols] + +gEfiMetronomeArchProtocolGuid +gEfiCpuIoProtocolGuid + +[Depex] +gEfiCpuIoProtocolGuid AND gEfiBootScriptSaveProtocolGuid + + -- cgit v1.2.3