Program Listing for File QnnHtaPerfInfrastructure.h

Return to documentation for file (include/QNN/HTA/QnnHtaPerfInfrastructure.h)

//==============================================================================
//
// Copyright (c) 2022 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
//==============================================================================

/** @file
 *  @brief QNN HTA component Performance Infrastructure API
 *
 *         Provides interface to the client to control performance and system
 *         settings of the QNN HTA Accelerator
 */

#ifndef QNN_HTA_PERF_INFRASTRUCTURE_H
#define QNN_HTA_PERF_INFRASTRUCTURE_H

#include "QnnCommon.h"
#include "QnnTypes.h"

#ifdef __cplusplus
extern "C" {
#endif

//=============================================================================
// Data Types
//=============================================================================

/**
 * @brief QNN HTA PerfInfrastructure API result / error codes.
 *
 */
typedef enum {
  QNN_HTA_PERF_INFRASTRUCTURE_MIN_ERROR = QNN_MIN_ERROR_PERF_INFRASTRUCTURE,
  ////////////////////////////////////////////////////////////////////////

  QNN_HTA_PERF_INFRASTRUCTURE_NO_ERROR                 = QNN_SUCCESS,
  QNN_HTA_PERF_INFRASTRUCTURE_ERROR_INVALID_HANDLE_PTR = QNN_MIN_ERROR_PERF_INFRASTRUCTURE + 0,
  QNN_HTA_PERF_INFRASTRUCTURE_ERROR_INVALID_INPUT      = QNN_MIN_ERROR_PERF_INFRASTRUCTURE + 1,
  QNN_HTA_PERF_INFRASTRUCTURE_ERROR_UNSUPPORTED_CONFIG = QNN_MIN_ERROR_PERF_INFRASTRUCTURE + 2,
  QNN_HTA_PERF_INFRASTRUCTURE_ERROR_TRANSPORT          = QNN_MIN_ERROR_PERF_INFRASTRUCTURE + 3,

  ////////////////////////////////////////////////////////////////////////
  QNN_HTA_PERF_INFRASTRUCTURE_MAX_ERROR = QNN_MAX_ERROR_PERF_INFRASTRUCTURE
} QnnHtaPerfInfrastructure_Error_t;

/**
 * @brief This enum defines all the possible performance
 *        options in Hta Performance Infrastructure that
 *        relate to setting up of power levels
 */
typedef enum {
  /// config enum implies the usage of powerModeConfig struct. If not provided
  /// will be used as type identificator
  QNN_HTA_PERF_INFRASTRUCTURE_POWER_CONFIGOPTION_POWER_MODE = 1,
  /// UNKNOWN config option which must not be used
  QNN_HTA_PERF_INFRASTRUCTURE_POWER_CONFIGOPTION_UNKNOWN = 0x7fffffff
} QnnHtaPerfInfrastructure_PowerConfigOption_t;

/**
 * @brief This enum defines all the possible power mode
 *        that a client can set
 */
typedef enum {
  /// default mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_DEFAULT = 0,
  /// low power saver mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_LOW_POWER_SAVER = 1,
  /// power saver mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_POWER_SAVER = 2,
  /// high power saver mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_HIGH_POWER_SAVER = 3,
  /// balanced mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_BALANCED = 4,
  /// high performance mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_HIGH_PERFORMANCE = 5,
  /// burst mode
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_BURST = 6,
  /// UNKNOWN value that must not be used by client
  QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_UNKNOWN = 0x7fffffff
} QnnHtaPerfInfrastructure_PowerMode_t;

/**
 * @brief This struct provides performance infrastructure configuration
 *         associated with setting up of power levels
 */
typedef struct {
  QnnHtaPerfInfrastructure_PowerConfigOption_t config;
  // Organize as union for future expand flexibility defined by PowerConfigOption_t
  union {
    QnnHtaPerfInfrastructure_PowerMode_t powerModeConfig;
  };
} QnnHtaPerfInfrastructure_PowerConfig_t;

/// QnnHtaPerfInfrastructure_PowerConfig_t initializer macro
#define QNN_HTA_PERF_INFRASTRUCTURE_POWER_CONFIG_INIT                   \
  {                                                                     \
    QNN_HTA_PERF_INFRASTRUCTURE_POWER_CONFIGOPTION_UNKNOWN, /*config*/  \
    {                                                                   \
      QNN_HTA_PERF_INFRASTRUCTURE_POWERMODE_UNKNOWN /*powerModeConfig*/ \
    }                                                                   \
  }

//=============================================================================
// API Methods
//=============================================================================

/**
 * @brief This API allows client to set up system power configuration that
 *        will enable different performance modes.
 *
 * @param[in] clientId A power client id to associate calls to system
 *            power settings. A value of 0 implies NULL power client id
 *            and can override every other setting the user process. To
 *            enable power settings for multiple clients in the same
 *            process, use a non-zero power client id.
 *
 *
 * @param[in] config Pointer to a NULL terminated array
 *            of config option for performance configuration.
 *            NULL is allowed and indicates no config options are provided.
 *
 * @return Error code
 *         \n QNN_SUCCESS: No error encountered
 */
typedef Qnn_ErrorHandle_t (*QnnHtaPerfInfrastructure_SetPowerConfigFn_t)(
    uint32_t clientId, const QnnHtaPerfInfrastructure_PowerConfig_t** config);

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // QNN_HTA_PERF_INFRASTRUCTURE_H