diff options
author | Deepak Rawat <drawat.floss@gmail.com> | 2021-05-27 04:22:28 -0700 |
---|---|---|
committer | Deepak Rawat <drawat.floss@gmail.com> | 2021-06-07 08:04:10 -0700 |
commit | 76c56a5affeba1e163b66b9d8cc192e6154466f0 (patch) | |
tree | 1eb8d9b3a07ff6d0b8488e845fc94aa5e2a4e6b1 /drivers/gpu/drm/hyperv/hyperv_drm.h | |
parent | abb50d67adf3f01f567f365b45ecb49df8289296 (diff) | |
download | linux-76c56a5affeba1e163b66b9d8cc192e6154466f0.tar.bz2 |
drm/hyperv: Add DRM driver for hyperv synthetic video device
DRM driver for hyperv synthetic video device, based on hyperv_fb
framebuffer driver. Also added config option "DRM_HYPERV" to enabled
this driver.
v2:
- Add support for gen2 VM
- Fixed review comments
v3:
- Split into multiple files as suggested by Thomas Zimmermann
- Fixed hibernation issue as suggested by Dexuan Cui
- Use ioremap_cache as suggested by Dexuan Cui
- Incorporated other review comments
v4:
- Fix bitrotted code
- Review comments
- Updated the copyright and license to match hyperv_fb
v5:
- Address review comments and rebased with drm-misc-next
v6:
- Minor code/comment improvement as suggested by Dexuan Cui
Signed-off-by: Deepak Rawat <drawat.floss@gmail.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20210527112230.1274-1-drawat.floss@gmail.com
Diffstat (limited to 'drivers/gpu/drm/hyperv/hyperv_drm.h')
-rw-r--r-- | drivers/gpu/drm/hyperv/hyperv_drm.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/drivers/gpu/drm/hyperv/hyperv_drm.h b/drivers/gpu/drm/hyperv/hyperv_drm.h new file mode 100644 index 000000000000..e1d1fdea96f2 --- /dev/null +++ b/drivers/gpu/drm/hyperv/hyperv_drm.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright 2021 Microsoft + */ + +#ifndef _HYPERV_DRM_H_ +#define _HYPERV_DRM_H_ + +#define VMBUS_MAX_PACKET_SIZE 0x4000 + +struct hyperv_drm_device { + /* drm */ + struct drm_device dev; + struct drm_simple_display_pipe pipe; + struct drm_connector connector; + + /* mode */ + u32 screen_width_max; + u32 screen_height_max; + u32 preferred_width; + u32 preferred_height; + u32 screen_depth; + + /* hw */ + struct resource *mem; + void __iomem *vram; + unsigned long fb_base; + unsigned long fb_size; + struct completion wait; + u32 synthvid_version; + u32 mmio_megabytes; + + u8 init_buf[VMBUS_MAX_PACKET_SIZE]; + u8 recv_buf[VMBUS_MAX_PACKET_SIZE]; + + struct hv_device *hdev; +}; + +#define to_hv(_dev) container_of(_dev, struct hyperv_drm_device, dev) + +/* hyperv_drm_modeset */ +int hyperv_mode_config_init(struct hyperv_drm_device *hv); + +/* hyperv_drm_proto */ +int hyperv_update_vram_location(struct hv_device *hdev, phys_addr_t vram_pp); +int hyperv_update_situation(struct hv_device *hdev, u8 active, u32 bpp, + u32 w, u32 h, u32 pitch); +int hyperv_update_dirt(struct hv_device *hdev, struct drm_rect *rect); +int hyperv_connect_vsp(struct hv_device *hdev); + +#endif |