summaryrefslogtreecommitdiff
path: root/ReferenceCode/ME/BiosExtension/Efi/BiosExtensionLoader/Dxe/BiosExtensionLoader.h
blob: c366d0b9359ad4dc9cb523a9913ed069f7f4cfae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
/** @file
  Include for AMT Bios Extentions Loader

@copyright
  Copyright (c) 2004 - 2012 Intel Corporation. All rights
  reserved This software and associated documentation (if any)
  is furnished under a license and may only be used or copied in
  accordance with the terms of the license. Except as permitted
  by such license, no part of this software or documentation may
  be reproduced, stored in a retrieval system, or transmitted in
  any form or by any means without the express written consent
  of Intel Corporation.

  This file contains an 'Intel Peripheral Driver' and uniquely
  identified as "Intel Reference Module" and is
  licensed for Intel CPUs and chipsets under the terms of your
  license agreement with Intel or your vendor.  This file may
  be modified by the user, subject to additional terms of the
  license agreement
**/
#ifndef _AMT_PTBX_H_
#define _AMT_PTBX_H_

#include "Acpi1_0.h"
#include "Acpi2_0.h"
#include "Acpi3_0.h"
#include "MeAccess.h"
#include "Inventory.h"
#include "AmtLib.h"
#include "UsbProvision.h"
#include "Pci22.h"
#include "AmtPlatformPolicy.h"

#include EFI_PROTOCOL_CONSUMER (FirmwareVolume)
#include EFI_PROTOCOL_CONSUMER (AcpiSupport)
#include EFI_PROTOCOL_CONSUMER (DiskInfo)
#include EFI_PROTOCOL_CONSUMER (BlockIO)
#include EFI_PROTOCOL_CONSUMER (DevicePath)
#include EFI_PROTOCOL_CONSUMER (IdeControllerInit)
#include EFI_PROTOCOL_CONSUMER (AlertStandardFormat)
#include EFI_PROTOCOL_CONSUMER (ActiveManagement)
#include EFI_PROTOCOL_CONSUMER (Heci)
#include EFI_PROTOCOL_CONSUMER (Smbus)
#include EFI_PROTOCOL_CONSUMER (SimpleFileSystem)
#include EFI_PROTOCOL_CONSUMER (Wdt)
#include EFI_PROTOCOL_CONSUMER (MebxProtocol)

#include EFI_GUID_DEFINITION (Smbios)
#include EFI_GUID_DEFINITION (AcpiTableStorage)
#include EFI_GUID_DEFINITION (Acpi)
#include EFI_GUID_DEFINITION (Hob)
#include EFI_GUID_DEFINITION (MeBiosExtensionSetup)
#include EFI_PROTOCOL_DEFINITION (AmtPlatformPolicy)
#include EFI_PROTOCOL_DEFINITION (MeplatformPolicy)
#include EFI_PROTOCOL_DEFINITION (AmtReadyToBoot)

#define MEBX_RET_ACTION_CONTINUE_TO_BOOT  0x01
#define MEBX_RET_ACTION_RESET             0x04
#define MEBX_RET_CODE_MASK                0x07

#define MEBX_RET_ACTION_GLOBAL_RESET      0x01

#define FW_IMAGE_TYPE_1_5MB               3
#define FW_IMAGE_TYPE_5MB                 4

#define MEBX_USER_ENTERED_RESPONSE        0x0002
#define MEBX_RA_SELECTION_MENU            0x0004
#define MEBX_HIDE_UNCONFIGURE_CONF_PROMPT 0x0040
#define MEBX_DEBUG_MSG                    0x4000
#define MEBX_UNCONFIGURE                  0x8000

#define MEBX_STF_PCI_DEV_TABLE            0x0001
#define MEBX_STF_MEDIA_DEV_TABLE          0x0002

#define MEBX_MEDIA_IN_ATA                 0x0000
#define MEBX_MEDIA_IN_ATAPI               0x0001
#define MEBX_MEDIA_IN_SATA                0x0002

#define MEBX_MEDIA_DT_HDD                 0x0000
#define MEBX_MEDIA_DT_CDROM               0x0001
#define MEBX_MEDIA_DT_DVD                 0x0002
#define MEBX_MEDIA_DT_FDD                 0x0003
#define MEBX_MEDIA_DT_MO                  0x0004

