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
| /** @file
|
| Copyright (c) 2011-2012, ARM Limited. All rights reserved.
|
| SPDX-License-Identifier: BSD-2-Clause-Patent
|
| **/
|
| #include <Library/ArmLib.h>
| #include <Library/ArmPlatformLib.h>
|
| #include <Ppi/ArmMpCoreInfo.h>
|
|
| ARM_CORE_INFO mArmPlatformNullMpCoreInfoTable[] = {
| {
| // Cluster 0, Core 0
| 0x0, 0x0,
|
| // MP Core MailBox Set/Get/Clear Addresses and Clear Value
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (UINT64)0xFFFFFFFF
| },
| {
| // Cluster 0, Core 1
| 0x0, 0x1,
|
| // MP Core MailBox Set/Get/Clear Addresses and Clear Value
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (UINT64)0xFFFFFFFF
| },
| {
| // Cluster 0, Core 2
| 0x0, 0x2,
|
| // MP Core MailBox Set/Get/Clear Addresses and Clear Value
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (UINT64)0xFFFFFFFF
| },
| {
| // Cluster 0, Core 3
| 0x0, 0x3,
|
| // MP Core MailBox Set/Get/Clear Addresses and Clear Value
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (EFI_PHYSICAL_ADDRESS)0,
| (UINT64)0xFFFFFFFF
| }
| };
|
| // This function should be better located into TimerLib implementation
| RETURN_STATUS
| EFIAPI
| TimerConstructor (
| VOID
| )
| {
| return EFI_SUCCESS;
| }
|
| /**
| Return the current Boot Mode
|
| This function returns the boot reason on the platform
|
| **/
| EFI_BOOT_MODE
| ArmPlatformGetBootMode (
| VOID
| )
| {
| return BOOT_WITH_FULL_CONFIGURATION;
| }
|
| /**
| Initialize controllers that must setup in the normal world
|
| This function is called by the ArmPlatformPkg/PrePi or ArmPlatformPkg/PlatformPei
| in the PEI phase.
|
| **/
| RETURN_STATUS
| ArmPlatformInitialize (
| IN UINTN MpId
| )
| {
| if (!ArmPlatformIsPrimaryCore (MpId)) {
| return RETURN_SUCCESS;
| }
|
| //TODO: Implement me
|
| return RETURN_SUCCESS;
| }
|
| EFI_STATUS
| PrePeiCoreGetMpCoreInfo (
| OUT UINTN *CoreCount,
| OUT ARM_CORE_INFO **ArmCoreTable
| )
| {
| if (ArmIsMpCore()) {
| *CoreCount = sizeof(mArmPlatformNullMpCoreInfoTable) / sizeof(ARM_CORE_INFO);
| *ArmCoreTable = mArmPlatformNullMpCoreInfoTable;
| return EFI_SUCCESS;
| } else {
| return EFI_UNSUPPORTED;
| }
| }
|
| ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
|
| EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {
| {
| EFI_PEI_PPI_DESCRIPTOR_PPI,
| &gArmMpCoreInfoPpiGuid,
| &mMpCoreInfoPpi
| }
| };
|
| VOID
| ArmPlatformGetPlatformPpiList (
| OUT UINTN *PpiListSize,
| OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
| )
| {
| if (ArmIsMpCore()) {
| *PpiListSize = sizeof(gPlatformPpiTable);
| *PpiList = gPlatformPpiTable;
| } else {
| *PpiListSize = 0;
| *PpiList = NULL;
| }
| }
|
|
|