drm: Reduce differences with Linux 3.8
authorFrançois Tigeot <ftigeot@wolfpond.org>
Thu, 5 Dec 2013 12:23:03 +0000 (13:23 +0100)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Thu, 5 Dec 2013 13:38:12 +0000 (14:38 +0100)
Rename mode_config.lock to mode_config.mutex

17 files changed:
sys/dev/drm/drm_crtc.c
sys/dev/drm/drm_crtc_helper.c
sys/dev/drm/drm_edid.c
sys/dev/drm/drm_fb_helper.c
sys/dev/drm/drm_modes.c
sys/dev/drm/i915/i915_debug.c
sys/dev/drm/i915/i915_drv.c
sys/dev/drm/i915/i915_irq.c
sys/dev/drm/i915/intel_crt.c
sys/dev/drm/i915/intel_dp.c
sys/dev/drm/i915/intel_fb.c
sys/dev/drm/i915/intel_hdmi.c
sys/dev/drm/i915/intel_modes.c
sys/dev/drm/i915/intel_overlay.c
sys/dev/drm/i915/intel_sdvo.c
sys/dev/drm/i915/intel_sprite.c
sys/dev/drm/include/drm/drm_crtc.h

index 32b1c8e..6fe63f0 100644 (file)
@@ -377,7 +377,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
        crtc->dev = dev;
        crtc->funcs = funcs;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        ret = drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
        if (ret)
                goto out;
