diff options
author | Dave Airlie <airlied@gmail.com> | 2013-09-09 10:53:35 +1000 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2013-09-09 10:53:35 +1000 |
commit | f92ebf1f3ba73e2c06b3acca0dcc55229054c89d (patch) | |
tree | 21de40e7a59004f1905ce34c4d3b55eea1c91636 /drivers/gpu/drm/virtio/virtio_kms.c | |
parent | 1ad3b28fe38a769a62fec053496e0eb6d55ad746 (diff) |
further boilerplating
Diffstat (limited to 'drivers/gpu/drm/virtio/virtio_kms.c')
-rw-r--r-- | drivers/gpu/drm/virtio/virtio_kms.c | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/drivers/gpu/drm/virtio/virtio_kms.c b/drivers/gpu/drm/virtio/virtio_kms.c index 0fedd63cc1a2..59d98a6103ef 100644 --- a/drivers/gpu/drm/virtio/virtio_kms.c +++ b/drivers/gpu/drm/virtio/virtio_kms.c @@ -1,25 +1,50 @@ +#include <linux/virtio.h> +#include <linux/virtio_config.h> #include <drm/drmP.h> #include "virtio_drv.h" -int virtio_gpu_max_ioctls; +int virtgpu_max_ioctls; -int virtio_gpu_driver_load(struct drm_device *dev, unsigned long flags) +static void virtgpu_ctrl_ack(struct virtqueue *vq) { - struct virtio_gpu_device *vgdev; - vgdev = kzalloc(sizeof(struct virtio_gpu_device), GFP_KERNEL); +} + +int virtgpu_driver_load(struct drm_device *dev, unsigned long flags) +{ + struct virtgpu_device *vgdev; + /* this will expand later */ + struct virtqueue *vqs[1]; + vq_callback_t *callbacks[] = { virtgpu_ctrl_ack }; + const char *names[] = { "control" }; + int nvqs; + int ret; + + vgdev = kzalloc(sizeof(struct virtgpu_device), GFP_KERNEL); if (!vgdev) return -ENOMEM; vgdev->ddev = dev; dev->dev_private = vgdev; + vgdev->vdev = dev->virtdev; + + nvqs = 1; + + ret = vgdev->vdev->config->find_vqs(vgdev->vdev, nvqs, vqs, callbacks, names); + if (ret) { + DRM_ERROR("failed to find virt queues\n"); + kfree(vgdev); + return ret; + } + + vgdev->ctrlq = vqs[0]; return 0; } -int virtio_gpu_driver_unload(struct drm_device *dev) +int virtgpu_driver_unload(struct drm_device *dev) { - struct virtio_gpu_device *vgdev = dev->dev_private; + struct virtgpu_device *vgdev = dev->dev_private; kfree(vgdev); return 0; |