//
// MEBX Software Class DXE Subclass Progress Code definitions.
//
#define EFI_SW_DXE_MEBX_OPROM_DONE              (EFI_OEM_SPECIFIC | 0x00000000)
#define EFI_SW_DXE_MEBX_OTHER_UNSPECD           (EFI_OEM_SPECIFIC | 0x00000009)
#define EFI_SW_DXE_MEBX_RESET_ACTION            (EFI_OEM_SPECIFIC | 0x0000000a)

#pragma pack(1)

#define DEVICES_LIST_VERSION            0x0001
#define AMT_DATA_VERSION                0x0101
#define MEBX_SETUP_VERSION              0x9000
#define MEBX_VERSION                    0x9000      ///< for MEBx 9.0.0 or later
#define MEBX_SETUP_PLATFORM_MNT_DEFAULT MNT_OFF
#define MEBX_SETUP_SOL_IDER_DEFAULT     0
#define PCI_DEVICE_MAX_NUM              256
#define MEDIA_DEVICE_MAX_NUM            32

#define SMB_SIG                         0x5F4D535F
#define RSDT_SIG                        0x54445352  ///< RSDT (in reverse)
#define ASF_SIG                         0x21465341  ///< ASF! (in reverse)
#define ONEMIN                          60000000
#define FIVEMIN                         300000000
#define TENMIN                          600000000

#define INVOKE_MEBX_BIT                 0x08

typedef enum _HWAI_FRU_TYPE_
{
  HWAI_FRU_TYPE_NONE= 0,
  HWAI_FRU_TYPE_PCI
} HWAI_FRU_TYPE;

typedef struct {
  UINT16  VersionInfo;
  UINT8   DevCount;
  UINT8   Reserved1[5];
} AMT_FRU_DEVICES_HEADER;

typedef struct {
  UINT16  Vid;
  UINT16  Did;
  UINT16  Rid;
  UINT16  SubSysVid;
  UINT16  SubSysDid;
  UINT32  ClassCode;
  UINT16  BusDevFcn;
} MEBX_FRU_PCI_DEVICES;

typedef struct {
  AMT_FRU_DEVICES_HEADER  PciDevicesHeader;
  MEBX_FRU_PCI_DEVICES    PciDevInfo[PCI_DEVICE_MAX_NUM];
} AMT_PCI_FRU;

typedef struct _PCI_DEV_INFO {
  UINT16  VersionInfo;
  UINT8   PciDevCount;
  UINT8   Reserved[5];
} PCI_DEV_INFO;

typedef struct _HWAI_PCI_FRU_DATA_ {
  UINT16  VendorID;
  UINT16  DeviceID;
  UINT16  RevID;
  UINT16  SubsystemVendorID;
  UINT16  SubsystemDeviceID;
  UINT32  ClassCode;
  UINT16  BusDevFunc;
} HWAI_PCI_DATA;

typedef struct _HWAI_PCI_FRU_ENTRY {
  UINT8         SmbiosType;
  UINT8         Length;
  UINT16        SmbiosHandle;
  UINT32        FruType;
  HWAI_PCI_DATA FruData;
} HWAI_PCI_FRU;

typedef struct _HWAI_FRU_TABLE_HEADER {
  UINT16        TableByteCount;
  UINT16        StructureCount;
  HWAI_PCI_FRU  Data[1];
} HWAI_FRU_TABLE;

typedef struct _HWAI_MEDIA_DATA_ {
  UINT16  Length;
  UINT8   Interface;
  UINT8   DevType;
  UINT8   Manufacturer[40];
  UINT8   SerialNumber[20];
  UINT8   Version[8];
  UINT8   ModelNumber[40];
  UINT32  MaxMediaSizeLow;
  UINT32  MaxMediaSizeHigh;
  UINT16  Capabilities[3];
} HWAI_MEDIA_DATA;

typedef struct _HWAI_MEDIA_ENTRY {
  UINT8           SmbiosType;
  UINT8           Length;
  UINT16          SmbiosHandle;
  HWAI_MEDIA_DATA MediaData;
} HWAI_MEDIA_ENTRY;

