| 
									
										
										
										
											2012-08-15 13:59:49 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (C) 2012 Russell King | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  * published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef ARMADA_GEM_H
 | 
					
						
							|  |  |  | #define ARMADA_GEM_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-23 15:46:53 +02:00
										 |  |  | #include <drm/drm_gem.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-15 13:59:49 +01:00
										 |  |  | /* GEM */ | 
					
						
							|  |  |  | struct armada_gem_object { | 
					
						
							|  |  |  | 	struct drm_gem_object	obj; | 
					
						
							|  |  |  | 	void			*addr; | 
					
						
							|  |  |  | 	phys_addr_t		phys_addr; | 
					
						
							|  |  |  | 	resource_size_t		dev_addr; | 
					
						
							|  |  |  | 	struct drm_mm_node	*linear;	/* for linear backed */ | 
					
						
							|  |  |  | 	struct page		*page;		/* for page backed */ | 
					
						
							|  |  |  | 	struct sg_table		*sgt;		/* for imported */ | 
					
						
							|  |  |  | 	void			(*update)(void *); | 
					
						
							|  |  |  | 	void			*update_data; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern const struct vm_operations_struct armada_gem_vm_ops; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define drm_to_armada_gem(o) container_of(o, struct armada_gem_object, obj)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void armada_gem_free_object(struct drm_gem_object *); | 
					
						
							|  |  |  | int armada_gem_linear_back(struct drm_device *, struct armada_gem_object *); | 
					
						
							|  |  |  | void *armada_gem_map_object(struct drm_device *, struct armada_gem_object *); | 
					
						
							|  |  |  | struct armada_gem_object *armada_gem_alloc_private_object(struct drm_device *, | 
					
						
							|  |  |  | 	size_t); | 
					
						
							|  |  |  | int armada_gem_dumb_create(struct drm_file *, struct drm_device *, | 
					
						
							|  |  |  | 	struct drm_mode_create_dumb *); | 
					
						
							|  |  |  | int armada_gem_dumb_map_offset(struct drm_file *, struct drm_device *, | 
					
						
							|  |  |  | 	uint32_t, uint64_t *); | 
					
						
							|  |  |  | int armada_gem_dumb_destroy(struct drm_file *, struct drm_device *, | 
					
						
							|  |  |  | 	uint32_t); | 
					
						
							|  |  |  | struct dma_buf *armada_gem_prime_export(struct drm_device *dev, | 
					
						
							|  |  |  | 	struct drm_gem_object *obj, int flags); | 
					
						
							|  |  |  | struct drm_gem_object *armada_gem_prime_import(struct drm_device *, | 
					
						
							|  |  |  | 	struct dma_buf *); | 
					
						
							|  |  |  | int armada_gem_map_import(struct armada_gem_object *); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline struct armada_gem_object *armada_gem_object_lookup( | 
					
						
							|  |  |  | 	struct drm_device *dev, struct drm_file *dfile, unsigned handle) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	struct drm_gem_object *obj = drm_gem_object_lookup(dev, dfile, handle); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return obj ? drm_to_armada_gem(obj) : NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 |