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_
14 #include <IndustryStandard/SmBios.h>
16 #include <Protocol/Cpu.h>
17 #include <Protocol/Smbios.h>
18 #include <Protocol/MpService.h>
19 #include <Protocol/EmuThread.h>
20 #include <Protocol/CpuIo2.h>
22 #include <Guid/IdleLoopEvent.h>
24 #include <Library/BaseLib.h>
25 #include <Library/DebugLib.h>
26 #include <Library/UefiDriverEntryPoint.h>
27 #include <Library/BaseMemoryLib.h>
28 #include <Library/MemoryAllocationLib.h>
29 #include <Library/UefiBootServicesTableLib.h>
30 #include <Library/EmuThunkLib.h>
31 #include <Library/UefiLib.h>
32 #include <Library/PcdLib.h>
35 // Internal Data Structures
37 #define CPU_ARCH_PROT_PRIVATE_SIGNATURE SIGNATURE_32 ('c', 'a', 'p', 'd')
43 EFI_CPU_ARCH_PROTOCOL Cpu
;
44 EFI_CPU_IO2_PROTOCOL CpuIo
;
47 // Local Data for CPU interface goes here
49 BOOLEAN InterruptState
;
50 } CPU_ARCH_PROTOCOL_PRIVATE
;
52 #define CPU_ARCH_PROTOCOL_PRIVATE_DATA_FROM_THIS(a) \
54 CPU_ARCH_PROTOCOL_PRIVATE, \
56 CPU_ARCH_PROT_PRIVATE_SIGNATURE \
68 // Define Individual Processor Data block.
71 EFI_PROCESSOR_INFORMATION Info
;
72 EFI_AP_PROCEDURE Procedure
;
76 PROCESSOR_STATE State
;
77 EFI_EVENT CheckThisAPEvent
;
78 } PROCESSOR_DATA_BLOCK
;
81 // Define MP data block which consumes individual processor block.
84 UINTN NumberOfProcessors
;
85 UINTN NumberOfEnabledProcessors
;
86 EFI_EVENT CheckAllAPsEvent
;
90 EFI_AP_PROCEDURE Procedure
;
91 VOID
*ProcedureArgument
;
94 PROCESSOR_DATA_BLOCK
*ProcessorData
;
97 UINTN FailedListIndex
;
98 BOOLEAN TimeoutActive
;
103 CpuMemoryServiceRead (
104 IN EFI_CPU_IO2_PROTOCOL
*This
,
105 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
113 CpuMemoryServiceWrite (
114 IN EFI_CPU_IO2_PROTOCOL
*This
,
115 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
124 IN EFI_CPU_IO2_PROTOCOL
*This
,
125 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
126 IN UINT64 UserAddress
,
128 IN OUT VOID
*UserBuffer
134 IN EFI_CPU_IO2_PROTOCOL
*This
,
135 IN EFI_CPU_IO_PROTOCOL_WIDTH Width
,
136 IN UINT64 UserAddress
,
138 IN OUT VOID
*UserBuffer
144 IN EFI_HANDLE ImageHandle
,
145 IN EFI_SYSTEM_TABLE
*SystemTable
150 EmuFlushCpuDataCache (
151 IN EFI_CPU_ARCH_PROTOCOL
*This
,
152 IN EFI_PHYSICAL_ADDRESS Start
,
154 IN EFI_CPU_FLUSH_TYPE FlushType
160 IN EFI_CPU_ARCH_PROTOCOL
*This
165 EmuDisableInterrupt (
166 IN EFI_CPU_ARCH_PROTOCOL
*This
171 EmuGetInterruptState (
172 IN EFI_CPU_ARCH_PROTOCOL
*This
,
179 IN EFI_CPU_ARCH_PROTOCOL
*This
,
180 IN EFI_CPU_INIT_TYPE InitType
185 EmuRegisterInterruptHandler (
186 IN EFI_CPU_ARCH_PROTOCOL
*This
,
187 IN EFI_EXCEPTION_TYPE InterruptType
,
188 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
194 IN EFI_CPU_ARCH_PROTOCOL
*This
,
195 IN UINT32 TimerIndex
,
196 OUT UINT64
*TimerValue
,
197 OUT UINT64
*TimerPeriod OPTIONAL
202 EmuSetMemoryAttributes (
203 IN EFI_CPU_ARCH_PROTOCOL
*This
,
204 IN EFI_PHYSICAL_ADDRESS BaseAddress
,
216 CpuMpServicesWhoAmI (
217 IN EFI_MP_SERVICES_PROTOCOL
*This
,
218 OUT UINTN
*ProcessorNumber
221 extern EFI_MP_SERVICES_PROTOCOL mMpServicesTemplate
;