diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-02 19:40:34 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-02 19:40:34 -0700 | 
| commit | 20a2078ce7705a6e0722ef5184336eb8657a58d8 (patch) | |
| tree | 5b927c96516380aa0ecd68d8a609f7cd72120ad5 /drivers/gpu/drm/qxl/qxl_object.h | |
| parent | 0279b3c0ada1d78882f24acf94ac4595bd657a89 (diff) | |
| parent | 307b9c022720f9de90d58e51743e01e9a42aec59 (diff) | |
| download | olio-linux-3.10-20a2078ce7705a6e0722ef5184336eb8657a58d8.tar.xz olio-linux-3.10-20a2078ce7705a6e0722ef5184336eb8657a58d8.zip  | |
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie:
 "This is the main drm pull request for 3.10.
  Wierd bits:
   - OMAP drm changes required OMAP dss changes, in drivers/video, so I
     took them in here.
   - one more fbcon fix for font handover
   - VT switch avoidance in pm code
   - scatterlist helpers for gpu drivers - have acks from akpm
  Highlights:
   - qxl kms driver - driver for the spice qxl virtual GPU
  Nouveau:
   - fermi/kepler VRAM compression
   - GK110/nvf0 modesetting support.
  Tegra:
   - host1x core merged with 2D engine support
  i915:
   - vt switchless resume
   - more valleyview support
   - vblank fixes
   - modesetting pipe config rework
  radeon:
   - UVD engine support
   - SI chip tiling support
   - GPU registers initialisation from golden values.
  exynos:
   - device tree changes
   - fimc block support
  Otherwise:
   - bunches of fixes all over the place."
* 'drm-next' of git://people.freedesktop.org/~airlied/linux: (513 commits)
  qxl: update to new idr interfaces.
  drm/nouveau: fix build with nv50->nvc0
  drm/radeon: fix handling of v6 power tables
  drm/radeon: clarify family checks in pm table parsing
  drm/radeon: consolidate UVD clock programming
  drm/radeon: fix UPLL_REF_DIV_MASK definition
  radeon: add bo tracking debugfs
  drm/radeon: add new richland pci ids
  drm/radeon: add some new SI PCI ids
  drm/radeon: fix scratch reg handling for UVD fence
  drm/radeon: allocate SA bo in the requested domain
  drm/radeon: fix possible segfault when parsing pm tables
  drm/radeon: fix endian bugs in atom_allocate_fb_scratch()
  OMAPDSS: TFP410: return EPROBE_DEFER if the i2c adapter not found
  OMAPDSS: VENC: Add error handling for venc_probe_pdata
  OMAPDSS: HDMI: Add error handling for hdmi_probe_pdata
  OMAPDSS: RFBI: Add error handling for rfbi_probe_pdata
  OMAPDSS: DSI: Add error handling for dsi_probe_pdata
  OMAPDSS: SDI: Add error handling for sdi_probe_pdata
  OMAPDSS: DPI: Add error handling for dpi_probe_pdata
  ...
Diffstat (limited to 'drivers/gpu/drm/qxl/qxl_object.h')
| -rw-r--r-- | drivers/gpu/drm/qxl/qxl_object.h | 112 | 
1 files changed, 112 insertions, 0 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_object.h b/drivers/gpu/drm/qxl/qxl_object.h new file mode 100644 index 00000000000..b4fd89fbd8b --- /dev/null +++ b/drivers/gpu/drm/qxl/qxl_object.h @@ -0,0 +1,112 @@ +/* + * Copyright 2013 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. + * + * Authors: Dave Airlie + *          Alon Levy + */ +#ifndef QXL_OBJECT_H +#define QXL_OBJECT_H + +#include "qxl_drv.h" + +static inline int qxl_bo_reserve(struct qxl_bo *bo, bool no_wait) +{ +	int r; + +	r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0); +	if (unlikely(r != 0)) { +		if (r != -ERESTARTSYS) { +			struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; +			dev_err(qdev->dev, "%p reserve failed\n", bo); +		} +		return r; +	} +	return 0; +} + +static inline void qxl_bo_unreserve(struct qxl_bo *bo) +{ +	ttm_bo_unreserve(&bo->tbo); +} + +static inline u64 qxl_bo_gpu_offset(struct qxl_bo *bo) +{ +	return bo->tbo.offset; +} + +static inline unsigned long qxl_bo_size(struct qxl_bo *bo) +{ +	return bo->tbo.num_pages << PAGE_SHIFT; +} + +static inline bool qxl_bo_is_reserved(struct qxl_bo *bo) +{ +	return !!atomic_read(&bo->tbo.reserved); +} + +static inline u64 qxl_bo_mmap_offset(struct qxl_bo *bo) +{ +	return bo->tbo.addr_space_offset; +} + +static inline int qxl_bo_wait(struct qxl_bo *bo, u32 *mem_type, +			      bool no_wait) +{ +	int r; + +	r = ttm_bo_reserve(&bo->tbo, true, no_wait, false, 0); +	if (unlikely(r != 0)) { +		if (r != -ERESTARTSYS) { +			struct qxl_device *qdev = (struct qxl_device *)bo->gem_base.dev->dev_private; +			dev_err(qdev->dev, "%p reserve failed for wait\n", +				bo); +		} +		return r; +	} +	spin_lock(&bo->tbo.bdev->fence_lock); +	if (mem_type) +		*mem_type = bo->tbo.mem.mem_type; +	if (bo->tbo.sync_obj) +		r = ttm_bo_wait(&bo->tbo, true, true, no_wait); +	spin_unlock(&bo->tbo.bdev->fence_lock); +	ttm_bo_unreserve(&bo->tbo); +	return r; +} + +extern int qxl_bo_create(struct qxl_device *qdev, +			 unsigned long size, +			 bool kernel, u32 domain, +			 struct qxl_surface *surf, +			 struct qxl_bo **bo_ptr); +extern int qxl_bo_kmap(struct qxl_bo *bo, void **ptr); +extern void qxl_bo_kunmap(struct qxl_bo *bo); +void *qxl_bo_kmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, int page_offset); +void qxl_bo_kunmap_atomic_page(struct qxl_device *qdev, struct qxl_bo *bo, void *map); +extern struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo); +extern void qxl_bo_unref(struct qxl_bo **bo); +extern int qxl_bo_pin(struct qxl_bo *bo, u32 domain, u64 *gpu_addr); +extern int qxl_bo_unpin(struct qxl_bo *bo); +extern void qxl_ttm_placement_from_domain(struct qxl_bo *qbo, u32 domain); +extern bool qxl_ttm_bo_is_qxl_bo(struct ttm_buffer_object *bo); + +extern int qxl_bo_list_add(struct qxl_reloc_list *reloc_list, struct qxl_bo *bo); +extern void qxl_bo_list_unreserve(struct qxl_reloc_list *reloc_list, bool failed); +#endif  |