@@ -385,7 +385,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
        list_add_tail(&crtc->head, &dev->mode_config.crtc_list);
        dev->mode_config.num_crtc++;
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
@@ -478,7 +478,7 @@ int drm_connector_init(struct drm_device *dev,
 {
        int ret;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        ret = drm_mode_object_get(dev, &connector->base, DRM_MODE_OBJECT_CONNECTOR);
        if (ret)
@@ -504,7 +504,7 @@ int drm_connector_init(struct drm_device *dev,
                                      dev->mode_config.dpms_property, 0);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
@@ -532,13 +532,13 @@ void drm_connector_cleanup(struct drm_connector *connector)
        list_for_each_entry_safe(mode, t, &connector->user_modes, head)
                drm_mode_remove(connector, mode);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        if (connector->edid_blob_ptr)
                drm_property_destroy_blob(dev, connector->edid_blob_ptr);
        drm_mode_object_put(dev, &connector->base);
        list_del(&connector->head);
        dev->mode_config.num_connector--;
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
 
 int drm_encoder_init(struct drm_device *dev,
@@ -548,7 +548,7 @@ int drm_encoder_init(struct drm_device *dev,
 {
        int ret;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        ret = drm_mode_object_get(dev, &encoder->base, DRM_MODE_OBJECT_ENCODER);
        if (ret)
@@ -562,7 +562,7 @@ int drm_encoder_init(struct drm_device *dev,
        dev->mode_config.num_encoder++;
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
@@ -571,11 +571,11 @@ void drm_encoder_cleanup(struct drm_encoder *encoder)
 {
        struct drm_device *dev = encoder->dev;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        drm_mode_object_put(dev, &encoder->base);
        list_del(&encoder->head);
        dev->mode_config.num_encoder--;
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
 
 int drm_plane_init(struct drm_device *dev, struct drm_plane *plane,
@@ -586,7 +586,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane,
 {
        int ret;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        ret = drm_mode_object_get(dev, &plane->base, DRM_MODE_OBJECT_PLANE);
        if (ret)
@@ -613,7 +613,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane,
        }
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
@@ -622,7 +622,7 @@ void drm_plane_cleanup(struct drm_plane *plane)
 {
        struct drm_device *dev = plane->dev;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        drm_free(plane->format_types, DRM_MEM_KMS);
        drm_mode_object_put(dev, &plane->base);
        /* if not added to a list, it must be a private plane */
@@ -630,7 +630,7 @@ void drm_plane_cleanup(struct drm_plane *plane)
                list_del(&plane->head);
                dev->mode_config.num_plane--;
        }
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
 
 /**
@@ -638,7 +638,7 @@ void drm_plane_cleanup(struct drm_plane *plane)
  * @dev: DRM device
  *
  * LOCKING:
- * Caller must hold DRM mode_config lock.
+ * Caller must hold DRM mode_config.mutex.
  *
  * Create a new drm_display_mode, give it an ID, and return it.
  *
@@ -893,7 +893,7 @@ int drm_mode_create_dirty_info_property(struct drm_device *dev)
  */
 void drm_mode_config_init(struct drm_device *dev)
 {
-       lockinit(&dev->mode_config.lock, "kmslk", 0, LK_CANRECURSE);
+       lockinit(&dev->mode_config.mutex, "kmslk", 0, LK_CANRECURSE);
        spin_init(&dev->mode_config.idr_mutex);
        INIT_LIST_HEAD(&dev->mode_config.fb_list);
        INIT_LIST_HEAD(&dev->mode_config.crtc_list);
@@ -904,9 +904,9 @@ void drm_mode_config_init(struct drm_device *dev)
        INIT_LIST_HEAD(&dev->mode_config.plane_list);
        idr_init(&dev->mode_config.crtc_idr);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        drm_mode_create_standard_connector_properties(dev);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        /* Just to be sure */
        dev->mode_config.num_fb = 0;
@@ -1136,7 +1136,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        /*
         * For the non-control nodes we need to limit the list of resources
@@ -1299,7 +1299,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
                  card_res->count_connectors, card_res->count_encoders);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1331,7 +1331,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, crtc_resp->crtc_id,
                                   DRM_MODE_OBJECT_CRTC);
@@ -1359,7 +1359,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
        }
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1406,7 +1406,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
 
        DRM_DEBUG_KMS("[CONNECTOR:%d:?]\n", out_resp->connector_id);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, out_resp->connector_id,
                                   DRM_MODE_OBJECT_CONNECTOR);
@@ -1509,7 +1509,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
        out_resp->count_encoders = encoders_count;
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1524,7 +1524,7 @@ int drm_mode_getencoder(struct drm_device *dev, void *data,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, enc_resp->encoder_id,
                                   DRM_MODE_OBJECT_ENCODER);
        if (!obj) {
@@ -1543,7 +1543,7 @@ int drm_mode_getencoder(struct drm_device *dev, void *data,
        enc_resp->possible_clones = encoder->possible_clones;
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1570,7 +1570,7 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        config = &dev->mode_config;
 
        /*
@@ -1593,7 +1593,7 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
        plane_resp->count_planes = config->num_plane;
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1621,7 +1621,7 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, plane_resp->plane_id,
                                   DRM_MODE_OBJECT_PLANE);
        if (!obj) {
@@ -1661,7 +1661,7 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
        plane_resp->count_format_types = plane->format_count;
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1692,7 +1692,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        /*
         * First, find the plane, crtc, and fb objects.  If not available,
@@ -1791,7 +1791,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
        }
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
@@ -1835,7 +1835,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
        if (crtc_req->x > INT_MAX || crtc_req->y > INT_MAX)
                return (ERANGE);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, crtc_req->crtc_id,
                                   DRM_MODE_OBJECT_CRTC);
        if (!obj) {
@@ -1956,7 +1956,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
 out:
        drm_free(connector_set, DRM_MEM_KMS);
        drm_mode_destroy(dev, mode);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -1974,7 +1974,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,
        if (!req->flags)
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
        if (!obj) {
                DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
@@ -2002,7 +2002,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,
                }
        }
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2083,7 +2083,7 @@ int drm_mode_addfb(struct drm_device *dev,
        if ((config->min_height > r.height) || (r.height > config->max_height))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        ret = -dev->mode_config.funcs->fb_create(dev, file_priv, &r, &fb);
        if (ret != 0) {
@@ -2096,7 +2096,7 @@ int drm_mode_addfb(struct drm_device *dev,
        DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2214,7 +2214,7 @@ int drm_mode_addfb2(struct drm_device *dev,
                return ret;
        }
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        /* TODO check buffer is sufficiently large */
        /* TODO setup destructor callback */
@@ -2230,7 +2230,7 @@ int drm_mode_addfb2(struct drm_device *dev,
        DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return (ret);
 }
 
@@ -2264,7 +2264,7 @@ int drm_mode_rmfb(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, *id, DRM_MODE_OBJECT_FB);
        /* TODO check that we really get a framebuffer back. */
        if (!obj) {
@@ -2289,7 +2289,7 @@ int drm_mode_rmfb(struct drm_device *dev,
        fb->funcs->destroy(fb);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2321,7 +2321,7 @@ int drm_mode_getfb(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
        if (!obj) {
                ret = EINVAL;
@@ -2337,7 +2337,7 @@ int drm_mode_getfb(struct drm_device *dev,
        fb->funcs->create_handle(fb, file_priv, &r->handle);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2356,7 +2356,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
        if (!obj) {
                ret = EINVAL;
@@ -2404,7 +2404,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
 out_err2:
        drm_free(clips, DRM_MEM_KMS);
 out_err1:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2432,12 +2432,12 @@ void drm_fb_release(struct drm_file *priv)
 #endif
        struct drm_framebuffer *fb, *tfb;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        list_for_each_entry_safe(fb, tfb, &priv->fbs, filp_head) {
                list_del(&fb->filp_head);
                fb->funcs->destroy(fb);
        }
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
 
 /**
@@ -2551,7 +2551,7 @@ int drm_mode_attachmode_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, mode_cmd->connector_id, DRM_MODE_OBJECT_CONNECTOR);
        if (!obj) {
@@ -2575,7 +2575,7 @@ int drm_mode_attachmode_ioctl(struct drm_device *dev,
 
        drm_mode_attachmode(dev, connector, mode);
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2605,7 +2605,7 @@ int drm_mode_detachmode_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, mode_cmd->connector_id, DRM_MODE_OBJECT_CONNECTOR);
        if (!obj) {
@@ -2622,7 +2622,7 @@ int drm_mode_detachmode_ioctl(struct drm_device *dev,
 
        ret = drm_mode_detachmode(dev, connector, &mode);
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2825,7 +2825,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, out_resp->prop_id, DRM_MODE_OBJECT_PROPERTY);
        if (!obj) {
                ret = -EINVAL;
@@ -2905,7 +2905,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
                out_resp->count_enum_blobs = blob_count;
        }
 done:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -2955,7 +2955,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, out_resp->blob_id, DRM_MODE_OBJECT_BLOB);
        if (!obj) {
                ret = -EINVAL;
@@ -2973,7 +2973,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
        out_resp->length = blob->length;
 
 done:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -3017,7 +3017,7 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, out_resp->connector_id, DRM_MODE_OBJECT_CONNECTOR);
        if (!obj) {
@@ -3074,7 +3074,7 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
        if (!ret)
                drm_connector_property_set_value(connector, property, out_resp->value);
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -3130,7 +3130,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
        if (!obj) {
                ret = -EINVAL;
@@ -3166,7 +3166,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
        crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 
 }
@@ -3184,7 +3184,7 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, crtc_lut->crtc_id, DRM_MODE_OBJECT_CRTC);
        if (!obj) {
                ret = -EINVAL;
@@ -3217,7 +3217,7 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
                goto out;
        }
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -3242,7 +3242,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data,
            page_flip->reserved != 0)
                return (EINVAL);
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC);
        if (!obj)
                goto out;
@@ -3309,7 +3309,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, void *data,
        }
 
 out:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return (ret);
 }
 
index 25a09e1..28ed8ee 100644 (file)
@@ -939,7 +939,7 @@ static void output_poll_execute(void *ctx, int pending)
 
        dev = ctx;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
 
                /* if this is HPD or polled don't check it -
@@ -968,7 +968,7 @@ static void output_poll_execute(void *ctx, int pending)
                        changed = true;
        }
 
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        if (changed) {
 #if 0
index 420d100..38f96fe 100644 (file)
@@ -405,11 +405,9 @@ struct edid *drm_get_edid(struct drm_connector *connector,
        if (drm_probe_ddc(adapter))
                edid = (struct edid *)drm_do_get_edid(connector, adapter);
 
-       connector->display_info.raw_edid = (char *)edid;
-
        return edid;
-
 }
+EXPORT_SYMBOL(drm_get_edid);
 
 /*** EDID parsing ***/
 
@@ -503,6 +501,17 @@ static void edid_fixup_preferred(struct drm_connector *connector,
        preferred_mode->type |= DRM_MODE_TYPE_PREFERRED;
 }
 
+/*
+ * drm_mode_find_dmt - Create a copy of a mode if present in DMT
+ * @dev: Device to duplicate against
+ * @hsize: Mode width
+ * @vsize: Mode height
+ * @fresh: Mode refresh rate
+ * @rb: Mode reduced-blanking-ness
+ *
+ * Walk the DMT mode list looking for a match for the given parameters.
+ * Return a newly allocated copy of the mode, or NULL if not found.
+ */
 struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
                                           int hsize, int vsize, int fresh)
 {
@@ -521,6 +530,7 @@ struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
        }
        return mode;
 }
+EXPORT_SYMBOL(drm_mode_find_dmt);
 
 typedef void detailed_cb(struct detailed_timing *timing, void *closure);
 
index 7aa474f..f8816f5 100644 (file)
@@ -1541,7 +1541,7 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
        if (!fb_helper->fb)
                return 0;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
                if (crtc->fb)
                        crtcs_bound = true;
@@ -1551,7 +1551,7 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
 
        if (!bound && crtcs_bound) {
                fb_helper->delayed_hotplug = true;
-               lockmgr(&dev->mode_config.lock, LK_RELEASE);
+               lockmgr(&dev->mode_config.mutex, LK_RELEASE);
                return 0;
        }
        DRM_DEBUG_KMS("\n");
@@ -1563,7 +1563,7 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
        count = drm_fb_helper_probe_connector_modes(fb_helper, max_width,
                                                    max_height);
        drm_setup_crtcs(fb_helper);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return drm_fb_helper_single_fb_probe(fb_helper, bpp_sel);
 }
index edf0ab9..2b6d54d 100644 (file)
@@ -32,6 +32,7 @@
  * $FreeBSD: src/sys/dev/drm2/drm_modes.c,v 1.1 2012/05/22 11:07:44 kib Exp $
  */
 
+#include <linux/export.h>
 #include <drm/drmP.h>
 #include <drm/drm_crtc.h>
 
@@ -47,7 +48,7 @@
  *
  * Describe @mode using DRM_DEBUG.
  */
-void drm_mode_debug_printmodeline(struct drm_display_mode *mode)
+void drm_mode_debug_printmodeline(const struct drm_display_mode *mode)
 {
        DRM_DEBUG_KMS("Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d "
                        "0x%x 0x%x\n",
@@ -57,6 +58,7 @@ void drm_mode_debug_printmodeline(struct drm_display_mode *mode)
                mode->vdisplay, mode->vsync_start,
                mode->vsync_end, mode->vtotal, mode->type, mode->flags);
 }
+EXPORT_SYMBOL(drm_mode_debug_printmodeline);
 
 /**
  * drm_cvt_mode -create a modeline based on CVT algorithm
@@ -553,11 +555,12 @@ void drm_mode_list_concat(struct list_head *head, struct list_head *new)
  * RETURNS:
  * @mode->hdisplay
  */
-int drm_mode_width(struct drm_display_mode *mode)
+int drm_mode_width(const struct drm_display_mode *mode)
 {
        return mode->hdisplay;
 
 }
+EXPORT_SYMBOL(drm_mode_width);
 
 /**
  * drm_mode_height - get the height of a mode
@@ -573,10 +576,11 @@ int drm_mode_width(struct drm_display_mode *mode)
  * RETURNS:
  * @mode->vdisplay
  */
-int drm_mode_height(struct drm_display_mode *mode)
+int drm_mode_height(const struct drm_display_mode *mode)
 {
        return mode->vdisplay;
 }
+EXPORT_SYMBOL(drm_mode_height);
 
 /** drm_mode_hsync - get the hsync of a mode
  * @mode: mode
@@ -676,8 +680,6 @@ void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags)
                        p->crtc_vsync_end /= 2;
                        p->crtc_vtotal /= 2;
                }
-
-               p->crtc_vtotal |= 1;
        }
 
        if (p->flags & DRM_MODE_FLAG_DBLSCAN) {
@@ -698,11 +700,8 @@ void drm_mode_set_crtcinfo(struct drm_display_mode *p, int adjust_flags)
        p->crtc_vblank_end = max(p->crtc_vsync_end, p->crtc_vtotal);
        p->crtc_hblank_start = min(p->crtc_hsync_start, p->crtc_hdisplay);
        p->crtc_hblank_end = max(p->crtc_hsync_end, p->crtc_htotal);
-
-       p->crtc_hadjusted = false;
-       p->crtc_vadjusted = false;
 }
-
+EXPORT_SYMBOL(drm_mode_set_crtcinfo);
 
 /**
  * drm_mode_duplicate - allocate and duplicate an existing mode
@@ -742,9 +741,9 @@ struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
  * Check to see if @mode1 and @mode2 are equivalent.
  *
  * RETURNS:
- * true if the modes are equal, false otherwise.
+ * True if the modes are equal, false otherwise.
  */
-bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2)
+bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2)
 {
        /* do clock check convert to PICOS so fb modes get matched
         * the same */
@@ -769,6 +768,7 @@ bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mod
 
        return false;
 }
+EXPORT_SYMBOL(drm_mode_equal);
 
 /**
  * drm_mode_validate_size - make sure modes adhere to size constraints
index 9e1b8fb..1f6463f 100644 (file)
@@ -1298,7 +1298,7 @@ i915_context_status(struct drm_device *dev, struct sbuf *m, void *data)
                return (0);
 
        dev_priv = dev->dev_private;
-       ret = lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE|LK_SLEEPFAIL);
+       ret = lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE|LK_SLEEPFAIL);
        if (ret != 0)
                return (EINTR);
 
@@ -1314,7 +1314,7 @@ i915_context_status(struct drm_device *dev, struct sbuf *m, void *data)
                sbuf_printf(m, "\n");
        }
 
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return (0);
 }
index 87dfe2d..7c7b754 100644 (file)
@@ -306,15 +306,15 @@ static int i915_drm_thaw(struct drm_device *dev)
                        ironlake_init_pch_refclk(dev);
 
                DRM_UNLOCK(dev);
-               lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+               lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
                drm_mode_config_reset(dev);
-               lockmgr(&dev->mode_config.lock, LK_RELEASE);
+               lockmgr(&dev->mode_config.mutex, LK_RELEASE);
                drm_irq_install(dev);
 
-               lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+               lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
                /* Resume the modeset for every activated CRTC */
                drm_helper_resume_force_mode(dev);
-               lockmgr(&dev->mode_config.lock, LK_RELEASE);
+               lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
                if (IS_IRONLAKE_M(dev))
                        ironlake_enable_rc6(dev);
@@ -761,9 +761,9 @@ i915_reset(struct drm_device *dev, u8 flags)
        DRM_UNLOCK(dev);
 
        if (need_display) {
-               lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+               lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
                drm_helper_resume_force_mode(dev);
-               lockmgr(&dev->mode_config.lock, LK_RELEASE);
+               lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        }
 
        return (0);
index 022fd09..f3a2e7b 100644 (file)
@@ -315,14 +315,14 @@ i915_hotplug_work_func(void *context, int pending)
 
        mode_config = &dev->mode_config;
 
-       lockmgr(&mode_config->lock, LK_EXCLUSIVE);
+       lockmgr(&mode_config->mutex, LK_EXCLUSIVE);
        DRM_DEBUG_KMS("running encoder hotplug functions\n");
 
        list_for_each_entry(encoder, &mode_config->encoder_list, base.head)
                if (encoder->hot_plug)
                        encoder->hot_plug(encoder);
 
-       lockmgr(&mode_config->lock, LK_RELEASE);
+       lockmgr(&mode_config->mutex, LK_RELEASE);
 
        /* Just fire off a uevent and let userspace tell us what to do */
 #if 0
index 25b0fce..556dcf9 100644 (file)
@@ -289,7 +289,6 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
                 */
                if (edid != NULL) {
                        is_digital = edid->input & DRM_EDID_INPUT_DIGITAL;
-                       connector->display_info.raw_edid = NULL;
                        drm_free(edid, DRM_MEM_KMS);
                }
 
index a03ee93..cb0ee53 100644 (file)
@@ -1051,9 +1051,9 @@ static void ironlake_panel_vdd_work(void *arg, int pending __unused)
        struct intel_dp *intel_dp = arg;
        struct drm_device *dev = intel_dp->base.base.dev;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        ironlake_panel_vdd_off_sync(intel_dp);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
 
 static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
@@ -2117,7 +2117,6 @@ intel_dp_detect(struct drm_connector *connector, bool force)
                edid = intel_dp_get_edid(connector, intel_dp->adapter);
                if (edid) {
                        intel_dp->has_audio = drm_detect_monitor_audio(edid);
-                       connector->display_info.raw_edid = NULL;
                        drm_free(edid, DRM_MEM_KMS);
                }
        }
@@ -2183,7 +2182,6 @@ intel_dp_detect_audio(struct drm_connector *connector)
        if (edid) {
                has_audio = drm_detect_monitor_audio(edid);
 
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        }
 
index e488aac..537f31b 100644 (file)
@@ -257,7 +257,7 @@ void intel_fb_restore_mode(struct drm_device *dev)
        struct drm_mode_config *config = &dev->mode_config;
        struct drm_plane *plane;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper);
        if (ret)
@@ -267,5 +267,5 @@ void intel_fb_restore_mode(struct drm_device *dev)
        list_for_each_entry(plane, &config->plane_list, head)
                plane->funcs->disable_plane(plane);
 
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 }
index 58bc129..67c4854 100644 (file)
@@ -341,7 +341,6 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
                                                drm_detect_hdmi_monitor(edid);
                        intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
                }
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        } else {
                DRM_DEBUG_KMS("[CONNECTOR:%d:%s] got no edid, ddc port %d\n",
@@ -384,7 +383,6 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
                if (edid->input & DRM_EDID_INPUT_DIGITAL)
                        has_audio = drm_detect_monitor_audio(edid);
 
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        }
 
index 5010fec..9c4547b 100644 (file)
@@ -77,7 +77,6 @@ intel_ddc_get_modes(struct drm_connector *connector, device_t adapter)
                drm_mode_connector_update_edid_property(connector, edid);
                ret = drm_add_edid_modes(connector, edid);
                drm_edid_to_eld(connector, edid);
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        }
 
index fe82f99..97f702e 100644 (file)
@@ -1117,13 +1117,13 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,
        }
 
        if (!(put_image_rec->flags & I915_OVERLAY_ENABLE)) {
-               lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+               lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
                DRM_LOCK(dev);
 
                ret = intel_overlay_switch_off(overlay);
 
                DRM_UNLOCK(dev);
-               lockmgr(&dev->mode_config.lock, LK_RELEASE);
+               lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
                return ret;
        }
@@ -1146,7 +1146,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,
                goto out_free;
        }
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        DRM_LOCK(dev);
 
        if (new_bo->tiling_mode) {
@@ -1228,7 +1228,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,
                goto out_unlock;
 
        DRM_UNLOCK(dev);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        drm_free(params, DRM_I915_GEM);
 
@@ -1236,7 +1236,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data,
 
 out_unlock:
        DRM_UNLOCK(dev);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        drm_gem_object_unreference_unlocked(&new_bo->base);
 out_free:
        drm_free(params, DRM_I915_GEM);
@@ -1315,7 +1315,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
                return -ENODEV;
        }
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        DRM_LOCK(dev);
 
        ret = -EINVAL;
@@ -1381,7 +1381,7 @@ int intel_overlay_attrs(struct drm_device *dev, void *data,
        ret = 0;
 out_unlock:
        DRM_UNLOCK(dev);
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
 
        return ret;
 }
index a52b9d0..7dcc58d 100644 (file)
@@ -1322,7 +1322,6 @@ intel_sdvo_tmds_sink_detect(struct drm_connector *connector)
                        }
                } else
                        status = connector_status_disconnected;
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        }
 
