diff --git a/drivers/video/drm/vmwgfx/Makefile b/drivers/video/drm/vmwgfx/Makefile index 926af2a520..75b9987d1f 100644 --- a/drivers/video/drm/vmwgfx/Makefile +++ b/drivers/video/drm/vmwgfx/Makefile @@ -55,6 +55,7 @@ NAME_SRC= \ vmwgfx_scrn.c \ vmwgfx_surface.c \ vmwgfx_ttm_glue.c \ + ../hdmi.c \ ../i2c/i2c-core.c \ ../ttm/ttm_bo.c \ ../ttm/ttm_bo_manager.c \ @@ -63,15 +64,19 @@ NAME_SRC= \ ../ttm/ttm_object.c \ ../ttm/ttm_page_alloc.c \ ../ttm/ttm_tt.c \ - $(DRM_TOPDIR)/drm_crtc.c \ - $(DRM_TOPDIR)/drm_crtc_helper.c \ - $(DRM_TOPDIR)/drm_edid.c \ - $(DRM_TOPDIR)/drm_global.c \ - $(DRM_TOPDIR)/drm_hashtab.c \ - $(DRM_TOPDIR)/drm_irq.c \ - $(DRM_TOPDIR)/drm_mm.c \ - $(DRM_TOPDIR)/drm_modes.c \ - $(DRM_TOPDIR)/drm_stub.c + ../drm_crtc.c \ + ../drm_crtc_helper.c \ + ../drm_drv.c \ + ../drm_edid.c \ + ../drm_gem.c \ + ../drm_global.c \ + ../drm_hashtab.c \ + ../drm_irq.c \ + ../drm_mm.c \ + ../drm_modes.c \ + ../drm_pci.c \ + ../drm_stub.c \ + ../drm_vma_manager.c diff --git a/drivers/video/drm/vmwgfx/Makefile.lto b/drivers/video/drm/vmwgfx/Makefile.lto new file mode 100644 index 0000000000..20be1d1a14 --- /dev/null +++ b/drivers/video/drm/vmwgfx/Makefile.lto @@ -0,0 +1,106 @@ + +CC = gcc +LD = ld +AS = as +FASM = fasm.exe + +DEFINES = -D__KERNEL__ -DCONFIG_X86_32 + +DRV_TOPDIR = $(CURDIR)/../../.. +DRM_TOPDIR = $(CURDIR)/.. + +DRV_INCLUDES = $(DRV_TOPDIR)/include + +INCLUDES = -I$(DRV_INCLUDES) -I$(DRV_INCLUDES)/drm \ + -I$(DRV_INCLUDES)/linux + +CFLAGS_OPT = -Os -march=i686 -msse2 -fomit-frame-pointer -fno-builtin-printf -mno-stack-arg-probe +CFLAGS_OPT+= -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2 -mno-ms-bitfields -flto +CFLAGS = -c $(INCLUDES) $(DEFINES) $(CFLAGS_OPT) + +LIBPATH:= $(DRV_TOPDIR)/ddk + +LIBS:= -lddk -lcore -lgcc + +LDFLAGS = -e,_drvEntry,-nostdlib,-shared,-s,--image-base,0,--file-alignment,512,--section-alignment,4096 + + +NAME:= vmwgfx + +HFILES:= $(DRV_INCLUDES)/linux/types.h \ + $(DRV_INCLUDES)/linux/list.h \ + $(DRV_INCLUDES)/linux/pci.h \ + $(DRV_INCLUDES)/drm/drm.h \ + $(DRV_INCLUDES)/drm/drmP.h \ + $(DRV_INCLUDES)/drm/drm_edid.h \ + $(DRV_INCLUDES)/drm/drm_crtc.h \ + $(DRV_INCLUDES)/drm/drm_mode.h \ + $(DRV_INCLUDES)/drm/drm_mm.h + +NAME_SRC= \ + main.c \ + pci.c \ + vmwgfx_buffer.c \ + vmwgfx_context.c \ + vmwgfx_dmabuf.c \ + vmwgfx_drv.c \ + vmwgfx_execbuf.c \ + vmwgfx_fence.c \ + vmwgfx_fifo.c \ + vmwgfx_gmr.c \ + vmwgfx_gmrid_manager.c \ + vmwgfx_irq.c \ + vmwgfx_kms.c \ + vmwgfx_marker.c \ + vmwgfx_resource.c \ + vmwgfx_scrn.c \ + vmwgfx_surface.c \ + vmwgfx_ttm_glue.c \ + ../hdmi.c \ + ../i2c/i2c-core.c \ + ../ttm/ttm_bo.c \ + ../ttm/ttm_bo_manager.c \ + ../ttm/ttm_execbuf_util.c \ + ../ttm/ttm_memory.c \ + ../ttm/ttm_object.c \ + ../ttm/ttm_page_alloc.c \ + ../ttm/ttm_tt.c \ + ../drm_crtc.c \ + ../drm_crtc_helper.c \ + ../drm_drv.c \ + ../drm_edid.c \ + ../drm_gem.c \ + ../drm_global.c \ + ../drm_hashtab.c \ + ../drm_irq.c \ + ../drm_mm.c \ + ../drm_modes.c \ + ../drm_pci.c \ + ../drm_stub.c \ + ../drm_vma_manager.c + + + + +NAME_OBJS = $(patsubst %.S, %.o, $(patsubst %.asm, %.o,\ + $(patsubst %.c, %.o, $(NAME_SRC)))) + + + +all: $(NAME).dll + +$(NAME).dll: $(NAME_OBJS) $(SRC_DEP) $(HFILES) vmw.lds Makefile + $(CC) $(CFLAGS_OPT) -fwhole-program -nostdlib -Wl,-L$(LIBPATH),$(LDFLAGS),-T,vmw.lds -o $@ $(NAME_OBJS) libddk.a libcore.a libgcc.a + kpack $@ + + +%.o : %.c $(HFILES) Makefile.lto + $(CC) $(CFLAGS) $(DEFINES) -o $@ $< + +%.o : %.S $(HFILES) Makefile.lto + as -o $@ $< + + +clean: + -rm -f */*.o + diff --git a/drivers/video/drm/vmwgfx/main.c b/drivers/video/drm/vmwgfx/main.c index 20c9364bb7..32ec8a380c 100644 --- a/drivers/video/drm/vmwgfx/main.c +++ b/drivers/video/drm/vmwgfx/main.c @@ -26,10 +26,13 @@ struct pci_device { uint8_t revision; }; -extern struct drm_device *main_device; -extern struct drm_file *drm_file_handlers[256]; +struct drm_device *main_device; +struct drm_file *drm_file_handlers[256]; int vmw_init(void); +int kms_init(struct drm_device *dev); +void kms_update(); + void cpu_detect(); void parse_cmdline(char *cmdline, char *log); @@ -61,6 +64,23 @@ unsigned int tsc_khz; int kms_modeset = 1; + +void vmw_driver_thread() +{ + dbgprintf("%s\n",__FUNCTION__); + +// run_workqueue(dev_priv->wq); + + while(driver_wq_state) + { + kms_update(); + delay(1); + }; + __asm__ __volatile__ ( + "int $0x40" + ::"a"(-1)); +} + u32_t __attribute__((externally_visible)) drvEntry(int action, char *cmdline) { @@ -80,9 +100,9 @@ u32_t __attribute__((externally_visible)) drvEntry(int action, char *cmdline) if(!dbg_open(log)) { -// strcpy(log, "/tmp1/1/vmw.log"); + strcpy(log, "/tmp1/1/vmw.log"); // strcpy(log, "/RD/1/DRIVERS/VMW.log"); - strcpy(log, "/HD0/1/vmw.log"); +// strcpy(log, "/HD0/1/vmw.log"); if(!dbg_open(log)) { @@ -90,7 +110,7 @@ u32_t __attribute__((externally_visible)) drvEntry(int action, char *cmdline) return 0; }; } - dbgprintf(" vmw v3.10\n cmdline: %s\n", cmdline); + dbgprintf(" vmw v3.12-rc6\n cmdline: %s\n", cmdline); cpu_detect(); dbgprintf("\ncache line size %d\n", x86_clflush_size); @@ -103,15 +123,16 @@ u32_t __attribute__((externally_visible)) drvEntry(int action, char *cmdline) dbgprintf("Epic Fail :(\n"); return 0; }; + kms_init(main_device); err = RegService("DISPLAY", display_handler); if( err != 0) dbgprintf("Set DISPLAY handler\n"); -// struct drm_i915_private *dev_priv = main_device->dev_private; -// driver_wq_state = 1; -// run_workqueue(dev_priv->wq); + driver_wq_state = 1; + + CreateKernelThread(vmw_driver_thread); return err; }; @@ -446,26 +467,8 @@ void get_pci_info(struct pci_device *dev) #include #include #include -#include #include -/** - * hdmi_avi_infoframe_init() - initialize an HDMI AVI infoframe - * @frame: HDMI AVI infoframe - * - * Returns 0 on success or a negative error code on failure. - */ -int hdmi_avi_infoframe_init(struct hdmi_avi_infoframe *frame) -{ - memset(frame, 0, sizeof(*frame)); - - frame->type = HDMI_INFOFRAME_TYPE_AVI; - frame->version = 2; - frame->length = 13; - - return 0; -} - static void *check_bytes8(const u8 *start, u8 value, unsigned int bytes) { @@ -873,10 +876,9 @@ struct tag_display u32 mask_seqno; u32 check_mouse; u32 check_m_pixel; - u32 dirty; - void (*update)(void); }; + static display_t *os_display; static int count_connector_modes(struct drm_connector* connector) @@ -941,7 +943,7 @@ int kms_init(struct drm_device *dev) os_display->connector = connector; os_display->crtc = crtc; os_display->supported_modes = mode_count; - os_display->update = kms_update; +// os_display->update = kms_update; // struct intel_crtc *intel_crtc = to_intel_crtc(os_display->crtc); @@ -965,8 +967,6 @@ int kms_init(struct drm_device *dev) }; safe_sti(ifl); - main_device = dev; - #ifdef __HWA__ err = init_bitmaps(); #endif @@ -1069,3 +1069,57 @@ int set_user_mode(videomode_t *mode) return err; }; +struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags) +{ + struct file *filep; + int count; + + filep = malloc(sizeof(*filep)); + + if(unlikely(filep == NULL)) + return ERR_PTR(-ENOMEM); + + count = size / PAGE_SIZE; + + filep->pages = kzalloc(sizeof(struct page *) * count, 0); + if(unlikely(filep->pages == NULL)) + { + kfree(filep); + return ERR_PTR(-ENOMEM); + }; + + filep->count = count; + filep->allocated = 0; + filep->vma = NULL; + +// printf("%s file %p pages %p count %d\n", +// __FUNCTION__,filep, filep->pages, count); + + return filep; +} + +struct page *shmem_read_mapping_page_gfp(struct file *filep, + pgoff_t index, gfp_t gfp) +{ + struct page *page; + +// dbgprintf("%s, file %p index %d\n", __FUNCTION__, filep, index); + + if(unlikely(index >= filep->count)) + return ERR_PTR(-EINVAL); + + page = filep->pages[index]; + + if(unlikely(page == NULL)) + { + page = (struct page *)AllocPage(); + + if(unlikely(page == NULL)) + return ERR_PTR(-ENOMEM); + + filep->pages[index] = page; + }; + + return page; +}; + diff --git a/drivers/video/drm/vmwgfx/vmwgfx_drv.c b/drivers/video/drm/vmwgfx/vmwgfx_drv.c index 65bf4ebf71..17da45ec45 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_drv.c @@ -41,10 +41,6 @@ #define VMW_MIN_INITIAL_WIDTH 800 #define VMW_MIN_INITIAL_HEIGHT 600 -struct drm_device *main_device; - -struct drm_file *drm_file_handlers[256]; - #if 0 /** * Fully encoded drm commands. Might move to vmw_drm.h @@ -128,7 +124,7 @@ struct drm_file *drm_file_handlers[256]; * Ioctl definitions. */ -static struct drm_ioctl_desc vmw_ioctls[] = { +static const struct drm_ioctl_desc vmw_ioctls[] = { VMW_IOCTL_DEF(VMW_GET_PARAM, vmw_getparam_ioctl, DRM_AUTH | DRM_UNLOCKED), VMW_IOCTL_DEF(VMW_ALLOC_DMABUF, vmw_dmabuf_alloc_ioctl, @@ -616,8 +612,10 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) } dev_priv->fman = vmw_fence_manager_init(dev_priv); - if (unlikely(dev_priv->fman == NULL)) + if (unlikely(dev_priv->fman == NULL)) { + ret = -ENOMEM; goto out_no_fman; + } vmw_kms_save_vga(dev_priv); #endif @@ -634,6 +632,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) // vmw_fb_init(dev_priv); } + main_device = dev; + LEAVE(); return 0; @@ -777,7 +777,7 @@ static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd, if ((nr >= DRM_COMMAND_BASE) && (nr < DRM_COMMAND_END) && (nr < DRM_COMMAND_BASE + dev->driver->num_ioctls)) { - struct drm_ioctl_desc *ioctl = + const struct drm_ioctl_desc *ioctl = &vmw_ioctls[nr - DRM_COMMAND_BASE]; if (unlikely(ioctl->cmd_drv != cmd)) { @@ -790,29 +790,12 @@ static long vmw_unlocked_ioctl(struct file *filp, unsigned int cmd, return drm_ioctl(filp, cmd, arg); } -static int vmw_firstopen(struct drm_device *dev) -{ - struct vmw_private *dev_priv = vmw_priv(dev); - dev_priv->is_opened = true; - - return 0; -} - static void vmw_lastclose(struct drm_device *dev) { - struct vmw_private *dev_priv = vmw_priv(dev); struct drm_crtc *crtc; struct drm_mode_set set; int ret; - /** - * Do nothing on the lastclose call from drm_unload. - */ - - if (!dev_priv->is_opened) - return; - - dev_priv->is_opened = false; set.x = 0; set.y = 0; set.fb = NULL; @@ -1082,12 +1065,10 @@ static int vmw_pm_prepare(struct device *kdev) #endif - - static struct drm_driver driver = { .driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_MODESET, -// .load = vmw_driver_load, + .load = vmw_driver_load, // .unload = vmw_driver_unload, // .firstopen = vmw_firstopen, // .lastclose = vmw_lastclose, @@ -1122,6 +1103,22 @@ static struct drm_driver driver = { // .patchlevel = VMWGFX_DRIVER_PATCHLEVEL }; +#if 0 +static struct pci_driver vmw_pci_driver = { + .name = VMWGFX_DRIVER_NAME, + .id_table = vmw_pci_id_list, + .probe = vmw_probe, + .remove = vmw_remove, + .driver = { + .pm = &vmw_pm_ops + } +}; + +static int vmw_probe(struct pci_dev *pdev, const struct pci_device_id *ent) +{ + return drm_get_pci_dev(pdev, ent, &driver); +} +#endif int vmw_init(void) { @@ -1138,100 +1135,18 @@ int vmw_init(void) return -ENODEV; }; + drm_core_init(); + DRM_INFO("device %x:%x\n", device.pci_dev.vendor, device.pci_dev.device); - drm_global_init(); - err = drm_get_dev(&device.pci_dev, ent); + err = drm_get_pci_dev(&device.pci_dev, ent, &driver); LEAVE(); return err; } - -//module_init(vmwgfx_init); -//module_exit(vmwgfx_exit); - MODULE_AUTHOR("VMware Inc. and others"); MODULE_DESCRIPTION("Standalone drm driver for the VMware SVGA device"); MODULE_LICENSE("GPL and additional rights"); - -int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent) -{ - static struct drm_device drm_dev; - static struct drm_file drm_file; - - struct drm_device *dev; - struct drm_file *priv; - - int ret; - - dev = &drm_dev; - priv = &drm_file; - - drm_file_handlers[0] = priv; - - // ret = pci_enable_device(pdev); - // if (ret) - // goto err_g1; - - pci_set_master(pdev); - - // if ((ret = drm_fill_in_dev(dev, pdev, ent, driver))) { - // printk(KERN_ERR "DRM: Fill_in_dev failed.\n"); - // goto err_g2; - // } - - dev->pdev = pdev; - dev->pci_device = pdev->device; - dev->pci_vendor = pdev->vendor; - - INIT_LIST_HEAD(&dev->filelist); - INIT_LIST_HEAD(&dev->ctxlist); - INIT_LIST_HEAD(&dev->vmalist); - INIT_LIST_HEAD(&dev->maplist); - - spin_lock_init(&dev->count_lock); - mutex_init(&dev->struct_mutex); - mutex_init(&dev->ctxlist_mutex); - - INIT_LIST_HEAD(&priv->lhead); - INIT_LIST_HEAD(&priv->fbs); - INIT_LIST_HEAD(&priv->event_list); - init_waitqueue_head(&priv->event_wait); - priv->event_space = 4096; /* set aside 4k for event buffer */ - - idr_init(&priv->object_idr); - spin_lock_init(&priv->table_lock); - - dev->driver = &driver; - - if (dev->driver->open) { - ret = dev->driver->open(dev, priv); - if (ret < 0) - goto err_g4; - } - - ret = vmw_driver_load(dev, ent->driver_data ); - - if (ret) - goto err_g4; - - ret = kms_init(dev); - - if (ret) - goto err_g4; - - return 0; - -err_g4: -//err_g3: -// if (drm_core_check_feature(dev, DRIVER_MODESET)) -// drm_put_minor(&dev->control); -//err_g2: -// pci_disable_device(pdev); -//err_g1: - - return ret; -} diff --git a/drivers/video/drm/vmwgfx/vmwgfx_drv.h b/drivers/video/drm/vmwgfx/vmwgfx_drv.h index 406405ac42..58c083071e 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/video/drm/vmwgfx/vmwgfx_drv.h @@ -340,7 +340,6 @@ struct vmw_private { */ bool stealth; - bool is_opened; bool enable_fb; /** @@ -782,6 +781,9 @@ static inline struct ttm_mem_global *vmw_mem_glob(struct vmw_private *dev_priv) return (struct ttm_mem_global *) dev_priv->mem_global_ref.object; } +extern struct drm_device *main_device; +extern struct drm_file *drm_file_handlers[256]; + typedef struct { int width; diff --git a/drivers/video/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/video/drm/vmwgfx/vmwgfx_execbuf.c index e049673fc9..8312c634b0 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_execbuf.c @@ -1352,7 +1352,6 @@ int vmw_execbuf_fence_commands(struct drm_file *file_priv, return 0; } - /** * vmw_execbuf_copy_fence_user - copy fence object information to * user-space. @@ -1596,8 +1595,6 @@ out_unlock: return ret; } - - /** * vmw_execbuf_unpin_panic - Idle the fifo and unpin the query buffer. * diff --git a/drivers/video/drm/vmwgfx/vmwgfx_gmr.c b/drivers/video/drm/vmwgfx/vmwgfx_gmr.c index 07dd8a7f31..e51b9f54a8 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_gmr.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_gmr.c @@ -32,7 +32,9 @@ #include #include -#define VMW_PPN_SIZE sizeof(unsigned long) +#define VMW_PPN_SIZE (sizeof(unsigned long)) +/* A future safe maximum remap size. */ +#define VMW_PPN_PER_REMAP ((31 * 1024) / VMW_PPN_SIZE) static int vmw_gmr2_bind(struct vmw_private *dev_priv, struct page *pages[], @@ -41,34 +43,46 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv, { SVGAFifoCmdDefineGMR2 define_cmd; SVGAFifoCmdRemapGMR2 remap_cmd; - uint32_t define_size = sizeof(define_cmd) + 4; - uint32_t remap_size = VMW_PPN_SIZE * num_pages + sizeof(remap_cmd) + 4; uint32_t *cmd; uint32_t *cmd_orig; + uint32_t define_size = sizeof(define_cmd) + sizeof(*cmd); + uint32_t remap_num = num_pages / VMW_PPN_PER_REMAP + ((num_pages % VMW_PPN_PER_REMAP) > 0); + uint32_t remap_size = VMW_PPN_SIZE * num_pages + (sizeof(remap_cmd) + sizeof(*cmd)) * remap_num; + uint32_t remap_pos = 0; + uint32_t cmd_size = define_size + remap_size; uint32_t i; - cmd_orig = cmd = vmw_fifo_reserve(dev_priv, define_size + remap_size); + cmd_orig = cmd = vmw_fifo_reserve(dev_priv, cmd_size); if (unlikely(cmd == NULL)) return -ENOMEM; define_cmd.gmrId = gmr_id; define_cmd.numPages = num_pages; + *cmd++ = SVGA_CMD_DEFINE_GMR2; + memcpy(cmd, &define_cmd, sizeof(define_cmd)); + cmd += sizeof(define_cmd) / sizeof(*cmd); + + /* + * Need to split the command if there are too many + * pages that goes into the gmr. + */ + remap_cmd.gmrId = gmr_id; remap_cmd.flags = (VMW_PPN_SIZE > sizeof(*cmd)) ? SVGA_REMAP_GMR2_PPN64 : SVGA_REMAP_GMR2_PPN32; - remap_cmd.offsetPages = 0; - remap_cmd.numPages = num_pages; - *cmd++ = SVGA_CMD_DEFINE_GMR2; - memcpy(cmd, &define_cmd, sizeof(define_cmd)); - cmd += sizeof(define_cmd) / sizeof(uint32); + while (num_pages > 0) { + unsigned long nr = min(num_pages, (unsigned long)VMW_PPN_PER_REMAP); + + remap_cmd.offsetPages = remap_pos; + remap_cmd.numPages = nr; *cmd++ = SVGA_CMD_REMAP_GMR2; memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); - cmd += sizeof(remap_cmd) / sizeof(uint32); + cmd += sizeof(remap_cmd) / sizeof(*cmd); - for (i = 0; i < num_pages; ++i) { + for (i = 0; i < nr; ++i) { if (VMW_PPN_SIZE <= 4) *cmd = page_to_pfn(*pages++); else @@ -77,7 +91,13 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv, cmd += VMW_PPN_SIZE / sizeof(*cmd); } - vmw_fifo_commit(dev_priv, define_size + remap_size); + num_pages -= nr; + remap_pos += nr; + } + + BUG_ON(cmd != cmd_orig + cmd_size / sizeof(*cmd)); + + vmw_fifo_commit(dev_priv, cmd_size); return 0; } diff --git a/drivers/video/drm/vmwgfx/vmwgfx_kms.h b/drivers/video/drm/vmwgfx/vmwgfx_kms.h index 74d7b88e8d..2db959a232 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_kms.h +++ b/drivers/video/drm/vmwgfx/vmwgfx_kms.h @@ -123,7 +123,8 @@ struct vmw_display_unit { void vmw_display_unit_cleanup(struct vmw_display_unit *du); int vmw_du_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, - struct drm_pending_vblank_event *event); + struct drm_pending_vblank_event *event, + uint32_t page_flip_flags); void vmw_du_crtc_save(struct drm_crtc *crtc); void vmw_du_crtc_restore(struct drm_crtc *crtc); void vmw_du_crtc_gamma_set(struct drm_crtc *crtc, diff --git a/drivers/video/drm/vmwgfx/vmwgfx_resource.c b/drivers/video/drm/vmwgfx/vmwgfx_resource.c index d84a36243f..34609c6206 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_resource.c @@ -501,7 +501,7 @@ int vmw_dmabuf_alloc_ioctl(struct drm_device *dev, void *data, goto out_no_dmabuf; rep->handle = handle; - rep->map_handle = dma_buf->base.addr_space_offset; + rep->map_handle = drm_vma_node_offset_addr(&dma_buf->base.vma_node); rep->cur_gmr_id = handle; rep->cur_gmr_offset = 0; @@ -839,7 +839,7 @@ int vmw_dumb_map_offset(struct drm_file *file_priv, if (ret != 0) return -EINVAL; - *offset = out_buf->base.addr_space_offset; + *offset = drm_vma_node_offset_addr(&out_buf->base.vma_node); vmw_dmabuf_unreference(&out_buf); return 0; } diff --git a/drivers/video/drm/vmwgfx/vmwgfx_scrn.c b/drivers/video/drm/vmwgfx/vmwgfx_scrn.c index 9ed7123da9..36f60edfcd 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_scrn.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_scrn.c @@ -629,13 +629,11 @@ struct tag_display void (*update)(void); }; -extern struct drm_device *main_device; - bool set_mode(struct drm_device *dev, struct drm_connector *connector, videomode_t *reqmode, bool strict) { struct drm_display_mode *mode = NULL, *tmpmode; - struct vmw_private *dev_priv = vmw_priv(main_device); + struct vmw_private *dev_priv = vmw_priv(dev); struct vmw_screen_object_unit *sou; display_t *os_display; diff --git a/drivers/video/drm/vmwgfx/vmwgfx_ttm_glue.c b/drivers/video/drm/vmwgfx/vmwgfx_ttm_glue.c index 0f4807000b..2fd580a4c8 100644 --- a/drivers/video/drm/vmwgfx/vmwgfx_ttm_glue.c +++ b/drivers/video/drm/vmwgfx/vmwgfx_ttm_glue.c @@ -26,7 +26,6 @@ **************************************************************************/ #include -#include #include "vmwgfx_drv.h" #if 0