/* * * (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_ */