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