1/******************************************************************************* 2 * Copyright (C) 2004-2008 Intel Corp. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * - Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * 10 * - Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * - Neither the name of Intel Corp. nor the names of its 15 * contributors may be used to endorse or promote products derived from this 16 * software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 *******************************************************************************/ 30 31#ifndef __FWUL_COMMAND_H__ 32#define __FWUL_COMMAND_H__ 33 34#include "HECIUnix.h" 35#include "StatusCodeDefinitions.h" 36 37#pragma pack(1) 38 39typedef struct _FWU_VERSION 40{ 41 UINT16 Major; 42 UINT16 Minor; 43 UINT16 Hotfix; 44 UINT16 Build; 45} FWU_VERSION; 46 47typedef enum 48{ 49 FWU_GET_VERSION = 0, 50 FWU_GET_VERSION_REPLY, 51 FWU_START, 52 FWU_START_REPLY, 53 FWU_DATA, 54 FWU_DATA_REPLY, 55 FWU_END, 56 FWU_END_REPLY, 57 FWU_GET_INFO, 58 FWU_GET_INFO_REPLY 59} FWU_HECI_MESSAGE_TYPE; 60 61typedef struct _ME_GET_FW_UPDATE_INFO_REQUEST 62{ 63 UINT32 MessageID; 64} ME_GET_FW_UPDATE_INFO_REQUEST; 65 66typedef struct _FWU_MSG_REPLY_HEADER 67{ 68 UINT32 MessageType; 69 UINT32 Status; 70} FWU_MSG_REPLY_HEADER; 71 72typedef struct _FWU_MSG_REPLY_HEADER_V3 73{ 74 UINT8 MessageType; 75 UINT32 Status; 76} FWU_MSG_REPLY_HEADER_V3; 77 78typedef struct _FWU_GET_VERSION_MSG_REPLY 79{ 80 UINT32 MessageType; 81 UINT32 Status; 82 UINT32 Sku; 83 UINT32 ICHVer; 84 UINT32 MCHVer; 85 UINT32 Vendor; 86 UINT32 LastFwUpdateStatus; 87 UINT32 HwSku; 88 FWU_VERSION CodeVersion; 89 FWU_VERSION AMTVersion; 90 UINT16 EnabledUpdateInterfaces; 91 UINT16 Reserved; 92} FWU_GET_VERSION_MSG_REPLY; 93 94typedef struct _FWU_GET_VERSION_MSG_REPLY_V3 95{ 96 UINT8 MessageType; 97 UINT32 Status; 98 UINT32 Sku; 99 UINT32 ICHVer; 100 UINT32 MCHVer; 101 UINT32 Vendor; 102 FWU_VERSION CodeVersion; 103 FWU_VERSION RcvyVersion; 104 UINT16 EnabledUpdateInterfaces; 105 UINT32 LastFwUpdateStatus; 106 UINT32 Reserved; 107} FWU_GET_VERSION_MSG_REPLY_V3; 108 109typedef struct _FWU_GET_INFO_MSG_REPLY 110{ 111 UINT32 MessageType; 112 UINT32 Status; 113 FWU_VERSION MEBxVersion; 114 UINT32 FlashOverridePolicy; 115 UINT32 ManageabilityMode; 116 UINT32 BiosBootState; 117 struct { 118 UINT32 CryptoFuse :1; 119 UINT32 FlashProtection:1; 120 UINT32 FwOverrideQualifier:2; 121 UINT32 MeResetReason:2; 122 UINT32 FwOverrideCounter:8; 123 UINT32 reserved:18; 124 } Fields; 125 UINT8 BiosVersion[20]; 126} FWU_GET_INFO_MSG_REPLY; 127 128#pragma pack(0) 129 130class FWULCommand 131{ 132public: 133 FWULCommand(bool verbose = false); 134 ~FWULCommand(); 135 136 HECI_STATUS GetFWUVersionAndInfo(FWU_GET_VERSION_MSG_REPLY &verMsg, FWU_GET_INFO_MSG_REPLY &infoMsg); 137 138 HECILinux FWULClient; 139 140private: 141 HECI_STATUS _call(const unsigned char *command, UINT32 command_size, UINT8 **readBuffer, UINT32 *outBuffSize); 142 143 bool _verbose; 144}; 145 146#endif //__FWUL_COMMAND_H__ 147 148