Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.2-rc5 151 lines 4.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#include <linux/io.h> 3#include <linux/console.h> 4 5#include <drm/drmP.h> 6#include <drm/drm_crtc.h> 7#include <drm/drm_crtc_helper.h> 8#include <drm/drm_encoder.h> 9#include <drm/drm_fb_helper.h> 10#include <drm/drm_simple_kms_helper.h> 11 12#include <drm/drm_gem.h> 13 14#include <drm/ttm/ttm_bo_driver.h> 15#include <drm/ttm/ttm_page_alloc.h> 16 17/* ---------------------------------------------------------------------- */ 18 19#define VBE_DISPI_IOPORT_INDEX 0x01CE 20#define VBE_DISPI_IOPORT_DATA 0x01CF 21 22#define VBE_DISPI_INDEX_ID 0x0 23#define VBE_DISPI_INDEX_XRES 0x1 24#define VBE_DISPI_INDEX_YRES 0x2 25#define VBE_DISPI_INDEX_BPP 0x3 26#define VBE_DISPI_INDEX_ENABLE 0x4 27#define VBE_DISPI_INDEX_BANK 0x5 28#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 29#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 30#define VBE_DISPI_INDEX_X_OFFSET 0x8 31#define VBE_DISPI_INDEX_Y_OFFSET 0x9 32#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa 33 34#define VBE_DISPI_ID0 0xB0C0 35#define VBE_DISPI_ID1 0xB0C1 36#define VBE_DISPI_ID2 0xB0C2 37#define VBE_DISPI_ID3 0xB0C3 38#define VBE_DISPI_ID4 0xB0C4 39#define VBE_DISPI_ID5 0xB0C5 40 41#define VBE_DISPI_DISABLED 0x00 42#define VBE_DISPI_ENABLED 0x01 43#define VBE_DISPI_GETCAPS 0x02 44#define VBE_DISPI_8BIT_DAC 0x20 45#define VBE_DISPI_LFB_ENABLED 0x40 46#define VBE_DISPI_NOCLEARMEM 0x80 47 48/* ---------------------------------------------------------------------- */ 49 50enum bochs_types { 51 BOCHS_QEMU_STDVGA, 52 BOCHS_UNKNOWN, 53}; 54 55struct bochs_device { 56 /* hw */ 57 void __iomem *mmio; 58 int ioports; 59 void __iomem *fb_map; 60 unsigned long fb_base; 61 unsigned long fb_size; 62 unsigned long qext_size; 63 64 /* mode */ 65 u16 xres; 66 u16 yres; 67 u16 yres_virtual; 68 u32 stride; 69 u32 bpp; 70 struct edid *edid; 71 72 /* drm */ 73 struct drm_device *dev; 74 struct drm_simple_display_pipe pipe; 75 struct drm_connector connector; 76 77 /* ttm */ 78 struct { 79 struct ttm_bo_device bdev; 80 bool initialized; 81 } ttm; 82}; 83 84struct bochs_bo { 85 struct ttm_buffer_object bo; 86 struct ttm_placement placement; 87 struct ttm_bo_kmap_obj kmap; 88 struct drm_gem_object gem; 89 struct ttm_place placements[3]; 90 int pin_count; 91}; 92 93static inline struct bochs_bo *bochs_bo(struct ttm_buffer_object *bo) 94{ 95 return container_of(bo, struct bochs_bo, bo); 96} 97 98static inline struct bochs_bo *gem_to_bochs_bo(struct drm_gem_object *gem) 99{ 100 return container_of(gem, struct bochs_bo, gem); 101} 102 103static inline u64 bochs_bo_mmap_offset(struct bochs_bo *bo) 104{ 105 return drm_vma_node_offset_addr(&bo->bo.vma_node); 106} 107 108/* ---------------------------------------------------------------------- */ 109 110/* bochs_hw.c */ 111int bochs_hw_init(struct drm_device *dev); 112void bochs_hw_fini(struct drm_device *dev); 113 114void bochs_hw_setmode(struct bochs_device *bochs, 115 struct drm_display_mode *mode); 116void bochs_hw_setformat(struct bochs_device *bochs, 117 const struct drm_format_info *format); 118void bochs_hw_setbase(struct bochs_device *bochs, 119 int x, int y, u64 addr); 120int bochs_hw_load_edid(struct bochs_device *bochs); 121 122/* bochs_mm.c */ 123int bochs_mm_init(struct bochs_device *bochs); 124void bochs_mm_fini(struct bochs_device *bochs); 125int bochs_mmap(struct file *filp, struct vm_area_struct *vma); 126 127int bochs_gem_create(struct drm_device *dev, u32 size, bool iskernel, 128 struct drm_gem_object **obj); 129int bochs_gem_init_object(struct drm_gem_object *obj); 130void bochs_gem_free_object(struct drm_gem_object *obj); 131int bochs_dumb_create(struct drm_file *file, struct drm_device *dev, 132 struct drm_mode_create_dumb *args); 133int bochs_dumb_mmap_offset(struct drm_file *file, struct drm_device *dev, 134 uint32_t handle, uint64_t *offset); 135 136int bochs_bo_pin(struct bochs_bo *bo, u32 pl_flag); 137int bochs_bo_unpin(struct bochs_bo *bo); 138 139int bochs_gem_prime_pin(struct drm_gem_object *obj); 140void bochs_gem_prime_unpin(struct drm_gem_object *obj); 141void *bochs_gem_prime_vmap(struct drm_gem_object *obj); 142void bochs_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); 143int bochs_gem_prime_mmap(struct drm_gem_object *obj, 144 struct vm_area_struct *vma); 145 146/* bochs_kms.c */ 147int bochs_kms_init(struct bochs_device *bochs); 148void bochs_kms_fini(struct bochs_device *bochs); 149 150/* bochs_fbdev.c */ 151extern const struct drm_mode_config_funcs bochs_mode_funcs;