113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
| /***********************************************************
 | |
| 
 | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | |
| AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | |
| AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 | |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | |
| 
 | |
| ******************************************************************/
 | |
| 
 | |
| #ifndef PRIVATES_H
 | |
| #define PRIVATES_H 1
 | |
| 
 | |
| #include "dix.h"
 | |
| #include "resource.h"
 | |
| 
 | |
| /*****************************************************************
 | |
|  * STUFF FOR PRIVATES
 | |
|  *****************************************************************/
 | |
| 
 | |
| typedef int *DevPrivateKey;
 | |
| struct _Private;
 | |
| typedef struct _Private PrivateRec;
 | |
| 
 | |
| /*
 | |
|  * Request pre-allocated private space for your driver/module.
 | |
|  * Calling this is not necessary if only a pointer by itself is needed.
 | |
|  */
 | |
| extern _X_EXPORT int
 | |
| dixRequestPrivate(const DevPrivateKey key, unsigned size);
 | |
| 
 | |
| /*
 | |
|  * Allocates a new private and attaches it to an existing object.
 | |
|  */
 | |
| extern _X_EXPORT pointer *
 | |
| dixAllocatePrivate(PrivateRec **privates, const DevPrivateKey key);
 | |
| 
 | |
| /*
 | |
|  * Look up a private pointer.
 | |
|  */
 | |
| extern _X_EXPORT pointer
 | |
| dixLookupPrivate(PrivateRec **privates, const DevPrivateKey key);
 | |
| 
 | |
| /*
 | |
|  * Look up the address of a private pointer.
 | |
|  */
 | |
| extern _X_EXPORT pointer *
 | |
| dixLookupPrivateAddr(PrivateRec **privates, const DevPrivateKey key);
 | |
| 
 | |
| /*
 | |
|  * Set a private pointer.
 | |
|  */
 | |
| extern _X_EXPORT int
 | |
| dixSetPrivate(PrivateRec **privates, const DevPrivateKey key, pointer val);
 | |
| 
 | |
| /*
 | |
|  * Register callbacks to be called on private allocation/freeing.
 | |
|  * The calldata argument to the callbacks is a PrivateCallbackPtr.
 | |
|  */
 | |
| typedef struct _PrivateCallback {
 | |
|     DevPrivateKey key;	/* private registration key */
 | |
|     pointer *value;	/* address of private pointer */
 | |
| } PrivateCallbackRec;
 | |
| 
 | |
| extern _X_EXPORT int
 | |
| dixRegisterPrivateInitFunc(const DevPrivateKey key, 
 | |
| 			   CallbackProcPtr callback, pointer userdata);
 | |
| 
 | |
| extern _X_EXPORT int
 | |
| dixRegisterPrivateDeleteFunc(const DevPrivateKey key,
 | |
| 			     CallbackProcPtr callback, pointer userdata);
 | |
| 
 | |
| /*
 | |
|  * Frees private data.
 | |
|  */
 | |
| extern _X_EXPORT void
 | |
| dixFreePrivates(PrivateRec *privates);
 | |
| 
 | |
| /*
 | |
|  * Resets the subsystem, called from the main loop.
 | |
|  */
 | |
| extern _X_EXPORT int
 | |
| dixResetPrivates(void);
 | |
| 
 | |
| /*
 | |
|  * These next two functions are necessary because the position of
 | |
|  * the devPrivates field varies by structure and calling code might
 | |
|  * only know the resource type, not the structure definition.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Looks up the offset where the devPrivates field is located.
 | |
|  * Returns -1 if no offset has been registered for the resource type.
 | |
|  */
 | |
| extern _X_EXPORT int
 | |
| dixLookupPrivateOffset(RESTYPE type);
 | |
| 
 | |
| /*
 | |
|  * Specifies the offset where the devPrivates field is located.
 | |
|  * A negative value indicates no devPrivates field is available.
 | |
|  */
 | |
| extern _X_EXPORT int
 | |
| dixRegisterPrivateOffset(RESTYPE type, int offset);
 | |
| 
 | |
| /*
 | |
|  * Convenience macro for adding an offset to an object pointer
 | |
|  * when making a call to one of the devPrivates functions
 | |
|  */
 | |
| #define DEVPRIV_AT(ptr, offset) ((PrivateRec **)((char *)ptr + offset))
 | |
| 
 | |
| #endif /* PRIVATES_H */
 |