drm/mode: Unstatic kernel-userspace mode conversion
authorDaniel Stone <daniels@collabora.com>
Fri, 22 May 2015 12:34:48 +0000 (13:34 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 22 May 2015 14:18:21 +0000 (16:18 +0200)
Move the drm_display_mode <-> drm_mode_modeinfo conversion functions
from drm_crtc.c to drm_modes.c, and make them non-static so that others
can use them.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Tested-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_modes.c
include/drm/drm_modes.h

index baad4e85600645c9353475e086d9f996549e9c01..f6b0332aad7f1d682c38e23bcf6f01b0b2ef8b71 100644 (file)
@@ -1735,93 +1735,6 @@ void drm_reinit_primary_mode_group(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_reinit_primary_mode_group);
 
-/**
- * drm_crtc_convert_to_umode - convert a drm_display_mode into a modeinfo
- * @out: drm_mode_modeinfo struct to return to the user
- * @in: drm_display_mode to use
- *
- * Convert a drm_display_mode into a drm_mode_modeinfo structure to return to
- * the user.
- */
-static void drm_crtc_convert_to_umode(struct drm_mode_modeinfo *out,
-                                     const struct drm_display_mode *in)
-{
-       WARN(in->hdisplay > USHRT_MAX || in->hsync_start > USHRT_MAX ||
-            in->hsync_end > USHRT_MAX || in->htotal > USHRT_MAX ||
-            in->hskew > USHRT_MAX || in->vdisplay > USHRT_MAX ||
-            in->vsync_start > USHRT_MAX || in->vsync_end > USHRT_MAX ||
-            in->vtotal > USHRT_MAX || in->vscan > USHRT_MAX,
-            "timing values too large for mode info\n");
-
-       out->clock = in->clock;
-       out->hdisplay = in->hdisplay;
-       out->hsync_start = in->hsync_start;
-       out->hsync_end = in->hsync_end;
-       out->htotal = in->htotal;
-       out->hskew = in->hskew;
-       out->vdisplay = in->vdisplay;
-       out->vsync_start = in->vsync_start;
-       out->vsync_end = in->vsync_end;
-       out->vtotal = in->vtotal;
-       out->vscan = in->vscan;
-       out->vrefresh = in->vrefresh;
-       out->flags = in->flags;
-       out->type = in->type;
-       strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
-       out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
-}
-
-/**
- * drm_crtc_convert_umode - convert a modeinfo into a drm_display_mode
- * @out: drm_display_mode to return to the user
- * @in: drm_mode_modeinfo to use
- *
- * Convert a drm_mode_modeinfo into a drm_display_mode structure to return to
- * the caller.
- *
- * Returns:
- * Zero on success, negative errno on failure.
- */
-static int drm_crtc_convert_umode(struct drm_display_mode *out,
-                                 const struct drm_mode_modeinfo *in)
-{
-       int ret = -EINVAL;
-
-       if (in->clock > INT_MAX || in->vrefresh > INT_MAX) {
-               ret = -ERANGE;
-               goto out;
-       }
-
-       if ((in->flags & DRM_MODE_FLAG_3D_MASK) > DRM_MODE_FLAG_3D_MAX)
-               goto out;
-
-       out->clock = in->clock;
-       out->hdisplay = in->hdisplay;
-       out->hsync_start = in->hsync_start;
-       out->hsync_end = in->hsync_end;
-       out->htotal = in->htotal;
-       out->hskew = in->hskew;
-       out->vdisplay = in->vdisplay;
-       out->vsync_start = in->vsync_start;
-       out->vsync_end = in->vsync_end;
-       out->vtotal = in->vtotal;
-       out->vscan = in->vscan;
-       out->vrefresh = in->vrefresh;
-       out->flags = in->flags;
-       out->type = in->type;
-       strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
-       out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
-
-       out->status = drm_mode_validate_basic(out);
-       if (out->status != MODE_OK)
-               goto out;
-
-       ret = 0;
-
-out:
-       return ret;
-}
-
 /**
  * drm_mode_getresources - get graphics configuration
  * @dev: drm device for the ioctl
@@ -2048,7 +1961,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
                crtc_resp->x = crtc->primary->state->src_x >> 16;
                crtc_resp->y = crtc->primary->state->src_y >> 16;
                if (crtc->state->enable) {
-                       drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
+                       drm_mode_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
                        crtc_resp->mode_valid = 1;
 
                } else {
@@ -2058,7 +1971,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
                crtc_resp->x = crtc->x;
                crtc_resp->y = crtc->y;
                if (crtc->enabled) {
-                       drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
+                       drm_mode_convert_to_umode(&crtc_resp->mode, &crtc->mode);
                        crtc_resp->mode_valid = 1;
 
                } else {
@@ -2215,7 +2128,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
                        if (!drm_mode_expose_to_userspace(mode, file_priv))
                                continue;
 
-                       drm_crtc_convert_to_umode(&u_mode, mode);
+                       drm_mode_convert_to_umode(&u_mode, mode);
                        if (copy_to_user(mode_ptr + copied,
                                         &u_mode, sizeof(u_mode))) {
                                ret = -EFAULT;
@@ -2826,7 +2739,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
                        goto out;
                }
 
-               ret = drm_crtc_convert_umode(mode, &crtc_req->mode);
+               ret = drm_mode_convert_umode(mode, &crtc_req->mode);
                if (ret) {
                        DRM_DEBUG_KMS("Invalid mode\n");
                        goto out;
index 213b11ea69b5b7ecc6309cdbde007d46e0319144..cd74a0953f42475c956d08b8339b59e64ff9b4de 100644 (file)
@@ -1405,3 +1405,90 @@ drm_mode_create_from_cmdline_mode(struct drm_device *dev,
        return mode;
 }
 EXPORT_SYMBOL(drm_mode_create_from_cmdline_mode);
+
+/**
+ * drm_crtc_convert_to_umode - convert a drm_display_mode into a modeinfo
+ * @out: drm_mode_modeinfo struct to return to the user
+ * @in: drm_display_mode to use
+ *
+ * Convert a drm_display_mode into a drm_mode_modeinfo structure to return to
+ * the user.
+ */
+void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
+                              const struct drm_display_mode *in)
+{
+       WARN(in->hdisplay > USHRT_MAX || in->hsync_start > USHRT_MAX ||
+            in->hsync_end > USHRT_MAX || in->htotal > USHRT_MAX ||
+            in->hskew > USHRT_MAX || in->vdisplay > USHRT_MAX ||
+            in->vsync_start > USHRT_MAX || in->vsync_end > USHRT_MAX ||
+            in->vtotal > USHRT_MAX || in->vscan > USHRT_MAX,
+            "timing values too large for mode info\n");
+
+       out->clock = in->clock;
+       out->hdisplay = in->hdisplay;
+       out->hsync_start = in->hsync_start;
+       out->hsync_end = in->hsync_end;
+       out->htotal = in->htotal;
+       out->hskew = in->hskew;
+       out->vdisplay = in->vdisplay;
+       out->vsync_start = in->vsync_start;
+       out->vsync_end = in->vsync_end;
+       out->vtotal = in->vtotal;
+       out->vscan = in->vscan;
+       out->vrefresh = in->vrefresh;
+       out->flags = in->flags;
+       out->type = in->type;
+       strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
+       out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
+}
+
+/**
+ * drm_crtc_convert_umode - convert a modeinfo into a drm_display_mode
+ * @out: drm_display_mode to return to the user
+ * @in: drm_mode_modeinfo to use
+ *
+ * Convert a drm_mode_modeinfo into a drm_display_mode structure to return to
+ * the caller.
+ *
+ * Returns:
+ * Zero on success, negative errno on failure.
+ */
+int drm_mode_convert_umode(struct drm_display_mode *out,
+                          const struct drm_mode_modeinfo *in)
+{
+       int ret = -EINVAL;
+
+       if (in->clock > INT_MAX || in->vrefresh > INT_MAX) {
+               ret = -ERANGE;
+               goto out;
+       }
+
+       if ((in->flags & DRM_MODE_FLAG_3D_MASK) > DRM_MODE_FLAG_3D_MAX)
+               goto out;
+
+       out->clock = in->clock;
+       out->hdisplay = in->hdisplay;
+       out->hsync_start = in->hsync_start;
+       out->hsync_end = in->hsync_end;
+       out->htotal = in->htotal;
+       out->hskew = in->hskew;
+       out->vdisplay = in->vdisplay;
+       out->vsync_start = in->vsync_start;
+       out->vsync_end = in->vsync_end;
+       out->vtotal = in->vtotal;
+       out->vscan = in->vscan;
+       out->vrefresh = in->vrefresh;
+       out->flags = in->flags;
+       out->type = in->type;
+       strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
+       out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
+
+       out->status = drm_mode_validate_basic(out);
+       if (out->status != MODE_OK)
+               goto out;
+
+       ret = 0;
+
+out:
+       return ret;
+}
\ No newline at end of file
index 0616188c7801c1f90e07bbd94f380a8233afb48d..08a8cac9e5554ea20b3184bee3a8bb31088e757c 100644 (file)
@@ -182,6 +182,10 @@ struct drm_cmdline_mode;
 
 struct drm_display_mode *drm_mode_create(struct drm_device *dev);
 void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode);
+void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
+                               const struct drm_display_mode *in);
+int drm_mode_convert_umode(struct drm_display_mode *out,
+                          const struct drm_mode_modeinfo *in);
 void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
 void drm_mode_debug_printmodeline(const struct drm_display_mode *mode);