diff --git a/include/ADCSensor.hpp b/include/ADCSensor.hpp
new file mode 100644
index 0000000..07c7893
--- /dev/null
+++ b/include/ADCSensor.hpp
@@ -0,0 +1,45 @@
+#pragma once
+
+#include <Thresholds.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+class ADCSensor
+{
+  public:
+    std::string name;
+    std::string configuration;
+    ADCSensor(const std::string &path,
+              sdbusplus::asio::object_server &objectServer,
+              std::shared_ptr<sdbusplus::asio::connection> &conn,
+              boost::asio::io_service &io, const std::string &sensor_name,
+              std::vector<thresholds::Threshold> &&thresholds,
+              const double scale_factor,
+              const std::string &sensorConfiguration);
+    ~ADCSensor();
+
+  private:
+    std::string path;
+    sdbusplus::asio::object_server &objServer;
+    std::vector<thresholds::Threshold> thresholds;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> sensor_interface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_warning;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_critical;
+    boost::asio::posix::stream_descriptor input_dev;
+    boost::asio::deadline_timer wait_timer;
+    boost::asio::streambuf read_buf;
+    double value;
+    int err_count;
+    double max_value;
+    double min_value;
+    double scale_factor;
+    void setup_read(void);
+    void handle_response(const boost::system::error_code &err);
+    void check_thresholds(void);
+    void update_value(const double &new_value);
+    void assert_thresholds(thresholds::Level level,
+                           thresholds::Direction direction, bool assert);
+    void set_initial_properties(
+        std::shared_ptr<sdbusplus::asio::connection> &conn);
+};
\ No newline at end of file
diff --git a/include/CPUSensor.hpp b/include/CPUSensor.hpp
new file mode 100644
index 0000000..85ae831
--- /dev/null
+++ b/include/CPUSensor.hpp
@@ -0,0 +1,47 @@
+#pragma once
+
+#include <Thresholds.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+class CPUSensor
+{
+  private:
+    std::string path;
+    std::string objectType;
+    sdbusplus::asio::object_server &objServer;
+    std::shared_ptr<sdbusplus::asio::connection> dbusConnection;
+    std::string name;
+    std::vector<thresholds::Threshold> thresholds;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> sensor_interface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_warning;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_critical;
+    boost::asio::posix::stream_descriptor input_dev;
+    boost::asio::deadline_timer wait_timer;
+    boost::asio::streambuf read_buf;
+    double value;
+    int err_count;
+    double max_value;
+    double min_value;
+    void setup_read(void);
+    void handle_response(const boost::system::error_code &err);
+    void check_thresholds(void);
+    void update_value(const double &new_value);
+    void assert_thresholds(thresholds::Level level,
+                           thresholds::Direction direction, bool assert);
+    void set_initial_properties(
+        std::shared_ptr<sdbusplus::asio::connection> &conn);
+
+  public:
+    std::string configuration;
+    CPUSensor(const std::string &path, const std::string &objectType,
+              sdbusplus::asio::object_server &object_server,
+              std::shared_ptr<sdbusplus::asio::connection> &conn,
+              boost::asio::io_service &io, const std::string &fan_name,
+              std::vector<thresholds::Threshold> &&thresholds,
+              const std::string &configuration);
+    ~CPUSensor();
+    constexpr static unsigned int SENSOR_SCALE_FACTOR = 1000;
+    constexpr static unsigned int SENSOR_POLL_MS = 1000;
+};
diff --git a/include/HwmonTempSensor.hpp b/include/HwmonTempSensor.hpp
new file mode 100644
index 0000000..58eb534
--- /dev/null
+++ b/include/HwmonTempSensor.hpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include <Thresholds.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+class HwmonTempSensor
+{
+  public:
+    std::string name;
+    std::string configuration;
+    HwmonTempSensor(const std::string &path, const std::string &objectType,
+                    sdbusplus::asio::object_server &objectServer,
+                    std::shared_ptr<sdbusplus::asio::connection> &conn,
+                    boost::asio::io_service &io, const std::string &fan_name,
+                    std::vector<thresholds::Threshold> &&thresholds,
+                    const std::string &sensorConfiguration);
+    ~HwmonTempSensor();
+
+  private:
+    std::string path;
+    std::string objectType;
+    sdbusplus::asio::object_server &objServer;
+    std::vector<thresholds::Threshold> thresholds;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> sensor_interface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_warning;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_critical;
+    boost::asio::posix::stream_descriptor input_dev;
+    boost::asio::deadline_timer wait_timer;
+    boost::asio::streambuf read_buf;
+    double value;
+    int err_count;
+    double max_value;
+    double min_value;
+    void setup_read(void);
+    void handle_response(const boost::system::error_code &err);
+    void check_thresholds(void);
+    void update_value(const double &new_value);
+    void assert_thresholds(thresholds::Level level,
+                           thresholds::Direction direction, bool assert);
+    void set_initial_properties(
+        std::shared_ptr<sdbusplus::asio::connection> &conn);
+};
\ No newline at end of file
diff --git a/include/PwmSensor.hpp b/include/PwmSensor.hpp
new file mode 100644
index 0000000..9429099
--- /dev/null
+++ b/include/PwmSensor.hpp
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <sdbusplus/asio/object_server.hpp>
+
+class PwmSensor
+{
+  public:
+    PwmSensor(const std::string& sysPath,
+              sdbusplus::asio::object_server& objectServer);
+    ~PwmSensor();
+
+  private:
+    std::string sysPath;
+    sdbusplus::asio::object_server& objectServer;
+    std::string name;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> sensorInterface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> controlInterface;
+    void setValue(uint32_t value);
+    uint32_t getValue(bool errThrow = true);
+};
\ No newline at end of file
diff --git a/include/TachSensor.hpp b/include/TachSensor.hpp
new file mode 100644
index 0000000..2c8b535
--- /dev/null
+++ b/include/TachSensor.hpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include <Thresholds.hpp>
+#include <sdbusplus/asio/object_server.hpp>
+
+class TachSensor
+{
+  public:
+    std::string name;
+    std::string configuration;
+    TachSensor(const std::string &path,
+               sdbusplus::asio::object_server &objectServer,
+               std::shared_ptr<sdbusplus::asio::connection> &conn,
+               boost::asio::io_service &io, const std::string &fan_name,
+               std::vector<thresholds::Threshold> &&thresholds,
+               const std::string &sensorConfiguration);
+    ~TachSensor();
+
+  private:
+    std::string path;
+    sdbusplus::asio::object_server &objServer;
+    std::shared_ptr<sdbusplus::asio::connection> dbusConnection;
+    std::vector<thresholds::Threshold> thresholds;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> sensor_interface;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_warning;
+    std::shared_ptr<sdbusplus::asio::dbus_interface>
+        threshold_interface_critical;
+    boost::asio::posix::stream_descriptor input_dev;
+    boost::asio::deadline_timer wait_timer;
+    boost::asio::streambuf read_buf;
+    double value;
+    int err_count;
+    double max_value;
+    double min_value;
+    void setup_read(void);
+    void handle_response(const boost::system::error_code &err);
+    void check_thresholds(void);
+    void update_value(const double &new_value);
+    void assert_thresholds(thresholds::Level level,
+                           thresholds::Direction direction, bool assert);
+    void set_initial_properties(
+        std::shared_ptr<sdbusplus::asio::connection> &conn);
+};
diff --git a/include/Thresholds.hpp b/include/Thresholds.hpp
new file mode 100644
index 0000000..5b194c6
--- /dev/null
+++ b/include/Thresholds.hpp
@@ -0,0 +1,47 @@
+#pragma once
+#include <Utils.hpp>
+#include <nlohmann/json.hpp>
+
+namespace thresholds
+{
+enum Level
+{
+    WARNING,
+    CRITICAL
+};
+enum Direction
+{
+    HIGH,
+    LOW
+};
+struct Threshold
+{
+    Threshold(const Level &lev, const Direction &dir, const double &val,
+              bool write = true) :
+        level(lev),
+        direction(dir), value(val), writeable(write)
+    {
+    }
+    Level level;
+    Direction direction;
+    double value;
+    bool writeable;
+};
+
+bool ParseThresholdsFromConfig(
+    const SensorData &sensorData,
+    std::vector<thresholds::Threshold> &thresholdVector,
+    const std::string *matchLabel = nullptr);
+
+bool ParseThresholdsFromAttr(std::vector<thresholds::Threshold> &thresholds,
+                             const std::string &input_path,
+                             const double scale_factor);
+bool HasCriticalInterface(
+    const std::vector<thresholds::Threshold> &threshold_vector);
+bool HasWarningInterface(
+    const std::vector<thresholds::Threshold> &threshold_vector);
+
+void persistThreshold(const std::string &baseInterface, const std::string &path,
+                      const thresholds::Threshold &threshold,
+                      std::shared_ptr<sdbusplus::asio::connection> &conn);
+} // namespace thresholds
diff --git a/include/Utils.hpp b/include/Utils.hpp
new file mode 100644
index 0000000..0f1a5db
--- /dev/null
+++ b/include/Utils.hpp
@@ -0,0 +1,34 @@
+#pragma once
+#include <boost/container/flat_map.hpp>
+#include <experimental/filesystem>
+#include <iostream>
+#include <regex>
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/message/types.hpp>
+
+const constexpr char* JSON_STORE = "/var/configuration/flattened.json";
+const constexpr char* INVENTORY_PATH = "/xyz/openbmc_project/inventory";
+const constexpr char* ENTITY_MANAGER_NAME = "xyz.openbmc_project.EntityManager";
+const std::regex ILLEGAL_DBUS_REGEX("[^A-Za-z0-9_]");
+
+using BasicVariantType =
+    sdbusplus::message::variant<std::string, int64_t, uint64_t, double, int32_t,
+                                uint32_t, int16_t, uint16_t, uint8_t, bool>;
+
+using ManagedObjectType = boost::container::flat_map<
+    sdbusplus::message::object_path,
+    boost::container::flat_map<
+        std::string,
+        boost::container::flat_map<std::string, BasicVariantType>>>;
+using SensorData = boost::container::flat_map<
+    std::string, boost::container::flat_map<std::string, BasicVariantType>>;
+
+bool find_files(const std::experimental::filesystem::path dir_path,
+                const std::string& match_string,
+                std::vector<std::experimental::filesystem::path>& found_paths,
+                unsigned int symlink_depth = 1);
+bool isPowerOn(const std::shared_ptr<sdbusplus::asio::connection>& conn);
+bool getSensorConfiguration(
+    const std::string& type,
+    const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
+    ManagedObjectType& resp, bool useCache = false);
\ No newline at end of file
diff --git a/include/VariantVisitors.hpp b/include/VariantVisitors.hpp
new file mode 100644
index 0000000..8d4b004
--- /dev/null
+++ b/include/VariantVisitors.hpp
@@ -0,0 +1,75 @@
+/*
+// Copyright (c) 2018 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#pragma once
+#include <boost/variant.hpp>
+#include <string>
+
+struct VariantToFloatVisitor : public boost::static_visitor<float>
+{
+    template <typename T> float operator()(const T &t) const
+    {
+        return static_cast<float>(t);
+    }
+};
+template <>
+inline float VariantToFloatVisitor::
+    operator()<std::string>(const std::string &s) const
+{
+    throw std::invalid_argument("Cannot translate string to float");
+}
+
+struct VariantToIntVisitor : public boost::static_visitor<int>
+{
+    template <typename T> int operator()(const T &t) const
+    {
+        return static_cast<int>(t);
+    }
+};
+template <>
+inline int VariantToIntVisitor::
+    operator()<std::string>(const std::string &s) const
+{
+    throw std::invalid_argument("Cannot translate string to int");
+}
+
+struct VariantToUnsignedIntVisitor : public boost::static_visitor<unsigned int>
+{
+    template <typename T> unsigned int operator()(const T &t) const
+    {
+        return static_cast<int>(t);
+    }
+};
+template <>
+inline unsigned int VariantToUnsignedIntVisitor::
+    operator()<std::string>(const std::string &s) const
+{
+    throw std::invalid_argument("Cannot translate string to unsigned int");
+}
+
+struct VariantToStringVisitor : public boost::static_visitor<std::string>
+{
+    template <typename T> std::string operator()(const T &t) const
+    {
+        return std::to_string(t);
+    }
+};
+template <>
+inline std::string VariantToStringVisitor::
+    operator()<std::string>(const std::string &s) const
+{
+    return s;
+}
\ No newline at end of file
diff --git a/include/non-yocto/linux/peci-ioctl.h b/include/non-yocto/linux/peci-ioctl.h
new file mode 100644
index 0000000..9cddb8b
--- /dev/null
+++ b/include/non-yocto/linux/peci-ioctl.h
@@ -0,0 +1,247 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (c) 2018 Intel Corporation */
+
+#ifndef __PECI_IOCTL_H
+#define __PECI_IOCTL_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/* Base Address of 48d */
+#define PECI_BASE_ADDR  0x30  /* The PECI client's default address of 0x30 */
+#define PECI_OFFSET_MAX 8     /* Max numver of CPU clients */
+
+/* PCI Access */
+#define MAX_PCI_READ_LEN 24   /* Number of bytes of the PCI Space read */
+
+#define PCI_BUS0_CPU0      0x00
+#define PCI_BUS0_CPU1      0x80
+#define PCI_CPUBUSNO_BUS   0x00
+#define PCI_CPUBUSNO_DEV   0x08
+#define PCI_CPUBUSNO_FUNC  0x02
+#define PCI_CPUBUSNO       0xcc
+#define PCI_CPUBUSNO_1     0xd0
+#define PCI_CPUBUSNO_VALID 0xd4
+
+/* Package Identifier Read Parameter Value */
+#define PKG_ID_CPU_ID               0x0000  /* CPUID Info */
+#define PKG_ID_PLATFORM_ID          0x0001  /* Platform ID */
+#define PKG_ID_UNCORE_ID            0x0002  /* Uncore Device ID */
+#define PKG_ID_MAX_THREAD_ID        0x0003  /* Max Thread ID */
+#define PKG_ID_MICROCODE_REV        0x0004  /* CPU Microcode Update Revision */
+#define PKG_ID_MACHINE_CHECK_STATUS 0x0005  /* Machine Check Status */
+
+/* Crashdump Parameters */
+enum crashdump_agent {
+	CRASHDUMP_CORE = 0x00,
+	CRASHDUMP_TOR = 0x01,
+};
+enum crashdump_discovery_sub_opcode {
+	CRASHDUMP_ENABLED = 0x00,
+	CRASHDUMP_NUM_AGENTS = 0x01,
+	CRASHDUMP_AGENT_DATA = 0x02,
+};
+enum crashdump_agent_data_param {
+	CRASHDUMP_AGENT_ID = 0x00,
+	CRASHDUMP_AGENT_PARAM = 0x01,
+};
+enum crashdump_agent_param {
+	CRASHDUMP_PAYLOAD_SIZE = 0x00,
+};
+
+/* RdPkgConfig Index */
+#define MBX_INDEX_CPU_ID            0   /* Package Identifier Read */
+#define MBX_INDEX_VR_DEBUG          1   /* VR Debug */
+#define MBX_INDEX_PKG_TEMP_READ     2   /* Package Temperature Read */
+#define MBX_INDEX_ENERGY_COUNTER    3   /* Energy counter */
+#define MBX_INDEX_ENERGY_STATUS     4   /* DDR Energy Status */
+#define MBX_INDEX_WAKE_MODE_BIT     5   /* "Wake on PECI" Mode bit */
+#define MBX_INDEX_EPI               6   /* Efficient Performance Indication */
+#define MBX_INDEX_PKG_RAPL_PERF     8   /* Pkg RAPL Performance Status Read */
+#define MBX_INDEX_PER_CORE_DTS_TEMP 9   /* Per Core DTS Temperature Read */
+#define MBX_INDEX_DTS_MARGIN        10  /* DTS thermal margin */
+#define MBX_INDEX_SKT_PWR_THRTL_DUR 11  /* Socket Power Throttled Duration */
+#define MBX_INDEX_CFG_TDP_CONTROL   12  /* TDP Config Control */
+#define MBX_INDEX_CFG_TDP_LEVELS    13  /* TDP Config Levels */
+#define MBX_INDEX_DDR_DIMM_TEMP     14  /* DDR DIMM Temperature */
+#define MBX_INDEX_CFG_ICCMAX        15  /* Configurable ICCMAX */
+#define MBX_INDEX_TEMP_TARGET       16  /* Temperature Target Read */
+#define MBX_INDEX_CURR_CFG_LIMIT    17  /* Current Config Limit */
+#define MBX_INDEX_DIMM_TEMP_READ    20  /* Package Thermal Status Read */
+#define MBX_INDEX_DRAM_IMC_TMP_READ 22  /* DRAM IMC Temperature Read */
+#define MBX_INDEX_DDR_CH_THERM_STAT 23  /* DDR Channel Thermal Status */
+#define MBX_INDEX_PKG_POWER_LIMIT1  26  /* Package Power Limit1 */
+#define MBX_INDEX_PKG_POWER_LIMIT2  27  /* Package Power Limit2 */
+#define MBX_INDEX_TDP               28  /* Thermal design power minimum */
+#define MBX_INDEX_TDP_HIGH          29  /* Thermal design power maximum */
+#define MBX_INDEX_TDP_UNITS         30  /* Units for power/energy registers */
+#define MBX_INDEX_RUN_TIME          31  /* Accumulated Run Time */
+#define MBX_INDEX_CONSTRAINED_TIME  32  /* Thermally Constrained Time Read */
+#define MBX_INDEX_TURBO_RATIO       33  /* Turbo Activation Ratio */
+#define MBX_INDEX_DDR_RAPL_PL1      34  /* DDR RAPL PL1 */
+#define MBX_INDEX_DDR_PWR_INFO_HIGH 35  /* DRAM Power Info Read (high) */
+#define MBX_INDEX_DDR_PWR_INFO_LOW  36  /* DRAM Power Info Read (low) */
+#define MBX_INDEX_DDR_RAPL_PL2      37  /* DDR RAPL PL2 */
+#define MBX_INDEX_DDR_RAPL_STATUS   38  /* DDR RAPL Performance Status */
+#define MBX_INDEX_DDR_HOT_ABSOLUTE  43  /* DDR Hottest Dimm Absolute Temp */
+#define MBX_INDEX_DDR_HOT_RELATIVE  44  /* DDR Hottest Dimm Relative Temp */
+#define MBX_INDEX_DDR_THROTTLE_TIME 45  /* DDR Throttle Time */
+#define MBX_INDEX_DDR_THERM_STATUS  46  /* DDR Thermal Status */
+#define MBX_INDEX_TIME_AVG_TEMP     47  /* Package time-averaged temperature */
+#define MBX_INDEX_TURBO_RATIO_LIMIT 49  /* Turbo Ratio Limit Read */
+#define MBX_INDEX_HWP_AUTO_OOB      53  /* HWP Autonomous Out-of-band */
+#define MBX_INDEX_DDR_WARM_BUDGET   55  /* DDR Warm Power Budget */
+#define MBX_INDEX_DDR_HOT_BUDGET    56  /* DDR Hot Power Budget */
+#define MBX_INDEX_PKG_PSYS_PWR_LIM3 57  /* Package/Psys Power Limit3 */
+#define MBX_INDEX_PKG_PSYS_PWR_LIM1 58  /* Package/Psys Power Limit1 */
+#define MBX_INDEX_PKG_PSYS_PWR_LIM2 59  /* Package/Psys Power Limit2 */
+#define MBX_INDEX_PKG_PSYS_PWR_LIM4 60  /* Package/Psys Power Limit4 */
+#define MBX_INDEX_PERF_LIMIT_REASON 65  /* Performance Limit Reasons */
+
+/* WrPkgConfig Index */
+#define MBX_INDEX_DIMM_AMBIENT 19
+#define MBX_INDEX_DIMM_TEMP    24
+
+enum peci_cmd {
+	PECI_CMD_XFER = 0,
+	PECI_CMD_PING,
+	PECI_CMD_GET_DIB,
+	PECI_CMD_GET_TEMP,
+	PECI_CMD_RD_PKG_CFG,
+	PECI_CMD_WR_PKG_CFG,
+	PECI_CMD_RD_IA_MSR,
+	PECI_CMD_WR_IA_MSR,
+	PECI_CMD_RD_PCI_CFG,
+	PECI_CMD_WR_PCI_CFG,
+	PECI_CMD_RD_PCI_CFG_LOCAL,
+	PECI_CMD_WR_PCI_CFG_LOCAL,
+	PECI_CMD_CRASHDUMP_DISC,
+	PECI_CMD_CRASHDUMP_GET_FRAME,
+	PECI_CMD_MAX
+};
+
+struct peci_ping_msg {
+	__u8 addr;
+} __attribute__((__packed__));
+
+struct peci_get_dib_msg {
+	__u8  addr;
+	__u32 dib;
+} __attribute__((__packed__));
+
+struct peci_get_temp_msg {
+	__u8  addr;
+	__s16 temp_raw;
+} __attribute__((__packed__));
+
+struct peci_rd_pkg_cfg_msg {
+	__u8  addr;
+	__u8  index;
+	__u16 param;
+	__u8  rx_len;
+	__u8  pkg_config[4];
+} __attribute__((__packed__));
+
+struct peci_wr_pkg_cfg_msg {
+	__u8  addr;
+	__u8  index;
+	__u16 param;
+	__u8  tx_len;
+	__u32 value;
+} __attribute__((__packed__));
+
+struct peci_rd_ia_msr_msg {
+	__u8  addr;
+	__u8  thread_id;
+	__u16 address;
+	__u64 value;
+} __attribute__((__packed__));
+
+struct peci_rd_pci_cfg_msg {
+	__u8  addr;
+	__u8  bus;
+	__u8  device;
+	__u8  function;
+	__u16 reg;
+	__u8  pci_config[4];
+} __attribute__((__packed__));
+
+struct peci_rd_pci_cfg_local_msg {
+	__u8  addr;
+	__u8  bus;
+	__u8  device;
+	__u8  function;
+	__u16 reg;
+	__u8  rx_len;
+	__u8  pci_config[4];
+} __attribute__((__packed__));
+
+struct peci_wr_pci_cfg_local_msg {
+	__u8  addr;
+	__u8  bus;
+	__u8  device;
+	__u8  function;
+	__u16 reg;
+	__u8  tx_len;
+	__u32 value;
+} __attribute__((__packed__));
+
+struct peci_crashdump_disc_msg {
+	__u8  addr;
+	__u8  subopcode;
+	__u8  param0;
+	__u16 param1;
+	__u8  param2;
+	__u8  rx_len;
+	__u8  data[8];
+} __attribute__((__packed__));
+
+struct peci_crashdump_get_frame_msg {
+	__u8  addr;
+	__u16 param0;
+	__u16 param1;
+	__u16 param2;
+	__u8  rx_len;
+	__u8  data[16];
+} __attribute__((__packed__));
+
+#define PECI_IOC_BASE  0xb6
+
+#define PECI_IOC_PING \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_PING, struct peci_ping_msg)
+
+#define PECI_IOC_GET_DIB \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_GET_DIB, struct peci_get_dib_msg)
+
+#define PECI_IOC_GET_TEMP \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_GET_TEMP, struct peci_get_temp_msg)
+
+#define PECI_IOC_RD_PKG_CFG \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PKG_CFG, struct peci_rd_pkg_cfg_msg)
+
+#define PECI_IOC_WR_PKG_CFG \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_WR_PKG_CFG, struct peci_wr_pkg_cfg_msg)
+
+#define PECI_IOC_RD_IA_MSR \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_RD_IA_MSR, struct peci_rd_ia_msr_msg)
+
+#define PECI_IOC_RD_PCI_CFG \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG, struct peci_rd_pci_cfg_msg)
+
+#define PECI_IOC_RD_PCI_CFG_LOCAL \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_RD_PCI_CFG_LOCAL, \
+	      struct peci_rd_pci_cfg_local_msg)
+
+#define PECI_IOC_WR_PCI_CFG_LOCAL \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_WR_PCI_CFG_LOCAL, \
+	      struct peci_wr_pci_cfg_local_msg)
+
+#define PECI_IOC_CRASHDUMP_DISC \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_DISC, \
+	      struct peci_crashdump_disc_msg)
+
+#define PECI_IOC_CRASHDUMP_GET_FRAME \
+	_IOWR(PECI_IOC_BASE, PECI_CMD_CRASHDUMP_GET_FRAME, \
+	      struct peci_crashdump_get_frame_msg)
+
+#endif /* __PECI_IOCTL_H */
