1*43a90889SApple OSS Distributions /* 2*43a90889SApple OSS Distributions * Copyright (c) 1998-2006 Apple Computer, Inc. All rights reserved. 3*43a90889SApple OSS Distributions * Copyright (c) 2007-2021 Apple Inc. All rights reserved. 4*43a90889SApple OSS Distributions * 5*43a90889SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 6*43a90889SApple OSS Distributions * 7*43a90889SApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 8*43a90889SApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 9*43a90889SApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 10*43a90889SApple OSS Distributions * compliance with the License. The rights granted to you under the License 11*43a90889SApple OSS Distributions * may not be used to create, or enable the creation or redistribution of, 12*43a90889SApple OSS Distributions * unlawful or unlicensed copies of an Apple operating system, or to 13*43a90889SApple OSS Distributions * circumvent, violate, or enable the circumvention or violation of, any 14*43a90889SApple OSS Distributions * terms of an Apple operating system software license agreement. 15*43a90889SApple OSS Distributions * 16*43a90889SApple OSS Distributions * Please obtain a copy of the License at 17*43a90889SApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this file. 18*43a90889SApple OSS Distributions * 19*43a90889SApple OSS Distributions * The Original Code and all software distributed under the License are 20*43a90889SApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 21*43a90889SApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 22*43a90889SApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 23*43a90889SApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 24*43a90889SApple OSS Distributions * Please see the License for the specific language governing rights and 25*43a90889SApple OSS Distributions * limitations under the License. 26*43a90889SApple OSS Distributions * 27*43a90889SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 28*43a90889SApple OSS Distributions */ 29*43a90889SApple OSS Distributions 30*43a90889SApple OSS Distributions #ifndef _IOKIT_IONVRAM_H 31*43a90889SApple OSS Distributions #define _IOKIT_IONVRAM_H 32*43a90889SApple OSS Distributions 33*43a90889SApple OSS Distributions #ifdef __cplusplus 34*43a90889SApple OSS Distributions #include <libkern/c++/OSPtr.h> 35*43a90889SApple OSS Distributions #include <IOKit/IOKitKeys.h> 36*43a90889SApple OSS Distributions #include <IOKit/IOService.h> 37*43a90889SApple OSS Distributions #include <IOKit/IODeviceTreeSupport.h> 38*43a90889SApple OSS Distributions #include <IOKit/nvram/IONVRAMController.h> 39*43a90889SApple OSS Distributions #endif /* __cplusplus */ 40*43a90889SApple OSS Distributions #include <uuid/uuid.h> 41*43a90889SApple OSS Distributions 42*43a90889SApple OSS Distributions enum NVRAMPartitionType { 43*43a90889SApple OSS Distributions kIONVRAMPartitionTypeUnknown, 44*43a90889SApple OSS Distributions kIONVRAMPartitionSystem, 45*43a90889SApple OSS Distributions kIONVRAMPartitionCommon 46*43a90889SApple OSS Distributions }; 47*43a90889SApple OSS Distributions 48*43a90889SApple OSS Distributions enum IONVRAMVariableType { 49*43a90889SApple OSS Distributions kOFVariableTypeBoolean = 1, 50*43a90889SApple OSS Distributions kOFVariableTypeNumber, 51*43a90889SApple OSS Distributions kOFVariableTypeString, 52*43a90889SApple OSS Distributions kOFVariableTypeData 53*43a90889SApple OSS Distributions }; 54*43a90889SApple OSS Distributions 55*43a90889SApple OSS Distributions enum IONVRAMOperation { 56*43a90889SApple OSS Distributions kIONVRAMOperationInit, 57*43a90889SApple OSS Distributions kIONVRAMOperationRead, 58*43a90889SApple OSS Distributions kIONVRAMOperationWrite, 59*43a90889SApple OSS Distributions kIONVRAMOperationDelete, 60*43a90889SApple OSS Distributions kIONVRAMOperationObliterate, 61*43a90889SApple OSS Distributions kIONVRAMOperationReset 62*43a90889SApple OSS Distributions }; 63*43a90889SApple OSS Distributions 64*43a90889SApple OSS Distributions enum { 65*43a90889SApple OSS Distributions // Deprecated but still used in AppleEFIRuntime for now 66*43a90889SApple OSS Distributions kOFVariablePermRootOnly = 0, 67*43a90889SApple OSS Distributions kOFVariablePermUserRead, 68*43a90889SApple OSS Distributions kOFVariablePermUserWrite, 69*43a90889SApple OSS Distributions kOFVariablePermKernelOnly 70*43a90889SApple OSS Distributions }; 71*43a90889SApple OSS Distributions 72*43a90889SApple OSS Distributions #ifdef __cplusplus 73*43a90889SApple OSS Distributions 74*43a90889SApple OSS Distributions class IODTNVRAMVariables; 75*43a90889SApple OSS Distributions class IODTNVRAMDiags; 76*43a90889SApple OSS Distributions class IODTNVRAMPlatformNotifier; 77*43a90889SApple OSS Distributions class IODTNVRAMFormatHandler; 78*43a90889SApple OSS Distributions 79*43a90889SApple OSS Distributions class IODTNVRAM : public IOService 80*43a90889SApple OSS Distributions { 81*43a90889SApple OSS Distributions OSDeclareDefaultStructors(IODTNVRAM); 82*43a90889SApple OSS Distributions 83*43a90889SApple OSS Distributions private: 84*43a90889SApple OSS Distributions friend class IODTNVRAMVariables; 85*43a90889SApple OSS Distributions friend class IONVRAMCHRPHandler; 86*43a90889SApple OSS Distributions friend class IONVRAMV3Handler; 87*43a90889SApple OSS Distributions 88*43a90889SApple OSS Distributions IODTNVRAMPlatformNotifier *_notifier; 89*43a90889SApple OSS Distributions IODTNVRAMDiags *_diags; 90*43a90889SApple OSS Distributions IODTNVRAMFormatHandler *_format; 91*43a90889SApple OSS Distributions 92*43a90889SApple OSS Distributions IODTNVRAMVariables *_commonService; 93*43a90889SApple OSS Distributions IODTNVRAMVariables *_systemService; 94*43a90889SApple OSS Distributions 95*43a90889SApple OSS Distributions SInt32 _lastDeviceSync; 96*43a90889SApple OSS Distributions bool _freshInterval; 97*43a90889SApple OSS Distributions bool x86Device = true; 98*43a90889SApple OSS Distributions 99*43a90889SApple OSS Distributions void initImageFormat(void); 100*43a90889SApple OSS Distributions 101*43a90889SApple OSS Distributions uint32_t getNVRAMSize(void); 102*43a90889SApple OSS Distributions 103*43a90889SApple OSS Distributions IOReturn flushGUID(const uuid_t guid, IONVRAMOperation op); 104*43a90889SApple OSS Distributions bool handleSpecialVariables(const char *name, const uuid_t guid, const OSObject *obj, IOReturn *error); 105*43a90889SApple OSS Distributions 106*43a90889SApple OSS Distributions IOReturn setPropertyInternal(const OSSymbol *aKey, OSObject *anObject); 107*43a90889SApple OSS Distributions IOReturn removePropertyInternal(const OSSymbol *aKey); 108*43a90889SApple OSS Distributions OSSharedPtr<OSObject> copyPropertyWithGUIDAndName(const uuid_t guid, const char *name) const; 109*43a90889SApple OSS Distributions IOReturn removePropertyWithGUIDAndName(const uuid_t guid, const char *name); 110*43a90889SApple OSS Distributions IOReturn setPropertyWithGUIDAndName(const uuid_t guid, const char *name, OSObject *anObject); 111*43a90889SApple OSS Distributions 112*43a90889SApple OSS Distributions IOReturn syncInternal(bool rateLimit); 113*43a90889SApple OSS Distributions bool safeToSync(void); 114*43a90889SApple OSS Distributions 115*43a90889SApple OSS Distributions public: 116*43a90889SApple OSS Distributions virtual bool init(IORegistryEntry *old, const IORegistryPlane *plane) APPLE_KEXT_OVERRIDE; 117*43a90889SApple OSS Distributions virtual bool start(IOService * provider) APPLE_KEXT_OVERRIDE; 118*43a90889SApple OSS Distributions 119*43a90889SApple OSS Distributions virtual void registerNVRAMController(IONVRAMController *controller); 120*43a90889SApple OSS Distributions 121*43a90889SApple OSS Distributions virtual IOReturn sync(void); 122*43a90889SApple OSS Distributions virtual void reload(void); 123*43a90889SApple OSS Distributions virtual IOReturn getVarDict(OSSharedPtr<OSDictionary> &varDictCopy); 124*43a90889SApple OSS Distributions virtual bool serializeProperties(OSSerialize *s) const APPLE_KEXT_OVERRIDE; 125*43a90889SApple OSS Distributions virtual OSPtr<OSDictionary> dictionaryWithProperties(void) const APPLE_KEXT_OVERRIDE; 126*43a90889SApple OSS Distributions virtual OSPtr<OSObject> copyProperty(const OSSymbol *aKey) const APPLE_KEXT_OVERRIDE; 127*43a90889SApple OSS Distributions virtual OSPtr<OSObject> copyProperty(const char *aKey) const APPLE_KEXT_OVERRIDE; 128*43a90889SApple OSS Distributions virtual OSObject *getProperty(const OSSymbol *aKey) const APPLE_KEXT_OVERRIDE; 129*43a90889SApple OSS Distributions virtual OSObject *getProperty(const char *aKey) const APPLE_KEXT_OVERRIDE; 130*43a90889SApple OSS Distributions virtual bool setProperty(const OSSymbol *aKey, OSObject *anObject) APPLE_KEXT_OVERRIDE; 131*43a90889SApple OSS Distributions virtual void removeProperty(const OSSymbol *aKey) APPLE_KEXT_OVERRIDE; 132*43a90889SApple OSS Distributions virtual IOReturn setProperties(OSObject *properties) APPLE_KEXT_OVERRIDE; 133*43a90889SApple OSS Distributions 134*43a90889SApple OSS Distributions virtual IOReturn readXPRAM(IOByteCount offset, uint8_t *buffer, 135*43a90889SApple OSS Distributions IOByteCount length); 136*43a90889SApple OSS Distributions virtual IOReturn writeXPRAM(IOByteCount offset, uint8_t *buffer, 137*43a90889SApple OSS Distributions IOByteCount length); 138*43a90889SApple OSS Distributions 139*43a90889SApple OSS Distributions virtual IOReturn readNVRAMProperty(IORegistryEntry *entry, 140*43a90889SApple OSS Distributions const OSSymbol **name, 141*43a90889SApple OSS Distributions OSData **value); 142*43a90889SApple OSS Distributions virtual IOReturn writeNVRAMProperty(IORegistryEntry *entry, 143*43a90889SApple OSS Distributions const OSSymbol *name, 144*43a90889SApple OSS Distributions OSData *value); 145*43a90889SApple OSS Distributions 146*43a90889SApple OSS Distributions virtual OSDictionary *getNVRAMPartitions(void); 147*43a90889SApple OSS Distributions 148*43a90889SApple OSS Distributions virtual IOReturn readNVRAMPartition(const OSSymbol *partitionID, 149*43a90889SApple OSS Distributions IOByteCount offset, uint8_t *buffer, 150*43a90889SApple OSS Distributions IOByteCount length); 151*43a90889SApple OSS Distributions 152*43a90889SApple OSS Distributions virtual IOReturn writeNVRAMPartition(const OSSymbol *partitionID, 153*43a90889SApple OSS Distributions IOByteCount offset, uint8_t *buffer, 154*43a90889SApple OSS Distributions IOByteCount length); 155*43a90889SApple OSS Distributions 156*43a90889SApple OSS Distributions virtual IOByteCount savePanicInfo(uint8_t *buffer, IOByteCount length); 157*43a90889SApple OSS Distributions }; 158*43a90889SApple OSS Distributions 159*43a90889SApple OSS Distributions #endif /* __cplusplus */ 160*43a90889SApple OSS Distributions 161*43a90889SApple OSS Distributions #endif /* !_IOKIT_IONVRAM_H */ 162