1 /* SPDX-License-Identifier: GPL-2.0-only */
2
3 #include <fsp/api.h>
4 #include <fsp/ppi/mp_service_ppi.h>
5 #include <Ppi/MpServices2.h>
6
7 typedef EDKII_PEI_MP_SERVICES2_PPI efi_pei_mp_services_ppi;
8
mps2_noop_get_number_of_processors(efi_pei_mp_services_ppi * ignored1,efi_uintn_t * number_of_processors,efi_uintn_t * number_of_enabled_processors)9 static efi_return_status_t mps2_noop_get_number_of_processors(
10 efi_pei_mp_services_ppi *ignored1,
11 efi_uintn_t *number_of_processors,
12 efi_uintn_t *number_of_enabled_processors)
13 {
14 *number_of_processors = 1; /* BSP alone */
15 *number_of_enabled_processors = 1; /* BSP alone */
16
17 return FSP_SUCCESS;
18 }
19
mps2_noop_get_processor_info(efi_pei_mp_services_ppi * ignored1,efi_uintn_t ignored2,efi_processor_information * ignored3)20 static efi_return_status_t mps2_noop_get_processor_info(
21 efi_pei_mp_services_ppi *ignored1,
22 efi_uintn_t ignored2,
23 efi_processor_information *ignored3)
24 {
25 return mp_api_unsupported();
26 }
27
mps2_noop_startup_all_aps(efi_pei_mp_services_ppi * ignored1,efi_ap_procedure ignored2,efi_boolean_t ignored3,efi_uintn_t ignored4,void * ignored5)28 static efi_return_status_t mps2_noop_startup_all_aps(
29 efi_pei_mp_services_ppi *ignored1,
30 efi_ap_procedure ignored2, efi_boolean_t ignored3,
31 efi_uintn_t ignored4, void *ignored5)
32 {
33 return mp_api_unsupported();
34 }
35
mps2_noop_startup_all_cpus(efi_pei_mp_services_ppi * ignored1,efi_ap_procedure ignored2,efi_uintn_t ignored3,void * ignored4)36 static efi_return_status_t mps2_noop_startup_all_cpus(
37 efi_pei_mp_services_ppi *ignored1,
38 efi_ap_procedure ignored2,
39 efi_uintn_t ignored3, void *ignored4)
40 {
41 return mp_api_unsupported();
42 }
43
mps2_noop_startup_this_ap(efi_pei_mp_services_ppi * ignored1,efi_ap_procedure ignored2,efi_uintn_t ignored3,efi_uintn_t ignored4,void * ignored5)44 static efi_return_status_t mps2_noop_startup_this_ap(
45 efi_pei_mp_services_ppi *ignored1,
46 efi_ap_procedure ignored2, efi_uintn_t ignored3,
47 efi_uintn_t ignored4, void *ignored5)
48 {
49 return mp_api_unsupported();
50 }
51
mps2_noop_switch_bsp(efi_pei_mp_services_ppi * ignored1,efi_uintn_t ignored2,efi_boolean_t ignored3)52 static efi_return_status_t mps2_noop_switch_bsp(
53 efi_pei_mp_services_ppi *ignored1, efi_uintn_t ignored2,
54 efi_boolean_t ignored3)
55 {
56 return mp_api_unsupported();
57 }
58
mps2_noop_enable_disable_ap(efi_pei_mp_services_ppi * ignored1,efi_uintn_t ignored2,efi_boolean_t ignored3,efi_uint32_t * ignored4)59 static efi_return_status_t mps2_noop_enable_disable_ap(
60 efi_pei_mp_services_ppi *ignored1,
61 efi_uintn_t ignored2, efi_boolean_t ignored3, efi_uint32_t *ignored4)
62 {
63 return mp_api_unsupported();
64 }
65
mps2_noop_identify_processor(efi_pei_mp_services_ppi * ignored1,efi_uintn_t * ignored2)66 static efi_return_status_t mps2_noop_identify_processor(
67 efi_pei_mp_services_ppi *ignored1,
68 efi_uintn_t *ignored2)
69 {
70 return mp_api_unsupported();
71 }
72
73 /*
74 * Default MP Services data structure adhering to the EDK2 UEFIPKG Open
75 * Source version 2 specification
76 */
77
78 static efi_pei_mp_services_ppi mp_service2_noop_ppi = {
79 mps2_noop_get_number_of_processors,
80 mps2_noop_get_processor_info,
81 mps2_noop_startup_all_aps,
82 mps2_noop_startup_this_ap,
83 mps2_noop_switch_bsp,
84 mps2_noop_enable_disable_ap,
85 mps2_noop_identify_processor,
86 mps2_noop_startup_all_cpus,
87 };
88
mp_fill_ppi_services_data(void)89 void *mp_fill_ppi_services_data(void)
90 {
91 return (void *)&mp_service2_noop_ppi;
92 }
93