This is a wrapper around the interfaces defined in an earlier commit, and is also used by various userspace (either by a libdrm backend, or libpciaccess) tools/tests. In the future this will be extended to handle channels, replacing some long-unloved code we currently use, and allow fifo/display/mpeg (hi Ilia ;)) engines to all be exposed in the same way. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef __NVIF_CLIENT_H__
 | 
						|
#define __NVIF_CLIENT_H__
 | 
						|
 | 
						|
#include "object.h"
 | 
						|
 | 
						|
struct nvif_client {
 | 
						|
	struct nvif_object base;
 | 
						|
	struct nvif_object *object; /*XXX: hack for nvif_object() */
 | 
						|
	const struct nvif_driver *driver;
 | 
						|
	bool super;
 | 
						|
};
 | 
						|
 | 
						|
static inline struct nvif_client *
 | 
						|
nvif_client(struct nvif_object *object)
 | 
						|
{
 | 
						|
	while (object && object->parent != object)
 | 
						|
		object = object->parent;
 | 
						|
	return (void *)object;
 | 
						|
}
 | 
						|
 | 
						|
int  nvif_client_init(void (*dtor)(struct nvif_client *), const char *,
 | 
						|
		      const char *, u64, const char *, const char *,
 | 
						|
		      struct nvif_client *);
 | 
						|
void nvif_client_fini(struct nvif_client *);
 | 
						|
int  nvif_client_new(const char *, const char *, u64, const char *,
 | 
						|
		     const char *, struct nvif_client **);
 | 
						|
void nvif_client_ref(struct nvif_client *, struct nvif_client **);
 | 
						|
int  nvif_client_ioctl(struct nvif_client *, void *, u32);
 | 
						|
int  nvif_client_suspend(struct nvif_client *);
 | 
						|
int  nvif_client_resume(struct nvif_client *);
 | 
						|
 | 
						|
/*XXX*/
 | 
						|
#include <core/client.h>
 | 
						|
#define nvkm_client(a) ({ \
 | 
						|
	struct nvif_client *_client = nvif_client(nvif_object(a)); \
 | 
						|
	nouveau_client(_client->base.priv); \
 | 
						|
})
 | 
						|
 | 
						|
#endif
 |