hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
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
/** @file
*
*  Copyright (c) 2020, Linaro Limited. All rights reserved.
*
*  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
 
#ifndef SBSAQEMUACPI_H
#define SBSAQEMUACPI_H
 
// A macro to initialise the common header part of EFI ACPI tables as defined by
// EFI_ACPI_DESCRIPTION_HEADER structure.
#define SBSAQEMU_ACPI_HEADER(Signature, Type, Revision) {                      \
    Signature,                                   /* UINT32  Signature */       \
    sizeof (Type),                               /* UINT32  Length */          \
    Revision,                                    /* UINT8   Revision */        \
    0,                                           /* UINT8   Checksum */        \
    { 'L', 'I', 'N', 'A', 'R', 'O' },            /* UINT8   OemId[6] */        \
    FixedPcdGet64 (PcdAcpiDefaultOemTableId),    /* UINT64  OemTableId */      \
    FixedPcdGet32 (PcdAcpiDefaultOemRevision),   /* UINT32  OemRevision */     \
    FixedPcdGet32 (PcdAcpiDefaultCreatorId),     /* UINT32  CreatorId */       \
    FixedPcdGet32 (PcdAcpiDefaultCreatorRevision)/* UINT32  CreatorRevision */ \
  }
 
// Defines for MADT
#define SBSAQEMU_MADT_GIC_VBASE          0x2c020000
#define SBSAQEMU_MADT_GIC_HBASE          0x2c010000
#define SBSAQEMU_MADT_GIC_PMU_IRQ        23
#define SBSAQEMU_MADT_GICR_SIZE          0x4000000
 
// Macro for MADT GIC Redistributor Structure
#define SBSAQEMU_MADT_GICR_INIT() {                                            \
   EFI_ACPI_6_0_GICR,                        /* Type */                        \
   sizeof (EFI_ACPI_6_0_GICR_STRUCTURE),     /* Length */                      \
   EFI_ACPI_RESERVED_WORD,                   /* Reserved */                    \
   FixedPcdGet32 (PcdGicRedistributorsBase), /* DiscoveryRangeBaseAddress */   \
   SBSAQEMU_MADT_GICR_SIZE                   /* DiscoveryRangeLength */        \
   }
 
#define SBSAQEMU_ACPI_SCOPE_OP_MAX_LENGTH 5
 
#define SBSAQEMU_ACPI_SCOPE_NAME         { '_', 'S', 'B', '_' }
 
#define SBSAQEMU_ACPI_CPU_DEV_LEN        0x1C
#define SBSAQEMU_ACPI_CPU_DEV_NAME       { 'C', '0', '0', '0' }
 
#define SBSAQEMU_ACPI_CPU_HID           {                                      \
  AML_NAME_OP, AML_NAME_CHAR__, 'H', 'I', 'D',                                 \
  AML_STRING_PREFIX, 'A', 'C', 'P', 'I', '0', '0', '0', '7',                   \
  AML_ZERO_OP                                                                  \
  }
 
#define SBSAQEMU_ACPI_CPU_UID            {                                     \
   AML_NAME_OP, AML_NAME_CHAR__, 'U', 'I', 'D', AML_WORD_PREFIX,               \
   AML_ZERO_OP, AML_ZERO_OP                                                    \
   }
 
typedef struct {
  UINT8         device_header[2];
  UINT8         length;
  UINT8         dev_name[4];
  UINT8         hid[15];
  UINT8         uid[8];
} SBSAQEMU_ACPI_CPU_DEVICE;
 
#define SBSAQEMU_L1_D_CACHE_SIZE         SIZE_32KB
#define SBSAQEMU_L1_D_CACHE_SETS         256
#define SBSAQEMU_L1_D_CACHE_ASSC         2
 
#define SBSAQEMU_L1_I_CACHE_SIZE         SIZE_32KB
#define SBSAQEMU_L1_I_CACHE_SETS         256
#define SBSAQEMU_L1_I_CACHE_ASSC         2
 
#define SBSAQEMU_L2_CACHE_SIZE           SIZE_512KB
#define SBSAQEMU_L2_CACHE_SETS           1024
#define SBSAQEMU_L2_CACHE_ASSC           8
 
#define CLUSTER_INDEX    (sizeof (EFI_ACPI_DESCRIPTION_HEADER))
#define L1_D_CACHE_INDEX (CLUSTER_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR))
#define L1_I_CACHE_INDEX (L1_D_CACHE_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE))
#define L2_CACHE_INDEX   (L1_I_CACHE_INDEX + sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE))
 
