13f7c5e40SJason M. Bills /*
23f7c5e40SJason M. Bills // Copyright (c) 2017 2018 Intel Corporation
33f7c5e40SJason M. Bills //
43f7c5e40SJason M. Bills // Licensed under the Apache License, Version 2.0 (the "License");
53f7c5e40SJason M. Bills // you may not use this file except in compliance with the License.
63f7c5e40SJason M. Bills // You may obtain a copy of the License at
73f7c5e40SJason M. Bills //
83f7c5e40SJason M. Bills //      http://www.apache.org/licenses/LICENSE-2.0
93f7c5e40SJason M. Bills //
103f7c5e40SJason M. Bills // Unless required by applicable law or agreed to in writing, software
113f7c5e40SJason M. Bills // distributed under the License is distributed on an "AS IS" BASIS,
123f7c5e40SJason M. Bills // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f7c5e40SJason M. Bills // See the License for the specific language governing permissions and
143f7c5e40SJason M. Bills // limitations under the License.
153f7c5e40SJason M. Bills */
163f7c5e40SJason M. Bills 
173f7c5e40SJason M. Bills #pragma once
183f7c5e40SJason M. Bills #include <cstdint>
193f7c5e40SJason M. Bills #include <phosphor-ipmi-host/sensorhandler.hpp>
203f7c5e40SJason M. Bills 
213f7c5e40SJason M. Bills static constexpr uint8_t ipmiSdrVersion = 0x51;
223f7c5e40SJason M. Bills 
233f7c5e40SJason M. Bills #pragma pack(push, 1)
243f7c5e40SJason M. Bills struct GetSDRInfoResp
253f7c5e40SJason M. Bills {
263f7c5e40SJason M. Bills     uint8_t sdrVersion;
273f7c5e40SJason M. Bills     uint8_t recordCountLS;
283f7c5e40SJason M. Bills     uint8_t recordCountMS;
293f7c5e40SJason M. Bills     uint8_t freeSpace[2];
303f7c5e40SJason M. Bills     uint32_t mostRecentAddition;
313f7c5e40SJason M. Bills     uint32_t mostRecentErase;
323f7c5e40SJason M. Bills     uint8_t operationSupport;
333f7c5e40SJason M. Bills };
343f7c5e40SJason M. Bills 
353f7c5e40SJason M. Bills struct GetSDRReq
363f7c5e40SJason M. Bills {
373f7c5e40SJason M. Bills     uint16_t reservationID;
383f7c5e40SJason M. Bills     uint16_t recordID;
393f7c5e40SJason M. Bills     uint8_t offset;
403f7c5e40SJason M. Bills     uint8_t bytesToRead;
413f7c5e40SJason M. Bills };
423f7c5e40SJason M. Bills #pragma pack(pop)
433f7c5e40SJason M. Bills 
443f7c5e40SJason M. Bills enum class SdrRepositoryInfoOps : uint8_t
453f7c5e40SJason M. Bills {
463f7c5e40SJason M. Bills     allocCommandSupported = 0x1,
473f7c5e40SJason M. Bills     reserveSDRRepositoryCommandSupported = 0x2,
483f7c5e40SJason M. Bills     partialAddSDRSupported = 0x4,
493f7c5e40SJason M. Bills     deleteSDRSupported = 0x8,
503f7c5e40SJason M. Bills     reserved = 0x10,
513f7c5e40SJason M. Bills     modalLSB = 0x20,
523f7c5e40SJason M. Bills     modalMSB = 0x40,
533f7c5e40SJason M. Bills     overflow = 0x80
543f7c5e40SJason M. Bills };
553f7c5e40SJason M. Bills 
563f7c5e40SJason M. Bills #pragma pack(push, 1)
573f7c5e40SJason M. Bills struct GetAllocInfoResp
583f7c5e40SJason M. Bills {
593f7c5e40SJason M. Bills     uint8_t allocUnitsLSB;
603f7c5e40SJason M. Bills     uint8_t allocUnitsMSB;
613f7c5e40SJason M. Bills     uint8_t allocUnitSizeLSB;
623f7c5e40SJason M. Bills     uint8_t allocUnitSizeMSB;
633f7c5e40SJason M. Bills     uint8_t allocUnitFreeLSB;
643f7c5e40SJason M. Bills     uint8_t allocUnitFreeMSB;
653f7c5e40SJason M. Bills     uint8_t allocUnitLargestFreeLSB;
663f7c5e40SJason M. Bills     uint8_t allocUnitLargestFreeMSB;
673f7c5e40SJason M. Bills     uint8_t maxRecordSize;
683f7c5e40SJason M. Bills };
69*e2d1aee3SJason M. Bills 
70*e2d1aee3SJason M. Bills struct GetFRUAreaReq
71*e2d1aee3SJason M. Bills {
72*e2d1aee3SJason M. Bills     uint8_t fruDeviceID;
73*e2d1aee3SJason M. Bills     uint16_t fruInventoryOffset;
74*e2d1aee3SJason M. Bills     uint8_t countToRead;
75*e2d1aee3SJason M. Bills };
76*e2d1aee3SJason M. Bills 
77*e2d1aee3SJason M. Bills struct GetFRUAreaResp
78*e2d1aee3SJason M. Bills {
79*e2d1aee3SJason M. Bills     uint8_t inventorySizeLSB;
80*e2d1aee3SJason M. Bills     uint8_t inventorySizeMSB;
81*e2d1aee3SJason M. Bills     uint8_t accessType;
82*e2d1aee3SJason M. Bills };
83*e2d1aee3SJason M. Bills 
84*e2d1aee3SJason M. Bills struct WriteFRUDataReq
85*e2d1aee3SJason M. Bills {
86*e2d1aee3SJason M. Bills     uint8_t fruDeviceID;
87*e2d1aee3SJason M. Bills     uint16_t fruInventoryOffset;
88*e2d1aee3SJason M. Bills     uint8_t data[];
89*e2d1aee3SJason M. Bills };
903f7c5e40SJason M. Bills #pragma pack(pop)
913f7c5e40SJason M. Bills 
92*e2d1aee3SJason M. Bills enum class GetFRUAreaAccessType : uint8_t
93*e2d1aee3SJason M. Bills {
94*e2d1aee3SJason M. Bills     byte = 0x0,
95*e2d1aee3SJason M. Bills     words = 0x1
96*e2d1aee3SJason M. Bills };
97*e2d1aee3SJason M. Bills 
983f7c5e40SJason M. Bills enum class SensorTypeCodes : uint8_t
993f7c5e40SJason M. Bills {
1003f7c5e40SJason M. Bills     reserved = 0x0,
1013f7c5e40SJason M. Bills     temperature = 0x1,
1023f7c5e40SJason M. Bills     voltage = 0x2,
1033f7c5e40SJason M. Bills     current = 0x3,
1043f7c5e40SJason M. Bills     fan = 0x4,
1053f7c5e40SJason M. Bills     other = 0xB,
1063f7c5e40SJason M. Bills };
1073f7c5e40SJason M. Bills 
1083f7c5e40SJason M. Bills enum class SensorUnits : uint8_t
1093f7c5e40SJason M. Bills {
1103f7c5e40SJason M. Bills     unspecified = 0x0,
1113f7c5e40SJason M. Bills     degreesC = 0x1,
1123f7c5e40SJason M. Bills     volts = 0x4,
1133f7c5e40SJason M. Bills     amps = 0x5,
1143f7c5e40SJason M. Bills     watts = 0x6,
1153f7c5e40SJason M. Bills     rpm = 0x12,
1163f7c5e40SJason M. Bills };
1173f7c5e40SJason M. Bills 
1183f7c5e40SJason M. Bills enum class IPMINetfnStorageCmds : ipmi_cmd_t
1193f7c5e40SJason M. Bills {
1203f7c5e40SJason M. Bills     ipmiCmdGetFRUInvAreaInfo = 0x10,
1213f7c5e40SJason M. Bills     ipmiCmdReadFRUData = 0x11,
1223f7c5e40SJason M. Bills     ipmiCmdWriteFRUData = 0x12,
1233f7c5e40SJason M. Bills     ipmiCmdGetRepositoryInfo = 0x20,
1243f7c5e40SJason M. Bills     ipmiCmdGetSDRAllocationInfo = 0x21,
1253f7c5e40SJason M. Bills     ipmiCmdReserveSDR = 0x22,
1263f7c5e40SJason M. Bills     ipmiCmdGetSDR = 0x23,
1273f7c5e40SJason M. Bills     ipmiCmdGetSELInfo = 0x40,
1283f7c5e40SJason M. Bills     ipmiCmdReserveSEL = 0x42,
1293f7c5e40SJason M. Bills     ipmiCmdGetSELEntry = 0x43,
1303f7c5e40SJason M. Bills     ipmiCmdAddSEL = 0x44,
1313f7c5e40SJason M. Bills     ipmiCmdDeleteSEL = 0x46,
1323f7c5e40SJason M. Bills     ipmiCmdClearSEL = 0x47,
1333f7c5e40SJason M. Bills     ipmiCmdGetSELTime = 0x48,
1343f7c5e40SJason M. Bills     ipmiCmdSetSELTime = 0x49,
1353f7c5e40SJason M. Bills };
1363f7c5e40SJason M. Bills 
137*e2d1aee3SJason M. Bills #pragma pack(push, 1)
138*e2d1aee3SJason M. Bills struct FRUHeader
139*e2d1aee3SJason M. Bills {
140*e2d1aee3SJason M. Bills     uint8_t commonHeaderFormat;
141*e2d1aee3SJason M. Bills     uint8_t internalOffset;
142*e2d1aee3SJason M. Bills     uint8_t chassisOffset;
143*e2d1aee3SJason M. Bills     uint8_t boardOffset;
144*e2d1aee3SJason M. Bills     uint8_t productOffset;
145*e2d1aee3SJason M. Bills     uint8_t multiRecordOffset;
146*e2d1aee3SJason M. Bills     uint8_t pad;
147*e2d1aee3SJason M. Bills     uint8_t checksum;
148*e2d1aee3SJason M. Bills };
149*e2d1aee3SJason M. Bills #pragma pack(pop)
150*e2d1aee3SJason M. Bills 
1513f7c5e40SJason M. Bills namespace ipmi
1523f7c5e40SJason M. Bills {
1533f7c5e40SJason M. Bills namespace storage
1543f7c5e40SJason M. Bills {
1553f7c5e40SJason M. Bills ipmi_ret_t getFruSdrs(size_t index, get_sdr::SensorDataFruRecord& resp);
1563f7c5e40SJason M. Bills 
1573f7c5e40SJason M. Bills ipmi_ret_t getFruSdrCount(size_t& count);
1583f7c5e40SJason M. Bills } // namespace storage
1593f7c5e40SJason M. Bills } // namespace ipmi
160