Add Intel-specific IPMI FRU commands

Includes commands that are required to support the 'ipmitool
fru print' command.

Change-Id: If7768de1441cc620ad6db4c99c4254305cf5bbbc
Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
diff --git a/include/storagecommands.hpp b/include/storagecommands.hpp
index ef32c74..0d32ea5 100644
--- a/include/storagecommands.hpp
+++ b/include/storagecommands.hpp
@@ -66,8 +66,35 @@
     uint8_t allocUnitLargestFreeMSB;
     uint8_t maxRecordSize;
 };
+
+struct GetFRUAreaReq
+{
+    uint8_t fruDeviceID;
+    uint16_t fruInventoryOffset;
+    uint8_t countToRead;
+};
+
+struct GetFRUAreaResp
+{
+    uint8_t inventorySizeLSB;
+    uint8_t inventorySizeMSB;
+    uint8_t accessType;
+};
+
+struct WriteFRUDataReq
+{
+    uint8_t fruDeviceID;
+    uint16_t fruInventoryOffset;
+    uint8_t data[];
+};
 #pragma pack(pop)
 
+enum class GetFRUAreaAccessType : uint8_t
+{
+    byte = 0x0,
+    words = 0x1
+};
+
 enum class SensorTypeCodes : uint8_t
 {
     reserved = 0x0,
@@ -107,6 +134,20 @@
     ipmiCmdSetSELTime = 0x49,
 };
 
+#pragma pack(push, 1)
+struct FRUHeader
+{
+    uint8_t commonHeaderFormat;
+    uint8_t internalOffset;
+    uint8_t chassisOffset;
+    uint8_t boardOffset;
+    uint8_t productOffset;
+    uint8_t multiRecordOffset;
+    uint8_t pad;
+    uint8_t checksum;
+};
+#pragma pack(pop)
+
 namespace ipmi
 {
 namespace storage