williamr@2: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // template\template_assp\template_assp_priv.h williamr@2: // Template ASSP architecture private header file williamr@2: // williamr@2: // williamr@2: williamr@2: williamr@2: williamr@2: #ifndef __KA_TEMPLATE_H__ williamr@2: #define __KA_TEMPLATE_H__ williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // Example only williamr@2: const TInt KNumTemplateInts=EAsspIntIdZ+1; williamr@2: williamr@2: class TemplateInterrupt : public Interrupt williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * These functions are required to initialise the Interrupt controller,or perform housekeeping williamr@2: * functions, or dispatch the incoming IRQ or FIQ interrupts. williamr@2: */ williamr@2: williamr@2: /** williamr@2: * initialisation williamr@2: */ williamr@2: static void Init1(); williamr@2: static void Init3(); williamr@2: /** williamr@2: * IRQ/FIQ dispatchers williamr@2: */ williamr@2: static void IrqDispatch(); williamr@2: static void FiqDispatch(); williamr@2: /** williamr@2: * Housekeeping (disable and clear all hardware interrupt sources) williamr@2: */ williamr@2: static void DisableAndClearAll(); williamr@2: /** williamr@2: * Empty interrupt handler williamr@2: */ williamr@2: static void Spurious(TAny* anId); williamr@2: public: williamr@2: static SInterruptHandler Handlers[KNumTemplateInts]; williamr@2: }; williamr@2: williamr@2: class TemplateAssp : public Asic williamr@2: { williamr@2: public: williamr@2: IMPORT_C TemplateAssp(); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * These are the mandatory Asic class functions which are implemented here rather than in the Variant. williamr@2: * It makes sense having an ASSP class when there is functionality at Variant/Core level which is common williamr@2: * to a group of devices and is provided by an IP block(s) which is likely to be used in future generations williamr@2: * of the same family of devices. williamr@2: * In general the common functionality includes first-level Interrupt controllers, Power and Reset controllers, williamr@2: * and timing functions williamr@2: */ williamr@2: williamr@2: /** williamr@2: * initialisation williamr@2: */ williamr@2: IMPORT_C virtual void Init1(); williamr@2: IMPORT_C virtual void Init3(); williamr@2: /** williamr@2: * Read and return the Startup reason of the Super Page (set up by Bootstrap) williamr@2: * @return A TMachineStartupType enumerated value williamr@2: * @see TMachineStartupType williamr@2: */ williamr@2: IMPORT_C virtual TMachineStartupType StartupReason(); williamr@2: williamr@2: /** williamr@2: * timing functions williamr@2: */ williamr@2: williamr@2: /** williamr@2: * Obtain the period of System Tick timer in microseconds williamr@2: * @return Period of System Tick timer in microseconds williamr@2: */ williamr@2: IMPORT_C virtual TInt MsTickPeriod(); williamr@2: /** williamr@2: * Obtain System Time from the RTC williamr@2: * @return System Time in seconds from 00:00 hours of 1/1/2000 williamr@2: */ williamr@2: IMPORT_C virtual TInt SystemTimeInSecondsFrom2000(TInt& aTime); williamr@2: /** williamr@2: * Obtain Adjust the RTC with new System Time (from 00:00 hours of 1/1/2000) williamr@2: * @return System wide error code williamr@2: */ williamr@2: IMPORT_C virtual TInt SetSystemTimeInSecondsFrom2000(TInt aTime); williamr@2: /** williamr@2: * Obtain the time it takes to execute two processor instructions williamr@2: * @return Time in nanoseconds it takes two execute 2 instructions at the processor clock speed williamr@2: */ williamr@2: IMPORT_C virtual TUint32 NanoWaitCalibration(); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * for derivation by Variant williamr@2: */ williamr@2: williamr@2: /** williamr@2: * external interrupt handling williamr@2: * used by second-level interrupt controllers at Variant level williamr@2: */ williamr@2: virtual TInt InterruptBind(TInt anId, TIsr anIsr, TAny* aPtr)=0; williamr@2: virtual TInt InterruptUnbind(TInt anId)=0; williamr@2: virtual TInt InterruptEnable(TInt anId)=0; williamr@2: virtual TInt InterruptDisable(TInt anId)=0; williamr@2: virtual TInt InterruptClear(TInt anId)=0; williamr@2: williamr@2: /** williamr@2: * USB client controller - Some example functions for the case that USB cable detection and williamr@2: * UDC connect/disconnect functionality are part of the Variant. williamr@2: * Pure virtual functions called by the USB PSL, to be implemented by the Variant (derived class). williamr@2: * If this functionality is part of the ASSP then these functions can be removed and calls to them williamr@2: * in the PSL (./pa_usbc.cpp) replaced by the appropriate internal operations. williamr@2: */ williamr@2: virtual TBool UsbClientConnectorDetectable()=0; williamr@2: virtual TBool UsbClientConnectorInserted()=0; williamr@2: virtual TInt RegisterUsbClientConnectorCallback(TInt (*aCallback)(TAny*), TAny* aPtr)=0; williamr@2: virtual void UnregisterUsbClientConnectorCallback()=0; williamr@2: virtual TBool UsbSoftwareConnectable()=0; williamr@2: virtual TInt UsbConnect()=0; williamr@2: virtual TInt UsbDisconnect()=0; williamr@2: williamr@2: /** williamr@2: * miscellaneous williamr@2: */ williamr@2: virtual TInt VideoRamSize()=0; williamr@2: williamr@2: public: williamr@2: static TemplateAssp* Variant; williamr@2: static TPhysAddr VideoRamPhys; williamr@2: NTimerQ* iTimerQ; williamr@2: }; williamr@2: williamr@2: #endif