typedef struct _HWAI_MEDIA_DEVICE_TABLE_HEADER {
  UINT16            TableByteCount;
  UINT16            StructureCount;
  HWAI_MEDIA_ENTRY  Data[1];
} HWAI_MEDIA_TABLE;

typedef struct _MEDIA_DEV_INFO {
  UINT16  VersionInfo;
  UINT8   MediaDevCount;
  UINT8   Reserved[5];
} MEDIA_DEV_INFO;

typedef struct {
  UINT16  StructSize;
  UINT8   Interface;
  UINT8   DevType;
  UINT8   Rsvd[40];
  UINT8   SerialNo[20];
  UINT8   VersionNo[8];
  UINT8   ModelNo[40];
  UINT64  MaxMediaSize;
  UINT16  SupportedCmdSets[3];
} MEBX_FRU_MEDIA_DEVICES;

typedef struct {
  AMT_FRU_DEVICES_HEADER  MediaDevicesHeader;
  MEBX_FRU_MEDIA_DEVICES  MediaDevInfo[MEDIA_DEVICE_MAX_NUM];
} AMT_MEDIA_FRU;

typedef struct _COMMON_HEADER_ {
  UINT8   Type;
  UINT8   Length;
  UINT16  Handle;
} SMBIOS_HEADER;

typedef struct _SMBIOS_MAIN_ {
  UINT32  Signature;
  UINT8   EpChecksum;
  UINT8   EpLength;
  UINT8   MajorVersion;
  UINT8   MinorVersion;
  UINT16  MaxStruct_Size;
  UINT8   EpRevision;
  UINT8   RevInfo[5];
  UINT8   DmiSignature[5];                          ///< _DMI_
  UINT8   IntChecksum;
  UINT16  TableLength;
  UINT32  TableAddress;
  UINT16  StructureCnt;
  UINT8   SmbBcdRevision;
} SMBIOS_ENTRY_POINT;

typedef struct _SMBIOS_TABLE_TYPE_ONE {
  SMBIOS_HEADER Header;
  UINT8         ManufacturerStr;
  UINT8         ProductNameStr;
  UINT8         VersionStr;
  UINT8         SerialNumberStr;
  UINT8         Uuid[16];
  UINT8         WakeUp;
} SMBIOS_TABLE_TYPE_ONE;

typedef struct _SMBIOS_TABLE_TYPE_THREE {
  SMBIOS_HEADER Header;
  UINT8         ManufacturerStr;
  UINT8         Type;
  UINT8         VersionStr;
  UINT8         SerialNumberStr;
  UINT8         AssetTagStr;
  UINT8         BootState;
  UINT8         PowerSupplyState;
  UINT8         ThermalState;
  UINT8         SecurityStatus;
  UINT32        VendorInfo;
} SMBIOS_TABLE_TYPE_THREE;

typedef struct _SMBIOS_TABLE_TYPE_FOUR {
  SMBIOS_HEADER Header;
  UINT8         SocketStr;
  UINT8         Type;
  UINT8         Family;
  UINT8         Manufacturer;
  UINT8         ProcId[8];
  UINT8         VersionStr;
  UINT8         Voltage;
  UINT16        ExternalClock;
  UINT16        MaxSpeed;
  UINT16        CurrentSpeed;
  UINT8         Status;
  UINT8         Upgrade;
  UINT16        L1CacheHandle;
  UINT16        L2CacheHandle;
  UINT16        L3CacheHandle;
} SMBIOS_TABLE_TYPE_FOUR;

typedef struct _SMBIOS_TABLE_TYPE_TWENTY_THREE {
  SMBIOS_HEADER Header;
  UINT8         Capabilities;
  UINT16        ResetCount;
  UINT16        ResetLimit;
  UINT16        TimerInterval;
  UINT16        Timeout;
} SMBIOS_TABLE_TYPE_TWENTY_THREE;

typedef struct _ACPI_DESCRIPTOR_HEADER_ {
  UINT32  Signature;
  UINT32  Length;
  UINT8   Revision;
  UINT8   Checksum;
  UINT8   OemId[6];
  UINT8   OemTableId[8];
  UINT32  OemRevision;
  UINT8   CreatorId[4];
  UINT32  CreatorRev;
} ACPI_HEADER;

