From 192fb538be2cfb680382e5e2bb1f691d95ac06af Mon Sep 17 00:00:00 2001 From: Deepak Mewar Date: Fri, 6 Oct 2023 07:07:27 -0400 Subject: [PATCH] added metric table wrapper APIS & test code Change-Id: I24207b3c32d7294337140a1f5108b81f3bf33580 --- example/amdsmi_esmi_intg_example.cc | 34 ++++++++++++++++++++ include/amd_smi/amdsmi.h | 30 ++++++++++++++++++ src/amd_smi/amd_smi.cc | 49 +++++++++++++++++++++++++++-- 3 files changed, 111 insertions(+), 2 deletions(-) diff --git a/example/amdsmi_esmi_intg_example.cc b/example/amdsmi_esmi_intg_example.cc index 0bf65df0f7..28d4784121 100644 --- a/example/amdsmi_esmi_intg_example.cc +++ b/example/amdsmi_esmi_intg_example.cc @@ -49,6 +49,7 @@ #include #include "amd_smi/amdsmi.h" #include +#include using namespace std; @@ -624,6 +625,39 @@ int main(int argc, char **argv) { cout<<"| Current "<(esmi_socket_lclk_dpm_level_set(sock_ind, - nbio_id, min, max)); + status = static_cast(esmi_socket_lclk_dpm_level_set(sock_ind, nbio_id, min, max)); if (status != AMDSMI_STATUS_SUCCESS) return status; @@ -2813,6 +2812,52 @@ amdsmi_status_t amdsmi_get_cpu_current_xgmi_bw(amdsmi_cpusocket_handle socket_ha return AMDSMI_STATUS_SUCCESS; } +amdsmi_status_t amdsmi_get_metrics_table_version(amdsmi_cpusocket_handle socket_handle, + uint32_t *metrics_version) +{ + amdsmi_status_t status; + uint32_t metrics_tbl_ver; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_metrics_table_version_get(&metrics_tbl_ver)); + *metrics_version = metrics_tbl_ver; + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + +amdsmi_status_t amdsmi_get_metrics_table(amdsmi_cpusocket_handle socket_handle, uint8_t sock_ind, + struct hsmp_metric_table *metrics_table) +{ + amdsmi_status_t status; + struct hsmp_metric_table metrics_tbl; + + if (socket_handle == nullptr) + return AMDSMI_STATUS_INVAL; + + amd::smi::AMDSmiCpuSocket* socket = nullptr; + amdsmi_status_t r = get_cpu_socket_from_handle(socket_handle, &socket); + if (r != AMDSMI_STATUS_SUCCESS) + return r; + + status = static_cast(esmi_metrics_table_get(sock_ind, &metrics_tbl)); + *metrics_table = metrics_tbl; + + if (status != AMDSMI_STATUS_SUCCESS) + return status; + + return AMDSMI_STATUS_SUCCESS; +} + amdsmi_status_t amdsmi_get_number_of_cpu_sockets(uint32_t sockets) { amdsmi_status_t status = amd::smi::AMDSmiSystem::getInstance().get_cpu_sockets(sockets);