.. | .. |
---|
29 | 29 | #include <linux/module.h> |
---|
30 | 30 | #include <linux/console.h> |
---|
31 | 31 | #include <linux/pci.h> |
---|
32 | | -#include <drm/drmP.h> |
---|
| 32 | + |
---|
33 | 33 | #include <drm/drm.h> |
---|
| 34 | +#include <drm/drm_atomic_helper.h> |
---|
| 35 | +#include <drm/drm_drv.h> |
---|
| 36 | +#include <drm/drm_file.h> |
---|
34 | 37 | |
---|
35 | 38 | #include "virtgpu_drv.h" |
---|
| 39 | + |
---|
36 | 40 | static struct drm_driver driver; |
---|
37 | 41 | |
---|
38 | 42 | static int virtio_gpu_modeset = -1; |
---|
39 | 43 | |
---|
40 | 44 | MODULE_PARM_DESC(modeset, "Disable/Enable modesetting"); |
---|
41 | 45 | module_param_named(modeset, virtio_gpu_modeset, int, 0400); |
---|
42 | | - |
---|
43 | | -static void virtio_pci_kick_out_firmware_fb(struct pci_dev *pci_dev) |
---|
44 | | -{ |
---|
45 | | - struct apertures_struct *ap; |
---|
46 | | - bool primary; |
---|
47 | | - |
---|
48 | | - ap = alloc_apertures(1); |
---|
49 | | - if (!ap) |
---|
50 | | - return; |
---|
51 | | - |
---|
52 | | - ap->ranges[0].base = pci_resource_start(pci_dev, 0); |
---|
53 | | - ap->ranges[0].size = pci_resource_len(pci_dev, 0); |
---|
54 | | - |
---|
55 | | - primary = pci_dev->resource[PCI_ROM_RESOURCE].flags |
---|
56 | | - & IORESOURCE_ROM_SHADOW; |
---|
57 | | - |
---|
58 | | - drm_fb_helper_remove_conflicting_framebuffers(ap, "virtiodrmfb", primary); |
---|
59 | | - |
---|
60 | | - kfree(ap); |
---|
61 | | -} |
---|
62 | 46 | |
---|
63 | 47 | static int virtio_gpu_pci_quirk(struct drm_device *dev, struct virtio_device *vdev) |
---|
64 | 48 | { |
---|
.. | .. |
---|
72 | 56 | pname); |
---|
73 | 57 | dev->pdev = pdev; |
---|
74 | 58 | if (vga) |
---|
75 | | - virtio_pci_kick_out_firmware_fb(pdev); |
---|
| 59 | + drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, |
---|
| 60 | + "virtiodrmfb"); |
---|
76 | 61 | |
---|
77 | 62 | /* |
---|
78 | 63 | * Normally the drm_dev_set_unique() call is done by core DRM. |
---|
.. | .. |
---|
151 | 136 | { |
---|
152 | 137 | struct drm_device *dev = vdev->priv; |
---|
153 | 138 | |
---|
154 | | - drm_dev_unregister(dev); |
---|
| 139 | + drm_dev_unplug(dev); |
---|
| 140 | + drm_atomic_helper_shutdown(dev); |
---|
155 | 141 | virtio_gpu_deinit(dev); |
---|
156 | | - drm_put_dev(dev); |
---|
| 142 | + drm_dev_put(dev); |
---|
157 | 143 | } |
---|
158 | 144 | |
---|
159 | 145 | static void virtio_gpu_config_changed(struct virtio_device *vdev) |
---|
.. | .. |
---|
179 | 165 | VIRTIO_GPU_F_VIRGL, |
---|
180 | 166 | #endif |
---|
181 | 167 | VIRTIO_GPU_F_EDID, |
---|
| 168 | + VIRTIO_GPU_F_RESOURCE_UUID, |
---|
182 | 169 | }; |
---|
183 | 170 | static struct virtio_driver virtio_gpu_driver = { |
---|
184 | 171 | .feature_table = features, |
---|
.. | .. |
---|
200 | 187 | MODULE_AUTHOR("Gerd Hoffmann <kraxel@redhat.com>"); |
---|
201 | 188 | MODULE_AUTHOR("Alon Levy"); |
---|
202 | 189 | |
---|
203 | | -static const struct file_operations virtio_gpu_driver_fops = { |
---|
204 | | - .owner = THIS_MODULE, |
---|
205 | | - .open = drm_open, |
---|
206 | | - .mmap = virtio_gpu_mmap, |
---|
207 | | - .poll = drm_poll, |
---|
208 | | - .read = drm_read, |
---|
209 | | - .unlocked_ioctl = drm_ioctl, |
---|
210 | | - .release = drm_release, |
---|
211 | | - .compat_ioctl = drm_compat_ioctl, |
---|
212 | | - .llseek = noop_llseek, |
---|
213 | | -}; |
---|
| 190 | +DEFINE_DRM_GEM_FOPS(virtio_gpu_driver_fops); |
---|
214 | 191 | |
---|
215 | 192 | static struct drm_driver driver = { |
---|
216 | | - .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC, |
---|
| 193 | + .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_RENDER | DRIVER_ATOMIC, |
---|
217 | 194 | .open = virtio_gpu_driver_open, |
---|
218 | 195 | .postclose = virtio_gpu_driver_postclose, |
---|
219 | 196 | |
---|
.. | .. |
---|
225 | 202 | #endif |
---|
226 | 203 | .prime_handle_to_fd = drm_gem_prime_handle_to_fd, |
---|
227 | 204 | .prime_fd_to_handle = drm_gem_prime_fd_to_handle, |
---|
228 | | - .gem_prime_export = drm_gem_prime_export, |
---|
229 | | - .gem_prime_import = drm_gem_prime_import, |
---|
230 | | - .gem_prime_get_sg_table = virtgpu_gem_prime_get_sg_table, |
---|
| 205 | + .gem_prime_mmap = drm_gem_prime_mmap, |
---|
| 206 | + .gem_prime_export = virtgpu_gem_prime_export, |
---|
| 207 | + .gem_prime_import = virtgpu_gem_prime_import, |
---|
231 | 208 | .gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table, |
---|
232 | | - .gem_prime_vmap = virtgpu_gem_prime_vmap, |
---|
233 | | - .gem_prime_vunmap = virtgpu_gem_prime_vunmap, |
---|
234 | | - .gem_prime_mmap = virtgpu_gem_prime_mmap, |
---|
235 | 209 | |
---|
236 | | - .gem_free_object_unlocked = virtio_gpu_gem_free_object, |
---|
237 | | - .gem_open_object = virtio_gpu_gem_object_open, |
---|
238 | | - .gem_close_object = virtio_gpu_gem_object_close, |
---|
| 210 | + .gem_create_object = virtio_gpu_create_object, |
---|
239 | 211 | .fops = &virtio_gpu_driver_fops, |
---|
240 | 212 | |
---|
241 | 213 | .ioctls = virtio_gpu_ioctls, |
---|
.. | .. |
---|
247 | 219 | .major = DRIVER_MAJOR, |
---|
248 | 220 | .minor = DRIVER_MINOR, |
---|
249 | 221 | .patchlevel = DRIVER_PATCHLEVEL, |
---|
| 222 | + |
---|
| 223 | + .release = virtio_gpu_release, |
---|
250 | 224 | }; |
---|