X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/9bccf70c0258c7cac2dcb80011b2a964d884c552..0a7de7458d150b5d4dffc935ba399be265ef0a1a:/iokit/IOKit/IONVRAM.h?ds=sidebyside diff --git a/iokit/IOKit/IONVRAM.h b/iokit/IOKit/IONVRAM.h index 1e09641a7..a4da3d4fa 100644 --- a/iokit/IOKit/IONVRAM.h +++ b/iokit/IOKit/IONVRAM.h @@ -1,158 +1,186 @@ /* - * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 1998-2006 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2007-2012 Apple Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #ifndef _IOKIT_IONVRAM_H #define _IOKIT_IONVRAM_H +#ifdef __cplusplus +#include #include #include #include - +#endif /* __cplusplus */ #define kIODTNVRAMOFPartitionName "common" #define kIODTNVRAMXPRAMPartitionName "APL,MacOS75" #define kIODTNVRAMPanicInfoPartitonName "APL,OSXPanic" #define kIODTNVRAMFreePartitionName "wwwwwwwwwwww" -#define kIODTNVRAMPanicInfoKey "aapl,panic-info" +#define MIN_SYNC_NOW_INTERVAL 15*60 /* Minimum 15 Minutes interval mandated */ enum { - kIODTNVRAMImageSize = 0x2000, - kIODTNVRAMXPRAMSize = 0x0100, - kIODTNVRAMNameRegistrySize = 0x0400 + kIODTNVRAMImageSize = 0x2000, + kIODTNVRAMXPRAMSize = 0x0100, + kIODTNVRAMNameRegistrySize = 0x0400 }; enum { - kOFVariableTypeBoolean = 1, - kOFVariableTypeNumber, - kOFVariableTypeString, - kOFVariableTypeData + kOFVariableTypeBoolean = 1, + kOFVariableTypeNumber, + kOFVariableTypeString, + kOFVariableTypeData }; enum { - kOFVariablePermRootOnly = 0, - kOFVariablePermUserRead, - kOFVariablePermUserWrite + kOFVariablePermRootOnly = 0, + kOFVariablePermUserRead, + kOFVariablePermUserWrite, + kOFVariablePermKernelOnly }; +#ifdef __cplusplus + class IODTNVRAM : public IOService { - OSDeclareDefaultStructors(IODTNVRAM); - + OSDeclareDefaultStructors(IODTNVRAM); + private: - IONVRAMController *_nvramController; - const OSSymbol *_registryPropertiesKey; - UInt8 *_nvramImage; - bool _nvramImageDirty; - UInt32 _ofPartitionOffset; - UInt32 _ofPartitionSize; - UInt8 *_ofImage; - bool _ofImageDirty; - OSDictionary *_ofDict; - OSDictionary *_nvramPartitionOffsets; - OSDictionary *_nvramPartitionLengths; - UInt32 _xpramPartitionOffset; - UInt32 _xpramPartitionSize; - UInt8 *_xpramImage; - UInt32 _nrPartitionOffset; - UInt32 _nrPartitionSize; - UInt8 *_nrImage; - UInt32 _piPartitionOffset; - UInt32 _piPartitionSize; - UInt8 *_piImage; - bool _systemPaniced; - - virtual UInt8 calculatePartitionChecksum(UInt8 *partitionHeader); - virtual IOReturn initOFVariables(void); - virtual IOReturn syncOFVariables(void); - virtual UInt32 getOFVariableType(const OSSymbol *propSymbol) const; - virtual UInt32 getOFVariablePerm(const OSSymbol *propSymbol) const; - virtual bool getOWVariableInfo(UInt32 variableNumber, const OSSymbol **propSymbol, - UInt32 *propType, UInt32 *propOffset); - virtual bool convertPropToObject(UInt8 *propName, UInt32 propNameLength, - UInt8 *propData, UInt32 propDataLength, - const OSSymbol **propSymbol, - OSObject **propObject); - virtual bool convertObjectToProp(UInt8 *buffer, UInt32 *length, - const OSSymbol *propSymbol, OSObject *propObject); - virtual UInt16 generateOWChecksum(UInt8 *buffer); - virtual bool validateOWChecksum(UInt8 *buffer); - virtual void updateOWBootArgs(const OSSymbol *key, OSObject *value); - virtual bool searchNVRAMProperty(struct IONVRAMDescriptor *hdr, - UInt32 *where); - - virtual IOReturn readNVRAMPropertyType0(IORegistryEntry *entry, - const OSSymbol **name, - OSData **value); - virtual IOReturn writeNVRAMPropertyType0(IORegistryEntry *entry, - const OSSymbol *name, - OSData * value); - - virtual OSData *unescapeBytesToData(UInt8 *bytes, UInt32 length); - virtual OSData *escapeDataToData(OSData * value); - - virtual IOReturn readNVRAMPropertyType1(IORegistryEntry *entry, - const OSSymbol **name, - OSData **value); - virtual IOReturn writeNVRAMPropertyType1(IORegistryEntry *entry, - const OSSymbol *name, - OSData *value); - + IONVRAMController *_nvramController; + const OSSymbol *_registryPropertiesKey; + UInt8 *_nvramImage; + __unused bool _nvramImageDirty; + UInt32 _ofPartitionOffset; + UInt32 _ofPartitionSize; + UInt8 *_ofImage; + __unused bool _ofImageDirty; + OSDictionary *_ofDict; + OSDictionary *_nvramPartitionOffsets; + OSDictionary *_nvramPartitionLengths; + UInt32 _resv0 __unused; + UInt32 _resv1 __unused; + IOLock *_ofLock; + UInt32 _resv2 __unused; + UInt32 _resv3 __unused; + UInt8 *_resv4 __unused; + UInt32 _piPartitionOffset; + UInt32 _piPartitionSize; + UInt8 *_piImage; + bool _systemPaniced; + SInt32 _lastDeviceSync; + bool _freshInterval; + bool _isProxied; + + virtual UInt8 calculatePartitionChecksum(UInt8 *partitionHeader); + virtual IOReturn initOFVariables(void); public: - virtual bool init(IORegistryEntry *old, const IORegistryPlane *plane); - - virtual void registerNVRAMController(IONVRAMController *nvram); - - virtual void sync(void); - - virtual bool serializeProperties(OSSerialize * serialize) const; - virtual OSObject *getProperty(const OSSymbol *aKey) const; - virtual OSObject *getProperty(const char *aKey) const; - virtual bool setProperty(const OSSymbol *aKey, OSObject *anObject); - virtual IOReturn setProperties(OSObject *properties); - - virtual IOReturn readXPRAM(IOByteCount offset, UInt8 *buffer, - IOByteCount length); - virtual IOReturn writeXPRAM(IOByteCount offset, UInt8 *buffer, - IOByteCount length); - - virtual IOReturn readNVRAMProperty(IORegistryEntry *entry, - const OSSymbol **name, - OSData **value); - virtual IOReturn writeNVRAMProperty(IORegistryEntry *entry, - const OSSymbol *name, - OSData *value); - - virtual OSDictionary *getNVRAMPartitions(void); - - virtual IOReturn readNVRAMPartition(const OSSymbol *partitionID, - IOByteCount offset, UInt8 *buffer, - IOByteCount length); - - virtual IOReturn writeNVRAMPartition(const OSSymbol *partitionID, - IOByteCount offset, UInt8 *buffer, - IOByteCount length); - - virtual IOByteCount savePanicInfo(UInt8 *buffer, IOByteCount length); + virtual IOReturn syncOFVariables(void); +private: + virtual UInt32 getOFVariableType(const OSSymbol *propSymbol) const; + virtual UInt32 getOFVariablePerm(const OSSymbol *propSymbol) const; + virtual bool getOWVariableInfo(UInt32 variableNumber, const OSSymbol **propSymbol, + UInt32 *propType, UInt32 *propOffset); + virtual bool convertPropToObject(UInt8 *propName, UInt32 propNameLength, + UInt8 *propData, UInt32 propDataLength, + const OSSymbol **propSymbol, + OSObject **propObject); + virtual bool convertObjectToProp(UInt8 *buffer, UInt32 *length, + const OSSymbol *propSymbol, OSObject *propObject); + virtual UInt16 generateOWChecksum(UInt8 *buffer); + virtual bool validateOWChecksum(UInt8 *buffer); + virtual void updateOWBootArgs(const OSSymbol *key, OSObject *value); + virtual bool searchNVRAMProperty(struct IONVRAMDescriptor *hdr, + UInt32 *where); + + virtual IOReturn readNVRAMPropertyType0(IORegistryEntry *entry, + const OSSymbol **name, + OSData **value); + virtual IOReturn writeNVRAMPropertyType0(IORegistryEntry *entry, + const OSSymbol *name, + OSData * value); + + virtual OSData *unescapeBytesToData(const UInt8 *bytes, UInt32 length); + virtual OSData *escapeDataToData(OSData * value); + + virtual IOReturn readNVRAMPropertyType1(IORegistryEntry *entry, + const OSSymbol **name, + OSData **value); + virtual IOReturn writeNVRAMPropertyType1(IORegistryEntry *entry, + const OSSymbol *name, + OSData *value); + + void initNVRAMImage(void); + void initProxyData(void); + IOReturn syncVariables(void); + +public: + virtual bool init(IORegistryEntry *old, const IORegistryPlane *plane) APPLE_KEXT_OVERRIDE; + + virtual void registerNVRAMController(IONVRAMController *nvram); + + virtual void sync(void); + + virtual bool serializeProperties(OSSerialize *s) const APPLE_KEXT_OVERRIDE; + virtual OSObject *copyProperty(const OSSymbol *aKey) const APPLE_KEXT_OVERRIDE; + virtual OSObject *copyProperty(const char *aKey) const APPLE_KEXT_OVERRIDE; + virtual OSObject *getProperty(const OSSymbol *aKey) const APPLE_KEXT_OVERRIDE; + virtual OSObject *getProperty(const char *aKey) const APPLE_KEXT_OVERRIDE; + virtual bool setProperty(const OSSymbol *aKey, OSObject *anObject) APPLE_KEXT_OVERRIDE; + virtual void removeProperty(const OSSymbol *aKey) APPLE_KEXT_OVERRIDE; + virtual IOReturn setProperties(OSObject *properties) APPLE_KEXT_OVERRIDE; + + virtual IOReturn readXPRAM(IOByteCount offset, UInt8 *buffer, + IOByteCount length); + virtual IOReturn writeXPRAM(IOByteCount offset, UInt8 *buffer, + IOByteCount length); + + virtual IOReturn readNVRAMProperty(IORegistryEntry *entry, + const OSSymbol **name, + OSData **value); + virtual IOReturn writeNVRAMProperty(IORegistryEntry *entry, + const OSSymbol *name, + OSData *value); + + virtual OSDictionary *getNVRAMPartitions(void); + + virtual IOReturn readNVRAMPartition(const OSSymbol *partitionID, + IOByteCount offset, UInt8 *buffer, + IOByteCount length); + + virtual IOReturn writeNVRAMPartition(const OSSymbol *partitionID, + IOByteCount offset, UInt8 *buffer, + IOByteCount length); + + virtual IOByteCount savePanicInfo(UInt8 *buffer, IOByteCount length); + virtual bool safeToSync(void); + void syncInternal(bool rateLimit); }; +#endif /* __cplusplus */ + #endif /* !_IOKIT_IONVRAM_H */