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