blob: 9736ee85e1e36b99cd0f1cd51aefd1be0d696054 [file] [log] [blame]
/*
// 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));