forked from Minki/linux
2c1c55cb75
Cross-subsystem Changes: - device tree doc for the Mitsubishi AA070MC01 and Tianma TM070RVHG71 panels (Lukasz Majewski) and for a 2nd endpoint on stm32 (Philippe Cornu) Core Changes: The most important changes are: - Add drm_driver .last_close and .output_poll_changed helpers to reduce fbdev emulation footprint in drivers (Noralf) - Fix plane clipping in core and for vmwgfx (Ville) Then we have a bunch of of improvement for print and debug such as the addition of a framebuffer debugfs file. ELD connector, HDMI and improvements. And a bunch of misc improvements, clean ups and style changes and doc updates [airlied: drop eld bits from amdgpu_dm] Driver Changes: - sii8620: filter unsupported modes and add DVI mode support (Maciej Purski) - rockchip: analogix_dp: Remove unnecessary init code (Jeffy Chen) - virtio, cirrus: add fb create_handle support to enable screenshots(Lepton Wu) - virtio: replace reference/unreference with get/put (Aastha Gupta) - vc4, gma500: Convert timers to use timer_setup() (Kees Cook) - vc4: Reject HDMI modes with too high of clocks (Eric) - vc4: Add support for more pixel formats (Dave Stevenson) - stm: dsi: Rename driver name to "stm32-display-dsi" (Philippe Cornu) - stm: ltdc: add a 2nd endpoint (Philippe Cornu) - via: use monotonic time for VIA_WAIT_IRQ (Arnd Bergmann) * tag 'drm-misc-next-2017-11-30' of git://anongit.freedesktop.org/drm/drm-misc: (96 commits) drm/bridge: tc358767: add copyright lines MAINTAINERS: change maintainer for Rockchip drm drivers drm/vblank: Fix vblank timestamp debugs drm/via: use monotonic time for VIA_WAIT_IRQ dma-buf: Fix ifnullfree.cocci warnings drm/printer: Add drm_vprintf() drm/edid: Allow HDMI infoframe without VIC or S3D video/hdmi: Allow "empty" HDMI infoframes dma-buf/fence: Fix lock inversion within dma-fence-array drm/sti: Handle return value of platform_get_irq_byname drm/vc4: Add support for NV21 and NV61. drm/vc4: Use .pixel_order instead of custom .flip_cbcr drm/vc4: Add support for DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 drm: Move drm_plane_helper_check_state() into drm_atomic_helper.c drm: Check crtc_state->enable rather than crtc->enabled in drm_plane_helper_check_state() drm/vmwgfx: Try to fix plane clipping drm/vmwgfx: Use drm_plane_helper_check_state() drm/vmwgfx: Remove bogus crtc coords vs fb size check gpu: gma500: remove unneeded DRIVER_LICENSE #define drm: don't link DP aux i2c adapter to the hardware device node ...
107 lines
3.5 KiB
C
107 lines
3.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __DRM_GEM_CMA_HELPER_H__
|
|
#define __DRM_GEM_CMA_HELPER_H__
|
|
|
|
#include <drm/drmP.h>
|
|
#include <drm/drm_gem.h>
|
|
|
|
/**
|
|
* struct drm_gem_cma_object - GEM object backed by CMA memory allocations
|
|
* @base: base GEM object
|
|
* @paddr: physical address of the backing memory
|
|
* @sgt: scatter/gather table for imported PRIME buffers. The table can have
|
|
* more than one entry but they are guaranteed to have contiguous
|
|
* DMA addresses.
|
|
* @vaddr: kernel virtual address of the backing memory
|
|
*/
|
|
struct drm_gem_cma_object {
|
|
struct drm_gem_object base;
|
|
dma_addr_t paddr;
|
|
struct sg_table *sgt;
|
|
|
|
/* For objects with DMA memory allocated by GEM CMA */
|
|
void *vaddr;
|
|
};
|
|
|
|
#define to_drm_gem_cma_obj(gem_obj) \
|
|
container_of(gem_obj, struct drm_gem_cma_object, base)
|
|
|
|
#ifndef CONFIG_MMU
|
|
#define DRM_GEM_CMA_UNMAPPED_AREA_FOPS \
|
|
.get_unmapped_area = drm_gem_cma_get_unmapped_area,
|
|
#else
|
|
#define DRM_GEM_CMA_UNMAPPED_AREA_FOPS
|
|
#endif
|
|
|
|
/**
|
|
* DEFINE_DRM_GEM_CMA_FOPS() - macro to generate file operations for CMA drivers
|
|
* @name: name for the generated structure
|
|
*
|
|
* This macro autogenerates a suitable &struct file_operations for CMA based
|
|
* drivers, which can be assigned to &drm_driver.fops. Note that this structure
|
|
* cannot be shared between drivers, because it contains a reference to the
|
|
* current module using THIS_MODULE.
|
|
*
|
|
* Note that the declaration is already marked as static - if you need a
|
|
* non-static version of this you're probably doing it wrong and will break the
|
|
* THIS_MODULE reference by accident.
|
|
*/
|
|
#define DEFINE_DRM_GEM_CMA_FOPS(name) \
|
|
static const struct file_operations name = {\
|
|
.owner = THIS_MODULE,\
|
|
.open = drm_open,\
|
|
.release = drm_release,\
|
|
.unlocked_ioctl = drm_ioctl,\
|
|
.compat_ioctl = drm_compat_ioctl,\
|
|
.poll = drm_poll,\
|
|
.read = drm_read,\
|
|
.llseek = noop_llseek,\
|
|
.mmap = drm_gem_cma_mmap,\
|
|
DRM_GEM_CMA_UNMAPPED_AREA_FOPS \
|
|
}
|
|
|
|
/* free GEM object */
|
|
void drm_gem_cma_free_object(struct drm_gem_object *gem_obj);
|
|
|
|
/* create memory region for DRM framebuffer */
|
|
int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
|
|
struct drm_device *drm,
|
|
struct drm_mode_create_dumb *args);
|
|
|
|
/* create memory region for DRM framebuffer */
|
|
int drm_gem_cma_dumb_create(struct drm_file *file_priv,
|
|
struct drm_device *drm,
|
|
struct drm_mode_create_dumb *args);
|
|
|
|
/* set vm_flags and we can change the VM attribute to other one at here */
|
|
int drm_gem_cma_mmap(struct file *filp, struct vm_area_struct *vma);
|
|
|
|
/* allocate physical memory */
|
|
struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
|
|
size_t size);
|
|
|
|
extern const struct vm_operations_struct drm_gem_cma_vm_ops;
|
|
|
|
#ifndef CONFIG_MMU
|
|
unsigned long drm_gem_cma_get_unmapped_area(struct file *filp,
|
|
unsigned long addr,
|
|
unsigned long len,
|
|
unsigned long pgoff,
|
|
unsigned long flags);
|
|
#endif
|
|
|
|
void drm_gem_cma_print_info(struct drm_printer *p, unsigned int indent,
|
|
const struct drm_gem_object *obj);
|
|
|
|
struct sg_table *drm_gem_cma_prime_get_sg_table(struct drm_gem_object *obj);
|
|
struct drm_gem_object *
|
|
drm_gem_cma_prime_import_sg_table(struct drm_device *dev,
|
|
struct dma_buf_attachment *attach,
|
|
struct sg_table *sgt);
|
|
int drm_gem_cma_prime_mmap(struct drm_gem_object *obj,
|
|
struct vm_area_struct *vma);
|
|
void *drm_gem_cma_prime_vmap(struct drm_gem_object *obj);
|
|
void drm_gem_cma_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
|
|
|
|
#endif /* __DRM_GEM_CMA_HELPER_H__ */
|