svn commit: r287165 - head/sys/dev/drm2/i915
Baptiste Daroussin
bapt at FreeBSD.org
Wed Aug 26 13:23:57 UTC 2015
Author: bapt
Date: Wed Aug 26 13:23:56 2015
New Revision: 287165
URL: https://svnweb.freebsd.org/changeset/base/287165
Log:
Reduce diff on i915_dma.c against linux 3.8.13
No functional changes
Discussed with: dumbbell
Reviewed by: dumbbell
Modified:
head/sys/dev/drm2/i915/i915_dma.c
Modified: head/sys/dev/drm2/i915/i915_dma.c
==============================================================================
--- head/sys/dev/drm2/i915/i915_dma.c Wed Aug 26 12:32:46 2015 (r287164)
+++ head/sys/dev/drm2/i915/i915_dma.c Wed Aug 26 13:23:56 2015 (r287165)
@@ -1,6 +1,6 @@
/* i915_dma.c -- DMA support for the I915 -*- linux-c -*-
*/
-/*-
+/*
* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
@@ -47,6 +47,12 @@ __FBSDID("$FreeBSD$");
#define ADVANCE_LP_RING() \
intel_ring_advance(LP_RING(dev_priv))
+/**
+ * Lock test for when it's just for synchronization of ring access.
+ *
+ * In that case, we don't need to do it when GEM is initialized as nobody else
+ * has access to the ring.
+ */
#define RING_LOCK_TEST_WITH_RETURN(dev, file) do { \
if (LP_RING(dev->dev_private)->obj == NULL) \
LOCK_TEST_WITH_RETURN(dev, file); \
@@ -179,7 +185,6 @@ static int i915_dma_cleanup(struct drm_d
drm_i915_private_t *dev_priv = dev->dev_private;
int i;
-
/* Make sure interrupts are disabled here because the uninstall ioctl
* may not have been called from userspace and after dev_private
* is freed, it's too late.
@@ -208,7 +213,7 @@ static int i915_initialize(struct drm_de
master_priv->sarea = drm_getsarea(dev);
if (master_priv->sarea) {
master_priv->sarea_priv = (drm_i915_sarea_t *)
- ((u8 *)master_priv->sarea->handle + init->sarea_priv_offset);
+ ((u8 *)master_priv->sarea->handle + init->sarea_priv_offset);
} else {
DRM_DEBUG_DRIVER("sarea not found assuming DRI2 userspace\n");
}
@@ -309,7 +314,7 @@ static int i915_dma_init(struct drm_devi
* instruction detected will be given a size of zero, which is a
* signal to abort the rest of the buffer.
*/
-static int do_validate_cmd(int cmd)
+static int validate_cmd(int cmd)
{
switch (((cmd >> 29) & 0x7)) {
case 0x0:
@@ -367,17 +372,7 @@ static int do_validate_cmd(int cmd)
return 0;
}
-static int validate_cmd(int cmd)
-{
- int ret = do_validate_cmd(cmd);
-
-/* printk("validate_cmd( %x ): %d\n", cmd, ret); */
-
- return ret;
-}
-
-static int i915_emit_cmds(struct drm_device *dev, int __user *buffer,
- int dwords)
+static int i915_emit_cmds(struct drm_device * dev, int *buffer, int dwords)
{
drm_i915_private_t *dev_priv = dev->dev_private;
int i;
@@ -429,14 +424,15 @@ int i915_emit_box(struct drm_device * de
}
int
-i915_emit_box_p(struct drm_device *dev, struct drm_clip_rect *box,
- int DR1, int DR4)
+i915_emit_box_p(struct drm_device *dev,
+ struct drm_clip_rect *box,
+ int DR1, int DR4)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
- if (box->y2 <= box->y1 || box->x2 <= box->x1 || box->y2 <= 0 ||
- box->x2 <= 0) {
+ if (box->y2 <= box->y1 || box->x2 <= box->x1 ||
+ box->y2 <= 0 || box->x2 <= 0) {
DRM_ERROR("Bad box %d,%d..%d,%d\n",
box->x1, box->y1, box->x2, box->y2);
return -EINVAL;
@@ -444,8 +440,8 @@ i915_emit_box_p(struct drm_device *dev,
if (INTEL_INFO(dev)->gen >= 4) {
ret = BEGIN_LP_RING(4);
- if (ret != 0)
- return (ret);
+ if (ret)
+ return ret;
OUT_RING(GFX_OP_DRAWRECT_INFO_I965);
OUT_RING((box->x1 & 0xffff) | (box->y1 << 16));
@@ -453,8 +449,8 @@ i915_emit_box_p(struct drm_device *dev,
OUT_RING(DR4);
} else {
ret = BEGIN_LP_RING(6);
- if (ret != 0)
- return (ret);
+ if (ret)
+ return ret;
OUT_RING(GFX_OP_DRAWRECT_INFO);
OUT_RING(DR1);
@@ -492,7 +488,9 @@ static void i915_emit_breadcrumb(struct
}
static int i915_dispatch_cmdbuffer(struct drm_device * dev,
- drm_i915_cmdbuffer_t * cmd, struct drm_clip_rect *cliprects, void *cmdbuf)
+ drm_i915_cmdbuffer_t *cmd,
+ struct drm_clip_rect *cliprects,
+ void *cmdbuf)
{
int nbox = cmd->num_cliprects;
int i = 0, count, ret;
@@ -523,11 +521,11 @@ static int i915_dispatch_cmdbuffer(struc
return 0;
}
-static int
-i915_dispatch_batchbuffer(struct drm_device * dev,
- drm_i915_batchbuffer_t * batch, struct drm_clip_rect *cliprects)
+static int i915_dispatch_batchbuffer(struct drm_device * dev,
+ drm_i915_batchbuffer_t * batch,
+ struct drm_clip_rect *cliprects)
{
- drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
int nbox = batch->num_cliprects;
int i, count, ret;
@@ -542,7 +540,6 @@ i915_dispatch_batchbuffer(struct drm_dev
i915_kernel_lost_context(dev);
count = nbox ? nbox : 1;
-
for (i = 0; i < count; i++) {
if (i < nbox) {
int ret = i915_emit_box_p(dev, &cliprects[i],
@@ -553,8 +550,8 @@ i915_dispatch_batchbuffer(struct drm_dev
if (!IS_I830(dev) && !IS_845G(dev)) {
ret = BEGIN_LP_RING(2);
- if (ret != 0)
- return (ret);
+ if (ret)
+ return ret;
if (INTEL_INFO(dev)->gen >= 4) {
OUT_RING(MI_BATCH_BUFFER_START | (2 << 6) |
@@ -566,8 +563,8 @@ i915_dispatch_batchbuffer(struct drm_dev
}
} else {
ret = BEGIN_LP_RING(4);
- if (ret != 0)
- return (ret);
+ if (ret)
+ return ret;
OUT_RING(MI_BATCH_BUFFER);
OUT_RING(batch->start | MI_BATCH_NON_SECURE);
@@ -602,6 +599,7 @@ static int i915_dispatch_flip(struct drm
ret = BEGIN_LP_RING(10);
if (ret)
return ret;
+
OUT_RING(MI_FLUSH | MI_READ_FLUSH);
OUT_RING(0);
@@ -635,8 +633,7 @@ static int i915_dispatch_flip(struct drm
return 0;
}
-static int
-i915_quiescent(struct drm_device *dev)
+static int i915_quiescent(struct drm_device *dev)
{
struct intel_ring_buffer *ring = LP_RING(dev->dev_private);
@@ -644,8 +641,8 @@ i915_quiescent(struct drm_device *dev)
return (intel_wait_ring_idle(ring));
}
-static int
-i915_flush_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv)
+static int i915_flush_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
{
int ret;
@@ -1132,7 +1129,7 @@ i915_load_modeset_init(struct drm_device
intel_modeset_init(dev);
ret = i915_gem_init(dev);
- if (ret != 0)
+ if (ret)
goto cleanup_gem_stolen;
intel_modeset_gem_init(dev);
@@ -1152,7 +1149,7 @@ i915_load_modeset_init(struct drm_device
/* We're off and running w/KMS */
dev_priv->mm.suspended = 0;
- return (0);
+ return 0;
cleanup_gem:
DRM_LOCK(dev);
@@ -1339,8 +1336,18 @@ intel_teardown_mchbar(struct drm_device
}
}
-int
-i915_driver_load(struct drm_device *dev, unsigned long flags)
+/**
+ * i915_driver_load - setup chip and create an initial config
+ * @dev: DRM device
+ * @flags: startup flags
+ *
+ * The driver load routine has to do several things:
+ * - drive output discovery via intel_modeset_init()
+ * - initialize the memory manager
+ * - allocate initial config memory
+ * - setup the DRM framebuffer with the allocated memory
+ */
+int i915_driver_load(struct drm_device *dev, unsigned long flags)
{
struct drm_i915_private *dev_priv = dev->dev_private;
const struct intel_device_info *info;
@@ -1475,8 +1482,7 @@ out_gem_unload:
return (ret);
}
-int
-i915_driver_unload(struct drm_device *dev)
+int i915_driver_unload(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
@@ -1546,11 +1552,10 @@ i915_driver_unload(struct drm_device *de
mtx_destroy(&dev_priv->rps_lock);
free(dev->dev_private, DRM_MEM_DRIVER);
- return (0);
+ return 0;
}
-int
-i915_driver_open(struct drm_device *dev, struct drm_file *file_priv)
+int i915_driver_open(struct drm_device *dev, struct drm_file *file)
{
struct drm_i915_file_private *i915_file_priv;
@@ -1559,19 +1564,35 @@ i915_driver_open(struct drm_device *dev,
mtx_init(&i915_file_priv->mm.lck, "915fp", NULL, MTX_DEF);
INIT_LIST_HEAD(&i915_file_priv->mm.request_list);
- file_priv->driver_priv = i915_file_priv;
+ file->driver_priv = i915_file_priv;
drm_gem_names_init(&i915_file_priv->context_idr);
- return (0);
+ return 0;
}
-void
-i915_driver_lastclose(struct drm_device * dev)
+/**
+ * i915_driver_lastclose - clean up after all DRM clients have exited
+ * @dev: DRM device
+ *
+ * Take care of cleaning up after all DRM clients have exited. In the
+ * mode setting case, we want to restore the kernel's initial mode (just
+ * in case the last client left us in a bad state).
+ *
+ * Additionally, in the non-mode setting case, we'll tear down the GTT
+ * and DMA structures, since the kernel won't be using them, and clea
+ * up any GEM state.
+ */
+void i915_driver_lastclose(struct drm_device * dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
- if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) {
+ /* On gen6+ we refuse to init without kms enabled, but then the drm core
+ * goes right around and calls lastclose. Check for this and don't clean
+ * up anything. */
+ if (!dev_priv)
+ return;
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
#if 1
KIB_NOTYET();
#else
@@ -1580,13 +1601,14 @@ i915_driver_lastclose(struct drm_device
#endif
return;
}
+
i915_gem_lastclose(dev);
+
i915_dma_cleanup(dev);
}
void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
{
-
i915_gem_context_close(dev, file_priv);
i915_gem_release(dev, file_priv);
}
More information about the svn-src-all
mailing list