You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
686 lines
29 KiB
686 lines
29 KiB
1 month ago
|
/*==============================================================================
|
||
|
@file
|
||
|
HAP_power.h
|
||
|
|
||
|
@brief
|
||
|
Header file of DSP power APIs.
|
||
|
|
||
|
Copyright (c) 2015,2019 Qualcomm Technologies, Inc.
|
||
|
All rights reserved. Qualcomm Proprietary and Confidential.
|
||
|
==============================================================================*/
|
||
|
|
||
|
#ifndef _HAP_POWER_H
|
||
|
#define _HAP_POWER_H
|
||
|
|
||
|
#include "AEEStdErr.h"
|
||
|
//#include <string.h>
|
||
|
//#include <stdlib.h>
|
||
|
#define boolean char
|
||
|
#define FALSE 0
|
||
|
#define TRUE 1
|
||
|
#define uint64 unsigned long long
|
||
|
#define uint32 unsigned int
|
||
|
#define NULL 0
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
//Add a weak reference so shared objects do not throw link error
|
||
|
#pragma weak HAP_power_destroy_client
|
||
|
|
||
|
/**
|
||
|
* Possible error codes returned
|
||
|
*/
|
||
|
typedef enum {
|
||
|
HAP_POWER_ERR_UNKNOWN = -1,
|
||
|
HAP_POWER_ERR_INVALID_PARAM = -2,
|
||
|
HAP_POWER_ERR_UNSUPPORTED_API = -3
|
||
|
} HAP_power_error_codes;
|
||
|
|
||
|
/** Payload for HAP_power_set_mips_bw */
|
||
|
typedef struct {
|
||
|
boolean set_mips; /**< Set to TRUE to request MIPS */
|
||
|
unsigned int mipsPerThread; /**< mips requested per thread, to establish a minimal clock frequency per HW thread */
|
||
|
unsigned int mipsTotal; /**< Total mips requested, to establish total number of MIPS required across all HW threads */
|
||
|
boolean set_bus_bw; /**< Set to TRUE to request bus_bw */
|
||
|
uint64 bwBytePerSec; /**< Max bus BW requested (bytes per second) */
|
||
|
unsigned short busbwUsagePercentage; /**< Percentage of time during which bwBytesPerSec BW is required from the bus (0..100) */
|
||
|
boolean set_latency; /**< Set to TRUE to set latency */
|
||
|
int latency; /**< maximum hardware wakeup latency in microseconds. The higher the value,
|
||
|
* the deeper state of sleep that can be entered but the longer it may take
|
||
|
* to awaken. Only values > 0 are supported (1 microsecond is the smallest valid value) */
|
||
|
} HAP_power_mips_bw_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Clock frequency match type*/
|
||
|
typedef enum {
|
||
|
HAP_FREQ_AT_LEAST, /**< Matches at least the specified frequency. */
|
||
|
HAP_FREQ_AT_MOST, /**< Matches at most the specified frequency. */
|
||
|
HAP_FREQ_CLOSEST, /**< Closest match to the specified frequency. */
|
||
|
HAP_FREQ_EXACT, /**< Exact match with the specified frequency. */
|
||
|
HAP_FREQ_MAX_COUNT /**< Maximum count. */
|
||
|
} HAP_freq_match_type;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
/** Configuration for bus bandwidth */
|
||
|
typedef struct {
|
||
|
boolean set_bus_bw; /**< Set to TRUE to request bus_bw */
|
||
|
uint64 bwBytePerSec; /**< Max bus BW requested (bytes per second) */
|
||
|
unsigned short busbwUsagePercentage; /**< Percentage of time during which bwBytesPerSec BW is required from the bus (0..100) */
|
||
|
} HAP_power_bus_bw;
|
||
|
|
||
|
/**
|
||
|
* @brief Payload for vapps power request
|
||
|
* vapps core is used for Video post processing
|
||
|
*/
|
||
|
typedef struct {
|
||
|
boolean set_clk; /**< Set to TRUE to request clock frequency */
|
||
|
unsigned int clkFreqHz; /**< Clock frequency in Hz */
|
||
|
HAP_freq_match_type freqMatch; /**< Clock frequency match */
|
||
|
HAP_power_bus_bw dma_ext; /**< DMA external bus bandwidth */
|
||
|
HAP_power_bus_bw hcp_ext; /**< HCP external bus bandwidth */
|
||
|
HAP_power_bus_bw dma_int; /**< DMA internal bus bandwidth */
|
||
|
HAP_power_bus_bw hcp_int; /**< HCP internal bus bandwidth */
|
||
|
} HAP_power_vapss_payload;
|
||
|
|
||
|
/**
|
||
|
* @brief Payload for vapps_v2 power request
|
||
|
* Supported in targets which have split VAPPS core(DMA and HCP) form Hana onwards
|
||
|
*/
|
||
|
typedef struct {
|
||
|
boolean set_dma_clk; /**< Set to TRUE to reqeust DMA clock frequency */
|
||
|
boolean set_hcp_clk; /**< Set to TRUE to reqeust HCP clock frequency */
|
||
|
unsigned int dmaClkFreqHz; /**< DMA Clock frequency in Hz */
|
||
|
unsigned int hcpClkFreqHz; /**< HCP Clock frequency in Hz */
|
||
|
HAP_freq_match_type freqMatch; /**< Clock frequency match type */
|
||
|
HAP_power_bus_bw dma_ext; /**< DMA external bus bandwidth */
|
||
|
HAP_power_bus_bw hcp_ext; /**< HCP external bus bandwidth */
|
||
|
HAP_power_bus_bw dma_int; /**< DMA internal bus bandwidth */
|
||
|
HAP_power_bus_bw hcp_int; /**< HCP internal bus bandwidth */
|
||
|
} HAP_power_vapss_payload_v2;
|
||
|
|
||
|
/** Payload for HAP_power_set_HVX */
|
||
|
typedef struct {
|
||
|
boolean power_up; /**< Set to TRUE to turn on HVX, and FALSE to turn off. */
|
||
|
} HAP_power_hvx_payload;
|
||
|
|
||
|
/**
|
||
|
* Payload for HAP_power_set_HMX
|
||
|
* Supported from Lahaina onwards*/
|
||
|
typedef struct {
|
||
|
boolean power_up; /**< Set to TRUE to turn on HMX, and FALSE to turn off. */
|
||
|
} HAP_power_hmx_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Payload for HAP power client classes */
|
||
|
typedef enum {
|
||
|
HAP_POWER_UNKNOWN_CLIENT_CLASS = 0x00, /**< Unknown client class */
|
||
|
HAP_POWER_AUDIO_CLIENT_CLASS = 0x01, /**< Audio client class */
|
||
|
HAP_POWER_VOICE_CLIENT_CLASS = 0x02, /**< Voice client class */
|
||
|
HAP_POWER_COMPUTE_CLIENT_CLASS = 0x04, /**< Compute client class */
|
||
|
HAP_POWER_STREAMING_1HVX_CLIENT_CLASS = 0x08, /**< Camera streaming with 1 HVX client class */
|
||
|
HAP_POWER_STREAMING_2HVX_CLIENT_CLASS = 0x10, /**< Camera streaming with 2 HVX client class */
|
||
|
} HAP_power_app_type_payload;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
/** Payload for HAP_power_set_linelock */
|
||
|
typedef struct {
|
||
|
void* startAddress; /**< Start address of the memory region to be locked. */
|
||
|
uint32 size; /**< Size (bytes) of the memory region to be locked. Set size
|
||
|
* to 0 to unlock memory. */
|
||
|
uint32 throttleBlockSize; /**< Block size for throttling, in bytes;
|
||
|
* 0 for no throttling. The region to be locked will be divided into
|
||
|
* blocks of this size for throttling purposes.
|
||
|
* Use for locking larger cache blocks.
|
||
|
* Applicable only when enabling line locking.Only ONE throttled linelock call is supported at this time.
|
||
|
* You can linelock additional regions (without throttling) using HAP_power_set_linelock_nothrottle*/
|
||
|
uint32 throttlePauseUs; /**< Pause to be applied between locking each block, in microseconds. Applicable only when enabling line locking*/
|
||
|
} HAP_power_linelock_payload;
|
||
|
|
||
|
/** Payload for HAP_power_set_linelock_nothrottle */
|
||
|
typedef struct {
|
||
|
void* startAddress; /**< Start address of the memory region to be locked. */
|
||
|
uint32 size; /**< Size (bytes) of the memory region to be locked. Set size to 0
|
||
|
* to unlock memory */
|
||
|
} HAP_power_linelock_nothrottle_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Option for dcvs payload */
|
||
|
typedef enum {
|
||
|
HAP_DCVS_ADJUST_UP_DOWN = 0x1, /**< increase and decrease core/bus clock speed. */
|
||
|
HAP_DCVS_ADJUST_ONLY_UP = 0x2, /**< restricts DCVS from lowering the clock speed below the requested value . */
|
||
|
} HAP_power_dcvs_payload_option;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
/** Payload for HAP_power_set_DCVS */
|
||
|
typedef struct {
|
||
|
boolean dcvs_enable; /**< Set to TRUE to participate in DCVS, and FALSE otherwise. */
|
||
|
HAP_power_dcvs_payload_option dcvs_option; /**< Set to one of
|
||
|
* HAP_DCVS_ADJUST_UP_DOWN - Allows for DCVS to adjust up and down.
|
||
|
* HAP_DCVS_ADJUST_ONLY_UP - Allows for DCVS to adjust up only. */
|
||
|
} HAP_power_dcvs_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Voltage corners for HAP DCVS V2 interface */
|
||
|
typedef enum {
|
||
|
HAP_DCVS_VCORNER_DISABLE,
|
||
|
HAP_DCVS_VCORNER_SVS2,
|
||
|
HAP_DCVS_VCORNER_SVS,
|
||
|
HAP_DCVS_VCORNER_SVS_PLUS,
|
||
|
HAP_DCVS_VCORNER_NOM,
|
||
|
HAP_DCVS_VCORNER_NOM_PLUS,
|
||
|
HAP_DCVS_VCORNER_TURBO,
|
||
|
HAP_DCVS_VCORNER_TURBO_PLUS,
|
||
|
HAP_DCVS_VCORNER_MAX = 255,
|
||
|
} HAP_dcvs_voltage_corner_t;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
#define HAP_DCVS_VCORNER_SVSPLUS HAP_DCVS_VCORNER_SVS_PLUS
|
||
|
#define HAP_DCVS_VCORNER_NOMPLUS HAP_DCVS_VCORNER_NOM_PLUS
|
||
|
|
||
|
/** DCVS parameters for HAP_power_dcvs_v2_payload */
|
||
|
typedef struct {
|
||
|
HAP_dcvs_voltage_corner_t target_corner; /**< target voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t min_corner; /**< minimum voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t max_corner; /**< maximum voltage corner */
|
||
|
uint32 param1; /**< reserved */
|
||
|
uint32 param2; /**< reserved */
|
||
|
uint32 param3; /**< reserved */
|
||
|
} HAP_dcvs_params_t;
|
||
|
|
||
|
/** Core clock parameters for HAP_power_dcvs_v3_payload */
|
||
|
typedef struct {
|
||
|
HAP_dcvs_voltage_corner_t target_corner; /**< target voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t min_corner; /**< minimum voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t max_corner; /**< maximum voltage corner */
|
||
|
uint32 param1; /**< reserved */
|
||
|
uint32 param2; /**< reserved */
|
||
|
uint32 param3; /**< reserved */
|
||
|
} HAP_core_params_t;
|
||
|
|
||
|
/** Bus clock parameters for HAP_power_dcvs_v3_payload */
|
||
|
typedef struct {
|
||
|
HAP_dcvs_voltage_corner_t target_corner; /**< target voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t min_corner; /**< minimum voltage corner */
|
||
|
HAP_dcvs_voltage_corner_t max_corner; /**< maximum voltage corner */
|
||
|
uint32 param1; /**< reserved */
|
||
|
uint32 param2; /**< reserved */
|
||
|
uint32 param3; /**< reserved */
|
||
|
} HAP_bus_params_t;
|
||
|
|
||
|
/** DCVS v3 parameters for HAP_power_dcvs_v3_payload */
|
||
|
typedef struct {
|
||
|
uint32 param1; /**< reserved */
|
||
|
uint32 param2; /**< reserved */
|
||
|
uint32 param3; /**< reserved */
|
||
|
uint32 param4; /**< reserved */
|
||
|
uint32 param5; /**< reserved */
|
||
|
uint32 param6; /**< reserved */
|
||
|
} HAP_dcvs_v3_params_t;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** option for dcvs_v2 payload */
|
||
|
typedef enum {
|
||
|
HAP_DCVS_V2_ADJUST_UP_DOWN = 0x1, /**< Allows for DCVS to adjust up and down. */
|
||
|
HAP_DCVS_V2_ADJUST_ONLY_UP = 0x2, /**< Allows for DCVS to adjust up only. */
|
||
|
HAP_DCVS_V2_POWER_SAVER_MODE = 0x4, /**< HAP_DCVS_POWER_SAVER_MODE - Higher thresholds for power efficiency. */
|
||
|
HAP_DCVS_V2_POWER_SAVER_AGGRESSIVE_MODE = 0x8, /**< HAP_DCVS_POWER_SAVER_AGGRESSIVE_MODE - Higher thresholds for power efficiency with faster ramp down. */
|
||
|
HAP_DCVS_V2_PERFORMANCE_MODE = 0x10, /**< HAP_DCVS_PERFORMANCE_MODE - Lower thresholds for maximum performance */
|
||
|
HAP_DCVS_V2_DUTY_CYCLE_MODE = 0x20, /**< HAP_DCVS_DUTY_CYCLE_MODE - only for HVX based clients.
|
||
|
* For streaming class clients:
|
||
|
* > detects periodicity based on HVX usage
|
||
|
* > lowers clocks in the no HVX activity region of each period.
|
||
|
* For compute class clients:
|
||
|
* > Lowers clocks on no HVX activity detects and brings clocks up on detecting HVX activity again.
|
||
|
* > Latency involved in bringing up the clock with be at max 1 to 2 ms. */
|
||
|
|
||
|
|
||
|
|
||
|
} HAP_power_dcvs_v2_payload_option;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
/** Payload for HAP_power_set_DCVS_v2 */
|
||
|
typedef struct {
|
||
|
boolean dcvs_enable; /**< Set to TRUE to participate in DCVS, and FALSE otherwise */
|
||
|
HAP_power_dcvs_v2_payload_option dcvs_option; /**< Set to one of HAP_power_dcvs_v2_payload_option */
|
||
|
boolean set_latency; /**< TRUE to set latency parameter, otherwise FALSE */
|
||
|
uint32 latency; /**< sleep latency */
|
||
|
boolean set_dcvs_params; /**< TRUE to set DCVS params, otherwise FALSE */
|
||
|
HAP_dcvs_params_t dcvs_params; /**< DCVS parameters */
|
||
|
} HAP_power_dcvs_v2_payload;
|
||
|
|
||
|
/** Payload for HAP_power_set_DCVS_v3 */
|
||
|
typedef struct {
|
||
|
boolean set_dcvs_enable; /**< TRUE to consider DCVS enable/disable and option parameters, otherwise FALSE */
|
||
|
boolean dcvs_enable; /**< Set to TRUE to participate in DCVS, and FALSE otherwise. */
|
||
|
HAP_power_dcvs_v2_payload_option dcvs_option; /**< Set to one of HAP_power_dcvs_v2_payload_option */
|
||
|
boolean set_latency; /**< TRUE to consider latency parameter, otherwise FALSE */
|
||
|
uint32 latency; /**< sleep latency */
|
||
|
boolean set_core_params; /**< TRUE to consider core clock params, otherwise FALSE */
|
||
|
HAP_core_params_t core_params; /**< Core clock parameters */
|
||
|
boolean set_bus_params; /**< TRUE to consider bus clock params, otherwise FALSE */
|
||
|
HAP_bus_params_t bus_params; /**< Bus clock parameters */
|
||
|
boolean set_dcvs_v3_params; /**< TRUE to consider DCVS v3 params, otherwise FALSE */
|
||
|
HAP_dcvs_v3_params_t dcvs_v3_params; /**< DCVS v3 parameters */
|
||
|
boolean set_sleep_disable; /**< TRUE to consider sleep disable/enable parameter, otherwise FALSE */
|
||
|
boolean sleep_disable; /**< TRUE to disable sleep/LPM modes, FALSE to enable */
|
||
|
} HAP_power_dcvs_v3_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Type for dcvs update request */
|
||
|
typedef enum {
|
||
|
HAP_POWER_UPDATE_DCVS = 1,
|
||
|
HAP_POWER_UPDATE_SLEEP_LATENCY,
|
||
|
HAP_POWER_UPDATE_DCVS_PARAMS,
|
||
|
} HAP_power_update_type_t;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
/** Payload for DCVS update */
|
||
|
typedef struct {
|
||
|
boolean dcvs_enable; /**< TRUE for DCVS enable and FALSE for DCVS disable */
|
||
|
HAP_power_dcvs_v2_payload_option dcvs_option; /**< Requested DCVS policy in case DCVS enable is TRUE */
|
||
|
} HAP_power_update_dcvs_t;
|
||
|
|
||
|
/** Payload for latency update */
|
||
|
typedef struct {
|
||
|
boolean set_latency; /**< TRUE if sleep latency request has to be considered */
|
||
|
unsigned int latency; /**< Sleep latency request in micro seconds */
|
||
|
} HAP_power_update_latency_t;
|
||
|
|
||
|
/** Payload for DCVS params update */
|
||
|
typedef struct {
|
||
|
boolean set_dcvs_params; /**< Flag to mark DCVS params structure validity, TRUE for valid DCVS
|
||
|
*params request and FALSE otherwise */
|
||
|
HAP_dcvs_params_t dcvs_params; /**< Intended DCVS params if set_dcvs_params is set to TRUE */
|
||
|
} HAP_power_update_dcvs_params_t;
|
||
|
|
||
|
/** Payload for HAP_power_set_DCVS_v2 */
|
||
|
typedef struct {
|
||
|
HAP_power_update_type_t update_param; /**< Type for which param to update */
|
||
|
union {
|
||
|
HAP_power_update_dcvs_t dcvs_payload;
|
||
|
HAP_power_update_latency_t latency_payload;
|
||
|
HAP_power_update_dcvs_params_t dcvs_params_payload;
|
||
|
}; /**< Update payload for DCVS, latency or DCVS params */
|
||
|
} HAP_power_dcvs_v2_update_payload;
|
||
|
|
||
|
/** Payload for HAP_power_set_streamer */
|
||
|
typedef struct {
|
||
|
boolean set_streamer0_clk; /**< Set streamer 0 clock */
|
||
|
boolean set_streamer1_clk; /**< Set streamer 1 clock */
|
||
|
unsigned int streamer0_clkFreqHz; /**< Streamer 0 clock frequency */
|
||
|
unsigned int streamer1_clkFreqHz; /**< Streamer 1 clock frequency */
|
||
|
HAP_freq_match_type freqMatch; /**< Clock frequency match */
|
||
|
uint32 param1; /**< Reserved for future streamer parameters */
|
||
|
uint32 param2; /**< Reserved for future streamer parameters */
|
||
|
uint32 param3; /**< Reserved for future streamer parameters */
|
||
|
} HAP_power_streamer_payload;
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Identifies the HAP power request type */
|
||
|
typedef enum {
|
||
|
HAP_power_set_mips_bw = 1, /**< Requests for MIPS. Provides
|
||
|
* fine-grained control to set MIPS values.
|
||
|
* Payload is set to HAP_power_payload */
|
||
|
HAP_power_set_HVX, /**< Requests to enable / disable HVX
|
||
|
* Payload is set to HAP_power_hvx_payload */
|
||
|
HAP_power_set_apptype, /**< Sets the app_type
|
||
|
* Payload is set to HAP_power_app_type_payload */
|
||
|
HAP_power_set_linelock, /**< Sets the throttled L2 cache line locking parameters.
|
||
|
* Only one throttled call is supported at this time. Additional
|
||
|
* un-throttled line-locks can be performed using HAP_power_set_linelock_nothrottle
|
||
|
* Payload is set to HAP_power_linelock_payload */
|
||
|
HAP_power_set_DCVS, /**< Requests to participate / stop participating in DCVS */
|
||
|
HAP_power_set_linelock_nothrottle, /**< Sets the L2 cache line locking parameters (non-throttled).
|
||
|
* Payload is set to HAP_power_linelock_nothrottle_payload */
|
||
|
HAP_power_set_DCVS_v2, /**< Requests to participate / stop participating in DCVS_v2 */
|
||
|
HAP_power_set_vapss, /**< Sets the VAPSS core clock and DDR/IPNOC bandwidth
|
||
|
* Payload is set to HAP_power_vapss_payload */
|
||
|
HAP_power_set_vapss_v2, /**< Sets the VAPSS core DMA/HCP clocks and DDR/IPNOC bandwidths
|
||
|
* Payload is set to HAP_power_vapss_payload_v2 */
|
||
|
HAP_power_set_dcvs_v2_update, /**< Updates DCVS params
|
||
|
* Payload is set to HAP_power_dcvs_v2_update_payload */
|
||
|
HAP_power_set_streamer, /**< Sets the streamer core clocks
|
||
|
* Payload is set to HAP_power_streamer_payload */
|
||
|
HAP_power_set_DCVS_v3, /**< Updates DCVS params
|
||
|
* Payload is set to HAP_power_dcvs_v3_payload */
|
||
|
HAP_power_set_HMX, /**< Requests to enable / disable HMX
|
||
|
* Payload is set to HAP_power_hmx_payload */
|
||
|
} HAP_Power_request_type;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
/** Data type to change power values on the DSP */
|
||
|
typedef struct {
|
||
|
HAP_Power_request_type type; /**< Identifies the request type */
|
||
|
union{
|
||
|
HAP_power_mips_bw_payload mips_bw; /**< Requests for performance level */
|
||
|
HAP_power_vapss_payload vapss; /**< Sets the VAPSS core clock and DDR/IPNOC bandwidth */
|
||
|
HAP_power_vapss_payload_v2 vapss_v2; /**< Sets the VAPSS core clock and DDR/IPNOC bandwidth */
|
||
|
HAP_power_streamer_payload streamer; /**< Sets the streamer core clocks */
|
||
|
HAP_power_hvx_payload hvx; /**< Requests to enable / disable HVX */
|
||
|
HAP_power_app_type_payload apptype; /**< Sets the app_type */
|
||
|
HAP_power_linelock_payload linelock; /**< Sets the throttled L2 cache linelock parameters. Only one
|
||
|
* throttled linelock is permitted at this time. Additional
|
||
|
* un-throttled linelocks can be performed using linelock_nothrottle */
|
||
|
HAP_power_dcvs_payload dcvs; /**< Updates DCVS params */
|
||
|
HAP_power_dcvs_v2_payload dcvs_v2; /**< Updates DCVS_v2 params */
|
||
|
HAP_power_dcvs_v2_update_payload dcvs_v2_update; /**< Updates DCVS_v2_update params */
|
||
|
HAP_power_linelock_nothrottle_payload linelock_nothrottle; /**< Sets the un-throttled L2 cache linelock parameters */
|
||
|
HAP_power_dcvs_v3_payload dcvs_v3; /**< Updates DCVS_v3 params */
|
||
|
HAP_power_hmx_payload hmx; /**< Requests to turn on / off HMX */
|
||
|
};
|
||
|
} HAP_power_request_t;
|
||
|
|
||
|
/** @defgroup HAP_power_functions HAP POWER functions
|
||
|
* @{
|
||
|
*/
|
||
|
/**
|
||
|
* Method to set power values from the DSP
|
||
|
* @param[in] context - To identify the power client
|
||
|
* @param[in] request - Request params.
|
||
|
* @retval 0 on success, AEE_EMMPMREGISTER on MMPM client register request failure, -1 on unknown error
|
||
|
*/
|
||
|
int HAP_power_set(void* context, HAP_power_request_t* request);
|
||
|
/**
|
||
|
* @} // HAP_power_functions
|
||
|
*/
|
||
|
|
||
|
/** @defgroup HAP_power_enums HAP POWER enums
|
||
|
* @{
|
||
|
*/
|
||
|
/** Identifies the HAP power response type */
|
||
|
typedef enum {
|
||
|
HAP_power_get_max_mips = 1, /**< Returns the max mips supported (max_mips) */
|
||
|
HAP_power_get_max_bus_bw, /**< Returns the max bus bandwidth supported (max_bus_bw) */
|
||
|
HAP_power_get_client_class, /**< Returns the client class (client_class) */
|
||
|
HAP_power_get_clk_Freq, /**< Returns the core clock frequency (clkFreqHz) */
|
||
|
HAP_power_get_aggregateAVSMpps, /**< Returns the aggregate Mpps used by audio and voice (clkFreqHz) */
|
||
|
HAP_power_get_dcvsEnabled, /**< Returns the dcvs status (enabled / disabled) */
|
||
|
HAP_power_get_vapss_core_clk_Freq, /**< Returns the VAPSS core clock frequency (clkFreqHz) */
|
||
|
HAP_power_get_dma_core_clk_Freq, /**< Returns the DMA core clock frequency (clkFreqHz) */
|
||
|
HAP_power_get_hcp_core_clk_Freq, /**< Returns the HCP core clock frequency (clkFreqHz) */
|
||
|
HAP_power_get_streamer0_core_clk_Freq, /**< Returns the streamer 0 core clock frequency (clkFreqHz) */
|
||
|
HAP_power_get_streamer1_core_clk_Freq, /**< Returns the streamer 1 core clock frequency (clkFreqHz) */
|
||
|
} HAP_Power_response_type;
|
||
|
/**
|
||
|
* @} // HAP_power_enums
|
||
|
*/
|
||
|
|
||
|
/** Data type to retrieve power values from the DSP */
|
||
|
typedef struct {
|
||
|
HAP_Power_response_type type; /**< Identifies the type to retrieve. */
|
||
|
union{
|
||
|
unsigned int max_mips; /**< Max mips supported */
|
||
|
uint64 max_bus_bw; /**< Max bus bw supported */
|
||
|
unsigned int client_class; /**< Current client class */
|
||
|
unsigned int clkFreqHz; /**< Current core CPU frequency */
|
||
|
unsigned int aggregateAVSMpps; /**< Aggregate AVS Mpps used by audio and voice */
|
||
|
boolean dcvsEnabled; /**< Indicates if dcvs is enabled / disabled. */
|
||
|
};
|
||
|
} HAP_power_response_t;
|
||
|
|
||
|
/** @defgroup HAP_power_functions HAP POWER functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Method to retrieve power values from the DSP
|
||
|
* @param[in] context - Ignored
|
||
|
* @param[out] response - Response.
|
||
|
*/
|
||
|
int HAP_power_get(void* context, HAP_power_response_t* response);
|
||
|
|
||
|
/**
|
||
|
* Method to initialize dcvs v3 structure in request param. It enables
|
||
|
* flags and resets params for all fields in dcvs v3. So, this
|
||
|
* can also be used to remove applied dcvs v3 params and restore
|
||
|
* defaults.
|
||
|
* @param[in] request - Pointer to request params.
|
||
|
*/
|
||
|
/*static inline void HAP_power_set_dcvs_v3_init(HAP_power_request_t* request) {
|
||
|
memset(request, 0, sizeof(HAP_power_request_t) );
|
||
|
request->type = HAP_power_set_DCVS_v3;
|
||
|
request->dcvs_v3.set_dcvs_enable = TRUE;
|
||
|
request->dcvs_v3.dcvs_enable = TRUE;
|
||
|
request->dcvs_v3.dcvs_option = HAP_DCVS_V2_POWER_SAVER_MODE;
|
||
|
request->dcvs_v3.set_latency = TRUE;
|
||
|
request->dcvs_v3.latency = 65535;
|
||
|
request->dcvs_v3.set_core_params = TRUE;
|
||
|
request->dcvs_v3.set_bus_params = TRUE;
|
||
|
request->dcvs_v3.set_dcvs_v3_params = TRUE;
|
||
|
request->dcvs_v3.set_sleep_disable = TRUE;
|
||
|
return;
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* Method to enable/disable dcvs and set particular dcvs policy.
|
||
|
* @param[in] context - User context.
|
||
|
* @param[in] dcvs_enable - TRUE to enable dcvs, FALSE to disable dcvs.
|
||
|
* @param[in] dcvs_option - To set particular dcvs policy. In case of dcvs disable
|
||
|
* request, this param will be ignored.
|
||
|
* @returns - 0 on success
|
||
|
*/
|
||
|
/*static inline int HAP_power_set_dcvs_option(void* context, boolean dcvs_enable,
|
||
|
HAP_power_dcvs_v2_payload_option dcvs_option) {
|
||
|
HAP_power_request_t request;
|
||
|
memset(&request, 0, sizeof(HAP_power_request_t) );
|
||
|
request.type = HAP_power_set_DCVS_v3;
|
||
|
request.dcvs_v3.set_dcvs_enable = TRUE;
|
||
|
request.dcvs_v3.dcvs_enable = dcvs_enable;
|
||
|
if(dcvs_enable)
|
||
|
request.dcvs_v3.dcvs_option = dcvs_option;
|
||
|
return HAP_power_set(context, &request);
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* Method to set/reset sleep latency.
|
||
|
* @param[in] context - User context.
|
||
|
* @param[in] latency - Sleep latency value in microseconds, should be > 1.
|
||
|
* Use 65535 max value to reset it to default.
|
||
|
* @returns - 0 on success
|
||
|
*/
|
||
|
/*static inline int HAP_power_set_sleep_latency(void* context, uint32 latency) {
|
||
|
HAP_power_request_t request;
|
||
|
memset(&request, 0, sizeof(HAP_power_request_t) );
|
||
|
request.type = HAP_power_set_DCVS_v3;
|
||
|
request.dcvs_v3.set_latency = TRUE;
|
||
|
request.dcvs_v3.latency = latency;
|
||
|
return HAP_power_set(context, &request);
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* Method to set/reset DSP core clock voltage corners.
|
||
|
* @param[in] context - User context.
|
||
|
* @param[in] target_corner - Target voltage corner.
|
||
|
* @param[in] min_corner - Minimum voltage corner.
|
||
|
* @param[in] max_corner - Maximum voltage corner.
|
||
|
* @returns - 0 on success
|
||
|
*/
|
||
|
/*static inline int HAP_power_set_core_corner(void* context, uint32 target_corner,
|
||
|
uint32 min_corner, uint32 max_corner) {
|
||
|
HAP_power_request_t request;
|
||
|
memset(&request, 0, sizeof(HAP_power_request_t) );
|
||
|
request.type = HAP_power_set_DCVS_v3;
|
||
|
request.dcvs_v3.set_core_params = TRUE;
|
||
|
request.dcvs_v3.core_params.min_corner = (HAP_dcvs_voltage_corner_t) (min_corner);
|
||
|
request.dcvs_v3.core_params.max_corner = (HAP_dcvs_voltage_corner_t) (max_corner);
|
||
|
request.dcvs_v3.core_params.target_corner = (HAP_dcvs_voltage_corner_t) (target_corner);
|
||
|
return HAP_power_set(context, &request);
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* Method to set/reset bus clock voltage corners.
|
||
|
* @param[in] context - User context.
|
||
|
* @param[in] target_corner - Target voltage corner.
|
||
|
* @param[in] min_corner - Minimum voltage corner.
|
||
|
* @param[in] max_corner - Maximum voltage corner.
|
||
|
* @returns - 0 on success
|
||
|
*/
|
||
|
/*static inline int HAP_power_set_bus_corner(void* context, uint32 target_corner,
|
||
|
uint32 min_corner, uint32 max_corner) {
|
||
|
HAP_power_request_t request;
|
||
|
memset(&request, 0, sizeof(HAP_power_request_t) );
|
||
|
request.type = HAP_power_set_DCVS_v3;
|
||
|
request.dcvs_v3.set_bus_params = TRUE;
|
||
|
request.dcvs_v3.bus_params.min_corner = (HAP_dcvs_voltage_corner_t) (min_corner);
|
||
|
request.dcvs_v3.bus_params.max_corner = (HAP_dcvs_voltage_corner_t) (max_corner);
|
||
|
request.dcvs_v3.bus_params.target_corner = (HAP_dcvs_voltage_corner_t) (target_corner);
|
||
|
return HAP_power_set(context, &request);
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* Method to disable/enable all low power modes.
|
||
|
* @param[in] context - User context.
|
||
|
* @param[in] sleep_disable - TRUE to disable all low power modes.
|
||
|
* FALSE to re-enable all low power modes.
|
||
|
* @returns - 0 on success
|
||
|
*/
|
||
|
/*static inline int HAP_power_set_sleep_mode(void* context, boolean sleep_disable) {
|
||
|
HAP_power_request_t request;
|
||
|
memset(&request, 0, sizeof(HAP_power_request_t) );
|
||
|
request.type = HAP_power_set_DCVS_v3;
|
||
|
request.dcvs_v3.set_sleep_disable = TRUE;
|
||
|
request.dcvs_v3.sleep_disable = sleep_disable;
|
||
|
return HAP_power_set(context, &request);
|
||
|
}*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This API is deprecated and might generate undesired results.
|
||
|
* Please use the HAP_power_get() and HAP_power_set() APIs instead.
|
||
|
* Requests a performance level by percentage for clock speed
|
||
|
* and bus speed. Passing 0 for any parameter results in no
|
||
|
* request being issued for that particular attribute.
|
||
|
* @param[in] clock - percentage of target's maximum clock speed
|
||
|
* @param[in] bus - percentage of target's maximum bus speed
|
||
|
* @param[in] latency - maximum hardware wake up latency in microseconds. The
|
||
|
* higher the value the deeper state of sleep
|
||
|
* that can be entered but the longer it may
|
||
|
* take to awaken.
|
||
|
* @retval 0 on success
|
||
|
* @par Comments : Performance metrics vary from target to target so the
|
||
|
* intent of this API is to allow callers to set a relative
|
||
|
* performance level to achieve the desired balance between
|
||
|
* performance and power saving.
|
||
|
*/
|
||
|
int HAP_power_request(int clock, int bus, int latency);
|
||
|
|
||
|
/**
|
||
|
* This API is deprecated and might generate undesired results.
|
||
|
* Please use the HAP_power_get() and HAP_power_set() APIs instead.
|
||
|
* Requests a performance level by absolute values. Passing 0
|
||
|
* for any parameter results in no request being issued for that
|
||
|
* particular attribute.
|
||
|
* @param[in] clock - speed in MHz
|
||
|
* @param[in] bus - bus speed in MHz
|
||
|
* @param[in] latency - maximum hardware wakeup latency in microseconds. The
|
||
|
* higher the value the deeper state of
|
||
|
* sleep that can be entered but the
|
||
|
* longer it may take to awaken.
|
||
|
* @retval 0 on success
|
||
|
* @par Comments : This API allows callers who are aware of their target
|
||
|
* specific capabilities to set them explicitly.
|
||
|
*/
|
||
|
int HAP_power_request_abs(int clock, int bus, int latency);
|
||
|
|
||
|
/**
|
||
|
* This API is deprecated and might generate undesired results.
|
||
|
* Please use the HAP_power_get() and HAP_power_set() APIs instead.
|
||
|
* queries the target for its clock and bus speed capabilities
|
||
|
* @param[out] clock_max - maximum clock speed supported in MHz
|
||
|
* @param[out] bus_max - maximum bus speed supported in MHz
|
||
|
* @retval 0 on success
|
||
|
*/
|
||
|
int HAP_power_get_max_speed(int* clock_max, int* bus_max);
|
||
|
|
||
|
/**
|
||
|
* This API is deprecated and might generate undesired results.
|
||
|
* Please use the HAP_power_get() and HAP_power_set() APIs instead.
|
||
|
* Upvote for HVX power
|
||
|
* @retval 0 on success
|
||
|
*/
|
||
|
int HVX_power_request(void);
|
||
|
|
||
|
/**
|
||
|
* This API is deprecated and might generate undesired results.
|
||
|
* Please use the HAP_power_get() and HAP_power_set() APIs instead.
|
||
|
* Downvote for HVX power
|
||
|
* @retval 0 on success
|
||
|
*/
|
||
|
int HVX_power_release(void);
|
||
|
|
||
|
/**
|
||
|
* Method to destroy clients created through HAP_power_set
|
||
|
* @param[in] context - To uniquely identify the client
|
||
|
* @retval 0 on success, AEE_ENOSUCHCLIENT on Invalid context, -1 on unknown error
|
||
|
* @brief DO NOT call this API directly, use HAP_power_destroy instead.
|
||
|
*/
|
||
|
int HAP_power_destroy_client(void *context);
|
||
|
|
||
|
/**
|
||
|
* @param[in] client - To uniquely identify the client context.
|
||
|
* @retval 0 on success, AEE_EUNSUPPORTEDAPI if the API is not supported on the DSP image, AEE_ENOSUCHCLIENT on Invalid context, -1 on unknown error
|
||
|
* @brief Method to destroy clients created through HAP_power_set, wrapper to HAP_power_destroy_client API
|
||
|
*/
|
||
|
static inline int HAP_power_destroy(void *client){
|
||
|
if(0 != HAP_power_destroy_client)
|
||
|
return HAP_power_destroy_client(client);
|
||
|
return AEE_EUNSUPPORTEDAPI;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to create user client context
|
||
|
* @retval context for client
|
||
|
*/
|
||
|
//static inline void* HAP_utils_create_context(void) {
|
||
|
/*
|
||
|
* Allocate 1 byte of memory for a unique context identifier
|
||
|
* Clients can also allocate memory and use it as unique context identifier
|
||
|
*/
|
||
|
// return malloc(1);
|
||
|
//}
|
||
|
|
||
|
/**
|
||
|
* Method to destroy user client context
|
||
|
* @param context of client
|
||
|
*/
|
||
|
/*static inline void HAP_utils_destroy_context(void* context) {
|
||
|
free(context);
|
||
|
}*/
|
||
|
|
||
|
/**
|
||
|
* @} // HAP_power_functions
|
||
|
*/
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif //_HAP_POWER_H
|
||
|
|