@@ -1397,7 +1396,6 @@ intel_sdvo_detect(struct drm_connector *connector, bool force)
                        else
                                ret = connector_status_disconnected;
 
-                       connector->display_info.raw_edid = NULL;
                        drm_free(edid, DRM_MEM_KMS);
                } else
                        ret = connector_status_connected;
@@ -1443,7 +1441,6 @@ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)
                        drm_add_edid_modes(connector, edid);
                }
 
-               connector->display_info.raw_edid = NULL;
                drm_free(edid, DRM_MEM_KMS);
        }
 }
index 7384683..b5dcc50 100644 (file)
@@ -566,7 +566,7 @@ int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
        if ((set->flags & (I915_SET_COLORKEY_DESTINATION | I915_SET_COLORKEY_SOURCE)) == (I915_SET_COLORKEY_DESTINATION | I915_SET_COLORKEY_SOURCE))
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
        
        obj = drm_mode_object_find(dev, set->plane_id, DRM_MODE_OBJECT_PLANE);
        if (!obj) {
@@ -579,7 +579,7 @@ int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
        ret = intel_plane->update_colorkey(plane, set);
 
 out_unlock:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
@@ -596,7 +596,7 @@ int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
        if (!dev_priv)
                return -EINVAL;
 
-       lockmgr(&dev->mode_config.lock, LK_EXCLUSIVE);
+       lockmgr(&dev->mode_config.mutex, LK_EXCLUSIVE);
 
        obj = drm_mode_object_find(dev, get->plane_id, DRM_MODE_OBJECT_PLANE);
        if (!obj) {
@@ -609,7 +609,7 @@ int intel_sprite_get_colorkey(struct drm_device *dev, void *data,
        intel_plane->get_colorkey(plane, get);
 
 out_unlock:
-       lockmgr(&dev->mode_config.lock, LK_RELEASE);
+       lockmgr(&dev->mode_config.mutex, LK_RELEASE);
        return ret;
 }
 
index 8145cf8..0b53352 100644 (file)
  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  * OTHER DEALINGS IN THE SOFTWARE.
- *
- * $FreeBSD: src/sys/dev/drm2/drm_crtc.h,v 1.1 2012/05/22 11:07:44 kib Exp $
  */
 #ifndef __DRM_CRTC_H__
 #define __DRM_CRTC_H__
 
+#include <linux/i2c.h>
+#include <linux/types.h>
 #include <linux/idr.h>
+#include <uapi_drm/drm_mode.h>
 
 #include <uapi_drm/drm_fourcc.h>
 
 struct drm_device;
 struct drm_mode_set;
 struct drm_framebuffer;
-struct i2c_adapter;
+struct drm_object_properties;
+
 
 #define DRM_MODE_OBJECT_CRTC 0xcccccccc
 #define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
@@ -48,6 +50,14 @@ struct i2c_adapter;
 struct drm_mode_object {
        uint32_t id;
        uint32_t type;
+       struct drm_object_properties *properties;
+};
+
+#define DRM_OBJECT_MAX_PROPERTY 24
+struct drm_object_properties {
+       int count;
+       uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
+       uint64_t values[DRM_OBJECT_MAX_PROPERTY];
 };
 
 /*
@@ -65,7 +75,7 @@ enum drm_mode_status {
     MODE_H_ILLEGAL,    /* mode has illegal horizontal timings */
     MODE_V_ILLEGAL,    /* mode has illegal horizontal timings */
     MODE_BAD_WIDTH,    /* requires an unsupported linepitch */
-    MODE_NOMODE,       /* no mode with a maching name */
+    MODE_NOMODE,       /* no mode with a matching name */
     MODE_NO_INTERLACE, /* interlaced mode not supported */
     MODE_NO_DBLESCAN,  /* doublescan mode not supported */
     MODE_NO_VSCAN,     /* multiscan mode not supported */
@@ -107,7 +117,8 @@ enum drm_mode_status {
        .hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
        .htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
        .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
-       .vscan = (vs), .flags = (f), .vrefresh = 0
+       .vscan = (vs), .flags = (f), .vrefresh = 0, \
+       .base.type = DRM_MODE_OBJECT_MODE
 
 #define CRTC_INTERLACE_HALVE_V 0x1 /* halve V values for interlacing */
 
@@ -118,9 +129,8 @@ struct drm_display_mode {
 
        char name[DRM_DISPLAY_MODE_LEN];
 
-       int connector_count;
        enum drm_mode_status status;
-       int type;
+       unsigned int type;
 
        /* Proposed mode values */
        int clock;              /* in kHz */
@@ -156,8 +166,6 @@ struct drm_display_mode {
        int crtc_vsync_start;
        int crtc_vsync_end;
        int crtc_vtotal;
-       int crtc_hadjusted;
-       int crtc_vadjusted;
 
        /* Driver private mode info */
        int private_size;
@@ -206,11 +214,10 @@ struct drm_display_info {
        u32 color_formats;
 
        u8 cea_rev;
-
-       char *raw_edid; /* if any */
 };
 
 struct drm_framebuffer_funcs {
+       /* note: use drm_framebuffer_remove() */
        void (*destroy)(struct drm_framebuffer *framebuffer);
        int (*create_handle)(struct drm_framebuffer *fb,
                             struct drm_file *file_priv,
@@ -235,6 +242,16 @@ struct drm_framebuffer_funcs {
 
 struct drm_framebuffer {
        struct drm_device *dev;
+       /*
+        * Note that the fb is refcounted for the benefit of driver internals,
+        * for example some hw, disabling a CRTC/plane is asynchronous, and
+        * scanout does not actually complete until the next vblank.  So some
+        * cleanup (like releasing the reference(s) on the backing GEM bo(s))
+        * should be deferred.  In cases like this, the driver would like to
+        * hold a ref to the fb even though it has already been removed from
+        * userspace perspective.
+        */
+       struct kref refcount;
        struct list_head head;
        struct drm_mode_object base;
        const struct drm_framebuffer_funcs *funcs;
@@ -284,19 +301,16 @@ struct drm_plane;
 
 /**
  * drm_crtc_funcs - control CRTCs for a given device
- * @reset: reset CRTC after state has been invalidate (e.g. resume)
- * @dpms: control display power levels
  * @save: save CRTC state
- * @resore: restore CRTC state
- * @lock: lock the CRTC
- * @unlock: unlock the CRTC
- * @shadow_allocate: allocate shadow pixmap
- * @shadow_create: create shadow pixmap for rotation support
- * @shadow_destroy: free shadow pixmap
- * @mode_fixup: fixup proposed mode
- * @mode_set: set the desired mode on the CRTC
+ * @restore: restore CRTC state
+ * @reset: reset CRTC after state has been invalidate (e.g. resume)
+ * @cursor_set: setup the cursor
+ * @cursor_move: move the cursor
  * @gamma_set: specify color ramp for CRTC
- * @destroy: deinit and free object.
+ * @destroy: deinit and free object
+ * @set_property: called when a property is changed
+ * @set_config: apply a new CRTC configuration
+ * @page_flip: initiate a page flip
  *
  * The drm_crtc_funcs structure is the central CRTC management structure
  * in the DRM.  Each CRTC controls one or more connectors (note that the name
@@ -330,7 +344,7 @@ struct drm_crtc_funcs {
 
        /*
         * Flip to the given framebuffer.  This implements the page
-        * flip ioctl descibed in drm_mode.h, specifically, the
+        * flip ioctl described in drm_mode.h, specifically, the
         * implementation must return immediately and block all
         * rendering to the current fb until the flip has completed.
         * If userspace set the event flag in the ioctl, the event
@@ -340,14 +354,32 @@ struct drm_crtc_funcs {
        int (*page_flip)(struct drm_crtc *crtc,
                         struct drm_framebuffer *fb,
                         struct drm_pending_vblank_event *event);
+
+       int (*set_property)(struct drm_crtc *crtc,
+                           struct drm_property *property, uint64_t val);
 };
 
 /**
  * drm_crtc - central CRTC control structure
+ * @dev: parent DRM device
+ * @head: list management
+ * @base: base KMS object for ID tracking etc.
  * @enabled: is this CRTC enabled?
+ * @mode: current mode timings
+ * @hwmode: mode timings as programmed to hw regs
+ * @invert_dimensions: for purposes of error checking crtc vs fb sizes,
+ *    invert the width/height of the crtc.  This is used if the driver
+ *    is performing 90 or 270 degree rotated scanout
  * @x: x position on screen
  * @y: y position on screen
  * @funcs: CRTC control functions
+ * @gamma_size: size of gamma ramp
+ * @gamma_store: gamma ramp values
+ * @framedur_ns: precise frame timing
+ * @framedur_ns: precise line timing
+ * @pixeldur_ns: precise pixel timing
+ * @helper_private: mid-layer private data
+ * @properties: property tracking for this CRTC
  *
  * Each CRTC may have one or more connectors associated with it.  This structure
  * allows the CRTC to be controlled.
@@ -371,6 +403,8 @@ struct drm_crtc {
         */
        struct drm_display_mode hwmode;
 
+       bool invert_dimensions;
+
        int x, y;
        const struct drm_crtc_funcs *funcs;
 
@@ -379,10 +413,12 @@ struct drm_crtc {
        uint16_t *gamma_store;
 
        /* Constants needed for precise vblank and swap timestamping. */
-       int64_t framedur_ns, linedur_ns, pixeldur_ns;
+       s64 framedur_ns, linedur_ns, pixeldur_ns;
 
        /* if you are using the helper */
        void *helper_private;
+
+       struct drm_object_properties properties;
 };
 
 
@@ -392,11 +428,8 @@ struct drm_crtc {
  * @save: save connector state
  * @restore: restore connector state
  * @reset: reset connector after state has been invalidate (e.g. resume)
- * @mode_valid: is this mode valid on the given connector?
- * @mode_fixup: try to fixup proposed mode for this connector
- * @mode_set: set this mode
  * @detect: is this connector active?
- * @get_modes: get mode list for this connector
+ * @fill_modes: fill mode list for this connector
  * @set_property: property for this connector may need update
  * @destroy: make object go away
  * @force: notify the driver the connector is forced on
@@ -426,6 +459,13 @@ struct drm_connector_funcs {
        void (*force)(struct drm_connector *connector);
 };
 
+/**
+ * drm_encoder_funcs - encoder controls
+ * @reset: reset state (e.g. at init or resume time)
+ * @destroy: cleanup and free associated data
+ *
+ * Encoders sit between CRTCs and connectors.
+ */
 struct drm_encoder_funcs {
        void (*reset)(struct drm_encoder *encoder);
        void (*destroy)(struct drm_encoder *encoder);
@@ -434,10 +474,22 @@ struct drm_encoder_funcs {
 #define DRM_CONNECTOR_MAX_UMODES 16
 #define DRM_CONNECTOR_MAX_PROPERTY 16
 #define DRM_CONNECTOR_LEN 32
-#define DRM_CONNECTOR_MAX_ENCODER 2
+#define DRM_CONNECTOR_MAX_ENCODER 3
 
 /**
  * drm_encoder - central DRM encoder structure
+ * @dev: parent DRM device
+ * @head: list management
+ * @base: base KMS object
+ * @encoder_type: one of the %DRM_MODE_ENCODER_<foo> types in drm_mode.h
+ * @possible_crtcs: bitmask of potential CRTC bindings
+ * @possible_clones: bitmask of potential sibling encoders for cloning
+ * @crtc: currently bound CRTC
+ * @funcs: control functions
+ * @helper_private: mid-layer private data
+ *
+ * CRTCs drive pixels to encoders, which convert them into signals
+ * appropriate for a given connector or set of connectors.
  */
 struct drm_encoder {
        struct drm_device *dev;
@@ -473,14 +525,36 @@ enum drm_connector_force {
 
 /**
  * drm_connector - central DRM connector control structure
- * @crtc: CRTC this connector is currently connected to, NULL if none
+ * @dev: parent DRM device
+ * @kdev: kernel device for sysfs attributes
+ * @attr: sysfs attributes
+ * @head: list management
+ * @base: base KMS object
+ * @connector_type: one of the %DRM_MODE_CONNECTOR_<foo> types from drm_mode.h
+ * @connector_type_id: index into connector type enum
  * @interlace_allowed: can this connector handle interlaced modes?
  * @doublescan_allowed: can this connector handle doublescan?
- * @available_modes: modes available on this connector (from get_modes() + user)
- * @initial_x: initial x position for this connector
- * @initial_y: initial y position for this connector
- * @status: connector connected?
+ * @modes: modes available on this connector (from fill_modes() + user)
+ * @status: one of the drm_connector_status enums (connected, not, or unknown)
+ * @probed_modes: list of modes derived directly from the display
+ * @display_info: information about attached display (e.g. from EDID)
  * @funcs: connector control functions
+ * @user_modes: user added mode list
+ * @edid_blob_ptr: DRM property containing EDID if present
+ * @properties: property tracking for this connector
+ * @polled: a %DRM_CONNECTOR_POLL_<foo> value for core driven polling
+ * @dpms: current dpms state
+ * @helper_private: mid-layer private data
+ * @force: a %DRM_FORCE_<foo> state for forced mode sets
+ * @encoder_ids: valid encoders for this connector
+ * @encoder: encoder driving this connector, if any
+ * @eld: EDID-like data, if present
+ * @dvi_dual: dual link DVI, if found
+ * @max_tmds_clock: max clock rate, if found
+ * @latency_present: AV delay info from ELD, if found
+ * @video_latency: video latency info from ELD, if found
+ * @audio_latency: audio latency info from ELD, if found
+ * @null_edid_counter: track sinks that give us all zeros for the EDID
  *
  * Each connector may be connected to one or more CRTCs, or may be clonable by
  * another connector if they can share a CRTC.  Each connector also has a specific
@@ -501,7 +575,6 @@ struct drm_connector {
        bool doublescan_allowed;
        struct list_head modes; /* list of modes on this connector */
 
-       int initial_x, initial_y;
        enum drm_connector_status status;
 
        /* these are modes added by probing with DDC or the BIOS */
@@ -525,7 +598,6 @@ struct drm_connector {
        /* forced on connector */
        enum drm_connector_force force;
        uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER];
-       uint32_t force_encoder_id;
        struct drm_encoder *encoder; /* currently active encoder */
 
        /* EDID bits */
@@ -535,8 +607,8 @@ struct drm_connector {
        bool latency_present[2];
        int video_latency[2];   /* [0]: progressive, [1]: interlaced */
        int audio_latency[2];
-
        int null_edid_counter; /* needed to workaround some HW bugs where we get all 0s */
+       unsigned bad_edid_counter;
 };
 
 /**
@@ -544,6 +616,7 @@ struct drm_connector {
  * @update_plane: update the plane configuration
  * @disable_plane: shut down the plane
  * @destroy: clean up plane resources
+ * @set_property: called when a property is changed
  */
 struct drm_plane_funcs {
        int (*update_plane)(struct drm_plane *plane,
@@ -554,6 +627,9 @@ struct drm_plane_funcs {
                            uint32_t src_w, uint32_t src_h);
        int (*disable_plane)(struct drm_plane *plane);
        void (*destroy)(struct drm_plane *plane);
+
+       int (*set_property)(struct drm_plane *plane,
+                           struct drm_property *property, uint64_t val);
 };
 
 /**
@@ -571,6 +647,7 @@ struct drm_plane_funcs {
  * @enabled: enabled flag
  * @funcs: helper functions
  * @helper_private: storage for drver layer
+ * @properties: property tracking for this plane
  */
 struct drm_plane {
        struct drm_device *dev;
@@ -593,10 +670,20 @@ struct drm_plane {
 
        const struct drm_plane_funcs *funcs;
        void *helper_private;
+
+       struct drm_object_properties properties;
 };
 
 /**
- * struct drm_mode_set
+ * drm_mode_set - new values for a CRTC config change
+ * @head: list management
+ * @fb: framebuffer to use for new config
+ * @crtc: CRTC whose configuration we're about to change
+ * @mode: mode timings to use
+ * @x: position of this CRTC relative to @fb
+ * @y: position of this CRTC relative to @fb
+ * @connectors: array of connectors to drive with this CRTC if possible
+ * @num_connectors: size of @connectors array
  *
  * Represents a single crtc the connectors that it drives with what mode
  * and from which framebuffer it scans out from.
@@ -604,8 +691,6 @@ struct drm_plane {
  * This is used to set modes.
  */
 struct drm_mode_set {
-       struct list_head head;
-
        struct drm_framebuffer *fb;
        struct drm_crtc *crtc;
        struct drm_display_mode *mode;
@@ -618,7 +703,12 @@ struct drm_mode_set {
 };
 
 /**
- * struct drm_mode_config_funcs - configure CRTCs for a given screen layout
+ * struct drm_mode_config_funcs - basic driver provided mode setting functions
+ * @fb_create: create a new framebuffer object
+ * @output_poll_changed: function to handle output configuration changes
+ *
+ * Some global (i.e. not per-CRTC, connector, etc) mode setting functions that
+ * involve drivers.
  */
 struct drm_mode_config_funcs {
        int (*fb_create)(struct drm_device *dev,
@@ -627,6 +717,19 @@ struct drm_mode_config_funcs {
        void (*output_poll_changed)(struct drm_device *dev);
 };
 
+/**
+ * drm_mode_group - group of mode setting resources for potential sub-grouping
+ * @num_crtcs: CRTC count
+ * @num_encoders: encoder count
+ * @num_connectors: connector count
+ * @id_list: list of KMS object IDs in this group
+ *
+ * Currently this simply tracks the global mode setting state.  But in the
+ * future it could allow groups of objects to be set aside into independent
+ * control groups for use by different user level processes (e.g. two X servers
+ * running simultaneously on different heads, each with their own mode
+ * configuration and freedom of mode setting).
+ */
 struct drm_mode_group {
        uint32_t num_crtcs;
        uint32_t num_encoders;
@@ -664,7 +767,7 @@ struct drm_mode_group {
  * global restrictions are also here, e.g. dimension restrictions.
  */
 struct drm_mode_config {
-       struct lock lock; /* protects configuration (mode lists etc.) */
+       struct lock mutex; /* protects configuration (mode lists etc.) */
        struct spinlock idr_mutex; /* for IDR management */
        struct idr crtc_idr; /* use this idr for all IDs, fb, crtc, connector, modes - just makes life easier */
        /* this is limited to one for now */
@@ -689,6 +792,7 @@ struct drm_mode_config {
 
        /* output poll support */
        bool poll_enabled;
+       bool poll_running;
        struct timeout_task output_poll_task;
 
        /* pointers to standard properties */
@@ -759,6 +863,8 @@ extern int drm_connector_init(struct drm_device *dev,
                              int connector_type);
 
 extern void drm_connector_cleanup(struct drm_connector *connector);
+/* helper to unplug all connectors from sysfs for device */
+extern void drm_connector_unplug_all(struct drm_device *dev);
 
 extern int drm_encoder_init(struct drm_device *dev,
                            struct drm_encoder *encoder,
@@ -788,16 +894,17 @@ extern struct edid *drm_get_edid(struct drm_connector *connector,
 extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
 extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
 extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
+extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
 extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
-    const struct drm_display_mode *mode);
-extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode);
+                                                  const struct drm_display_mode *mode);
+extern void drm_mode_debug_printmodeline(const struct drm_display_mode *mode);
 extern void drm_mode_config_init(struct drm_device *dev);
 extern void drm_mode_config_reset(struct drm_device *dev);
 extern void drm_mode_config_cleanup(struct drm_device *dev);
 extern void drm_mode_set_name(struct drm_display_mode *mode);
-extern bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2);
-extern int drm_mode_width(struct drm_display_mode *mode);
-extern int drm_mode_height(struct drm_display_mode *mode);
+extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2);
+extern int drm_mode_width(const struct drm_display_mode *mode);
+extern int drm_mode_height(const struct drm_display_mode *mode);
 
 /* for us by fb module */
 extern int drm_mode_attachmode_crtc(struct drm_device *dev,
@@ -837,6 +944,9 @@ extern void drm_framebuffer_set_object(struct drm_device *dev,
 extern int drm_framebuffer_init(struct drm_device *dev,
                                struct drm_framebuffer *fb,
                                const struct drm_framebuffer_funcs *funcs);
+extern void drm_framebuffer_unreference(struct drm_framebuffer *fb);
+extern void drm_framebuffer_reference(struct drm_framebuffer *fb);
+extern void drm_framebuffer_remove(struct drm_framebuffer *fb);
 extern void drm_framebuffer_cleanup(struct drm_framebuffer *fb);
 extern int drmfb_probe(struct drm_device *dev, struct drm_crtc *crtc);
 extern int drmfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
@@ -844,13 +954,17 @@ extern void drm_crtc_probe_connector_modes(struct drm_device *dev, int maxX, int
 extern bool drm_crtc_in_use(struct drm_crtc *crtc);
 
 extern int drm_connector_attach_property(struct drm_connector *connector,
-                                     struct drm_property *property, uint64_t init_val);
+                                     struct drm_property *property, uint64_t init_val);
 extern struct drm_property *drm_property_create(struct drm_device *dev, int flags,
                                                const char *name, int num_values);
 extern struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags,
                                         const char *name,
                                         const struct drm_prop_enum_list *props,
                                         int num_values);
+struct drm_property *drm_property_create_bitmask(struct drm_device *dev,
+                                        int flags, const char *name,
+                                        const struct drm_prop_enum_list *props,
+                                        int num_values);
 struct drm_property *drm_property_create_range(struct drm_device *dev, int flags,
                                         const char *name,
                                         uint64_t min, uint64_t max);
@@ -926,6 +1040,8 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
                                    void *data, struct drm_file *file_priv);
 extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
                                    void *data, struct drm_file *file_priv);
+extern u8 *drm_find_cea_extension(struct edid *edid);
+extern u8 drm_match_cea_mode(struct drm_display_mode *to_match);
 extern bool drm_detect_hdmi_monitor(struct edid *edid);
 extern bool drm_detect_monitor_audio(struct edid *edid);
 extern int drm_mode_page_flip_ioctl(struct drm_device *dev,
@@ -942,6 +1058,7 @@ extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev,
                                int GTF_2C, int GTF_K, int GTF_2J);
 extern int drm_add_modes_noedid(struct drm_connector *connector,
                                int hdisplay, int vdisplay);
+extern uint8_t drm_mode_cea_vic(const struct drm_display_mode *mode);
 
 extern int drm_edid_header_is_valid(const u8 *raw_edid);
 extern bool drm_edid_is_valid(struct edid *edid);
@@ -954,7 +1071,16 @@ extern int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
                                    void *data, struct drm_file *file_priv);
 extern int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
                                      void *data, struct drm_file *file_priv);
+extern int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
+                                            struct drm_file *file_priv);
+extern int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
+                                          struct drm_file *file_priv);
 
 extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
                                 int *bpp);
+extern int drm_format_num_planes(uint32_t format);
+extern int drm_format_plane_cpp(uint32_t format, int plane);
+extern int drm_format_horz_chroma_subsampling(uint32_t format);
+extern int drm_format_vert_chroma_subsampling(uint32_t format);
+
 #endif /* __DRM_CRTC_H__ */