blob: 494baa0d057d4e8c41b589fc7eac0819428a1eb3 [file] [log] [blame]
/*
*
* (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
* Foundation, and any use by you of this program is subject to the terms
* of such GNU licence.
*
* A copy of the licence is included with the program, and can also be obtained
* from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
/**
* pl111_drm_funcs.h
* Function prototypes for PL111 DRM
*/
#ifndef PL111_DRM_FUNCS_H_
#define PL111_DRM_FUNCS_H_
/* Platform Initialisation */
int pl111_drm_init(struct platform_device *dev);
void pl111_drm_exit(struct platform_device *dev);
/* KDS Callbacks */
void show_framebuffer_on_crtc_cb(void *cb1, void *cb2);
void release_kds_resource_and_display(struct pl111_drm_flip_resource *flip_res);
/* CRTC Functions */
struct pl111_drm_crtc *pl111_crtc_create(struct drm_device *dev);
struct pl111_drm_crtc *pl111_crtc_dummy_create(struct drm_device *dev);
void pl111_crtc_destroy(struct drm_crtc *crtc);
bool pl111_crtc_is_fb_currently_displayed(struct drm_device *dev,
struct drm_framebuffer *fb);
int show_framebuffer_on_crtc(struct drm_crtc *crtc,
struct drm_framebuffer *fb, bool page_flip,
struct drm_pending_vblank_event *event);
/* Common IRQ handler */
void pl111_common_irq(struct pl111_drm_crtc *pl111_crtc);
int pl111_crtc_cursor_set(struct drm_crtc *crtc,
struct drm_file *file_priv,
uint32_t handle,
uint32_t width,
uint32_t height);
int pl111_crtc_cursor_move(struct drm_crtc *crtc,
int x, int y);
/* Connector Functions */
struct pl111_drm_connector *pl111_connector_create(struct drm_device *dev);
void pl111_connector_destroy(struct drm_connector *connector);
struct pl111_drm_connector *pl111_connector_dummy_create(struct drm_device
*dev);
/* Encoder Functions */
struct pl111_drm_encoder *pl111_encoder_create(struct drm_device *dev,
int possible_crtcs);
struct pl111_drm_encoder *pl111_encoder_dummy_create(struct drm_device *dev,
int possible_crtcs);
void pl111_encoder_destroy(struct drm_encoder *encoder);
/* Frame Buffer Functions */
struct drm_framebuffer *pl111_fb_create(struct drm_device *dev,
struct drm_file *file_priv,
struct drm_mode_fb_cmd2 *mode_cmd);
/* VMA Functions */
int pl111_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
int pl111_gem_mmap(struct file *file_priv, struct vm_area_struct *vma);
struct page **get_pages(struct drm_gem_object *obj);
void put_pages(struct drm_gem_object *obj, struct page **pages);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0))
void pl111_drm_vm_open_locked(struct drm_device *dev,
struct vm_area_struct *vma);
void pl111_gem_vm_open(struct vm_area_struct *vma);
void pl111_gem_vm_close(struct vm_area_struct *vma);
#endif
/* Suspend Functions */
int pl111_drm_resume(struct drm_device *dev);
int pl111_drm_suspend(struct drm_device *dev, pm_message_t state);
/* GEM Functions */
int pl111_dumb_create(struct drm_file *file_priv,
struct drm_device *dev,
struct drm_mode_create_dumb *args);
int pl111_dumb_destroy(struct drm_file *file_priv,
struct drm_device *dev, uint32_t handle);
int pl111_dumb_map_offset(struct drm_file *file_priv,
struct drm_device *dev, uint32_t handle,
uint64_t *offset);
void pl111_gem_free_object(struct drm_gem_object *obj);
int pl111_bo_mmap(struct drm_gem_object *obj, struct pl111_gem_bo *bo,
struct vm_area_struct *vma, size_t size);
void pl111_gem_sync_to_cpu(struct pl111_gem_bo *bo, int pgoff);
void pl111_gem_sync_to_dma(struct pl111_gem_bo *bo);
/* DMA BUF Functions */
struct drm_gem_object *pl111_gem_prime_import(struct drm_device *dev,
struct dma_buf *dma_buf);
int pl111_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv,
uint32_t handle, uint32_t flags, int *prime_fd);
struct dma_buf *pl111_gem_prime_export(struct drm_device *dev,
struct drm_gem_object *obj, int flags);
/* Pl111 Functions */
void show_framebuffer_on_crtc_cb_internal(struct pl111_drm_flip_resource
*flip_res, struct drm_framebuffer *fb);
int clcd_disable(struct drm_crtc *crtc);
void do_flip_to_res(struct pl111_drm_flip_resource *flip_res);
int pl111_amba_probe(struct amba_device *dev, const struct amba_id *id);
int pl111_amba_remove(struct amba_device *dev);
int pl111_device_init(struct drm_device *dev);
void pl111_device_fini(struct drm_device *dev);
void pl111_convert_drm_mode_to_timing(struct drm_display_mode *mode,
struct clcd_regs *timing);
void pl111_convert_timing_to_drm_mode(struct clcd_regs *timing,
struct drm_display_mode *mode);
#endif /* PL111_DRM_FUNCS_H_ */