blob: 4b7d993561c2407d7484437862504ba244474308 [file] [edit]
/*
* SPDX-FileCopyrightText: Copyright OpenBMC Authors
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
#include <MctpRequester.hpp>
#include <NvidiaGpuLongRunningCommand.hpp>
#include <NvidiaLongRunningHandler.hpp>
#include <SerialQueue.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <cstdint>
#include <memory>
#include <span>
#include <string>
struct NvidiaGpuViolationDuration
{
public:
NvidiaGpuViolationDuration(mctp::MctpRequester& mctpRequester,
sdbusplus::asio::object_server& objectServer,
const std::string& deviceName, uint8_t eid,
std::shared_ptr<SerialQueue> longRunningQueue,
std::shared_ptr<NvidiaLongRunningResponseHandler>
longRunningResponseHandler);
void update();
private:
static void onImmediateSuccess(
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
powerMetricInterface,
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
thermalMetricInterface,
uint8_t eid, std::span<const uint8_t> buffer);
static void onLongRunningPayload(
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
powerMetricInterface,
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
thermalMetricInterface,
uint8_t eid, std::span<const uint8_t> payload);
static void applyDurations(
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
powerMetricInterface,
const std::shared_ptr<sdbusplus::asio::dbus_interface>&
thermalMetricInterface,
uint64_t powerViolationNs, uint64_t thermalViolationNs);
std::shared_ptr<sdbusplus::asio::dbus_interface> powerMetricInterface;
std::shared_ptr<sdbusplus::asio::dbus_interface>
powerMetricAssociationInterface;
std::shared_ptr<sdbusplus::asio::dbus_interface> thermalMetricInterface;
std::shared_ptr<sdbusplus::asio::dbus_interface>
thermalMetricAssociationInterface;
std::shared_ptr<NvidiaGpuLongRunningCommand> cmd;
};