blob: e095dd9d868b4bf7957fb2cbf3810de0fff16b65 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RMAD_SSFC_SSFC_PROBER_H_
#define RMAD_SSFC_SSFC_PROBER_H_
#include <cstdint>
#include <map>
#include <memory>
#include <string>
#include "rmad/system/runtime_probe_client.h"
#include "rmad/utils/cbi_utils.h"
#include "rmad/utils/cros_config_utils.h"
namespace rmad {
class SsfcProber {
public:
SsfcProber() = default;
virtual ~SsfcProber() = default;
virtual bool IsSsfcRequired() const = 0;
virtual bool ProbeSsfc(uint32_t* ssfc) const = 0;
};
class SsfcProberImpl : public SsfcProber {
public:
SsfcProberImpl();
// Used to inject mocked |RuntimeProbeClient|, |CbiUtils| and
// |CrosConfigUtils| for testing.
explicit SsfcProberImpl(
std::unique_ptr<RuntimeProbeClient> runtime_probe_client,
std::unique_ptr<CbiUtils> cbi_utils,
std::unique_ptr<CrosConfigUtils> cros_config_utils);
~SsfcProberImpl() override = default;
bool IsSsfcRequired() const override { return ssfc_required_; }
bool ProbeSsfc(uint32_t* ssfc) const override;
private:
void Initialize();
std::unique_ptr<RuntimeProbeClient> runtime_probe_client_;
std::unique_ptr<CbiUtils> cbi_utils_;
std::unique_ptr<CrosConfigUtils> cros_config_utils_;
bool ssfc_required_;
SsfcConfig ssfc_config_;
};
} // namespace rmad
#endif // RMAD_SSFC_SSFC_PROBER_H_