3 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2011, Apple Inc. All rights reserved.
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #ifndef _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_
11 #define _CPU_ARCHITECTURAL_PROTOCOL_DRIVER_H_
15 #include <IndustryStandard/SmBios.h>
17 #include <Protocol/Cpu.h>
18 #include <Protocol/Smbios.h>
19 #include <Protocol/MpService.h>
20 #include <Protocol/EmuThread.h>
21 #include <Protocol/CpuIo2.h>
23 #include <Guid/IdleLoopEvent.h>
25 #include <Library/BaseLib.h>
26 #include <Library/DebugLib.h>
27 #include <Library/UefiDriverEntryPoint.h>
28 #include <Library/BaseMemoryLib.h>
29 #include <Library/MemoryAllocationLib.h>
30 #include <Library/UefiBootServicesTableLib.h>
31 #include <Library/EmuThunkLib.h>
32 #include <Library/UefiLib.h>
33 #include <Library/PcdLib.h>
38 // Internal Data Structures
40 #define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')
46 EFI_CPU_ARCH_PROTOCOL Cpu
;
47 EFI_CPU_IO2_PROTOCOL CpuIo
;
50 // Local Data for CPU interface goes here
52 BOOLEAN InterruptState
;
54 } CPU_ARCH_PROTOCOL_PRIVATE
;
56 #define CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS(a) \
58 CPU_ARCH_PROTOCOL_PRIVATE, \
60 CPU_ARCH_PROT_PRIVATE_SIGNATURE \
75 // Define Individual Processor Data block.
78 EFI_PROCESSOR_INFORMATION Info
;
79 EFI_AP_PROCEDURE Procedure
;
83 PROCESSOR_STATE State
;
84 EFI_EVENT CheckThisAPEvent
;
85 } PROCESSOR_DATA_BLOCK
;
89 // Define MP data block which consumes individual processor block.
92 UINTN NumberOfProcessors
;
93 UINTN NumberOfEnabledProcessors
;
94 EFI_EVENT CheckAllAPsEvent
;
98 EFI_AP_PROCEDURE Procedure
;
99 VOID
*ProcedureArgument
;
100 BOOLEAN SingleThread
;
102 PROCESSOR_DATA_BLOCK
*ProcessorData
;
105 UINTN FailedListIndex
;
106 BOOLEAN TimeoutActive
;
115 CpuMemoryServiceRead (
116 IN EFI_CPU_IO2_PROTOCOL
*This
,
117 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
125 CpuMemoryServiceWrite (
126 IN EFI_CPU_IO2_PROTOCOL
*This
,
127 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
136 IN EFI_CPU_IO2_PROTOCOL
*This
,
137 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
138 IN UINT64 UserAddress
,
140 IN OUT VOID
*UserBuffer
146 IN EFI_CPU_IO2_PROTOCOL
*This
,
147 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
148 IN UINT64 UserAddress
,
150 IN OUT VOID
*UserBuffer
156 IN EFI_HANDLE ImageHandle
,
157 IN EFI_SYSTEM_TABLE
*SystemTable
162 EmuFlushCpuDataCache (
163 IN EFI_CPU_ARCH_PROTOCOL
*This
,
164 IN EFI_PHYSICAL_ADDRESS Start
,
166 IN EFI_CPU_FLUSH_TYPE FlushType
172 IN EFI_CPU_ARCH_PROTOCOL
*This
177 EmuDisableInterrupt (
178 IN EFI_CPU_ARCH_PROTOCOL
*This
183 EmuGetInterruptState (
184 IN EFI_CPU_ARCH_PROTOCOL
*This
,
191 IN EFI_CPU_ARCH_PROTOCOL
*This
,
192 IN EFI_CPU_INIT_TYPE InitType
197 EmuRegisterInterruptHandler (
198 IN EFI_CPU_ARCH_PROTOCOL
*This
,
199 IN EFI_EXCEPTION_TYPE InterruptType
,
200 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
206 IN EFI_CPU_ARCH_PROTOCOL
*This
,
207 IN UINT32 TimerIndex
,
208 OUT UINT64
*TimerValue
,
209 OUT UINT64
*TimerPeriod OPTIONAL
214 EmuSetMemoryAttributes (
215 IN EFI_CPU_ARCH_PROTOCOL
*This
,
216 IN EFI_PHYSICAL_ADDRESS BaseAddress
,
228 CpuMpServicesWhoAmI (
229 IN EFI_MP_SERVICES_PROTOCOL
*This
,
230 OUT UINTN
*ProcessorNumber
233 extern EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate
;