[vbox-dev] [PATCH 6/7] Additions: linux/drm: Change vbox_main.c to kernel coding style
Hans de Goede
hdegoede at redhat.com
Thu Jun 8 19:08:13 UTC 2017
This is the result of running linux/scripts/Lindent + manual cleanups.
After this the file passes linux/scripts/checkpatch -f
except for the LINUX_VERSION_CODE checks.
This patch contains no functional changes, only coding style fixes,
including changing uintXX_t types to uXX.
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
src/VBox/Additions/linux/drm/vbox_main.c | 705 ++++++++++++++++---------------
1 file changed, 370 insertions(+), 335 deletions(-)
diff --git a/src/VBox/Additions/linux/drm/vbox_main.c b/src/VBox/Additions/linux/drm/vbox_main.c
index aea5ddb9..2bf6bc2c 100644
--- a/src/VBox/Additions/linux/drm/vbox_main.c
+++ b/src/VBox/Additions/linux/drm/vbox_main.c
@@ -42,331 +42,366 @@
static void vbox_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
- struct vbox_framebuffer *vbox_fb = to_vbox_framebuffer(fb);
- if (vbox_fb->obj)
- drm_gem_object_unreference_unlocked(vbox_fb->obj);
+ struct vbox_framebuffer *vbox_fb = to_vbox_framebuffer(fb);
- drm_framebuffer_cleanup(fb);
- kfree(fb);
+ if (vbox_fb->obj)
+ drm_gem_object_unreference_unlocked(vbox_fb->obj);
+
+ drm_framebuffer_cleanup(fb);
+ kfree(fb);
}
void vbox_enable_accel(struct vbox_private *vbox)
{
- unsigned i;
- struct VBVABUFFER *vbva;
-
- if (!vbox->vbva_info || !vbox->vbva_buffers) { /* Should never happen... */
- printk(KERN_ERR "vboxvideo: failed to set up VBVA.\n");
- return;
- }
- for (i = 0; i < vbox->num_crtcs; ++i) {
- if (vbox->vbva_info[i].pVBVA == NULL) {
- vbva = (struct VBVABUFFER *) ((u8 *)vbox->vbva_buffers
- + i * VBVA_MIN_BUFFER_SIZE);
- if (!VBoxVBVAEnable(&vbox->vbva_info[i], vbox->guest_pool, vbva, i)) {
- /* very old host or driver error. */
- printk(KERN_ERR "vboxvideo: VBoxVBVAEnable failed - heap allocation error.\n");
- return;
- }
- }
- }
+ unsigned int i;
+ struct VBVABUFFER *vbva;
+
+ if (!vbox->vbva_info || !vbox->vbva_buffers) {
+ /* Should never happen... */
+ DRM_ERROR("vboxvideo: failed to set up VBVA.\n");
+ return;
+ }
+
+ for (i = 0; i < vbox->num_crtcs; ++i) {
+ if (!vbox->vbva_info[i].pVBVA) {
+ vbva = (struct VBVABUFFER *)
+ ((u8 *)vbox->vbva_buffers +
+ i * VBVA_MIN_BUFFER_SIZE);
+ if (!VBoxVBVAEnable(&vbox->vbva_info[i],
+ vbox->guest_pool, vbva, i)) {
+ /* very old host or driver error. */
+ DRM_ERROR("vboxvideo: VBoxVBVAEnable failed - heap allocation error.\n");
+ return;
+ }
+ }
+ }
}
void vbox_disable_accel(struct vbox_private *vbox)
{
- unsigned i;
+ unsigned int i;
- for (i = 0; i < vbox->num_crtcs; ++i)
- VBoxVBVADisable(&vbox->vbva_info[i], vbox->guest_pool, i);
+ for (i = 0; i < vbox->num_crtcs; ++i)
+ VBoxVBVADisable(&vbox->vbva_info[i], vbox->guest_pool, i);
}
void vbox_report_caps(struct vbox_private *vbox)
{
- uint32_t caps = VBVACAPS_DISABLE_CURSOR_INTEGRATION
- | VBVACAPS_IRQ
- | VBVACAPS_USE_VBVA_ONLY;
- if (vbox->initial_mode_queried)
- caps |= VBVACAPS_VIDEO_MODE_HINTS;
- VBoxHGSMISendCapsInfo(vbox->guest_pool, caps);
+ u32 caps = VBVACAPS_DISABLE_CURSOR_INTEGRATION
+ | VBVACAPS_IRQ | VBVACAPS_USE_VBVA_ONLY;
+ if (vbox->initial_mode_queried)
+ caps |= VBVACAPS_VIDEO_MODE_HINTS;
+ VBoxHGSMISendCapsInfo(vbox->guest_pool, caps);
}
-/** Send information about dirty rectangles to VBVA. If necessary we enable
+/**
+ * Send information about dirty rectangles to VBVA. If necessary we enable
* VBVA first, as this is normally disabled after a change of master in case
* the new master does not send dirty rectangle information (is this even
- * allowed?) */
+ * allowed?)
+ */
void vbox_framebuffer_dirty_rectangles(struct drm_framebuffer *fb,
- struct drm_clip_rect *rects,
- unsigned num_rects)
+ struct drm_clip_rect *rects,
+ unsigned int num_rects)
{
- struct vbox_private *vbox = fb->dev->dev_private;
- struct drm_crtc *crtc;
- unsigned i;
-
- mutex_lock(&vbox->hw_mutex);
- list_for_each_entry(crtc, &fb->dev->mode_config.crtc_list, head) {
- if (CRTC_FB(crtc) == fb) {
- vbox_enable_accel(vbox);
- for (i = 0; i < num_rects; ++i)
- {
- unsigned crtc_id = to_vbox_crtc(crtc)->crtc_id;
- VBVACMDHDR cmd_hdr;
-
- if ( rects[i].x1 > crtc->x
- + crtc->hwmode.hdisplay
- || rects[i].y1 > crtc->y
- + crtc->hwmode.vdisplay
- || rects[i].x2 < crtc->x
- || rects[i].y2 < crtc->y)
- continue;
- cmd_hdr.x = (int16_t)rects[i].x1;
- cmd_hdr.y = (int16_t)rects[i].y1;
- cmd_hdr.w = (uint16_t)rects[i].x2 - rects[i].x1;
- cmd_hdr.h = (uint16_t)rects[i].y2 - rects[i].y1;
- if (VBoxVBVABufferBeginUpdate(&vbox->vbva_info[crtc_id],
- vbox->guest_pool))
- {
- VBoxVBVAWrite(&vbox->vbva_info[crtc_id], vbox->guest_pool, &cmd_hdr,
- sizeof(cmd_hdr));
- VBoxVBVABufferEndUpdate(&vbox->vbva_info[crtc_id]);
- }
- }
- }
- }
- mutex_unlock(&vbox->hw_mutex);
+ struct vbox_private *vbox = fb->dev->dev_private;
+ struct drm_crtc *crtc;
+ unsigned int i;
+
+ mutex_lock(&vbox->hw_mutex);
+ list_for_each_entry(crtc, &fb->dev->mode_config.crtc_list, head) {
+ if (CRTC_FB(crtc) == fb) {
+ vbox_enable_accel(vbox);
+ for (i = 0; i < num_rects; ++i) {
+ VBVACMDHDR cmd_hdr;
+ unsigned int crtc_id =
+ to_vbox_crtc(crtc)->crtc_id;
+
+ if ((rects[i].x1 >
+ crtc->x + crtc->hwmode.hdisplay) ||
+ (rects[i].y1 >
+ crtc->y + crtc->hwmode.vdisplay) ||
+ (rects[i].x2 < crtc->x) ||
+ (rects[i].y2 < crtc->y))
+ continue;
+
+ cmd_hdr.x = (s16)rects[i].x1;
+ cmd_hdr.y = (s16)rects[i].y1;
+ cmd_hdr.w = (u16)rects[i].x2 - rects[i].x1;
+ cmd_hdr.h = (u16)rects[i].y2 - rects[i].y1;
+
+ if (VBoxVBVABufferBeginUpdate(
+ &vbox->vbva_info[crtc_id],
+ vbox->guest_pool)) {
+ VBoxVBVAWrite(&vbox->vbva_info[crtc_id],
+ vbox->guest_pool,
+ &cmd_hdr,
+ sizeof(cmd_hdr));
+ VBoxVBVABufferEndUpdate(
+ &vbox->vbva_info[crtc_id]);
+ }
+ }
+ }
+ }
+ mutex_unlock(&vbox->hw_mutex);
}
static int vbox_user_framebuffer_dirty(struct drm_framebuffer *fb,
- struct drm_file *file_priv,
- unsigned flags, unsigned color,
- struct drm_clip_rect *rects,
- unsigned num_rects)
+ struct drm_file *file_priv,
+ unsigned int flags, unsigned int color,
+ struct drm_clip_rect *rects,
+ unsigned int num_rects)
{
- vbox_framebuffer_dirty_rectangles(fb, rects, num_rects);
- return 0;
+ vbox_framebuffer_dirty_rectangles(fb, rects, num_rects);
+
+ return 0;
}
static const struct drm_framebuffer_funcs vbox_fb_funcs = {
- .destroy = vbox_user_framebuffer_destroy,
- .dirty = vbox_user_framebuffer_dirty,
+ .destroy = vbox_user_framebuffer_destroy,
+ .dirty = vbox_user_framebuffer_dirty,
};
-
int vbox_framebuffer_init(struct drm_device *dev,
- struct vbox_framebuffer *vbox_fb,
+ struct vbox_framebuffer *vbox_fb,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)
- const
+ const
#endif
- struct DRM_MODE_FB_CMD *mode_cmd,
- struct drm_gem_object *obj)
+ struct DRM_MODE_FB_CMD *mode_cmd,
+ struct drm_gem_object *obj)
{
- int ret;
+ int ret;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
- drm_helper_mode_fill_fb_struct(dev, &vbox_fb->base, mode_cmd);
+ drm_helper_mode_fill_fb_struct(dev, &vbox_fb->base, mode_cmd);
#else
- drm_helper_mode_fill_fb_struct(&vbox_fb->base, mode_cmd);
+ drm_helper_mode_fill_fb_struct(&vbox_fb->base, mode_cmd);
#endif
- vbox_fb->obj = obj;
- ret = drm_framebuffer_init(dev, &vbox_fb->base, &vbox_fb_funcs);
- if (ret) {
- DRM_ERROR("framebuffer init failed %d\n", ret);
- return ret;
- }
- return 0;
+ vbox_fb->obj = obj;
+ ret = drm_framebuffer_init(dev, &vbox_fb->base, &vbox_fb_funcs);
+ if (ret) {
+ DRM_ERROR("framebuffer init failed %d\n", ret);
+ return ret;
+ }
+
+ return 0;
}
-static struct drm_framebuffer *
-vbox_user_framebuffer_create(struct drm_device *dev,
- struct drm_file *filp,
+static struct drm_framebuffer *vbox_user_framebuffer_create(
+ struct drm_device *dev,
+ struct drm_file *filp,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0)
- const
+ const struct drm_mode_fb_cmd2 *mode_cmd)
+#else
+ struct drm_mode_fb_cmd2 *mode_cmd)
#endif
- struct drm_mode_fb_cmd2 *mode_cmd)
{
- struct drm_gem_object *obj;
- struct vbox_framebuffer *vbox_fb;
- int ret;
+ struct drm_gem_object *obj;
+ struct vbox_framebuffer *vbox_fb;
+ int ret;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)
- obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
+ obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
#else
- obj = drm_gem_object_lookup(dev, filp, mode_cmd->handles[0]);
+ obj = drm_gem_object_lookup(dev, filp, mode_cmd->handles[0]);
#endif
- if (obj == NULL)
- return ERR_PTR(-ENOENT);
-
- vbox_fb = kzalloc(sizeof(*vbox_fb), GFP_KERNEL);
- if (!vbox_fb) {
- drm_gem_object_unreference_unlocked(obj);
- return ERR_PTR(-ENOMEM);
- }
-
- ret = vbox_framebuffer_init(dev, vbox_fb, mode_cmd, obj);
- if (ret) {
- drm_gem_object_unreference_unlocked(obj);
- kfree(vbox_fb);
- return ERR_PTR(ret);
- }
- return &vbox_fb->base;
+ if (!obj)
+ return ERR_PTR(-ENOENT);
+
+ vbox_fb = kzalloc(sizeof(*vbox_fb), GFP_KERNEL);
+ if (!vbox_fb) {
+ drm_gem_object_unreference_unlocked(obj);
+ return ERR_PTR(-ENOMEM);
+ }
+
+ ret = vbox_framebuffer_init(dev, vbox_fb, mode_cmd, obj);
+ if (ret) {
+ drm_gem_object_unreference_unlocked(obj);
+ kfree(vbox_fb);
+ return ERR_PTR(ret);
+ }
+
+ return &vbox_fb->base;
}
static const struct drm_mode_config_funcs vbox_mode_funcs = {
- .fb_create = vbox_user_framebuffer_create,
+ .fb_create = vbox_user_framebuffer_create,
};
static void vbox_accel_fini(struct vbox_private *vbox)
{
- if (vbox->vbva_info)
- {
- vbox_disable_accel(vbox);
- kfree(vbox->vbva_info);
- vbox->vbva_info = NULL;
- }
- if (vbox->vbva_buffers) {
- pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
- vbox->vbva_buffers = NULL;
- }
+ if (vbox->vbva_info) {
+ vbox_disable_accel(vbox);
+ kfree(vbox->vbva_info);
+ vbox->vbva_info = NULL;
+ }
+ if (vbox->vbva_buffers) {
+ pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
+ vbox->vbva_buffers = NULL;
+ }
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
-# define pci_iomap_range(dev, bar, offset, maxlen) \
- ioremap(pci_resource_start(dev, bar) + offset, maxlen)
+#define pci_iomap_range(dev, bar, offset, maxlen) \
+ ioremap(pci_resource_start(dev, bar) + (offset), maxlen)
#endif
static int vbox_accel_init(struct vbox_private *vbox)
{
- unsigned i;
-
- vbox->vbva_info = kcalloc(vbox->num_crtcs, sizeof(*vbox->vbva_info),
- GFP_KERNEL);
- if (!vbox->vbva_info)
- return -ENOMEM;
-
- /* Take a command buffer for each screen from the end of usable VRAM. */
- vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
-
- vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0,
- vbox->available_vram_size,
- vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE);
- if (!vbox->vbva_buffers)
- return -ENOMEM;
-
- for (i = 0; i < vbox->num_crtcs; ++i)
- VBoxVBVASetupBufferContext(&vbox->vbva_info[i],
- vbox->available_vram_size + i * VBVA_MIN_BUFFER_SIZE,
- VBVA_MIN_BUFFER_SIZE);
- return 0;
+ unsigned int i;
+
+ vbox->vbva_info = kcalloc(vbox->num_crtcs, sizeof(*vbox->vbva_info),
+ GFP_KERNEL);
+ if (!vbox->vbva_info)
+ return -ENOMEM;
+
+ /* Take a command buffer for each screen from the end of usable VRAM. */
+ vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
+
+ vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0,
+ vbox->available_vram_size,
+ vbox->num_crtcs *
+ VBVA_MIN_BUFFER_SIZE);
+ if (!vbox->vbva_buffers)
+ return -ENOMEM;
+
+ for (i = 0; i < vbox->num_crtcs; ++i)
+ VBoxVBVASetupBufferContext(&vbox->vbva_info[i],
+ vbox->available_vram_size +
+ i * VBVA_MIN_BUFFER_SIZE,
+ VBVA_MIN_BUFFER_SIZE);
+
+ return 0;
}
/** Do we support the 4.3 plus mode hint reporting interface? */
static bool have_hgsmi_mode_hints(struct vbox_private *vbox)
{
- uint32_t have_hints, have_cursor;
-
- return RT_SUCCESS(VBoxQueryConfHGSMI(vbox->guest_pool, VBOX_VBVA_CONF32_MODE_HINT_REPORTING, &have_hints))
- && RT_SUCCESS(VBoxQueryConfHGSMI(vbox->guest_pool, VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING, &have_cursor))
- && have_hints == VINF_SUCCESS
- && have_cursor == VINF_SUCCESS;
+ u32 have_hints, have_cursor;
+ int ret;
+
+ ret = VBoxQueryConfHGSMI(vbox->guest_pool,
+ VBOX_VBVA_CONF32_MODE_HINT_REPORTING,
+ &have_hints);
+ if (RT_FAILURE(ret))
+ return false;
+
+ ret = VBoxQueryConfHGSMI(vbox->guest_pool,
+ VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING,
+ &have_cursor);
+ if (RT_FAILURE(ret))
+ return false;
+
+ return have_hints == VINF_SUCCESS && have_cursor == VINF_SUCCESS;
}
-/** Set up our heaps and data exchange buffers in VRAM before handing the rest
- * to the memory manager. */
+/**
+ * Set up our heaps and data exchange buffers in VRAM before handing the rest
+ * to the memory manager.
+ */
static int vbox_hw_init(struct vbox_private *vbox)
{
- int ret;
-
- vbox->full_vram_size = VBoxVideoGetVRAMSize();
- vbox->any_pitch = VBoxVideoAnyWidthAllowed();
-
- DRM_INFO("VRAM %08x\n", vbox->full_vram_size);
-
- /* Map guest-heap at end of vram */
- vbox->guest_heap = pci_iomap_range(vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox),
- GUEST_HEAP_SIZE);
- if (!vbox->guest_heap)
- return -ENOMEM;
-
- /* Create guest-heap mem-pool use 2^4 = 16 byte chunks */
- vbox->guest_pool = gen_pool_create(4, -1);
- if (!vbox->guest_pool)
- return -ENOMEM;
-
- ret = gen_pool_add_virt(vbox->guest_pool,
- (unsigned long)vbox->guest_heap,
- GUEST_HEAP_OFFSET(vbox),
- GUEST_HEAP_USABLE_SIZE, -1);
- if (ret)
- return ret;
-
- /* Reduce available VRAM size to reflect the guest heap. */
- vbox->available_vram_size = GUEST_HEAP_OFFSET(vbox);
- /* Linux drm represents monitors as a 32-bit array. */
- vbox->num_crtcs = min(VBoxHGSMIGetMonitorCount(vbox->guest_pool),
- (uint32_t)VBOX_MAX_SCREENS);
- if (!have_hgsmi_mode_hints(vbox))
- return -ENOTSUPP;
- vbox->last_mode_hints = kzalloc(sizeof(VBVAMODEHINT) * vbox->num_crtcs, GFP_KERNEL);
- if (!vbox->last_mode_hints)
- return -ENOMEM;
- return vbox_accel_init(vbox);
+ int ret;
+
+ vbox->full_vram_size = VBoxVideoGetVRAMSize();
+ vbox->any_pitch = VBoxVideoAnyWidthAllowed();
+
+ DRM_INFO("VRAM %08x\n", vbox->full_vram_size);
+
+ /* Map guest-heap at end of vram */
+ vbox->guest_heap =
+ pci_iomap_range(vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox),
+ GUEST_HEAP_SIZE);
+ if (!vbox->guest_heap)
+ return -ENOMEM;
+
+ /* Create guest-heap mem-pool use 2^4 = 16 byte chunks */
+ vbox->guest_pool = gen_pool_create(4, -1);
+ if (!vbox->guest_pool)
+ return -ENOMEM;
+
+ ret = gen_pool_add_virt(vbox->guest_pool,
+ (unsigned long)vbox->guest_heap,
+ GUEST_HEAP_OFFSET(vbox),
+ GUEST_HEAP_USABLE_SIZE, -1);
+ if (ret)
+ return ret;
+
+ /* Reduce available VRAM size to reflect the guest heap. */
+ vbox->available_vram_size = GUEST_HEAP_OFFSET(vbox);
+ /* Linux drm represents monitors as a 32-bit array. */
+ vbox->num_crtcs = min_t(u32, VBoxHGSMIGetMonitorCount(vbox->guest_pool),
+ VBOX_MAX_SCREENS);
+
+ if (!have_hgsmi_mode_hints(vbox))
+ return -ENOTSUPP;
+
+ vbox->last_mode_hints =
+ kcalloc(vbox->num_crtcs, sizeof(VBVAMODEHINT), GFP_KERNEL);
+ if (!vbox->last_mode_hints)
+ return -ENOMEM;
+
+ return vbox_accel_init(vbox);
}
static void vbox_hw_fini(struct vbox_private *vbox)
{
- vbox_accel_fini(vbox);
- if (vbox->last_mode_hints)
- kfree(vbox->last_mode_hints);
- vbox->last_mode_hints = NULL;
+ vbox_accel_fini(vbox);
+ kfree(vbox->last_mode_hints);
+ vbox->last_mode_hints = NULL;
}
int vbox_driver_load(struct drm_device *dev, unsigned long flags)
{
- struct vbox_private *vbox;
- int ret = 0;
+ struct vbox_private *vbox;
+ int ret = 0;
+
+ if (!VBoxHGSMIIsSupported())
+ return -ENODEV;
+
+ vbox = kzalloc(sizeof(*vbox), GFP_KERNEL);
+ if (!vbox)
+ return -ENOMEM;
- if (!VBoxHGSMIIsSupported())
- return -ENODEV;
- vbox = kzalloc(sizeof(struct vbox_private), GFP_KERNEL);
- if (!vbox)
- return -ENOMEM;
+ dev->dev_private = vbox;
+ vbox->dev = dev;
- dev->dev_private = vbox;
- vbox->dev = dev;
+ mutex_init(&vbox->hw_mutex);
- mutex_init(&vbox->hw_mutex);
+ ret = vbox_hw_init(vbox);
+ if (ret)
+ goto out_free;
- ret = vbox_hw_init(vbox);
- if (ret)
- goto out_free;
+ ret = vbox_mm_init(vbox);
+ if (ret)
+ goto out_free;
- ret = vbox_mm_init(vbox);
- if (ret)
- goto out_free;
+ drm_mode_config_init(dev);
- drm_mode_config_init(dev);
+ dev->mode_config.funcs = (void *)&vbox_mode_funcs;
+ dev->mode_config.min_width = 64;
+ dev->mode_config.min_height = 64;
+ dev->mode_config.preferred_depth = 24;
+ dev->mode_config.max_width = VBE_DISPI_MAX_XRES;
+ dev->mode_config.max_height = VBE_DISPI_MAX_YRES;
- dev->mode_config.funcs = (void *)&vbox_mode_funcs;
- dev->mode_config.min_width = 64;
- dev->mode_config.min_height = 64;
- dev->mode_config.preferred_depth = 24;
- dev->mode_config.max_width = VBE_DISPI_MAX_XRES;
- dev->mode_config.max_height = VBE_DISPI_MAX_YRES;
+ ret = vbox_mode_init(dev);
+ if (ret)
+ goto out_free;
- ret = vbox_mode_init(dev);
- if (ret)
- goto out_free;
+ ret = vbox_irq_init(vbox);
+ if (ret)
+ goto out_free;
- ret = vbox_irq_init(vbox);
- if (ret)
- goto out_free;
+ ret = vbox_fbdev_init(dev);
+ if (ret)
+ goto out_free;
+
+ return 0;
- ret = vbox_fbdev_init(dev);
- if (ret)
- goto out_free;
- return 0;
out_free:
- vbox_driver_unload(dev);
- return ret;
+ vbox_driver_unload(dev);
+ return ret;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
@@ -375,158 +410,158 @@ void vbox_driver_unload(struct drm_device *dev)
int vbox_driver_unload(struct drm_device *dev)
#endif
{
- struct vbox_private *vbox = dev->dev_private;
-
- vbox_fbdev_fini(dev);
- vbox_irq_fini(vbox);
- vbox_mode_fini(dev);
- if (dev->mode_config.funcs)
- drm_mode_config_cleanup(dev);
-
- vbox_hw_fini(vbox);
- vbox_mm_fini(vbox);
- if (vbox->guest_pool)
- gen_pool_destroy(vbox->guest_pool);
- if (vbox->guest_heap)
- pci_iounmap(dev->pdev, vbox->guest_heap);
- kfree(vbox);
- dev->dev_private = NULL;
+ struct vbox_private *vbox = dev->dev_private;
+
+ vbox_fbdev_fini(dev);
+ vbox_irq_fini(vbox);
+ vbox_mode_fini(dev);
+ if (dev->mode_config.funcs)
+ drm_mode_config_cleanup(dev);
+
+ vbox_hw_fini(vbox);
+ vbox_mm_fini(vbox);
+ if (vbox->guest_pool)
+ gen_pool_destroy(vbox->guest_pool);
+ if (vbox->guest_heap)
+ pci_iounmap(dev->pdev, vbox->guest_heap);
+ kfree(vbox);
+ dev->dev_private = NULL;
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
- return 0;
+ return 0;
#endif
}
-/** @note this is described in the DRM framework documentation. AST does not
- * have it, but we get an oops on driver unload if it is not present. */
+/**
+ * @note this is described in the DRM framework documentation. AST does not
+ * have it, but we get an oops on driver unload if it is not present.
+ */
void vbox_driver_lastclose(struct drm_device *dev)
{
- struct vbox_private *vbox = dev->dev_private;
+ struct vbox_private *vbox = dev->dev_private;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
- if (vbox->fbdev)
- drm_fb_helper_restore_fbdev_mode_unlocked(&vbox->fbdev->helper);
+ if (vbox->fbdev)
+ drm_fb_helper_restore_fbdev_mode_unlocked(&vbox->fbdev->helper);
#else
- drm_modeset_lock_all(dev);
- if (vbox->fbdev)
- drm_fb_helper_restore_fbdev_mode(&vbox->fbdev->helper);
- drm_modeset_unlock_all(dev);
+ drm_modeset_lock_all(dev);
+ if (vbox->fbdev)
+ drm_fb_helper_restore_fbdev_mode(&vbox->fbdev->helper);
+ drm_modeset_unlock_all(dev);
#endif
}
int vbox_gem_create(struct drm_device *dev,
- u32 size, bool iskernel,
- struct drm_gem_object **obj)
+ u32 size, bool iskernel, struct drm_gem_object **obj)
{
- struct vbox_bo *vboxbo;
- int ret;
-
- *obj = NULL;
-
- size = roundup(size, PAGE_SIZE);
- if (size == 0)
- return -EINVAL;
-
- ret = vbox_bo_create(dev, size, 0, 0, &vboxbo);
- if (ret) {
- if (ret != -ERESTARTSYS)
- DRM_ERROR("failed to allocate GEM object\n");
- return ret;
- }
- *obj = &vboxbo->gem;
- return 0;
+ struct vbox_bo *vboxbo;
+ int ret;
+
+ *obj = NULL;
+
+ size = roundup(size, PAGE_SIZE);
+ if (size == 0)
+ return -EINVAL;
+
+ ret = vbox_bo_create(dev, size, 0, 0, &vboxbo);
+ if (ret) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("failed to allocate GEM object\n");
+ return ret;
+ }
+
+ *obj = &vboxbo->gem;
+
+ return 0;
}
int vbox_dumb_create(struct drm_file *file,
- struct drm_device *dev,
- struct drm_mode_create_dumb *args)
+ struct drm_device *dev, struct drm_mode_create_dumb *args)
{
- int ret;
- struct drm_gem_object *gobj;
- u32 handle;
+ int ret;
+ struct drm_gem_object *gobj;
+ u32 handle;
+
+ args->pitch = args->width * ((args->bpp + 7) / 8);
+ args->size = args->pitch * args->height;
- args->pitch = args->width * ((args->bpp + 7) / 8);
- args->size = args->pitch * args->height;
+ ret = vbox_gem_create(dev, args->size, false, &gobj);
+ if (ret)
+ return ret;
- ret = vbox_gem_create(dev, args->size, false,
- &gobj);
- if (ret)
- return ret;
+ ret = drm_gem_handle_create(file, gobj, &handle);
+ drm_gem_object_unreference_unlocked(gobj);
+ if (ret)
+ return ret;
- ret = drm_gem_handle_create(file, gobj, &handle);
- drm_gem_object_unreference_unlocked(gobj);
- if (ret)
- return ret;
+ args->handle = handle;
- args->handle = handle;
- return 0;
+ return 0;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
int vbox_dumb_destroy(struct drm_file *file,
- struct drm_device *dev,
- uint32_t handle)
+ struct drm_device *dev, u32 handle)
{
- return drm_gem_handle_delete(file, handle);
+ return drm_gem_handle_delete(file, handle);
}
#endif
static void vbox_bo_unref(struct vbox_bo **bo)
{
- struct ttm_buffer_object *tbo;
-
- if ((*bo) == NULL)
- return;
+ struct ttm_buffer_object *tbo;
- tbo = &((*bo)->bo);
- ttm_bo_unref(&tbo);
- if (tbo == NULL)
- *bo = NULL;
+ if ((*bo) == NULL)
+ return;
+ tbo = &((*bo)->bo);
+ ttm_bo_unref(&tbo);
+ if (!tbo)
+ *bo = NULL;
}
+
void vbox_gem_free_object(struct drm_gem_object *obj)
{
- struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj);
+ struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj);
- vbox_bo_unref(&vbox_bo);
+ vbox_bo_unref(&vbox_bo);
}
-
static inline u64 vbox_bo_mmap_offset(struct vbox_bo *bo)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
- return bo->bo.addr_space_offset;
+ return bo->bo.addr_space_offset;
#else
- return drm_vma_node_offset_addr(&bo->bo.vma_node);
+ return drm_vma_node_offset_addr(&bo->bo.vma_node);
#endif
}
+
int
vbox_dumb_mmap_offset(struct drm_file *file,
- struct drm_device *dev,
- uint32_t handle,
- uint64_t *offset)
+ struct drm_device *dev,
+ u32 handle, u64 *offset)
{
- struct drm_gem_object *obj;
- int ret;
- struct vbox_bo *bo;
+ struct drm_gem_object *obj;
+ int ret;
+ struct vbox_bo *bo;
- mutex_lock(&dev->struct_mutex);
+ mutex_lock(&dev->struct_mutex);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)
- obj = drm_gem_object_lookup(file, handle);
+ obj = drm_gem_object_lookup(file, handle);
#else
- obj = drm_gem_object_lookup(dev, file, handle);
+ obj = drm_gem_object_lookup(dev, file, handle);
#endif
- if (obj == NULL) {
- ret = -ENOENT;
- goto out_unlock;
- }
+ if (!obj) {
+ ret = -ENOENT;
+ goto out_unlock;
+ }
- bo = gem_to_vbox_bo(obj);
- *offset = vbox_bo_mmap_offset(bo);
+ bo = gem_to_vbox_bo(obj);
+ *offset = vbox_bo_mmap_offset(bo);
- drm_gem_object_unreference(obj);
- ret = 0;
-out_unlock:
- mutex_unlock(&dev->struct_mutex);
- return ret;
+ drm_gem_object_unreference(obj);
+ ret = 0;
+out_unlock:
+ mutex_unlock(&dev->struct_mutex);
+ return ret;
}
--
2.13.0
More information about the vbox-dev
mailing list