627 __ASSERT_COMPILE(!(_FOFF(TSubScheduler,iReschedCount)&7)); |
627 __ASSERT_COMPILE(!(_FOFF(TSubScheduler,iReschedCount)&7)); |
628 __ASSERT_COMPILE(sizeof(TSubSchedulerX)==256); |
628 __ASSERT_COMPILE(sizeof(TSubSchedulerX)==256); |
629 __ASSERT_COMPILE(sizeof(TSubScheduler)==(1<<KSubSchedulerShift)); // make it a nice power of 2 size for easy indexing |
629 __ASSERT_COMPILE(sizeof(TSubScheduler)==(1<<KSubSchedulerShift)); // make it a nice power of 2 size for easy indexing |
630 |
630 |
631 struct SCoreControlAction; |
631 struct SCoreControlAction; |
|
632 struct SVariantInterfaceBlock; |
632 |
633 |
633 /** |
634 /** |
634 @internalComponent |
635 @internalComponent |
635 */ |
636 */ |
636 class TScheduler |
637 class TScheduler |
667 static TDfcQue* RebalanceDfcQ(); |
668 static TDfcQue* RebalanceDfcQ(); |
668 static NThread* LBThread(); |
669 static NThread* LBThread(); |
669 static TBool CoreControlSupported(); |
670 static TBool CoreControlSupported(); |
670 static void CCInitiatePowerUp(TUint32 aCores); |
671 static void CCInitiatePowerUp(TUint32 aCores); |
671 static void CCIndirectPowerDown(TAny*); |
672 static void CCIndirectPowerDown(TAny*); |
|
673 static void DoFrequencyChanged(TAny*); |
672 public: |
674 public: |
673 TLinAddr iMonitorExceptionHandler; |
675 TLinAddr iMonitorExceptionHandler; |
674 TLinAddr iProcessHandler; |
676 TLinAddr iProcessHandler; |
675 |
677 |
676 volatile TUint32 iThreadAcceptCpus; // bit n set if CPU n is accepting unlocked threads |
678 volatile TUint32 iThreadAcceptCpus; // bit n set if CPU n is accepting unlocked threads |
725 volatile TUint32 iCCIpiReactivate; // Cores to be woken up because of IPIs |
727 volatile TUint32 iCCIpiReactivate; // Cores to be woken up because of IPIs |
726 |
728 |
727 TDfc iCCRequestDfc; // runs when a request is made to change the number of active cores |
729 TDfc iCCRequestDfc; // runs when a request is made to change the number of active cores |
728 TDfc iCCPowerDownDfc; // runs when indirect power down of core(s) is required |
730 TDfc iCCPowerDownDfc; // runs when indirect power down of core(s) is required |
729 TDfc iCCIpiReactIDFC; // runs when an IPI needs to wake up a core |
731 TDfc iCCIpiReactIDFC; // runs when an IPI needs to wake up a core |
|
732 TDfc iFreqChgDfc; // runs when frequency changes required |
730 |
733 |
731 TSubScheduler* iPoweringOff; // CPU last to power off |
734 TSubScheduler* iPoweringOff; // CPU last to power off |
732 TUint32 iDetachCount; // detach count before power off |
735 TUint32 iDetachCount; // detach count before power off |
733 |
736 |
734 TUint32 i_Scheduler_Padding[54]; |
737 SVariantInterfaceBlock* iVIB; |
|
738 TUint32 i_Scheduler_Padding[29]; |
735 }; |
739 }; |
736 |
740 |
737 __ASSERT_COMPILE(!(_FOFF(TScheduler,iGenIPILock)&7)); |
741 __ASSERT_COMPILE(!(_FOFF(TScheduler,iGenIPILock)&7)); |
738 __ASSERT_COMPILE(!(_FOFF(TScheduler,iIdleSpinLock)&7)); |
742 __ASSERT_COMPILE(!(_FOFF(TScheduler,iIdleSpinLock)&7)); |
739 __ASSERT_COMPILE(!(_FOFF(TScheduler,iIdleBalanceLock)&7)); |
743 __ASSERT_COMPILE(!(_FOFF(TScheduler,iIdleBalanceLock)&7)); |
740 __ASSERT_COMPILE(!(_FOFF(TScheduler,iEnumerateLock)&7)); |
744 __ASSERT_COMPILE(!(_FOFF(TScheduler,iEnumerateLock)&7)); |
741 __ASSERT_COMPILE(!(_FOFF(TScheduler,iBalanceListLock)&7)); |
745 __ASSERT_COMPILE(!(_FOFF(TScheduler,iBalanceListLock)&7)); |
742 __ASSERT_COMPILE(sizeof(TSchedulerX)==16*4); |
746 __ASSERT_COMPILE(sizeof(TSchedulerX)==32*4); |
743 __ASSERT_COMPILE(sizeof(TScheduler)==1024); |
747 __ASSERT_COMPILE(sizeof(TScheduler)==1024); |
744 |
748 |
745 extern TScheduler TheScheduler; |
749 extern TScheduler TheScheduler; |
746 extern TSubScheduler TheSubSchedulers[KMaxCpus]; |
750 extern TSubScheduler TheSubSchedulers[KMaxCpus]; |
747 |
751 |