12#include <Library/BaseLib.h>
13#include <Library/MemoryAllocationLib.h>
15#include <Library/UefiBootServicesTableLib.h>
16#include <Library/UefiRuntimeServicesTableLib.h>
20#define OC_MENU_TOGGLE_SIP "Toggle SIP (%a)"
21#define OC_MENU_TOGGLE_SIP_SHOW_CSR "Toggle SIP (0x%X:%a)"
22#define OC_MENU_TOGGLE_SIP_MAX_SIZE (\
23 sizeof(OC_MENU_TOGGLE_SIP_SHOW_CSR) \
24 + sizeof(UINT32) * 2 * sizeof (CHAR8) - L_STR_LEN("%X") \
25 + L_STR_LEN("Disabled") - L_STR_LEN("%a"))
40 UINT32 CsrActiveConfig;
43 if (EFI_ERROR (Status)) {
49 if (EFI_ERROR (Status)) {
58 "BEP: SystemActionSetSip csr-active-config=0x%X (SIP %a) - %r\n",
60 (IsEnabled ?
"enabled" :
"disabled"),
79 .AudioBasePath = NULL,
89 IN CONST EFI_HANDLE Device OPTIONAL,
95 UINT32 CsrActiveConfig;
102 if (Device != NULL) {
103 return EFI_NOT_FOUND;
110 if (!EFI_ERROR (Status) || (Status == EFI_NOT_FOUND)) {
117 if (Status == EFI_NOT_FOUND) {
132 DEBUG ((DEBUG_WARN,
"BEP: ToggleSip failed to read csr-active-config, aborting! - %r\n", Status));
138 return EFI_OUT_OF_RESOURCES;
147 IsEnabled ?
"Enabled" :
"Disabled"
154 IsEnabled ?
"Enabled" :
"Disabled"
158 if (EFI_ERROR (Status)) {
177 "BEP: Toggle SIP entry, currently %a, will change 0x%X->0x%X%a\n",
178 (IsEnabled ?
"enabled" :
"disabled"),
181 ((
mAttributes & EFI_VARIABLE_NON_VOLATILE) == 0 ?
" (volatile)" :
"")
200 if (NumEntries == 0) {
207 for (Index = 0; Index < NumEntries; Index++) {
208 if (Entries[Index]->Name != NULL) {
209 FreePool ((VOID *)Entries[Index]->Name);
225 IN EFI_HANDLE ImageHandle,
226 IN EFI_SYSTEM_TABLE *SystemTable
230 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
237 Status =
gBS->HandleProtocol (
240 (VOID **)&LoadedImage
242 if (EFI_ERROR (Status)) {
248 if (!EFI_ERROR (Status)) {
249 for (Index = 0; Index < ParsedLoadOptions->
Count; Index++) {
251 if (Option[0] != L
'-') {
253 Status = StrHexToUintnS (Option, NULL, &Data);
255 Status = StrDecimalToUintnS (Option, NULL, &Data);
258 if (EFI_ERROR (Status)) {
259 DEBUG ((DEBUG_WARN,
"BEP: ToggleSip cannot parse %s - %r\n", Option, Status));
271 ASSERT (ParsedLoadOptions == NULL);
273 if (Status != EFI_NOT_FOUND) {
283 DEBUG ((DEBUG_WARN,
"BEP: Specified value 0x%X will not disable SIP!\n",
mCsrUserConfig));
289 Status =
gBS->InstallMultipleProtocolInterfaces (
#define OC_CSR_DISABLE_FLAGS
#define CSR_APPLE_SIP_NVRAM_NV_ATTR
#define ARRAY_SIZE(Array)
#define OC_VOICE_OVER_AUDIO_FILE_SIP_IS_ENABLED
#define OC_VOICE_OVER_AUDIO_FILE_SIP_IS_DISABLED
#define OC_VOICE_OVER_AUDIO_BASE_TYPE_OPEN_CORE
EFI_GUID gOcBootEntryProtocolGuid
#define OC_BOOT_ENTRY_PROTOCOL_REVISION
#define OC_FLAVOUR_TOGGLE_SIP_DISABLED
OC_PARSED_VAR * OcParsedVarsItemAt(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST UINTN Index)
EFI_STATUS OcParseLoadOptions(IN CONST EFI_LOADED_IMAGE_PROTOCOL *LoadedImage, OUT OC_FLEX_ARRAY **ParsedVars)
BOOLEAN OcHasParsedVar(IN CONST OC_FLEX_ARRAY *ParsedVars, IN CONST VOID *Name, IN CONST OC_STRING_FORMAT StringFormat)
#define OC_FLAVOUR_TOGGLE_SIP_ENABLED
VOID OcFlexArrayFree(IN OUT OC_FLEX_ARRAY **FlexArray)
EFI_STATUS EFIAPI OcAsciiSafeSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
BOOLEAN EFIAPI OcUnicodeStartsWith(IN CONST CHAR16 *String, IN CONST CHAR16 *SearchString, IN BOOLEAN CaseInsensitiveMatch)
EFI_STATUS OcGetSip(OUT UINT32 *CsrActiveConfig, OUT UINT32 *Attributes OPTIONAL)
BOOLEAN OcIsSipEnabled(IN EFI_STATUS GetStatus, IN UINT32 CsrActiveConfig)
EFI_STATUS OcSetSip(IN UINT32 *CsrActiveConfig, IN UINT32 Attributes)
#define OC_MENU_TOGGLE_SIP
STATIC UINT32 mAttributes
STATIC OC_BOOT_ENTRY_PROTOCOL mToggleSipBootEntryProtocol
STATIC EFI_STATUS SystemActionSetSip(IN OUT OC_PICKER_CONTEXT *Context)
EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
#define OC_MENU_TOGGLE_SIP_MAX_SIZE
STATIC VOID EFIAPI ToggleSipFreeBootEntries(IN OC_PICKER_ENTRY **Entries, IN UINTN NumEntries)
STATIC UINT32 mCsrNextConfig
#define OC_MENU_TOGGLE_SIP_SHOW_CSR
STATIC OC_PICKER_ENTRY mToggleSipBootEntries[1]
STATIC EFI_STATUS EFIAPI ToggleSipGetBootEntries(IN OUT OC_PICKER_CONTEXT *PickerContext, IN CONST EFI_HANDLE Device OPTIONAL, OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
STATIC UINT32 mCsrUserConfig
EFI_GUID gEfiLoadedImageProtocolGuid
OC_PARSED_VAR_UNICODE Unicode