blob: 08f8cb7a60edf144e40ed62709825d48cc7a4da4 [file] [log] [blame]
/* advidle.h - header file for custom advanced idle manager */
/*
* Copyright (c) 2012-2014 Wind River Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @brief Custom advanced idle manager
*
* This header file specifies the custom advanced idle management interface.
* All of the APIs declared here must be supplied by the custom advanced idle
* management system, namely the _AdvIdleCheckSleep(), _AdvIdleFunc()
* and _AdvIdleStart() functions.
*/
#ifndef __INCadvidle
#define __INCadvidle
#ifdef __cplusplus
extern "C" {
#endif
#ifdef CONFIG_ADVANCED_IDLE
/**
* @brief Determine if advanced sleep has occurred
*
* This routine checks if the system is recovering from advanced
* sleep or cold booting.
*
* @return 0 if the system is cold booting on a non-zero
* value if the system is recovering from advanced sleep.
*/
extern int _AdvIdleCheckSleep(void);
/**
* @brief Continue kernel start-up or awaken kernel from sleep
*
* This routine checks if the system is recovering from advanced sleep and
* either continues the kernel's cold boot sequence at _Cstart or resumes
* kernel operation at the point it went to sleep; in the latter case, control
* passes to the _AdvIdleFunc() that put the system to sleep, which then
* finishes executing.
*
* @param _Cstart the address of the _Cstart function
* @param _gdt the address of the global descriptor table in RAM
* @param _GlobalTss the address of the TSS descriptor
*
* @return does not return to caller
*/
extern void _AdvIdleStart(void (*_Cstart)(void), void *_gdt, void *_GlobalTss);
/**
* @brief Perform advanced sleep
*
* This routine checks if the upcoming kernel idle interval is sufficient to
* justify entering advanced sleep mode. If it is, the routine puts the system
* to sleep and then later allows it to resume processing; if not, the routine
* returns immediately without sleeping.
*
* @param ticks the upcoming kernel idle time
*
* @return non-zero if advanced sleep occurred; otherwise zero
*/
extern int _AdvIdleFunc(int32_t ticks);
#endif /* CONFIG_ADVANCED_IDLE */
#ifdef __cplusplus
}
#endif
#endif /* __INCadvidle */