diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..ea71ad6
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,99 @@
+---
+Language:        Cpp
+# BasedOnStyle:  LLVM
+AccessModifierOffset: -2
+AlignAfterOpenBracket: Align
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: false
+AlignOperands:   true
+AlignTrailingComments: true
+AllowAllParametersOfDeclarationOnNextLine: true
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterDefinitionReturnType: None
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: false
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: true
+BinPackParameters: true
+BraceWrapping:
+  AfterClass:      true
+  AfterControlStatement: true
+  AfterEnum:       true
+  AfterFunction:   true
+  AfterNamespace:  true
+  AfterObjCDeclaration: true
+  AfterStruct:     true
+  AfterUnion:      true
+  BeforeCatch:     true
+  BeforeElse:      true
+  IndentBraces:    false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Custom
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializers: AfterColon
+ColumnLimit:     80
+CommentPragmas:  '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+PointerAlignment: Left
+DisableFormat:   false
+ExperimentalAutoDetectBinPacking: false
+FixNamespaceComments: true
+ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+IncludeBlocks: Regroup
+IncludeCategories:
+  - Regex:           '^[<"](gtest|gmock)'
+    Priority:        5
+  - Regex:           '^"config.h"'
+    Priority:        -1
+  - Regex:           '^".*\.hpp"'
+    Priority:        1
+  - Regex:           '^<.*\.h>'
+    Priority:        2
+  - Regex:           '^<.*'
+    Priority:        3
+  - Regex:           '.*'
+    Priority:        4
+IndentCaseLabels: true
+IndentWidth:     4
+IndentWrappedFunctionNames: true
+KeepEmptyLinesAtTheStartOfBlocks: true
+MacroBlockBegin: ''
+MacroBlockEnd:   ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: true
+PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 60
+ReflowComments:  true
+SortIncludes:    true
+SortUsingDeclarations: true
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles:  false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard:        Cpp11
+TabWidth:        4
+UseTab:          Never
+...
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8f71f43
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   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.
+
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..e674c6d
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,45 @@
+How to use this list:
+    Find the most specific section entry (described below) that matches where
+    your change lives and add the reviewers (R) and maintainers (M) as
+    reviewers. You can use the same method to track down who knows a particular
+    code base best.
+
+    Your change/query may span multiple entries; that is okay.
+
+    If you do not find an entry that describes your request at all, someone
+    forgot to update this list; please at least file an issue or send an email
+    to a maintainer, but preferably you should just update this document.
+
+Description of section entries:
+
+    Section entries are structured according to the following scheme:
+
+    X:  NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>
+    X:  ...
+    .
+    .
+    .
+
+    Where REPO_NAME is the name of the repository within the OpenBMC GitHub
+    organization; FILE_PATH is a file path within the repository, possibly with
+    wildcards; X is a tag of one of the following types:
+
+    M:  Denotes maintainer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>;
+        if omitted from an entry, assume one of the maintainers from the
+        MAINTAINERS entry.
+    R:  Denotes reviewer; has fields NAME <EMAIL_USERNAME@DOMAIN> <IRC_USERNAME!>;
+        these people are to be added as reviewers for a change matching the repo
+        path.
+    F:  Denotes forked from an external repository; has fields URL.
+
+    Line comments are to be denoted "# SOME COMMENT" (typical shell style
+    comment); it is important to follow the correct syntax and semantics as we
+    may want to use automated tools with this file in the future.
+
+    A change cannot be added to an OpenBMC repository without a MAINTAINER's
+    approval; thus, a MAINTAINER should always be listed as a reviewer.
+
+START OF MAINTAINERS LIST
+-------------------------
+
+M:  Ben Pai <ben_pai@wistron.com> <benpai!>
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..92c93da
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,17 @@
+libwistronoemdir = ${libdir}/ipmid-providers
+libwistronoem_LTLIBRARIES = libwistronoem.la
+
+libwistronoem_la_SOURCES = wistronoem.cpp \
+                           smbus.cpp
+
+libwistronoem_la_LDFLAGS = $(SYSTEMD_LIBS)\
+                           $(SDBUSPLUS_LIBS) \
+                           $(LIBIPMID_LIBS) \
+                           $(LIBIPMID_HOST_LIBS) \
+                           -version-info 0:0:0 -shared
+
+libwistronoem_la_CXXFLAGS = $(SYSTEMD_CFLAGS) \
+                            $(SDBUSPLUS_CFLAGS) \
+                            $(LIBIPMID_CFLAGS) \
+                            $(LIBIPMID_HOST_CFLAGS) \
+                            $(AM_CXXFLAGS)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c1e7efa
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# wistron-ipmi-oem
+
+## Supported Commands
+- Detect the presence of Riser-F
+
+## Command Documentation
+
+### Detect the presence of Riser-F
+Netfun: 0x32
+Command: 0x01
+
+On the mihawk platform, different riser cards can be supported. In order to be
+able to distinguish the currently used riser cards, we design an ipmi-oem
+command to detect riser cards.
+
+If the current riser-F is used, i2c command will get a data. If other riser
+cards are used, the i2c command will not get the data and will get a negative
+return value.
+
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100644
index 0000000..50b75b7
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+AUTOCONF_FILES="Makefile.in aclocal.m4 ar-lib autom4te.cache compile \
+        config.guess config.h.in config.sub configure depcomp install-sh \
+        ltmain.sh missing *libtool test-driver"
+
+case $1 in
+    clean)
+        test -f Makefile && make maintainer-clean
+        for file in ${AUTOCONF_FILES}; do
+            find -name "$file" | xargs -r rm -rf
+        done
+        exit 0
+        ;;
+esac
+
+autoreconf -i
+echo 'Run "./configure ${CONFIGURE_FLAGS} && make"'
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..3580d74
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,27 @@
+# Initialization
+AC_PREREQ([2.69])
+AC_INIT([openpower-host-ipmi-oem], [1.0], [https://github.com/wistron-corporation/wistron-ipmi-oem/issues])
+AC_CONFIG_HEADERS([config.h])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_SILENT_RULES([yes])
+AC_LANG([C++])
+
+# Checks for programs.
+AC_PROG_CXX
+AM_PROG_AR
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_17([noext])
+AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
+
+# Checks for libraries.
+PKG_CHECK_MODULES([LIBIPMID], [libipmid])
+
+# Checks for library functions.
+LT_INIT # Required for systemd linking
+
+# Create configured output
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
\ No newline at end of file
diff --git a/i2c.h b/i2c.h
new file mode 100644
index 0000000..55dc23c
--- /dev/null
+++ b/i2c.h
@@ -0,0 +1,57 @@
+#include <linux/i2c-dev.h>
+#include <linux/i2c.h>
+#include <linux/types.h>
+#include <stddef.h>
+#include <sys/ioctl.h>
+
+/*
+ * Data for SMBus Messages
+ */
+#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */
+#define I2C_DATA_MAX 256
+
+/* smbus_access read or write markers */
+#define I2C_SMBUS_READ 1
+#define I2C_SMBUS_WRITE 0
+
+/* SMBus transaction types (size parameter in the above functions)
+   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
+#define I2C_SMBUS_BYTE_DATA 2
+
+/* NOTE: Slave address is 7 or 10 bits, but 10-bit addresses
+ * are NOT supported! (due to code brokenness)
+ */
+#define I2C_SLAVE 0x0703 /* Use this slave address */
+#define I2C_SLAVE_FORCE 0x0706
+#define I2C_SMBUS 0x0720 /* SMBus transfer */
+
+static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command,
+                                     int size, union i2c_smbus_data* data)
+{
+    struct i2c_smbus_ioctl_data args;
+
+    args.read_write = read_write;
+    args.command = command;
+    args.size = size;
+    args.data = data;
+    return ioctl(file, I2C_SMBUS, &args);
+}
+
+static inline __s32 i2c_smbus_write_byte_data(int file, __u8 command,
+                                              __u8 value)
+{
+    union i2c_smbus_data data;
+    data.byte = value;
+    return i2c_smbus_access(file, I2C_SMBUS_WRITE, command, I2C_SMBUS_BYTE_DATA,
+                            &data);
+}
+
+static inline __s32 i2c_smbus_read_byte_data(int file, __u8 command)
+{
+    union i2c_smbus_data data;
+    if (i2c_smbus_access(file, I2C_SMBUS_READ, command, I2C_SMBUS_BYTE_DATA,
+                         &data))
+        return -1;
+    else
+        return 0x0FF & data.byte;
+}
diff --git a/smbus.cpp b/smbus.cpp
new file mode 100644
index 0000000..80f7cac
--- /dev/null
+++ b/smbus.cpp
@@ -0,0 +1,177 @@
+#include "smbus.hpp"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+#include <iostream>
+#include <mutex>
+
+#include "i2c.h"
+
+#define MAX_I2C_BUS 30
+
+static int fd[MAX_I2C_BUS] = {0};
+
+namespace phosphor
+{
+namespace smbus
+{
+
+std::mutex gMutex;
+
+int phosphor::smbus::Smbus::open_i2c_dev(int i2cbus, char* filename,
+                                         size_t size, int quiet)
+{
+    int file;
+
+    snprintf(filename, size, "/dev/i2c/%d", i2cbus);
+    filename[size - 1] = '\0';
+    file = open(filename, O_RDWR);
+
+    if (file < 0 && (errno == ENOENT || errno == ENOTDIR))
+    {
+        sprintf(filename, "/dev/i2c-%d", i2cbus);
+        file = open(filename, O_RDWR);
+    }
+
+    if (file < 0 && !quiet)
+    {
+        if (errno == ENOENT)
+        {
+            fprintf(stderr,
+                    "Error: Could not open file "
+                    "`/dev/i2c-%d' or `/dev/i2c/%d': %s\n",
+                    i2cbus, i2cbus, strerror(ENOENT));
+        }
+        else
+        {
+            fprintf(stderr,
+                    "Error: Could not open file "
+                    "`%s': %s\n",
+                    filename, strerror(errno));
+            if (errno == EACCES)
+                fprintf(stderr, "Run as root?\n");
+        }
+    }
+
+    return file;
+}
+
+int phosphor::smbus::Smbus::smbusInit(int smbus_num)
+{
+    int res = 0;
+    char filename[20];
+
+    gMutex.lock();
+
+    fd[smbus_num] = open_i2c_dev(smbus_num, filename, sizeof(filename), 0);
+    if (fd[smbus_num] < 0)
+    {
+        gMutex.unlock();
+
+        return -1;
+    }
+
+    res = fd[smbus_num];
+
+    gMutex.unlock();
+
+    return res;
+}
+
+void phosphor::smbus::Smbus::smbusClose(int smbus_num)
+{
+    close(fd[smbus_num]);
+}
+
+int phosphor::smbus::Smbus::set_slave_addr(int file, int address, int force)
+{
+    /* With force, let the user read from/write to the registers
+       even when a driver is also running */
+    if (ioctl(file, force ? I2C_SLAVE_FORCE : I2C_SLAVE, address) < 0)
+    {
+        fprintf(stderr, "Error: Could not set address to 0x%02x: %s\n", address,
+                strerror(errno));
+        return -errno;
+    }
+
+    return 0;
+}
+
+int phosphor::smbus::Smbus::SetSmbusCmdByte(int smbus_num, int8_t device_addr,
+                                            int8_t smbuscmd, int8_t data)
+{
+    int res;
+
+    gMutex.lock();
+    if (fd[smbus_num] > 0)
+    {
+        res = set_slave_addr(fd[smbus_num], device_addr, I2C_SLAVE_FORCE);
+        if (res < 0)
+        {
+            fprintf(stderr,
+                    "set PMBUS BUS%d to slave address 0x%02X failed (%s)\n",
+                    smbus_num, device_addr, strerror(errno));
+            close(fd[smbus_num]);
+
+            gMutex.unlock();
+            return -1;
+        }
+    }
+
+    res = i2c_smbus_write_byte_data(fd[smbus_num], smbuscmd, data);
+    if (res < 0)
+    {
+        fprintf(stderr, "Error: Read failed\n");
+        gMutex.unlock();
+
+        return -1;
+    }
+
+    gMutex.unlock();
+    return res;
+}
+
+int phosphor::smbus::Smbus::GetSmbusCmdByte(int smbus_num, int8_t device_addr,
+                                            int8_t smbuscmd)
+{
+    int res;
+
+    gMutex.lock();
+    if (fd[smbus_num] > 0)
+    {
+        res = set_slave_addr(fd[smbus_num], device_addr, I2C_SLAVE_FORCE);
+
+        if (res < 0)
+        {
+            fprintf(stderr,
+                    "set PMBUS BUS%d to slave address 0x%02X failed (%s)\n",
+                    smbus_num, device_addr, strerror(errno));
+            close(fd[smbus_num]);
+
+            gMutex.unlock();
+            return -1;
+        }
+    }
+
+    res = i2c_smbus_read_byte_data(fd[smbus_num], smbuscmd);
+    if (res < 0)
+    {
+        fprintf(stderr, "Error: Read failed\n");
+        gMutex.unlock();
+
+        return -1;
+    }
+
+    gMutex.unlock();
+    return res;
+}
+
+} // namespace smbus
+} // namespace phosphor
diff --git a/smbus.hpp b/smbus.hpp
new file mode 100644
index 0000000..73e3e7e
--- /dev/null
+++ b/smbus.hpp
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+
+namespace phosphor
+{
+namespace smbus
+{
+
+class Smbus
+{
+  public:
+    Smbus(){};
+
+    int open_i2c_dev(int i2cbus, char* filename, size_t size, int quiet);
+
+    int smbusInit(int smbus_num);
+
+    int set_slave_addr(int file, int address, int force);
+
+    int SetSmbusCmdByte(int smbus_num, int8_t device_addr, int8_t smbuscmd,
+                        int8_t data);
+
+    int GetSmbusCmdByte(int smbus_num, int8_t device_addr, int8_t smbuscmd);
+
+    void smbusClose(int smbus_num);
+};
+
+} // namespace smbus
+} // namespace phosphor
diff --git a/wistronoem.cpp b/wistronoem.cpp
new file mode 100644
index 0000000..756fac5
--- /dev/null
+++ b/wistronoem.cpp
@@ -0,0 +1,94 @@
+#include "config.h"
+
+#include "wistronoem.hpp"
+
+#include "smbus.hpp"
+
+#include <endian.h>
+#include <ipmid/api.h>
+#include <stdio.h>
+#include <string.h>
+#include <systemd/sd-bus.h>
+
+#include <fstream>
+#include <functional>
+#include <iostream>
+#include <ipmid-host/cmd.hpp>
+#include <memory>
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/exception.hpp>
+
+#include "i2c.h"
+
+#define SWITCH_SLAVE_ADDRESS 112 /* Hexadecimal value:0x70 */
+#define RISERF_SLAVE_ADDRESS 16  /* Hexadecimal value:0x10 */
+
+void register_detect_riserf() __attribute__((constructor));
+
+ipmi_ret_t ipmi_wistron_detect_riserf(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+                                      ipmi_request_t request,
+                                      ipmi_response_t response,
+                                      ipmi_data_len_t data_len,
+                                      ipmi_context_t context)
+{
+    phosphor::smbus::Smbus smbus;
+
+    auto init_cp0 = smbus.smbusInit(9);
+    if (init_cp0 == initError)
+    {
+        std::cerr << "smbusInit fail!"
+                  << "\n";
+        return false;
+    }
+    smbus.SetSmbusCmdByte(9, SWITCH_SLAVE_ADDRESS, 0, 8);
+    auto res_cp0 = smbus.GetSmbusCmdByte(9, RISERF_SLAVE_ADDRESS, command);
+
+    auto init_cp1 = smbus.smbusInit(10);
+    if (init_cp1 == initError)
+    {
+        std::cerr << "smbusInit fail!"
+                  << "\n";
+        return false;
+    }
+    smbus.SetSmbusCmdByte(10, SWITCH_SLAVE_ADDRESS, 0, 8);
+    auto res_cp1 = smbus.GetSmbusCmdByte(10, RISERF_SLAVE_ADDRESS, command);
+
+    // CPU0 & CPU1 are not present.
+    if (res_cp0 < 0 && res_cp1 < 0)
+    {
+        *data_len = sizeof(a);
+        memcpy(response, &a, *data_len);
+    }
+
+    // CPU0 isn't present but CPU1 is present.
+    if (res_cp0 < 0 && res_cp1 >= 0)
+    {
+        *data_len = sizeof(b);
+        memcpy(response, &b, *data_len);
+    }
+
+    // CPU0 is present but CPU1 isn't present.
+    if (res_cp0 >= 0 && res_cp1 < 0)
+    {
+        *data_len = sizeof(c);
+        memcpy(response, &c, *data_len);
+    }
+
+    // CPU0 & CPU1 are present.
+    if (res_cp0 >= 0 && res_cp1 >= 0)
+    {
+        *data_len = sizeof(d);
+        memcpy(response, &d, *data_len);
+    }
+
+    smbus.smbusClose(9);
+    smbus.smbusClose(10);
+
+    return IPMI_CC_OK;
+}
+
+void register_detect_riserf()
+{
+    ipmi_register_callback(NETFUN_OEM, IPMI_CMD_DETECT_RISERF, NULL,
+                           ipmi_wistron_detect_riserf, SYSTEM_INTERFACE);
+}
diff --git a/wistronoem.hpp b/wistronoem.hpp
new file mode 100644
index 0000000..e9edd13
--- /dev/null
+++ b/wistronoem.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#include <ipmid/api.h>
+#include <stdint.h>
+
+#include <map>
+#include <string>
+
+// IPMI commands for net functions.
+enum ipmi_netfn_oem_cmds
+{
+    IPMI_CMD_DETECT_RISERF = 0x01,
+};
+
+constexpr int initError = -1;        /* The parameter of definition error */
+constexpr unsigned char command = 0; /* The parameter of smbus command */
+constexpr unsigned char a[] = {
+    0x00, 0x00}; /* The response data : CPU0 & CPU1 are not present */
+constexpr unsigned char b[] = {
+    0x00, 0x01}; /* The response data : CPU1 is present but CPU0 isn't */
+constexpr unsigned char c[] = {
+    0x01, 0x00}; /* The response data : CPU0 is present but CPU1 isn't */
+constexpr unsigned char d[] = {
+    0x01, 0x01}; /* The response data : CPU0 & CPU1 are present */
+
+ipmi_ret_t ipmi_wistron_detect_riserf(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+                                      ipmi_request_t request,
+                                      ipmi_response_t response,
+                                      ipmi_data_len_t data_len,
+                                      ipmi_context_t context);
