#include "opensbi/extensions/pmu.h" namespace drivers { namespace opensbi::pmu { namespace { enum class ExtensionId { PMU = 0x504D55 }; enum class FunctionId { NUM_COUNTERS, COUNTER_GET_INFO, COUNTER_CONFIG_MATCHING, COUNTER_START, COUNTER_STOP, COUNTER_FW_READ }; } SbiRet num_counters() { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::NUM_COUNTERS)); } SbiRet counter_get_info(unsigned long counter_idx) { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::COUNTER_GET_INFO), counter_idx); } SbiRet counter_config_matching( unsigned long counter_idx_base, unsigned long counter_idx_mask, unsigned long config_flags, unsigned long event_idx, uint64_t event_data) { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::COUNTER_CONFIG_MATCHING), counter_idx_base, counter_idx_mask, config_flags, event_idx, event_data); } SbiRet counter_start( unsigned long counter_idx_base, unsigned long counter_idx_mask, unsigned long start_flags, uint64_t initial_value) { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::COUNTER_START), counter_idx_base, counter_idx_mask, start_flags, initial_value); } SbiRet counter_stop( unsigned long counter_idx_base, unsigned long counter_idx_mask, unsigned long stop_flags) { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::COUNTER_STOP), counter_idx_base, counter_idx_mask, stop_flags); } SbiRet counter_fw_read(unsigned long counter_idx) { return ecall( static_cast(ExtensionId::PMU), static_cast(FunctionId::COUNTER_FW_READ), counter_idx); } } // End namespace opensbi::pmu } // End namespace drivers