]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IORegistryEntry.h
xnu-3248.50.21.tar.gz
[apple/xnu.git] / iokit / IOKit / IORegistryEntry.h
index 0c5090f2d989319fe8154af7c1dfeae24ca07e35..906baaa9f15e9876e71569a42ca17406d0444eef 100644 (file)
@@ -42,6 +42,7 @@
 
 extern const OSSymbol * gIONameKey;
 extern const OSSymbol * gIOLocationKey;
+extern const OSSymbol * gIORegistryEntryIDKey;
 
 class IORegistryEntry;
 class IORegistryPlane;
@@ -70,7 +71,10 @@ protected:
 /*! @struct ExpansionData
     @discussion This structure will be used to expand the capablilties of this class in the future.
     */    
-    struct ExpansionData { };
+    struct ExpansionData
+    {
+       uint64_t        fRegistryEntryID;
+    };
 
 /*! @var reserved
     Reserved for future use.  (Internal use only)  */
@@ -97,7 +101,6 @@ public:
                                      IOOptionBits            options =
                                         kIORegistryIterateRecursively |
                                         kIORegistryIterateParents) const;
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 0);
 
 /*! @function copyProperty
     @abstract Synchronized method to obtain a property from a registry entry or one of its parents (or children) in the hierarchy. Available in Mac OS X 10.1 or later.
@@ -112,7 +115,6 @@ public:
                                      IOOptionBits            options =
                                         kIORegistryIterateRecursively |
                                         kIORegistryIterateParents) const;
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 1);
 
 /*! @function copyProperty
     @abstract Synchronized method to obtain a property from a registry entry or one of its parents (or children) in the hierarchy. Available in Mac OS X 10.1 or later.
@@ -127,7 +129,6 @@ public:
                                      IOOptionBits            options =
                                         kIORegistryIterateRecursively |
                                         kIORegistryIterateParents) const;
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 2);
 
 /*! @function copyParentEntry
     @abstract Returns an registry entry's first parent entry in a plane. Available in Mac OS X 10.1 or later.
@@ -136,7 +137,6 @@ public:
     @result Returns the first parent of the registry entry, or zero if the entry is not attached into the registry in that plane. A reference on the entry is returned to caller, which should be released. */
 
     virtual IORegistryEntry * copyParentEntry( const IORegistryPlane * plane ) const;
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 3);
 
 /*! @function copyChildEntry
     @abstract Returns an registry entry's first child entry in a plane. Available in Mac OS X 10.1 or later.
@@ -145,7 +145,6 @@ public:
     @result Returns the first child of the registry entry, or zero if the entry is not attached into the registry in that plane. A reference on the entry is returned to caller, which should be released. */
 
     virtual IORegistryEntry * copyChildEntry( const IORegistryPlane * plane ) const;
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 4);
 
     /* method available in Mac OS X 10.4 or later */
 /*!
@@ -179,10 +178,23 @@ member function's parameter list.
     virtual IOReturn runPropertyAction(Action action, OSObject *target,
                               void *arg0 = 0, void *arg1 = 0,
                               void *arg2 = 0, void *arg3 = 0);
-    OSMetaClassDeclareReservedUsed(IORegistryEntry, 5);
 
 private:
-
+#if __LP64__
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 0);
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 1);
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 2);
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 3);
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 4);
+    OSMetaClassDeclareReservedUnused(IORegistryEntry, 5);
+#else
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 0);
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 1);
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 2);
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 3);
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 4);
+    OSMetaClassDeclareReservedUsed(IORegistryEntry, 5);
+#endif
     OSMetaClassDeclareReservedUnused(IORegistryEntry, 6);
     OSMetaClassDeclareReservedUnused(IORegistryEntry, 7);
     OSMetaClassDeclareReservedUnused(IORegistryEntry, 8);
@@ -249,7 +261,7 @@ public:
     @abstract Standard free method for all IORegistryEntry subclasses.
     @discussion This method will release any resources of the entry, in particular its property table. Note that the registry entry must always be detached from the registry before free may be called, and subclasses (namely IOService) will have additional protocols for removing registry entries. free should never need be called directly. */
 