#define SBSAQEMU_ACPI_PPTT_L1_D_CACHE_STRUCT {                                 \
    EFI_ACPI_6_3_PPTT_TYPE_CACHE,                                              \
    sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE),                                \
    { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE },                        \
    {                                                                          \
      1,                       /* SizePropertyValid */                         \
      1,                       /* NumberOfSetsValid */                         \
      1,                       /* AssociativityValid */                        \
      1,                       /* AllocationTypeValid */                       \
      1,                       /* CacheTypeValid */                            \
      1,                       /* WritePolicyValid */                          \
      1,                       /* LineSizeValid */                             \
    },                                                                         \
    0,                         /* NextLevelOfCache */                          \
    SBSAQEMU_L1_D_CACHE_SIZE,  /* Size */                                      \
    SBSAQEMU_L1_D_CACHE_SETS,  /* NumberOfSets */                              \
    SBSAQEMU_L1_D_CACHE_ASSC,  /* Associativity */                             \
    {                                                                          \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE,                     \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_DATA,                           \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK,                   \
    },                                                                         \
    64                         /* LineSize */                                  \
  }
 
#define SBSAQEMU_ACPI_PPTT_L1_I_CACHE_STRUCT {                                 \
    EFI_ACPI_6_3_PPTT_TYPE_CACHE,                                              \
    sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE),                                \
    { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE },                        \
    {                                                                          \
      1,                       /* SizePropertyValid */                         \
      1,                       /* NumberOfSetsValid */                         \
      1,                       /* AssociativityValid */                        \
      1,                       /* AllocationTypeValid */                       \
      1,                       /* CacheTypeValid */                            \
      0,                       /* WritePolicyValid */                          \
      1,                       /* LineSizeValid */                             \
    },                                                                         \
    0,                         /* NextLevelOfCache */                          \
    SBSAQEMU_L1_I_CACHE_SIZE,  /* Size */                                      \
    SBSAQEMU_L1_I_CACHE_SETS,  /* NumberOfSets */                              \
    SBSAQEMU_L1_I_CACHE_ASSC,  /* Associativity */                             \
    {                                                                          \
      EFI_ACPI_6_3_CACHE_ATTRIBUTES_ALLOCATION_READ,                           \
      EFI_ACPI_6_3_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION,                    \
      0,                                                                       \
    },                                                                         \
    64                         /* LineSize */                                  \
  }
 
#define SBSAQEMU_ACPI_PPTT_L2_CACHE_STRUCT  {                                  \
    EFI_ACPI_6_3_PPTT_TYPE_CACHE,                                              \
    sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_CACHE),                                \
    { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE },                        \
    {                                                                          \
      1,                     /* SizePropertyValid */                           \
      1,                     /* NumberOfSetsValid */                           \
      1,                     /* AssociativityValid */                          \
      1,                     /* AllocationTypeValid */                         \
      1,                     /* CacheTypeValid */                              \
      1,                     /* WritePolicyValid */                            \
      1,                     /* LineSizeValid */                               \
    },                                                                         \
    0,                       /* NextLevelOfCache */                            \
    SBSAQEMU_L2_CACHE_SIZE,  /* Size */                                        \
    SBSAQEMU_L2_CACHE_SETS,  /* NumberOfSets */                                \
    SBSAQEMU_L2_CACHE_ASSC,  /* Associativity */                               \
    {                                                                          \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE,                     \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED,                        \
      EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK,                   \
    },                                                                         \
    64            /* LineSize */                                               \
  }
 
#define SBSAQEMU_ACPI_PPTT_CLUSTER_STRUCT  {                                   \
    EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR,                                          \
    sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR),                            \
    { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE },                        \
    {                                                                          \
      EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL,         /* PhysicalPackage */        \
      EFI_ACPI_6_3_PPTT_PROCESSOR_ID_INVALID,     /* AcpiProcessorIdValid */   \
      EFI_ACPI_6_3_PPTT_PROCESSOR_IS_NOT_THREAD,  /* Is not a Thread */        \
      EFI_ACPI_6_3_PPTT_NODE_IS_NOT_LEAF,         /* Not Leaf */               \
      EFI_ACPI_6_3_PPTT_IMPLEMENTATION_IDENTICAL, /* Identical Cores */        \
    },                                                                         \
    0,                                        /* Parent */                     \
    0,                                        /* AcpiProcessorId */            \
    0,                                        /* NumberOfPrivateResources */   \
  }
 
#define SBSAQEMU_ACPI_PPTT_CORE_STRUCT  {                                      \
    EFI_ACPI_6_3_PPTT_TYPE_PROCESSOR,                                          \
    (sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_PROCESSOR) + (2 * sizeof (UINT32))),  \
    { EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE },                        \
    {                                                                          \
      EFI_ACPI_6_3_PPTT_PACKAGE_NOT_PHYSICAL,     /* PhysicalPackage */        \
      EFI_ACPI_6_3_PPTT_PROCESSOR_ID_VALID,       /* AcpiProcessorValid */     \
      EFI_ACPI_6_3_PPTT_PROCESSOR_IS_NOT_THREAD,  /* Is not a Thread */        \
      EFI_ACPI_6_3_PPTT_NODE_IS_LEAF,             /* Leaf */                   \
      EFI_ACPI_6_3_PPTT_IMPLEMENTATION_IDENTICAL, /* Identical Cores */        \
    },                                                                         \
    0,                                        /* Parent */                     \
    0,                                        /* AcpiProcessorId */            \
    2,                                        /* NumberOfPrivateResources */   \
  }
 
#endif