diff -r 2fb8b9db1c86 -r d55eb581a87c baseport/syborg/specific/syborg.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/baseport/syborg/specific/syborg.h Tue Aug 04 10:28:23 2009 +0100 @@ -0,0 +1,132 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef __SYBORG_H__ +#define __SYBORG_H__ + +#include +#include +#include +#include +#include +#include // KPrimaryIOBase + +#ifndef __SYBORG__ +#define __SYBORG__ +#endif + +const TUint KHwBasePeripherals = KPrimaryIOBase; +const TUint KHwLinSeparation = 0x1000; + +const TUint KHwBaseSic = KHwBasePeripherals + 0x00*KHwLinSeparation; +// intended for use as a free-running counter. Reading the value register of a free-running syborg counter returns a microsec value +const TUint KHwBaseRtc = KHwBasePeripherals + 0x01*KHwLinSeparation; +// intended for use as an alarm generating timer with a resolution of 1 microsecond +const TUint KHwBaseCounterTimer = KHwBasePeripherals + 0x02*KHwLinSeparation; +const TUint KHwBaseKmiKeyboard = KHwBasePeripherals + 0x03*KHwLinSeparation; +const TUint KHwBaseKmiMouse = KHwBasePeripherals + 0x04*KHwLinSeparation; +const TUint KHwBaseKmiPointer = KHwBasePeripherals + 0x04*KHwLinSeparation; +const TUint KHwBaseClcd = KHwBasePeripherals + 0x05*KHwLinSeparation; +const TUint KHwBaseUart0 = KHwBasePeripherals + 0x06*KHwLinSeparation; +const TUint KHwBaseUart1 = KHwBasePeripherals + 0x07*KHwLinSeparation; +const TUint KHwBaseUart2 = KHwBasePeripherals + 0x08*KHwLinSeparation; +const TUint KHwBaseUart3 = KHwBasePeripherals + 0x09*KHwLinSeparation; +const TUint KHwSVPHostFileSystemDevice = KHwBasePeripherals + 0x0a*KHwLinSeparation; +const TUint KHwSVPSnapDevice = KHwBasePeripherals + 0x0b*KHwLinSeparation; +const TUint KHwSVPNetDevice = KHwBasePeripherals + 0x0c*KHwLinSeparation; +const TUint KHwSVPNandDevice = KHwBasePeripherals + 0x0d*KHwLinSeparation; +const TUint KHwSVPAudioDevice = KHwBasePeripherals + 0x0e*KHwLinSeparation; +const TUint KHwSVPPlatformDevice = KHwBasePeripherals + 0x0f*KHwLinSeparation; + + +enum TSyborgInterruptId +{ + EIntTimer0 = 0, /* RTC -- not used */ + EIntTimer1 = 1, /* Interval Timer */ + EIntKeyboard = 2, + EIntPointer = 3, + // EIntMouse = 3, + EIntFb = 4, + EIntSerial0 = 5, + EIntSerial1 = 6, + EIntSerial2 = 7, + EIntSerial3 = 8 +}; + +// Timer Mode +const TUint KPeriodic = 0x0; +const TUint KOneShot = 0x1; + +class TSyborg +{ +public: + // generic enums + enum TState + { + EEnable, + EDisable + }; + enum TLock + { + ELocked=0, + EUnlocked=0xA05F + }; + enum TTimerMode + { + ETimerModePeriodic=KPeriodic, + ETimerModeOneShot=KOneShot, + }; +public: + // Initialisation of class + static void Init3(); + + // Accessor methods for timers + IMPORT_C static void EnableTimerInterrupt(TUint aTimerBase); // Enable the timer interrupt + IMPORT_C static void DisableTimerInterrupt(TUint aTimerBase); // Disable the timer interrupt + IMPORT_C static void SetTimerLoad(TUint aTimerBase, TUint32 aValue); // Set the starting count value for a timer + IMPORT_C static TUint TimerLoad(TUint aTimerBase); // Read the load register (starting count value) + IMPORT_C static TUint TimerValue(TUint aTimerBase); // Read the actual timer value + IMPORT_C static void ClearTimerInt(TUint aTimerBase); // Clear the timer interrupt + IMPORT_C static TBool IsTimerEnabled(TUint aTimerBase); // Enquire as to whether the timer is enabled + IMPORT_C static void EnableTimer(TUint aTimerBase, TState aState); // Enable/disable the timer (start/stop it running) + IMPORT_C static TTimerMode TimerMode(TUint aTimerBase); // Find out what mode the timer is running in + IMPORT_C static void SetTimerMode(TUint aTimerBase, TTimerMode aValue); // Set the timer mode (periodic or free running) + + // Accessor methods for interrupts + IMPORT_C static void EnableInt(TUint anId); + IMPORT_C static void DisableInt(TUint anId); + + IMPORT_C static TInt VideoRamSize(); + IMPORT_C static TPhysAddr VideoRamPhys(); + IMPORT_C static TPhysAddr VideoRamPhysSecure(); + + // Debug Port Specific + IMPORT_C static TUint32 DebugPortAddr(); + IMPORT_C static void MarkDebugPortOff(); +}; + +static inline TUint32 ReadReg(TUint32 base, TUint8 aReg) +{ + return *(volatile TUint32 *)(base + (aReg << 2)); +} + +static inline void WriteReg(TUint32 base, TUint8 aReg, TUint32 aVal) +{ + *(volatile TUint32*)(base + (aReg<<2)) = aVal; +} + +#endif // __SYBORG_H__