mirror of https://github.com/acidanthera/audk.git
Get TimerDxe driver compiling.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10497 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
4099cdc7bc
commit
9203284167
|
@ -351,6 +351,7 @@
|
|||
EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
|
||||
|
||||
ArmEbPkg/InterruptDxe/InterruptDxe.inf
|
||||
ArmEbPkg/TimerDxe/TimerDxe.inf
|
||||
|
||||
#
|
||||
# Semi-hosting filesystem
|
||||
|
|
|
@ -108,6 +108,9 @@ READ_LOCK_STATUS = TRUE
|
|||
INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
|
||||
INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
|
||||
|
||||
INF ArmEbPkg/InterruptDxe/InterruptDxe.inf
|
||||
INF ArmEbPkg/TimerDxe/TimerDxe.inf
|
||||
|
||||
#
|
||||
# Semi-hosting filesystem
|
||||
#
|
||||
|
|
|
@ -15,5 +15,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define __ARM_EB_H__
|
||||
|
||||
#include <ArmEb\ArmEbUart.h>
|
||||
#include <ArmEb\ArmEbTimer.h>
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 2009, Hewlett-Packard Company
|
||||
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:
|
||||
|
||||
Timer.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Driver implementing the EFI 2.0 timer protocol using the ARM SP804 timer.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _TIMER_SP804_H__
|
||||
#define _TIMER_SP804_H__
|
||||
|
||||
|
||||
|
||||
// EB board constants
|
||||
#define EB_SP810_CTRL_BASE 0x10001000
|
||||
#define EB_SP804_TIMER0_BASE 0x10011000
|
||||
#define EB_SP804_TIMER1_BASE 0x10011020
|
||||
#define EB_SP804_TIMER2_BASE 0x10012000
|
||||
#define EB_SP804_TIMER3_BASE 0x10012020
|
||||
|
||||
#define EB_TIMER01_INTERRUPT_NUM 36
|
||||
#define EB_TIMER23_INTERRUPT_NUM 37
|
||||
|
||||
// SP804 Timer constants
|
||||
#define SP804_TIMER_LOAD_REG 0x00
|
||||
#define SP804_TIMER_CURRENT_REG 0x04
|
||||
#define SP804_TIMER_CONTROL_REG 0x08
|
||||
#define SP804_TIMER_INT_CLR_REG 0x0C
|
||||
#define SP804_TIMER_RAW_INT_STS_REG 0x10
|
||||
#define SP804_TIMER_MSK_INT_STS_REG 0x14
|
||||
#define SP804_TIMER_BG_LOAD_REG 0x18
|
||||
|
||||
// Timer control register bit definitions
|
||||
#define SP804_TIMER_CTRL_ONESHOT BIT0
|
||||
#define SP804_TIMER_CTRL_32BIT BIT1
|
||||
#define SP804_TIMER_CTRL_PRESCALE_MASK (BIT3|BIT2)
|
||||
#define SP804_PRESCALE_DIV_1 0
|
||||
#define SP804_PRESCALE_DIV_16 BIT2
|
||||
#define SP804_PRESCALE_DIV_256 BIT3
|
||||
#define SP804_TIMER_CTRL_INT_ENABLE BIT5
|
||||
#define SP804_TIMER_CTRL_PERIODIC BIT6
|
||||
#define SP804_TIMER_CTRL_ENABLE BIT7
|
||||
|
||||
// SP810 System Controller constants
|
||||
#define SP810_SYS_CTRL_REG 0x00
|
||||
#define SP810_SYS_CTRL_TIMER0_TIMCLK BIT15 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER0_EN BIT16
|
||||
#define SP810_SYS_CTRL_TIMER1_TIMCLK BIT17 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER1_EN BIT18
|
||||
#define SP810_SYS_CTRL_TIMER2_TIMCLK BIT19 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER2_EN BIT20
|
||||
#define SP810_SYS_CTRL_TIMER3_TIMCLK BIT21 // 0=REFCLK, 1=TIMCLK
|
||||
#define SP810_SYS_CTRL_TIMER3_EN BIT22
|
||||
|
||||
// default timer tick period - 1ms, or 10000 units of 100ns
|
||||
//#define TIMER_DEFAULT_PERIOD 10000
|
||||
|
||||
// default timer tick period - 50ms, or 500000 units of 100ns
|
||||
#define TIMER_DEFAULT_PERIOD 500000
|
||||
|
||||
// default timer tick period - 500ms, or 5000000 units of 100ns
|
||||
//#define TIMER_DEFAULT_PERIOD 5000000
|
||||
|
||||
#endif
|
||||
|
|
@ -23,7 +23,6 @@
|
|||
#include <Library/UefiLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/OmapLib.h>
|
||||
|
||||
#include <Protocol/Timer.h>
|
||||
#include <Protocol/HardwareInterrupt.h>
|
||||
|
@ -44,6 +43,8 @@ EFI_HARDWARE_INTERRUPT_PROTOCOL *gInterrupt = NULL;
|
|||
// Cached interrupt vector
|
||||
UINTN gVector;
|
||||
|
||||
UINT32 mLastTickCount;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
|
@ -184,7 +185,7 @@ TimerDriverSetTimerPeriod (
|
|||
Status = gInterrupt->DisableInterruptSource (gInterrupt, gVector);
|
||||
} else {
|
||||
// Convert TimerPeriod into 1MHz clock counts (us units = 100ns units / 10)
|
||||
TimerTicks = DivU64x32 (TimerPeriod, 10, NULL);
|
||||
TimerTicks = DivU64x32 (TimerPeriod, 10);
|
||||
|
||||
// if it's larger than 32-bits, pin to highest value
|
||||
if (TimerTicks > 0xffffffff) {
|
||||
|
@ -352,10 +353,6 @@ TimerInitialize (
|
|||
// Disable the timer
|
||||
Status = TimerDriverSetTimerPeriod (&gTimer, 0);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
// Install interrupt handler for SP804 timer 0/1 interrupts
|
||||
Status = mGic->RegisterInterruptHandler(mGic, EB_TIMER01_INTERRUPT_NUM, TimerInterruptHandler);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
// Install interrupt handler
|
||||
gVector = EB_TIMER01_INTERRUPT_NUM;
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
EmbeddedPkg/EmbeddedPkg.dec
|
||||
ArmPkg/ArmPkg.dec
|
||||
ArmEbPkg/ArmEbPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
BaseLib
|
||||
|
|
Loading…
Reference in New Issue