summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
diff options
context:
space:
mode:
authorRongrong Zou2016-11-16 13:52:37 +0100
committerRongrong Zou2016-11-17 08:26:25 +0100
commitd1667b86795a6a1f904c5c30e38d6f8f3c8dfa64 (patch)
treeb100f49ceab3ebde223e96c58e0d22eb79e5b763 /drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
parentdrm/hisilicon/hibmc: Add video memory management (diff)
downloadkernel-qcow2-linux-d1667b86795a6a1f904c5c30e38d6f8f3c8dfa64.tar.gz
kernel-qcow2-linux-d1667b86795a6a1f904c5c30e38d6f8f3c8dfa64.tar.xz
kernel-qcow2-linux-d1667b86795a6a1f904c5c30e38d6f8f3c8dfa64.zip
drm/hisilicon/hibmc: Add support for frame buffer
Add support for fbdev and kms fb management. Signed-off-by: Rongrong Zou <zourongrong@gmail.com> Reviewed-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Xinliang Liu <xinliang.liu@linaro.org> Acked-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h')
-rw-r--r--drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
index dcd304d66c8f..d283d663371e 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
@@ -20,9 +20,21 @@
#define HIBMC_DRM_DRV_H
#include <drm/drmP.h>
+#include <drm/drm_fb_helper.h>
#include <drm/drm_gem.h>
#include <drm/ttm/ttm_bo_driver.h>
+struct hibmc_framebuffer {
+ struct drm_framebuffer fb;
+ struct drm_gem_object *obj;
+};
+
+struct hibmc_fbdev {
+ struct drm_fb_helper helper;
+ struct hibmc_framebuffer *fb;
+ int size;
+};
+
struct hibmc_drm_private {
/* hw */
void __iomem *mmio;
@@ -39,9 +51,13 @@ struct hibmc_drm_private {
struct ttm_bo_device bdev;
bool initialized;
+ /* fbdev */
+ struct hibmc_fbdev *fbdev;
bool mm_inited;
};
+#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
+
struct hibmc_bo {
struct ttm_buffer_object bo;
struct ttm_placement placement;
@@ -66,8 +82,16 @@ void hibmc_set_power_mode(struct hibmc_drm_private *priv,
void hibmc_set_current_gate(struct hibmc_drm_private *priv,
unsigned int gate);
+int hibmc_fbdev_init(struct hibmc_drm_private *priv);
+void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
+
int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
struct drm_gem_object **obj);
+struct hibmc_framebuffer *
+hibmc_framebuffer_init(struct drm_device *dev,
+ const struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_gem_object *obj);
+
int hibmc_mm_init(struct hibmc_drm_private *hibmc);
void hibmc_mm_fini(struct hibmc_drm_private *hibmc);
int hibmc_bo_pin(struct hibmc_bo *bo, u32 pl_flag, u64 *gpu_addr);