typedef struct _MEBX_DEBUG_FLAGS_ {
  UINT16  Port80 : 1;   ///< Port 80h
  UINT16  Rsvd : 15;    ///< Reserved
} MEBX_DEBUG_FLAGS;

typedef struct _MEBX_OEM_RESOLUTION_SETTINGS_ {
  UINT16  MebxNonUiTextMode : 4;
  UINT16  MebxUiTextMode : 4;
  UINT16  MebxGraphicsMode : 4;
  UINT16  Rsvd : 4;
} MEBX_OEM_RESOLUTION_SETTINGS;

typedef struct {
  UINT16                        BpfVersion;
  UINT8                         CpuReplacementTimeout;
  UINT8                         Reserved[7];
  UINT8                         ActiveRemoteAssistanceProcess;
  UINT8                         CiraTimeout;
  UINT16                        OemFlags;
  MEBX_DEBUG_FLAGS              MebxDebugFlags;
  UINT32                        MeBiosSyncDataPtr;
  UINT32                        UsbKeyDataStructurePtr;
  MEBX_OEM_RESOLUTION_SETTINGS  OemResolutionSettings;
  UINT8                         Reserved3[0x2E];
} MEBX_BPF;

typedef struct {
  UINT16  VersionInfo;
  UINT8   Reserved[2];
  UINT32  PtrSmbiosTable;
  UINT32  PtrAcpiRsdt;
  UINT16  SupportedTablesFlags;
  UINT32  PciDevAssertInfoPtr;
  UINT32  MediaDevAssetInfoPtr;
} AMT_DATA;

typedef union {
  UINT32  Data32;
  UINT16  Data16[2];
  UINT8   Data8[4];
} DATA32_UNION;

#pragma pack()

/**
  Signal a event for Amt ready to boot.

  @param[in] None

  @retval EFI_SUCCESS             Mebx launched or no controller
**/
EFI_STATUS
EFIAPI
AmtReadyToBoot (
  VOID
  )
;

/**
  This routine is run at boot time.
  1) Initialize AMT library.
  2) Check if MEBx is required to be launched by user.
  3) Build and send asset tables to ME FW.
  4) Check USB provision.
  5) Hide unused AMT devices in prior to boot.

  @param[in] None.

  @retval EFI_OUT_OF_RESOURCES    Unable to allocate necessary data structure.
  @retval EFI_NOT_FOUND           1.5M FW SKU detected - there is no MEBx on 1.5 FW SKU
**/
EFI_STATUS
MebxNotifyEvent (
  VOID
  )
;

/**
  Check the status of Amt devices

  @param[in] MeBiosExtensionSetupData   MEBx setting data
**/
VOID
AmtDeviceConfigure (
  IN  ME_BIOS_EXTENSION_SETUP     *MeBiosExtensionSetupData
  )
;

/**
  Detect EFI MEBx support; Loading and execute.

  @param[in] MebxBiosParamsBuffer MebxBiosParams Flat pointer
**/
EFI_STATUS
AdjustAndExecuteMebxImage (
  IN  VOID                        *MebxBiosParamsBuffer
  )
;

/**
  Detect BIOS invoke reasons.

  @param[in] InvokeMebx           Pointer to the Invoke MEBx flag
  @param[in] MebxBiosParamsBuffer MebxBiosParams Flat pointer
**/
VOID
CheckForBiosInvokeReason (
  IN  UINT8       *InvokeMebx,
  IN  MEBX_BPF    *MebxBiosParams
  )
;

/**
  Dump MEBx BIOS Params

  @param[in]   MebxBiosParams - MEBx BIOS params
**/
VOID
DxeMebxBiosParamsDebugDump (
  IN MEBX_BPF *MebxBiosParams
  )
;

extern AMT_MEDIA_FRU  mAmtMediaFru;
extern AMT_PCI_FRU    mAmtPciFru;

//
// USB Provisioning
//
extern VOID           *mUsbProvData;
extern VOID           *mUsbProvDataBackup;
extern UINTN          mUsbProvDataSize;
extern BOOLEAN        mUsbProvsionDone;
extern UINT8          mUsbKeyBus, mUsbKeyPort, mUsbKeyDevice, mUsbKeyFunction;

#endif // _AMT_PTBX_H_