blob: 9736ee85e1e36b99cd0f1cd51aefd1be0d696054 [file] [log] [blame]
Vernon Mauerya3702c12019-05-22 13:20:59 -07001/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
16
17#pragma once
18#include <ipmid/api.h>
19
20#include <oemcommands.hpp>
21
22constexpr uint8_t maxDirEntries = 4;
23constexpr uint16_t msgPayloadSize = 1024 * 60;
24constexpr uint32_t smbiosTableStorageSize = 64 * 1024;
25constexpr uint32_t mdriiSMSize = 0x00100000;
26
27struct DataIdStruct
28{
29 uint8_t dataInfo[16];
30} __attribute__((packed));
31
32struct Mdr2DirEntry
33{
34 DataIdStruct Id;
35 uint32_t size;
36 uint32_t dataSetSize;
37 uint32_t dataVersion;
38 uint32_t timestamp;
39} __attribute__((packed));
40
41// ====================== MDR II Pull Command Structures ======================
42// MDR II Pull Agent status inquiry command
43struct MDRiiGetAgentStatus
44{
45 uint16_t agentId;
46 uint8_t dirVersion;
47} __attribute__((packed));
48
49// MDR II status inquiry response
50struct MDRiiAgentStatusResponse
51{
52 uint8_t mdrVersion;
53 uint8_t agentVersion;
54 uint8_t dirVersion;
55 uint8_t dirEntries;
56 uint8_t dataRequest;
57} __attribute__((packed));
58
59// MDR II Pull Agent directory information inquiry command
60struct MDRiiGetDirRequest
61{
62 uint16_t agentId;
63 uint8_t dirIndex;
64} __attribute__((packed));
65
66// MDR II directory information inquiry response
67struct MDRiiGetDirResponse
68{
69 uint8_t mdrVersion;
70 uint8_t dirVersion;
71 uint8_t returnedEntries;
72 uint8_t remainingEntries;
73 uint8_t data[1];
74} __attribute__((packed));
75
76// MDR II Pull Agent data set information inquiry command
77struct MDRiiGetDataInfoRequest
78{
79 uint16_t agentId;
80 DataIdStruct dataSetInfo;
81} __attribute__((packed));
82
83// MDR II data set information inquiry response
84struct MDRiiGetDataInfoResponse
85{
86 uint8_t mdrVersion;
87 DataIdStruct dataSetId;
88 uint8_t validFlag;
89 uint32_t dataLength;
90 uint32_t dataVersion;
91 uint32_t timeStamp;
92} __attribute__((packed));
93
94// MDR II Pull Agent lock data set command
95struct MDRiiLockDataRequest
96{
97 uint16_t agentId;
98 DataIdStruct dataSetInfo;
99 uint16_t timeout;
100} __attribute__((packed));
101
102// MDR II Pull Agent lock data set response
103struct MDRiiLockDataResponse
104{
105 uint8_t mdrVersion;
106 uint16_t lockHandle;
107 uint32_t dataLength;
108 uint32_t xferAddress;
109 uint32_t xferLength;
110} __attribute__((packed));
111
112// MDR II Pull Agent unlock data set command
113struct MDRiiUnlockDataRequest
114{
115 uint16_t agentId;
116 uint16_t lockHandle;
117} __attribute__((packed));
118
119// MDR II Pull Agent get data block command
120struct MDRiiGetDataBlockRequest
121{
122 uint16_t agentId;
123 uint16_t lockHandle;
124 uint32_t xferOffset;
125 uint32_t xferLength;
126} __attribute__((packed));
127
128// MDR II Pull Agent get data block response
129struct MDRiiGetDataBlockResponse
130{
131 uint32_t xferLength;
132 uint32_t checksum;
133 uint8_t data[msgPayloadSize];
134} __attribute__((packed));
135
136// ====================== MDR II Push Command Structures ======================
137// MDR II Push Agent send dir info command
138struct MDRiiSendDirRequest
139{
140 uint16_t agentId;
141 uint8_t dirVersion;
142 uint8_t dirIndex;
143 uint8_t returnedEntries;
144 uint8_t remainingEntries;
145 Mdr2DirEntry data[1]; // place holder for N directory entries
146} __attribute__((packed));
147
148// MDR II Push Agent offer data set info command
149struct MDRiiOfferDataInfo
150{
151 uint16_t agentId;
152} __attribute__((packed));
153
154// MDR II Client send data set info offer response
155struct MDRiiOfferDataInfoResponse
156{
157 DataIdStruct dataSetInfo;
158} __attribute__((packed));
159
160// MDR II Push Agent send data set info command
161struct MDRiiSendDataInfoRequest
162{
163 uint16_t agentId;
164 DataIdStruct dataSetInfo;
165 uint8_t validFlag;
166 uint32_t dataLength;
167 uint32_t dataVersion; // Roughly equivalent to the "file name"
168 uint32_t
169 timeStamp; // More info on the identity of this particular set of data
170} __attribute__((packed));
171
172// MDR II Push Agent send data start command
173struct MDRiiDataStartRequest
174{
175 uint16_t agentId;
176 DataIdStruct dataSetInfo;
177 uint32_t dataLength;
178 uint32_t xferAddress;
179 uint32_t xferLength;
180 uint16_t timeout;
181} __attribute__((packed));
182
183// MDR II Client send data start response
184struct MDRiiDataStartResponse
185{
186 uint8_t xferStartAck;
187 uint16_t sessionHandle;
188} __attribute__((packed));
189
190// MDR II
191struct MDRiiDataDoneRequest
192{
193 uint16_t agentId;
194 uint16_t lockHandle;
195} __attribute__((packed));
196
197// MDR II Push Agent send data block command
198struct MDRiiSendDataBlockRequest
199{
200 uint16_t agentId;
201 uint16_t lockHandle;
202 uint32_t xferOffset;
203 uint32_t xferLength;
204 uint32_t checksum;
205} __attribute__((packed));