Update 8254 Timer driver to use IoLib instead of CPU I/O Protocol

Also change the default tick rate from 54 ms to 10 ms.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6243 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
mdkinney 2008-10-27 02:12:53 +00:00
parent 0f25cc149a
commit 2952f72d6d
3 changed files with 12 additions and 22 deletions

View File

@ -35,16 +35,16 @@
BaseLib BaseLib
DebugLib DebugLib
UefiDriverEntryPoint UefiDriverEntryPoint
IoLib
[Sources.common] [Sources.common]
Timer.h Timer.h
Timer.c Timer.c
[Protocols] [Protocols]
gEfiCpuIoProtocolGuid
gEfiCpuArchProtocolGuid gEfiCpuArchProtocolGuid
gEfiLegacy8259ProtocolGuid gEfiLegacy8259ProtocolGuid
gEfiTimerArchProtocolGuid gEfiTimerArchProtocolGuid
[Depex] [Depex]
gEfiCpuIoProtocolGuid AND gEfiCpuArchProtocolGuid AND gEfiLegacy8259ProtocolGuid gEfiCpuArchProtocolGuid AND gEfiLegacy8259ProtocolGuid

View File

@ -42,11 +42,6 @@ EFI_TIMER_ARCH_PROTOCOL mTimer = {
// //
EFI_CPU_ARCH_PROTOCOL *mCpu; EFI_CPU_ARCH_PROTOCOL *mCpu;
//
// Pointer to the CPU I/O Protocol instance
//
EFI_CPU_IO_PROTOCOL *mCpuIo;
// //
// Pointer to the Legacy 8259 Protocol instance // Pointer to the Legacy 8259 Protocol instance
// //
@ -86,11 +81,9 @@ Returns:
--*/ --*/
{ {
UINT8 Data; IoWrite8 (TIMER_CONTROL_PORT, 0x36);
IoWrite8 (TIMER0_COUNT_PORT, (UINT8)(Count & 0xff));
Data = 0x36; IoWrite8 (TIMER0_COUNT_PORT, (UINT8)((Count >> 8) & 0xff));
mCpuIo->Io.Write (mCpuIo, EfiCpuIoWidthUint8, TIMER_CONTROL_PORT, 1, &Data);
mCpuIo->Io.Write (mCpuIo, EfiCpuIoWidthFifoUint8, TIMER0_COUNT_PORT, 2, &Count);
} }
VOID VOID
@ -262,6 +255,7 @@ Returns:
// //
mLegacy8259->DisableIrq (mLegacy8259, Efi8259Irq0); mLegacy8259->DisableIrq (mLegacy8259, Efi8259Irq0);
} else { } else {
// //
// Convert TimerPeriod into 8254 counts // Convert TimerPeriod into 8254 counts
// //
@ -433,12 +427,6 @@ Returns:
// //
ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiTimerArchProtocolGuid); ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiTimerArchProtocolGuid);
//
// Find the CPU I/O Protocol.
//
Status = gBS->LocateProtocol (&gEfiCpuIoProtocolGuid, NULL, (VOID **) &mCpuIo);
ASSERT_EFI_ERROR (Status);
// //
// Find the CPU architectural protocol. // Find the CPU architectural protocol.
// //
@ -481,11 +469,11 @@ Returns:
// //
Status = gBS->InstallMultipleProtocolInterfaces ( Status = gBS->InstallMultipleProtocolInterfaces (
&mTimerHandle, &mTimerHandle,
&gEfiTimerArchProtocolGuid, &gEfiTimerArchProtocolGuid, &mTimer,
&mTimer,
NULL NULL
); );
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
return Status; return Status;
} }

View File

@ -26,13 +26,13 @@ Abstract:
#include <PiDxe.h> #include <PiDxe.h>
#include <Protocol/Cpu.h> #include <Protocol/Cpu.h>
#include <Protocol/CpuIo.h>
#include <Protocol/Legacy8259.h> #include <Protocol/Legacy8259.h>
#include <Protocol/Timer.h> #include <Protocol/Timer.h>
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/BaseLib.h> #include <Library/BaseLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/IoLib.h>
// //
// The PCAT 8253/8254 has an input clock at 1.193182 MHz and Timer 0 is // The PCAT 8253/8254 has an input clock at 1.193182 MHz and Timer 0 is
@ -43,7 +43,9 @@ Abstract:
// ---------------- * 1,000,000 uS/S = 54925.4 uS = 549254 * 100 ns // ---------------- * 1,000,000 uS/S = 54925.4 uS = 549254 * 100 ns
// 1,193,182 Hz // 1,193,182 Hz
// //
#define DEFAULT_TIMER_TICK_DURATION 549254 // The default timer tick duration is set to 10 ms = 100000 100 ns units
//
#define DEFAULT_TIMER_TICK_DURATION 100000
#define TIMER_CONTROL_PORT 0x43 #define TIMER_CONTROL_PORT 0x43
#define TIMER0_COUNT_PORT 0x40 #define TIMER0_COUNT_PORT 0x40