IPMI OEM Commands for OOB bios config

Four IPMI OEM commands are defined and implemented for the
communication beteween BIOS and BMC.
cmdSetBIOSCap = 0xD3;
cmdGetBIOSCap = 0xD4;
cmdSetPayload = 0xD5;
cmdGetPayload = 0xD6;
cmdSetPasswordHashInfo = 0xD7;
cmdGetStoredPasswordHash = 0xD8;

Added the OTA Payload Type

Tested:
1. ipmitool is working well for these 6 commands
2. passed unit test w/ bios and bios.xml is generated successfully

Change-Id: Ic318c18ca6d59c3ad6e10df9ffb2b22a38a55ddf
Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
Signed-off-by: Suryakanth Sekar <suryakanth.sekar@linux.intel.com>
diff --git a/include/biosconfigcommands.hpp b/include/biosconfigcommands.hpp
new file mode 100644
index 0000000..253c357
--- /dev/null
+++ b/include/biosconfigcommands.hpp
@@ -0,0 +1,90 @@
+/*
+// Copyright (c) 2020 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 <array>
+#include <fstream>
+#include <iostream>
+#include <string>
+#include <variant>
+#include <vector>
+
+constexpr uint8_t maxPayloadSupported = 0x6;
+constexpr uint8_t maxHashSize = 64;
+constexpr uint8_t maxSeedSize = 16;
+constexpr uint8_t maxPasswordSize = 64;
+
+#pragma pack(push, 1)
+struct PayloadStartTransfer
+{
+    uint16_t payloadVersion;
+    uint32_t payloadTotalSize;
+    uint32_t payloadTotalChecksum;
+    uint8_t payloadFlag;
+};
+#pragma pack(pop)
+
+struct PayloadInProgress
+{
+    uint32_t payloadReservationID;
+    uint32_t payloadOffset;
+    uint32_t payloadCurrentSize;
+    uint32_t payloadCurrentChecksum;
+};
+
+struct PayloadEndTransfer
+{
+    uint32_t payloadReservationID;
+};
+
+struct SetPayloadRetValue
+{
+    uint32_t reservationToken;
+    uint32_t actualPayloadWritten;
+    uint32_t actualTotalPayloadWritten;
+};
+
+struct setBIOSCapabilitiesReq
+{
+    uint8_t OOBCapability;
+    uint8_t reserved1;
+    uint8_t reserved2;
+    uint8_t reserved3;
+};
+
+struct PayloadInfo
+{
+    uint32_t payloadReservationID;
+    uint8_t payloadType;
+    uint16_t payloadVersion;
+    uint32_t payloadTotalSize;
+    uint32_t payloadTotalChecksum;
+    uint8_t payloadStatus;
+    uint8_t payloadflag;
+    uint32_t payloadTimeStamp;
+    uint32_t payloadCurrentSize;
+    uint32_t payloadCurrentChecksum;
+    uint32_t actualTotalPayloadWritten;
+    std::string payloadFilePath;
+};
+
+struct NVOOBdata
+{
+    setBIOSCapabilitiesReq mBIOSCapabilities;
+    uint8_t mIsBIOSCapInitDone;
+    PayloadInfo payloadInfo[maxPayloadSupported];
+};