// SPDX-License-Identifier: GPL-2.0/* * Mediated virtual PCI display host device driver * * Emulate enough of qemu stdvga to make bochs-drm.ko happy. That is * basically the vram memory bar and the bochs dispi interface vbe * registers in the mmio register bar. Specifically it does *not* * include any legacy vga stuff. Device looks a lot like "qemu -device * secondary-vga". * * (c) Gerd Hoffmann <kraxel@redhat.com> * * based on mtty driver which is: * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. * Author: Neo Jia <cjia@nvidia.com> * Kirti Wankhede <kwankhede@nvidia.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#include<linux/init.h>#include<linux/module.h>#include<linux/kernel.h>#include<linux/slab.h>#include<linux/vmalloc.h>#include<linux/cdev.h>#include<linux/vfio.h>#include<linux/iommu.h>#include<linux/sysfs.h>#include<linux/mdev.h>#include<linux/pci.h>#include<linux/dma-buf.h>#include<linux/highmem.h>#include<drm/drm_fourcc.h>#include<drm/drm_rect.h>#include<drm/drm_modeset_lock.h>#include<drm/drm_property.h>#include<drm/drm_plane.h>#define VBE_DISPI_INDEX_ID 0x0#define VBE_DISPI_INDEX_XRES 0x1#define VBE_DISPI_INDEX_YRES 0x2#define VBE_DISPI_INDEX_BPP 0x3#define VBE_DISPI_INDEX_ENABLE 0x4#define VBE_DISPI_INDEX_BANK 0x5#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7#define VBE_DISPI_INDEX_X_OFFSET 0x8#define VBE_DISPI_INDEX_Y_OFFSET 0x9#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa#define VBE_DISPI_INDEX_COUNT 0xb#define VBE_DISPI_ID0 0xB0C0#define VBE_DISPI_ID1 0xB0C1#define VBE_DISPI_ID2 0xB0C2#define VBE_DISPI_ID3 0xB0C3#define VBE_DISPI_ID4 0xB0C4#define VBE_DISPI_ID5 0xB0C5#define VBE_DISPI_DISABLED 0x00#define VBE_DISPI_ENABLED 0x01#define VBE_DISPI_GETCAPS 0x02#define VBE_DISPI_8BIT_DAC 0x20#define VBE_DISPI_LFB_ENABLED 0x40#define VBE_DISPI_NOCLEARMEM 0x80#define MBOCHS_NAME "mbochs"#define MBOCHS_CLASS_NAME "mbochs"#define MBOCHS_EDID_REGION_INDEX VFIO_PCI_NUM_REGIONS#define MBOCHS_NUM_REGIONS (MBOCHS_EDID_REGION_INDEX+1)#define MBOCHS_CONFIG_SPACE_SIZE 0xff#define MBOCHS_MMIO_BAR_OFFSET PAGE_SIZE#define MBOCHS_MMIO_BAR_SIZE PAGE_SIZE#define MBOCHS_EDID_OFFSET (MBOCHS_MMIO_BAR_OFFSET + \ MBOCHS_MMIO_B