/* // Copyright (c) 2018 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 <ipmid/api.h> #include <oemcommands.hpp> constexpr uint8_t maxDirEntries = 4; constexpr uint16_t msgPayloadSize = 1024 * 60; constexpr uint32_t smbiosTableStorageSize = 64 * 1024; constexpr uint32_t mdriiSMSize = 0x00100000; struct DataIdStruct { uint8_t dataInfo[16]; } __attribute__((packed)); struct Mdr2DirEntry { DataIdStruct Id; uint32_t size; uint32_t dataSetSize; uint32_t dataVersion; uint32_t timestamp; } __attribute__((packed)); // ====================== MDR II Pull Command Structures ====================== // MDR II Pull Agent status inquiry command struct MDRiiGetAgentStatus { uint16_t agentId; uint8_t dirVersion; } __attribute__((packed)); // MDR II status inquiry response struct MDRiiAgentStatusResponse { uint8_t mdrVersion; uint8_t agentVersion; uint8_t dirVersion; uint8_t dirEntries; uint8_t dataRequest; } __attribute__((packed)); // MDR II Pull Agent directory information inquiry command struct MDRiiGetDirRequest { uint16_t agentId; uint8_t dirIndex; } __attribute__((packed)); // MDR II directory information inquiry response struct MDRiiGetDirResponse { uint8_t mdrVersion; uint8_t dirVersion; uint8_t returnedEntries; uint8_t remainingEntries; uint8_t data[1]; } __attribute__((packed)); // MDR II Pull Agent data set information inquiry command struct MDRiiGetDataInfoRequest { uint16_t agentId; DataIdStruct dataSetInfo; } __attribute__((packed)); // MDR II data set information inquiry response struct MDRiiGetDataInfoResponse { uint8_t mdrVersion; DataIdStruct dataSetId; uint8_t validFlag; uint32_t dataLength; uint32_t dataVersion; uint32_t timeStamp; } __attribute__((packed)); // MDR II Pull Agent lock data set command struct MDRiiLockDataRequest { uint16_t agentId; DataIdStruct dataSetInfo; uint16_t timeout; } __attribute__((packed)); // MDR II Pull Agent lock data set response struct MDRiiLockDataResponse { uint8_t mdrVersion; uint16_t lockHandle; uint32_t dataLength; uint32_t xferAddress; uint32_t xferLength; } __attribute__((packed)); // MDR II Pull Agent unlock data set command struct MDRiiUnlockDataRequest { uint16_t agentId; uint16_t lockHandle; } __attribute__((packed)); // MDR II Pull Agent get data block command struct MDRiiGetDataBlockRequest { uint16_t agentId; uint16_t lockHandle; uint32_t xferOffset; uint32_t xferLength; } __attribute__((packed)); // MDR II Pull Agent get data block response struct MDRiiGetDataBlockResponse { uint32_t xferLength; uint32_t checksum; uint8_t data[msgPayloadSize]; } __attribute__((packed)); // ====================== MDR II Push Command Structures ====================== // MDR II Push Agent send dir info command struct MDRiiSendDirRequest { uint16_t agentId; uint8_t dirVersion; uint8_t dirIndex; uint8_t returnedEntries; uint8_t remainingEntries; Mdr2DirEntry data[1]; // place holder for N directory entries } __attribute__((packed)); // MDR II Push Agent offer data set info command struct MDRiiOfferDataInfo { uint16_t agentId; } __attribute__((packed)); // MDR II Client send data set info offer response struct MDRiiOfferDataInfoResponse { DataIdStruct dataSetInfo; } __attribute__((packed)); // MDR II Push Agent send data set info command struct MDRiiSendDataInfoRequest { uint16_t agentId; DataIdStruct dataSetInfo; uint8_t validFlag; uint32_t dataLength; uint32_t dataVersion; // Roughly equivalent to the "file name" uint32_t timeStamp; // More info on the identity of this particular set of data } __attribute__((packed)); // MDR II Push Agent send data start command struct MDRiiDataStartRequest { uint16_t agentId; DataIdStruct dataSetInfo; uint32_t dataLength; uint32_t xferAddress; uint32_t xferLength; uint16_t timeout; } __attribute__((packed)); // MDR II Client send data start response struct MDRiiDataStartResponse { uint8_t xferStartAck; uint16_t sessionHandle; } __attribute__((packed)); // MDR II struct MDRiiDataDoneRequest { uint16_t agentId; uint16_t lockHandle; } __attribute__((packed)); // MDR II Push Agent send data block command struct MDRiiSendDataBlockRequest { uint16_t agentId; uint16_t lockHandle; uint32_t xferOffset; uint32_t xferLength; uint32_t checksum; } __attribute__((packed));