blob: d6d9b1333e9d85802785b9d043a1f85c83920ee8 [file] [log] [blame]
Nikhil Potadeb669b6b2019-03-13 10:52:21 -07001#pragma once
2
3#include <libmctp-smbus.h>
4#include <libmctp.h>
5
Zhikui Renf57836b2020-09-25 15:33:55 -07006#include <boost/asio/deadline_timer.hpp>
7#include <boost/asio/io_service.hpp>
8#include <boost/asio/ip/tcp.hpp>
Nikhil Potadeb669b6b2019-03-13 10:52:21 -07009#include <sensor.hpp>
10
11class NVMeSensor : public Sensor
12{
13 public:
14 NVMeSensor(sdbusplus::asio::object_server& objectServer,
15 boost::asio::io_service& io,
16 std::shared_ptr<sdbusplus::asio::connection>& conn,
17 const std::string& sensorName,
18 std::vector<thresholds::Threshold>&& _thresholds,
19 const std::string& sensorConfiguration, const int busNumber);
20 virtual ~NVMeSensor();
21
22 NVMeSensor& operator=(const NVMeSensor& other) = delete;
23
Nikhil Potadeb669b6b2019-03-13 10:52:21 -070024 int bus;
25
26 private:
27 sdbusplus::asio::object_server& objServer;
28
29 void checkThresholds(void) override;
30};
31
32struct NVMeContext : std::enable_shared_from_this<NVMeContext>
33{
34 NVMeContext(boost::asio::io_service& io, int rootBus);
35
36 virtual ~NVMeContext();
37
38 void pollNVMeDevices();
James Feist375ade22020-07-16 16:32:10 -070039 void close();
Nikhil Potadeb669b6b2019-03-13 10:52:21 -070040
41 boost::asio::deadline_timer scanTimer;
42 int rootBus; // Root bus for this drive
43 boost::asio::deadline_timer mctpResponseTimer;
44 boost::asio::ip::tcp::socket nvmeSlaveSocket;
45 std::list<std::shared_ptr<NVMeSensor>> sensors; // used as a poll queue
46};
47
48using NVMEMap = boost::container::flat_map<int, std::shared_ptr<NVMeContext>>;
49
50int verifyIntegrity(uint8_t* msg, size_t len);
51
52namespace nvmeMCTP
53{
54void init(void);
55}
56
57NVMEMap& getNVMEMap(void);