summaryrefslogtreecommitdiffstats
path: root/DynamicTablesPkg/Include/TableGenerator.h
blob: 0d9ff9a1e3c2961b185761d3c44b7e75d0332038 (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
/** @file

  Copyright (c) 2017 - 2019, ARM Limited. All rights reserved.

  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Glossary:
    - ACPI   - Advanced Configuration and Power Interface
    - SMBIOS - System Management BIOS
    - DT     - Device Tree
**/

#ifndef TABLE_GENERATOR_H_
#define TABLE_GENERATOR_H_

/** The TABLE_GENERATOR_ID type describes the Table Generator ID

  Table Generator ID

_______________________________________________________________________________
|  31 | 30 |29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17| 16|
-------------------------------------------------------------------------------
|TNSID|  0 |   TT   |  0 |  0 |  0 |  0 |  0 |  0 |  0 |  0 |  0 |  0 |  0|  0|
_______________________________________________________________________________
_______________________________________________________________________________
|15 | 14 | 13 | 12 | 11 | 10 |  9 |  8 |  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0|
-------------------------------------------------------------------------------
|                                 Table ID                                    |
_______________________________________________________________________________

  Bit [31] - Table NameSpace ID (TNSID)
      0 - Standard
      1 - Custom/OEM

  Bit [30] - Reserved, Must be Zero

  Bit [29:28] - Table Type (TT)
       0 - ACPI Table
       1 - SMBIOS Table
       2 - DT (Device Tree) Table
       3 - Reserved (INVALID)

  Bit [27:16] - Reserved, Must Be Zero

  Bit [15:0] - Table ID

    Standard ACPI Table IDs:
       0 - Reserved
       1 - RAW
       2 - FADT
       3 - DSDT
       4 - SSDT
       5 - MADT
       6 - GTDT
       7 - DBG2
       8 - SPCR
       9 - MCFG
      10 - PPTT

    Standard SMBIOS Table IDs:
       0 - Reserved
       1 - RAW
       2 - Table Type00
       3 - Table Type01
       4 - Table Type02
       5 - Table Type03
       6 - Table Type04
       7 - Table Type05
       8 - Table Type06
       9 - Table Type07
      10 - Table Type08
      11 - Table Type09
      12 - Table Type10
      13 - Table Type11
      14 - Table Type12
      15 - Table Type13
      16 - Table Type14
      17 - Table Type15
      18 - Table Type16
      19 - Table Type17
      20 - Table Type18
      21 - Table Type19
      22 - Table Type20
      23 - Table Type21
      24 - Table Type22
      25 - Table Type23
      26 - Table Type24
      27 - Table Type25
      28 - Table Type26
      29 - Table Type27
      30 - Table Type28
      31 - Table Type29
      32 - Table Type30
      33 - Table Type31
      34 - Table Type32
      35 - Table Type33
      36 - Table Type34
      37 - Table Type35
      38 - Table Type36
      39 - Table Type37
      40 - Table Type38
      41 - Table Type39
      42 - Table Type40
      43 - Table Type41
      44 - Table Type42
  45-127 - Reserved
     128 - Table Type126
     129 - Table Type127
**/
typedef UINT32 TABLE_GENERATOR_ID;

/** This enum lists the Table Generator Types.
*/
typedef enum TableGeneratorType {
  ETableGeneratorTypeAcpi = 0,  ///< ACPI Table Generator Type.
  ETableGeneratorTypeSmbios,    ///< SMBIOS Table Generator Type.
  ETableGeneratorTypeDt,        ///< Device Tree Table Generator Type.
  ETableGeneratorTypeReserved
} ETABLE_GENERATOR_TYPE;

/** This enum lists the namespaces for the Table Generators.
*/
typedef enum TableGeneratorNameSpace {
  ETableGeneratorNameSpaceStd = 0,  ///< Standard Namespace.
  ETableGeneratorNameSpaceOem       ///< OEM Namespace.
} ETABLE_GENERATOR_NAMESPACE;

/** A mask for the Table ID bits of TABLE_GENERATOR_ID.
*/
#define TABLE_ID_MASK  0xFF

/** A mask for the Namespace ID bits of TABLE_GENERATOR_ID.
*/
#define TABLE_NAMESPACEID_MASK  (BIT31)

/** A mask for the Table Type bits of TABLE_GENERATOR_ID.
*/
#define TABLE_TYPE_MASK  (BIT29 | BIT28)

/** Starting bit position for the Table Type bits
*/
#define TABLE_TYPE_BIT_SHIFT  28

/** Starting bit position for the Table Namespace ID bit
*/
#define TABLE_NAMESPACE_ID_BIT_SHIFT  31

/** This macro returns the Table ID from the TableGeneratorId.

  @param [in]  TableGeneratorId  The table generator ID.

  @return the Table ID described by the TableGeneratorId.
**/
#define GET_TABLE_ID(TableGeneratorId)         \
          ((TableGeneratorId) & TABLE_ID_MASK)

/** This macro returns the Table type from the TableGeneratorId.

  @param [in]  TableGeneratorId  The table generator ID.

  @return the Table type described by the TableGeneratorId.
**/
#define GET_TABLE_TYPE(TableGeneratorId)                                   \
          (((TableGeneratorId) & TABLE_TYPE_MASK) >> TABLE_TYPE_BIT_SHIFT)

/** This macro returns the Namespace ID from the TableGeneratorId.

  @param [in]  TableGeneratorId  The table generator ID.

  @return the Namespace described by the TableGeneratorId.
**/
#define GET_TABLE_NAMESPACEID(TableGeneratorId)             \
          (((TableGeneratorId) & TABLE_NAMESPACEID_MASK) >> \
            TABLE_NAMESPACE_ID_BIT_SHIFT)

/** This macro checks if the TableGeneratorId is in the Standard Namespace.

  @param [in]  TableGeneratorId  The table generator ID.

  @return TRUE if the TableGeneratorId is in the Standard Namespace.
**/
#define IS_GENERATOR_NAMESPACE_STD(TableGeneratorId) \
          (                                          \
          GET_TABLE_NAMESPACEID(TableGeneratorId) == \
          ETableGeneratorNameSpaceStd                \
          )

/** This macro creates a TableGeneratorId

  @param [in]  TableType        The table type.
  @param [in]  TableNameSpaceId The namespace ID for the table.
  @param [in]  TableId          The table ID.

  @return a TableGeneratorId calculated from the inputs.
**/
#define CREATE_TABLE_GEN_ID(TableType, TableNameSpaceId, TableId)      \
          ((((TableType) << TABLE_TYPE_BIT_SHIFT) & TABLE_TYPE_MASK) | \
           (((TableNameSpaceId) << TABLE_NAMESPACE_ID_BIT_SHIFT) &     \
             TABLE_NAMESPACEID_MASK) | ((TableId) & TABLE_ID_MASK))

/** Starting bit position for MAJOR revision
*/
#define MAJOR_REVISION_BIT_SHIFT  16

/** A mask for Major revision.
*/
#define MAJOR_REVISION_MASK  0xFFFF

/** A mask for Minor revision.
*/
#define MINOR_REVISION_MASK  0xFFFF

/** This macro generates a Major.Minor version
    where the Major and Minor fields are 16 bit.

  @param [in]  Major  The Major revision.
  @param [in]  Minor  The Minor revision.

  @return a 32 bit representation of the type Major.Minor.
**/
#define CREATE_REVISION(Major, Minor)                                      \
          ((((Major) & MAJOR_REVISION_MASK) << MAJOR_REVISION_BIT_SHIFT) | \
            ((Minor) & MINOR_REVISION_MASK))

/** This macro returns the Major revision

  Extracts Major from the 32 bit representation of the type Major.Minor

  @param [in]  Revision  The Revision value which is 32 bit.

  @return the Major part of the revision.
**/
#define GET_MAJOR_REVISION(Revision)                                       \
          (((Revision) >> MAJOR_REVISION_BIT_SHIFT) & MAJOR_REVISION_MASK)

/** This macro returns the Minor revision

  Extracts Minor from the 32 bit representation of the type Major.Minor

  @param [in]  Revision  The Revision value which is 32 bit.

  @return the Minor part of the revision.
**/
#define GET_MINOR_REVISION(Revision)  ((Revision) & MINOR_REVISION_MASK)

#endif // TABLE_GENERATOR_H_