1 /* 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 22 constexpr uint8_t maxDirEntries = 4; 23 constexpr uint16_t msgPayloadSize = 1024 * 60; 24 constexpr uint32_t smbiosTableStorageSize = 64 * 1024; 25 constexpr uint32_t mdriiSMSize = 0x00100000; 26 27 struct DataIdStruct 28 { 29 uint8_t dataInfo[16]; 30 } __attribute__((packed)); 31 32 struct 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 43 struct MDRiiGetAgentStatus 44 { 45 uint16_t agentId; 46 uint8_t dirVersion; 47 } __attribute__((packed)); 48 49 // MDR II status inquiry response 50 struct 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 60 struct MDRiiGetDirRequest 61 { 62 uint16_t agentId; 63 uint8_t dirIndex; 64 } __attribute__((packed)); 65 66 // MDR II directory information inquiry response 67 struct 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 77 struct MDRiiGetDataInfoRequest 78 { 79 uint16_t agentId; 80 DataIdStruct dataSetInfo; 81 } __attribute__((packed)); 82 83 // MDR II data set information inquiry response 84 struct 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 95 struct 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 103 struct 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 113 struct MDRiiUnlockDataRequest 114 { 115 uint16_t agentId; 116 uint16_t lockHandle; 117 } __attribute__((packed)); 118 119 // MDR II Pull Agent get data block command 120 struct 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 129 struct 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 138 struct 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 149 struct MDRiiOfferDataInfo 150 { 151 uint16_t agentId; 152 } __attribute__((packed)); 153 154 // MDR II Client send data set info offer response 155 struct MDRiiOfferDataInfoResponse 156 { 157 DataIdStruct dataSetInfo; 158 } __attribute__((packed)); 159 160 // MDR II Push Agent send data set info command 161 struct 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 173 struct 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 184 struct MDRiiDataStartResponse 185 { 186 uint8_t xferStartAck; 187 uint16_t sessionHandle; 188 } __attribute__((packed)); 189 190 // MDR II 191 struct MDRiiDataDoneRequest 192 { 193 uint16_t agentId; 194 uint16_t lockHandle; 195 } __attribute__((packed)); 196 197 // MDR II Push Agent send data block command 198 struct 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)); 206