export output name to userspace
authorDavid Airlie <airlied@asimov.stargames.com.au>
Tue, 10 Apr 2007 06:25:31 +0000 (16:25 +1000)
committerDavid Airlie <airlied@asimov.stargames.com.au>
Tue, 10 Apr 2007 06:25:31 +0000 (16:25 +1000)
libdrm/xf86drmMode.c
libdrm/xf86drmMode.h
linux-core/drm_crtc.c
shared-core/drm.h

index df8ea8e..c0444e6 100644 (file)
@@ -40,6 +40,7 @@
 #include "xf86drmMode.h"
 #include "xf86drm.h"
 #include <drm.h>
+#include <string.h>
 
 /*
  * Util functions
@@ -385,7 +386,8 @@ drmModeOutputPtr drmModeGetOutput(int fd, uint32_t output_id)
        r->crtcs        = out.crtcs;
        r->clones       = out.clones;
        r->modes        = drmAllocCpy(out.modes, out.count_modes, sizeof(uint32_t));
-
+       strncpy(r->name, out.name, DRM_OUTPUT_NAME_LEN);
+       r->name[DRM_OUTPUT_NAME_LEN-1] = 0;
        return r;
 
 err_allocs:
index fadfdc5..594eb48 100644 (file)
@@ -120,7 +120,7 @@ typedef enum {
 typedef struct _drmModeOutput {
 
        unsigned int crtc; /**< Crtc currently connected to */
-
+       unsigned char name[DRM_OUTPUT_NAME_LEN];
        drmModeConnection connection;
        uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
        drmModeSubPixel subpixel;
index 46b7f7a..cc082d9 100644 (file)
@@ -838,16 +838,19 @@ int drm_mode_getoutput(struct inode *inode, struct file *filp,
        if (copy_from_user(&out_resp, argp, sizeof(out_resp)))
                return -EFAULT; 
 
-       DRM_DEBUG("output id %d\n", out_resp.output);
+       DRM_DEBUG("output id %d:\n", out_resp.output);
        output= idr_find(&dev->mode_config.crtc_idr, out_resp.output);
        if (!output || (output->id != out_resp.output))
                return -EINVAL;
 
-       DRM_DEBUG("about to count modes\n");
+       DRM_DEBUG("about to count modes: %s\n", output->name);
        list_for_each_entry(mode, &output->modes, head)
                mode_count++;
 
        DRM_DEBUG("about to count modes %d %d %p\n", mode_count, out_resp.count_modes, output->crtc);
+       strncpy(out_resp.name, output->name, DRM_OUTPUT_NAME_LEN);
+       out_resp.name[DRM_OUTPUT_NAME_LEN-1] = 0;
+
        out_resp.mm_width = output->mm_width;
        out_resp.mm_height = output->mm_height;
        out_resp.subpixel = output->subpixel_order;
index 8329609..f1afc04 100644 (file)
@@ -891,7 +891,7 @@ typedef union drm_mm_init_arg{
 /*
  * Drm mode setting
  */
-
+#define DRM_OUTPUT_NAME_LEN 32
 #define DRM_DISPLAY_MODE_LEN 32
 
 struct drm_mode_modeinfo {
@@ -946,6 +946,7 @@ struct drm_mode_get_output {
 
        unsigned int output; /**< Id */
        unsigned int crtc; /**< Id of crtc */
+       unsigned char name[DRM_OUTPUT_NAME_LEN];
 
        unsigned int connection;
        unsigned int mm_width, mm_height; /**< HxW in millimeters */