• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2013 Linaro Limited
3 *
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the BSD License which accompanies
6 * this distribution, and is available at
7 * http://opensource.org/licenses/bsd-license.php
8 *
9 * Contributors:
10 *     Yi Li - yi.li@linaro.org
11 *
12 *  Based on the files under ArmPlatformPkg/ArmJunoPkg/AcpiTables/
13*/
14
15#include <IndustryStandard/Acpi.h>
16#include "Hi1610Platform.h"
17#include <Library/AcpiLib.h>
18#include <Library/AcpiNextLib.h>
19
20
21//
22// Define the number of each table type.
23// This is where the table layout is modified.
24//
25#define EFI_ACPI_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE_COUNT  4
26#define EFI_ACPI_MEMORY_AFFINITY_STRUCTURE_COUNT                      4
27
28
29#pragma pack(1)
30typedef struct {
31  EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER          Header;
32  EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE  Apic;
33  EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE                      Memory[2];
34  EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE                        GICC[16];
35} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE;
36
37#pragma pack()
38
39
40//
41// Static Resource Affinity Table definition
42//
43EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE Srat = {
44  {
45    {EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE,
46    sizeof (EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE),
47    EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION,
48    0x00,                                                     // Checksum will be updated at runtime
49    {EFI_ACPI_ARM_OEM_ID},
50    EFI_ACPI_ARM_OEM_TABLE_ID,
51    EFI_ACPI_ARM_OEM_REVISION,
52    EFI_ACPI_ARM_CREATOR_ID,
53    EFI_ACPI_ARM_CREATOR_REVISION},
54    /*Reserved*/
55    0x00000001,                                  // Reserved to be 1 for backward compatibility
56    EFI_ACPI_RESERVED_QWORD
57  },
58  /**/
59  {
60      0x00,                                     // Subtable Type:Processor Local APIC/SAPIC Affinity
61      sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE),                                     //Length
62      0x00,                                     //Proximity Domain Low(8)
63      0x00,                                     //Apic ID
64      0x00000001,                               //Flags
65      0x00,                                     //Local Sapic EID
66      {0,0,0},                                     //Proximity Domain High(24)
67      0x00000000,                               //ClockDomain
68  },
69  //
70  //
71  // Memory Affinity
72  //
73  {
74    EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000000,0x00000000,0x40000000,0x00000000,0x00000001),
75    EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE_INIT(0x00000000,0x40000000,0x00000002,0xC0000000,0x00000001,0x00000001),
76  },
77
78  /*Processor Local x2APIC Affinity*/
79  //{
80  //   0x02,                                              // Subtable Type:Processor Local x2APIC Affinity
81  //   sizeof(EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE),
82  //   {0,0},                                             //Reserved1
83  //   0x00000000,                                        //Proximity Domain
84  //   0x00000000,                                        //Apic ID
85  //   0x00000001,                                        //Flags
86  //   0x00000000,                                        //Clock Domain
87  //   {0,0,0,0},                                         //Reserved2
88  //},
89
90  {
91    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000000,0x00000001,0x00000000),   //GICC Affinity Processor 0
92    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000001,0x00000001,0x00000000),   //GICC Affinity Processor 1
93    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000002,0x00000001,0x00000000),   //GICC Affinity Processor 2
94    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000003,0x00000001,0x00000000),   //GICC Affinity Processor 3
95    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000004,0x00000001,0x00000000),   //GICC Affinity Processor 4
96    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000005,0x00000001,0x00000000),   //GICC Affinity Processor 5
97    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000006,0x00000001,0x00000000),   //GICC Affinity Processor 6
98    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000007,0x00000001,0x00000000),   //GICC Affinity Processor 7
99    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000008,0x00000001,0x00000000),   //GICC Affinity Processor 8
100    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x00000009,0x00000001,0x00000000),   //GICC Affinity Processor 9
101    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000A,0x00000001,0x00000000),   //GICC Affinity Processor 10
102    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000B,0x00000001,0x00000000),   //GICC Affinity Processor 11
103    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000C,0x00000001,0x00000000),   //GICC Affinity Processor 12
104    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000D,0x00000001,0x00000000),   //GICC Affinity Processor 13
105    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000E,0x00000001,0x00000000),   //GICC Affinity Processor 14
106    EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE_INIT(0x00000000,0x0000000F,0x00000001,0x00000000)    //GICC Affinity Processor 15
107  },
108};
109
110//
111// Reference the table being generated to prevent the optimizer from removing the
112// data structure from the executable
113//
114VOID* CONST ReferenceAcpiTable = &Srat;
115
116