]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blame - drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
UBUNTU: Ubuntu-5.3.0-29.31
[mirror_ubuntu-eoan-kernel.git] / drivers / gpu / drm / hisilicon / hibmc / hibmc_drm_drv.h
CommitLineData
2874c5fd 1/* SPDX-License-Identifier: GPL-2.0-or-later */
5e0df3a0
RZ
2/* Hisilicon Hibmc SoC drm driver
3 *
4 * Based on the bochs drm driver.
5 *
6 * Copyright (c) 2016 Huawei Limited.
7 *
8 * Author:
9 * Rongrong Zou <zourongrong@huawei.com>
10 * Rongrong Zou <zourongrong@gmail.com>
11 * Jianhua Li <lijianhua@huawei.com>
5e0df3a0
RZ
12 */
13
14#ifndef HIBMC_DRM_DRV_H
15#define HIBMC_DRM_DRV_H
16
17#include <drm/drmP.h>
da52605e 18#include <drm/drm_atomic.h>
d1667b86 19#include <drm/drm_fb_helper.h>
e4daebc7 20#include <drm/drm_gem.h>
e2f572aa 21#include <drm/drm_gem_vram_helper.h>
83d3af8e 22#include <drm/drm_vram_mm_helper.h>
5e0df3a0 23
d1667b86
RZ
24struct hibmc_framebuffer {
25 struct drm_framebuffer fb;
26 struct drm_gem_object *obj;
27};
28
29struct hibmc_fbdev {
2b617b14 30 struct drm_fb_helper helper; /* must be first */
d1667b86
RZ
31 struct hibmc_framebuffer *fb;
32 int size;
33};
34
5e0df3a0
RZ
35struct hibmc_drm_private {
36 /* hw */
37 void __iomem *mmio;
38 void __iomem *fb_map;
39 unsigned long fb_base;
40 unsigned long fb_size;
1d98b916 41 bool msi_enabled;
5e0df3a0
RZ
42
43 /* drm */
44 struct drm_device *dev;
da52605e 45 bool mode_config_initialized;
5e0df3a0 46
d1667b86
RZ
47 /* fbdev */
48 struct hibmc_fbdev *fbdev;
e4daebc7
RZ
49};
50
d1667b86
RZ
51#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
52
5e0df3a0
RZ
53void hibmc_set_power_mode(struct hibmc_drm_private *priv,
54 unsigned int power_mode);
55void hibmc_set_current_gate(struct hibmc_drm_private *priv,
56 unsigned int gate);
57
da52605e 58int hibmc_de_init(struct hibmc_drm_private *priv);
5294967f 59int hibmc_vdac_init(struct hibmc_drm_private *priv);
d1667b86
RZ
60int hibmc_fbdev_init(struct hibmc_drm_private *priv);
61void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
62
e4daebc7
RZ
63int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
64 struct drm_gem_object **obj);
d1667b86
RZ
65struct hibmc_framebuffer *
66hibmc_framebuffer_init(struct drm_device *dev,
67 const struct drm_mode_fb_cmd2 *mode_cmd,
68 struct drm_gem_object *obj);
69
e4daebc7
RZ
70int hibmc_mm_init(struct hibmc_drm_private *hibmc);
71void hibmc_mm_fini(struct hibmc_drm_private *hibmc);
e4daebc7
RZ
72int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
73 struct drm_mode_create_dumb *args);
e4daebc7 74
da52605e
RZ
75extern const struct drm_mode_config_funcs hibmc_mode_funcs;
76
5e0df3a0 77#endif