1/* 2 * Copyright 2015, Bruno Bierbaumer. All rights reserved. 3 * Copyright 2019-2020, Haiku, Inc. All rights reserved. 4 * Released under the terms of the MIT License 5 */ 6 7 8#include <efi/protocol/apple-setos.h> 9#include <KernelExport.h> 10 11#include "efi_platform.h" 12 13 14#define APPLE_FAKE_OS_VENDOR "Apple Inc." 15#define APPLE_FAKE_OS_VERSION "Mac OS X 10.9" 16 17 18// Apple Hardware configures hardware differently depending on 19// the operating system being booted. Examples include disabling 20// and powering down the internal GPU on some device models. 21static void 22quirks_fake_apple(void) 23{ 24 efi_guid appleSetOSProtocolGUID = EFI_APPLE_SET_OS_GUID; 25 efi_apple_set_os_protocol* set_os = NULL; 26 27 efi_status status = kSystemTable->BootServices->LocateProtocol( 28 &appleSetOSProtocolGUID, NULL, (void**)&set_os); 29 30 // If not relevant, we will exit here (the protocol doesn't exist) 31 if (status != EFI_SUCCESS || set_os == NULL) { 32 return; 33 } 34 35 dprintf("Located Apple set_os protocol, applying EFI Apple Quirks...\n"); 36 37 if (set_os->Revision != 0) { 38 status = set_os->SetOSVersion((char*)APPLE_FAKE_OS_VERSION); 39 if (status != EFI_SUCCESS) { 40 dprintf("%s: unable to set os version!\n", __func__); 41 return; 42 } 43 } 44 45 status = set_os->SetOSVendor((char*)APPLE_FAKE_OS_VENDOR); 46 if (status != EFI_SUCCESS) { 47 dprintf("%s: unable to set os version!\n", __func__); 48 return; 49 } 50 51 return; 52} 53 54 55void 56quirks_init(void) 57{ 58 quirks_fake_apple(); 59} 60