xref: /xnu-11417.140.69/iokit/IOKit/IONVRAM.h (revision 43a90889846e00bfb5cf1d255cdc0a701a1e05a4)
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