-    virtual void free( void );
+    virtual void free( void ) APPLE_KEXT_OVERRIDE;
 
 /*! @function setPropertyTable
     @abstract Replace a registry entry's property table.
@@ -320,7 +332,7 @@ public:
 
 /*! @function setProperty
     @abstract Synchronized method to construct and add an OSData property to a registry entry's property table.
-    @discussion This method will add or replace a property in a registry entry's property table, using the OSDictionary::setObject semantics. This method is synchronized with other IORegistryEntry accesses to the property table. The property is created as an OSData copied from the supplied date and length, set in the property table with the given name, and released.
+    @discussion This method will add or replace a property in a registry entry's property table, using the OSDictionary::setObject semantics. This method is synchronized with other IORegistryEntry accesses to the property table. The property is created as an OSData copied from the supplied data and length, set in the property table with the given name, and released.
     @param aKey The property's name as a C-string.
     @param bytes The property's value as a pointer. OSData will copy this data.
     @param length The property's size in bytes, for OSData.
@@ -757,16 +769,34 @@ public:
     static const char * dealiasPath( const char ** opath,
                                     const IORegistryPlane * plane );
 
+/*! @function makePlane
+    @abstract Constructs an IORegistryPlane object.
+    @discussion Most planes in IOKit are created by the OS, although other planes may be created.
+    @param name A C-string name for the new plane, to be copied.
+    @result A new instance of an IORegistryPlane, or zero on failure. */
+
+    static const IORegistryPlane * makePlane( const char * name );
+
+/*!    @abstract Returns an ID for the registry entry that is global to all tasks.
+    @discussion The entry ID returned by getRegistryEntryID can be used to identify a registry entry across all tasks. A registry entry may be looked up by its entry ID by creating a matching dictionary with IORegistryEntryIDMatching() in user space, or <code>IOService::registryEntryIDMatching()</code> in the kernel, to be used with the IOKit matching functions. The ID is valid only until the machine reboots.
+    @result An ID for the registry entry, assigned when the entry is first attached in the registry. */
+
+    uint64_t getRegistryEntryID( void );
+
     /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
     /* * * * * * * * * * * * internals * * * * * * * * * * * */
     /* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-public:
-    static IORegistryEntry * initialize( void );
-    static const IORegistryPlane * makePlane( const char * name );
-    // don't even think about using this
     virtual bool init( IORegistryEntry * from,
                                const IORegistryPlane * inPlane );
+
+#ifdef XNU_KERNEL_PRIVATE
+public:
+#else
+private:
+#endif
+    static IORegistryEntry * initialize( void );
+
 private:
     inline bool arrayMember( OSArray * set,
                             const IORegistryEntry * member,
@@ -779,16 +809,24 @@ private:
                     unsigned int relation,
                     const IORegistryPlane * plane ) const;
 
-    virtual OSArray * getParentSetReference( const IORegistryPlane * plane )
+    APPLE_KEXT_COMPATIBILITY_VIRTUAL
+       OSArray * getParentSetReference( const IORegistryPlane * plane )
                                                                        const;
-    virtual OSArray * getChildSetReference( const IORegistryPlane * plane )
+
+    APPLE_KEXT_COMPATIBILITY_VIRTUAL
+    OSArray * getChildSetReference( const IORegistryPlane * plane )
                                                                        const;
-    virtual IORegistryEntry * getChildFromComponent( const char ** path,
+
+    APPLE_KEXT_COMPATIBILITY_VIRTUAL
+    IORegistryEntry * getChildFromComponent( const char ** path,
                                const IORegistryPlane * plane );
 
-    virtual const OSSymbol * hasAlias(  const IORegistryPlane * plane,
+    APPLE_KEXT_COMPATIBILITY_VIRTUAL
+    const OSSymbol * hasAlias(  const IORegistryPlane * plane,
                                     char * opath = 0, int * length = 0 ) const;
-    virtual const char * matchPathLocation( const char * cmp,
+
+    APPLE_KEXT_COMPATIBILITY_VIRTUAL
+    const char * matchPathLocation( const char * cmp,
                                const IORegistryPlane * plane );
 
 };
@@ -816,7 +854,7 @@ private:
     const IORegistryPlane *    plane;
     IOOptionBits               options;
 
-    virtual void free( void );
+    virtual void free( void ) APPLE_KEXT_OVERRIDE;
 
 public:
 /*! @function iterateOver
@@ -846,7 +884,7 @@ public:
     @discussion This method calls either getNextObjectFlat or getNextObjectRecursive depending on the options the iterator was created with. This implements the OSIterator defined getNextObject method. The object returned is retained while the iterator is pointing at it (its the current entry), or recursing into it. The caller should not release it.
     @result The next registry entry in the iteration (the current entry), or zero if the iteration has finished at this level of recursion. The entry returned is retained while the iterator is pointing at it (its the current entry), or recursing into it. The caller should not release it. */
 
-    virtual IORegistryEntry * getNextObject( void );
+    virtual IORegistryEntry * getNextObject( void ) APPLE_KEXT_OVERRIDE;
 
 /*! @function getNextObjectFlat
     @abstract Return the next object in the registry iteration, ignoring the kIORegistryIterateRecursively option.
@@ -893,18 +931,18 @@ public:
     @abstract Exits all levels of recursion, restoring the iterator to its state at creation.
     @discussion This method exits all levels of recursion, and restores the iterator to its state at creation. */
 
-    virtual void reset( void );
+    virtual void reset( void ) APPLE_KEXT_OVERRIDE;
 
 /*! @function isValid
     @abstract Checks that no registry changes have invalidated the iteration.
     @discussion If a registry iteration is invalidated by changes to the registry, it will be made invalid, the currentEntry will be considered zero, and further calls to getNextObject et al. will return zero. The iterator should be reset to restart the iteration when this happens.
     @result false if the iterator has been invalidated by changes to the registry, true otherwise. */
 
-    virtual bool isValid( void );
+    virtual bool isValid( void ) APPLE_KEXT_OVERRIDE;
 
 /*! @function iterateAll
     @abstract Iterates all entries (with getNextObject) and returns a set of all returned entries.
-    @discussion This method will reset, then iterate all entries in the iteration (with getNextObject) until successful (ie. the iterator is valid at the end of the iteration).
+    @discussion This method will reset, then iterate all entries in the iteration (with getNextObject).
     @result A set of entries returned by the iteration. The caller should release the set when it has finished with it. Zero is returned on a resource failure. */
 
     virtual OSOrderedSet * iterateAll( void );