summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Airlie <airlied@asimov.stargames.com.au>2007-04-10 16:25:31 +1000
committerDavid Airlie <airlied@asimov.stargames.com.au>2007-04-10 16:25:31 +1000
commit1e39dc43230ba1827eedc29ab422464281ec3e1b (patch)
tree9bfe37ff67dd9a0e1462b4d602d2d7e8db754b2c
parent40bd6dcd86d554ca426deccd4fbada693c4be8a6 (diff)
export output name to userspace
-rw-r--r--libdrm/xf86drmMode.c4
-rw-r--r--libdrm/xf86drmMode.h2
-rw-r--r--linux-core/drm_crtc.c7
-rw-r--r--shared-core/drm.h3
4 files changed, 11 insertions, 5 deletions
diff --git a/libdrm/xf86drmMode.c b/libdrm/xf86drmMode.c
index df8ea8ee..c0444e65 100644
--- a/libdrm/xf86drmMode.c
+++ b/libdrm/xf86drmMode.c
@@ -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:
diff --git a/libdrm/xf86drmMode.h b/libdrm/xf86drmMode.h
index fadfdc5d..594eb487 100644
--- a/libdrm/xf86drmMode.h
+++ b/libdrm/xf86drmMode.h
@@ -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;
diff --git a/linux-core/drm_crtc.c b/linux-core/drm_crtc.c
index 46b7f7ae..cc082d91 100644
--- a/linux-core/drm_crtc.c
+++ b/linux-core/drm_crtc.c
@@ -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;
diff --git a/shared-core/drm.h b/shared-core/drm.h
index 8329609f..f1afc049 100644
--- a/shared-core/drm.h
+++ b/shared-core/drm.h
@@ -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 */