AcpiPlatformHooks.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /*++
  2. Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. Module Name:
  5. AcpiPlatformHooks.h
  6. Abstract:
  7. This is an implementation of the ACPI platform driver. Requirements for
  8. this driver are defined in the Tiano ACPI External Product Specification,
  9. revision 0.3.6.
  10. --*/
  11. #ifndef _ACPI_PLATFORM_HOOKS_H_
  12. #define _ACPI_PLATFORM_HOOKS_H_
  13. //
  14. // Statements that include other header files
  15. //
  16. #include <IndustryStandard/Acpi.h>
  17. #include "Platform.h"
  18. #include <Protocol/EnhancedSpeedstep.h>
  19. #define AML_NAME_OP 0x08
  20. #define AML_METHOD_OP 0x14
  21. #define AML_OPREGION_OP 0x80
  22. #define AML_PACKAGE_OP 0x12 // Package operator.
  23. #define AML_NAME_PREFIX_SIZE 0x06
  24. #define AML_NAME_DWORD_SIZE 0x0C
  25. #pragma pack(1)
  26. typedef struct {
  27. UINT8 AcpiProcessorId;
  28. UINT8 ApicId;
  29. UINT16 Flags;
  30. } EFI_CPU_ID_MAP;
  31. typedef struct {
  32. UINT8 StartByte;
  33. UINT32 NameStr;
  34. UINT8 Size;
  35. UINT32 Value;
  36. } EFI_ACPI_NAMEPACK_DWORD;
  37. typedef struct {
  38. UINT8 StartByte;
  39. UINT32 NameStr;
  40. UINT8 OpCode;
  41. UINT16 Size; // Hardcode to 16bit width because the table we use is fixed size
  42. UINT8 NumEntries;
  43. } EFI_ACPI_NAME_COMMAND;
  44. typedef struct {
  45. UINT8 PackageOp;
  46. UINT8 PkgLeadByte;
  47. UINT8 NumEntries;
  48. UINT8 DwordPrefix0;
  49. UINT32 CoreFreq;
  50. UINT8 DwordPrefix1;
  51. UINT32 Power;
  52. UINT8 DwordPrefix2;
  53. UINT32 TransLatency;
  54. UINT8 DwordPrefix3;
  55. UINT32 BMLatency;
  56. UINT8 DwordPrefix4;
  57. UINT32 Control;
  58. UINT8 DwordPrefix5;
  59. UINT32 Status;
  60. } EFI_PSS_PACKAGE;
  61. typedef struct {
  62. UINT8 PackageOp;
  63. UINT8 PkgLeadByte;
  64. UINT8 NumEntries;
  65. UINT8 BytePrefix0;
  66. UINT8 Entries;
  67. UINT8 BytePrefix1;
  68. UINT8 Revision;
  69. UINT8 BytePrefix2;
  70. UINT8 Domain;
  71. UINT8 BytePrefix3;
  72. UINT8 Coordinate;
  73. UINT8 BytePrefix4;
  74. UINT8 ProcNumber;
  75. } EFI_PSD_PACKAGE;
  76. #pragma pack()
  77. #define ACPI_NAME_COMMAND_FROM_NAME_STR(a) BASE_CR (a, EFI_ACPI_NAME_COMMAND, NameStr)
  78. #define ACPI_NAME_COMMAND_FROM_NAMEPACK_STR(a) BASE_CR (a, EFI_ACPI_NAMEPACK_DWORD, NameStr)
  79. EFI_STATUS
  80. PlatformHookInit (
  81. VOID
  82. );
  83. EFI_STATUS
  84. PatchDsdtTable (
  85. IN OUT EFI_ACPI_DESCRIPTION_HEADER *TableHeader
  86. );
  87. EFI_STATUS
  88. PatchGv3SsdtTable (
  89. IN OUT EFI_ACPI_DESCRIPTION_HEADER *Table
  90. );
  91. EFI_STATUS
  92. PatchErstTable (
  93. IN OUT EFI_ACPI_DESCRIPTION_HEADER *Table
  94. );
  95. EFI_STATUS
  96. AppendCpuMapTableEntry (
  97. IN EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE *AcpiLocalApic
  98. );
  99. #endif