drm: sanitise drm modesetting API + remove unused hotplug
Jakob Bornecrantz [Fri, 19 Dec 2008 04:50:50 +0000 (14:50 +1000)]
The initially merged modesetting API has some uglies in it, this
cleans up the struct members and ioctl ordering for initial submission.

It also removes the unneeded hotplug infrastructure.

airlied:- I've pulled this patch in from git modesetting-gem tree.

Signed-off-by: Dave Airlie <airlied@redhat.com>

drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_crtc_helper.c
drivers/gpu/drm/drm_drv.c
include/drm/drm_crtc.h
include/drm/drm_mode.h

index 2e88024..ece947d 100644 (file)
@@ -804,7 +804,6 @@ void drm_mode_config_init(struct drm_device *dev)
        dev->mode_config.num_connector = 0;
        dev->mode_config.num_crtc = 0;
        dev->mode_config.num_encoder = 0;
-       dev->mode_config.hotplug_counter = 0;
 }
 EXPORT_SYMBOL(drm_mode_config_init);
 
@@ -900,16 +899,6 @@ void drm_mode_config_cleanup(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_mode_config_cleanup);
 
-int drm_mode_hotplug_ioctl(struct drm_device *dev,
-                          void *data, struct drm_file *file_priv)
-{
-       struct drm_mode_hotplug *arg = data;
-
-       arg->counter = dev->mode_config.hotplug_counter;
-
-       return 0;
-}
-
 /**
  * drm_crtc_convert_to_umode - convert a drm_display_mode into a modeinfo
  * @out: drm_mode_modeinfo struct to return to the user
@@ -1543,9 +1532,9 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,
        }
 
        mutex_lock(&dev->mode_config.mutex);
-       obj = drm_mode_object_find(dev, req->crtc, DRM_MODE_OBJECT_CRTC);
+       obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
        if (!obj) {
-               DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc);
+               DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc_id);
                ret = -EINVAL;
                goto out;
        }
@@ -1622,7 +1611,7 @@ int drm_mode_addfb(struct drm_device *dev,
                goto out;
        }
 
-       r->buffer_id = fb->base.id;
+       r->fb_id = fb->base.id;
        list_add(&fb->filp_head, &file_priv->fbs);
 
 out:
@@ -1714,7 +1703,7 @@ int drm_mode_getfb(struct drm_device *dev,
        int ret = 0;
 
        mutex_lock(&dev->mode_config.mutex);
-       obj = drm_mode_object_find(dev, r->buffer_id, DRM_MODE_OBJECT_FB);
+       obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
        if (!obj) {
                DRM_ERROR("invalid framebuffer id\n");
                ret = -EINVAL;
@@ -2326,7 +2315,7 @@ int drm_mode_replacefb(struct drm_device *dev,
 
        /* right replace the current bo attached to this fb with a new bo */
        mutex_lock(&dev->mode_config.mutex);
-       obj = drm_mode_object_find(dev, r->buffer_id, DRM_MODE_OBJECT_FB);
+       obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
        if (!obj) {
                ret = -EINVAL;
                goto out;
index f914044..58e3359 100644 (file)
@@ -780,8 +780,6 @@ EXPORT_SYMBOL(drm_helper_initial_config);
  */
 int drm_helper_hotplug_stage_two(struct drm_device *dev)
 {
-       dev->mode_config.hotplug_counter++;
-
        drm_helper_plugged_event(dev);
 
        return 0;
index c6e3382..7eb0e09 100644 (file)
@@ -129,23 +129,21 @@ static struct drm_ioctl_desc drm_ioctls[] = {
 
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
-
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_mode_connector_property_set_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_mode_attachmode_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_mode_detachmode_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_MASTER | DRM_CONTROL_ALLOW),
-
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_mode_connector_property_set_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
+       DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_REPLACEFB, drm_mode_replacefb, DRM_MASTER|DRM_ROOT_ONLY|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_MASTER),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER),
 };
 
 #define DRM_CORE_IOCTL_COUNT   ARRAY_SIZE( drm_ioctls )
index 08a884b..395c613 100644 (file)
@@ -573,9 +573,6 @@ struct drm_mode_config {
        /* Optional properties */
        struct drm_property *scaling_mode_property;
        struct drm_property *dithering_mode_property;
-
-       /* hotplug */
-       uint32_t hotplug_counter;
 };
 
 #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
index d2e7919..601d2bd 100644 (file)
 #include <linux/kernel.h>
 #endif
 
-#define DRM_DISPLAY_INFO_LEN 32
-#define DRM_CONNECTOR_NAME_LEN 32
-#define DRM_DISPLAY_MODE_LEN 32
-#define DRM_PROP_NAME_LEN 32
+#define DRM_DISPLAY_INFO_LEN   32
+#define DRM_CONNECTOR_NAME_LEN 32
+#define DRM_DISPLAY_MODE_LEN   32
+#define DRM_PROP_NAME_LEN      32
 
 #define DRM_MODE_TYPE_BUILTIN  (1<<0)
 #define DRM_MODE_TYPE_CLOCK_C  ((1<<1) | DRM_MODE_TYPE_BUILTIN)
 
 /* DPMS flags */
 /* bit compatible with the xorg definitions. */
-#define DRM_MODE_DPMS_ON 0
-#define DRM_MODE_DPMS_STANDBY 1
-#define DRM_MODE_DPMS_SUSPEND 2
-#define DRM_MODE_DPMS_OFF 3
+#define DRM_MODE_DPMS_ON       0
+#define DRM_MODE_DPMS_STANDBY  1
+#define DRM_MODE_DPMS_SUSPEND  2
+#define DRM_MODE_DPMS_OFF      3
 
 /* Scaling mode options */
-#define DRM_MODE_SCALE_NON_GPU 0
-#define DRM_MODE_SCALE_FULLSCREEN 1
-#define DRM_MODE_SCALE_NO_SCALE 2
-#define DRM_MODE_SCALE_ASPECT 3
+#define DRM_MODE_SCALE_NON_GPU         0
+#define DRM_MODE_SCALE_FULLSCREEN      1
+#define DRM_MODE_SCALE_NO_SCALE                2
+#define DRM_MODE_SCALE_ASPECT          3
 
 /* Dithering mode options */
-#define DRM_MODE_DITHERING_OFF 0
-#define DRM_MODE_DITHERING_ON 1
+#define DRM_MODE_DITHERING_OFF 0
+#define DRM_MODE_DITHERING_ON  1
 
 struct drm_mode_modeinfo {
-       unsigned int clock;
-       unsigned short hdisplay, hsync_start, hsync_end, htotal, hskew;
-       unsigned short vdisplay, vsync_start, vsync_end, vtotal, vscan;
+       uint32_t clock;
+       uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
+       uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
 
-       unsigned int vrefresh; /* vertical refresh * 1000 */
+       uint32_t vrefresh; /* vertical refresh * 1000 */
 
-       unsigned int flags;
-       unsigned int type;
+       uint32_t flags;
+       uint32_t type;
        char name[DRM_DISPLAY_MODE_LEN];
 };
 
@@ -97,39 +97,39 @@ struct drm_mode_card_res {
        uint64_t crtc_id_ptr;
        uint64_t connector_id_ptr;
        uint64_t encoder_id_ptr;
-       int count_fbs;
-       int count_crtcs;
-       int count_connectors;
-       int count_encoders;
-       int min_width, max_width;
-       int min_height, max_height;
+       uint32_t count_fbs;
+       uint32_t count_crtcs;
+       uint32_t count_connectors;
+       uint32_t count_encoders;
+       uint32_t min_width, max_width;
+       uint32_t min_height, max_height;
 };
 
 struct drm_mode_crtc {
        uint64_t set_connectors_ptr;
-       int count_connectors;
+       uint32_t count_connectors;
 
-       unsigned int crtc_id; /**< Id */
-       unsigned int fb_id; /**< Id of framebuffer */
+       uint32_t crtc_id; /**< Id */
+       uint32_t fb_id; /**< Id of framebuffer */
 
-       int x, y; /**< Position on the frameuffer */
+       uint32_t x, y; /**< Position on the frameuffer */
 
        uint32_t gamma_size;
-       int mode_valid;
+       uint32_t mode_valid;
        struct drm_mode_modeinfo mode;
 };
 
-#define DRM_MODE_ENCODER_NONE 0
-#define DRM_MODE_ENCODER_DAC  1
-#define DRM_MODE_ENCODER_TMDS 2
-#define DRM_MODE_ENCODER_LVDS 3
-#define DRM_MODE_ENCODER_TVDAC 4
+#define DRM_MODE_ENCODER_NONE  0
+#define DRM_MODE_ENCODER_DAC   1
+#define DRM_MODE_ENCODER_TMDS  2
+#define DRM_MODE_ENCODER_LVDS  3
+#define DRM_MODE_ENCODER_TVDAC 4
 
 struct drm_mode_get_encoder {
-       unsigned int encoder_id;
-       unsigned int encoder_type;
+       uint32_t encoder_id;
+       uint32_t encoder_type;
 
-       unsigned int crtc_id; /**< Id of crtc */
+       uint32_t crtc_id; /**< Id of crtc */
 
        uint32_t possible_crtcs;
        uint32_t possible_clones;
@@ -137,27 +137,27 @@ struct drm_mode_get_encoder {
 
 /* This is for connectors with multiple signal types. */
 /* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
-#define DRM_MODE_SUBCONNECTOR_Automatic 0
-#define DRM_MODE_SUBCONNECTOR_Unknown 0
-#define DRM_MODE_SUBCONNECTOR_DVID 3
-#define DRM_MODE_SUBCONNECTOR_DVIA 4
-#define DRM_MODE_SUBCONNECTOR_Composite 5
-#define DRM_MODE_SUBCONNECTOR_SVIDEO 6
-#define DRM_MODE_SUBCONNECTOR_Component 8
-
-#define DRM_MODE_CONNECTOR_Unknown 0
-#define DRM_MODE_CONNECTOR_VGA 1
-#define DRM_MODE_CONNECTOR_DVII 2
-#define DRM_MODE_CONNECTOR_DVID 3
-#define DRM_MODE_CONNECTOR_DVIA 4
-#define DRM_MODE_CONNECTOR_Composite 5
-#define DRM_MODE_CONNECTOR_SVIDEO 6
-#define DRM_MODE_CONNECTOR_LVDS 7
-#define DRM_MODE_CONNECTOR_Component 8
-#define DRM_MODE_CONNECTOR_9PinDIN 9
-#define DRM_MODE_CONNECTOR_DisplayPort 10
-#define DRM_MODE_CONNECTOR_HDMIA 11
-#define DRM_MODE_CONNECTOR_HDMIB 12
+#define DRM_MODE_SUBCONNECTOR_Automatic        0
+#define DRM_MODE_SUBCONNECTOR_Unknown  0
+#define DRM_MODE_SUBCONNECTOR_DVID     3
+#define DRM_MODE_SUBCONNECTOR_DVIA     4
+#define DRM_MODE_SUBCONNECTOR_Composite        5
+#define DRM_MODE_SUBCONNECTOR_SVIDEO   6
+#define DRM_MODE_SUBCONNECTOR_Component        8
+
+#define DRM_MODE_CONNECTOR_Unknown     0
+#define DRM_MODE_CONNECTOR_VGA         1
+#define DRM_MODE_CONNECTOR_DVII                2
+#define DRM_MODE_CONNECTOR_DVID                3
+#define DRM_MODE_CONNECTOR_DVIA                4
+#define DRM_MODE_CONNECTOR_Composite   5
+#define DRM_MODE_CONNECTOR_SVIDEO      6
+#define DRM_MODE_CONNECTOR_LVDS                7
+#define DRM_MODE_CONNECTOR_Component   8
+#define DRM_MODE_CONNECTOR_9PinDIN     9
+#define DRM_MODE_CONNECTOR_DisplayPort 10
+#define DRM_MODE_CONNECTOR_HDMIA       11
+#define DRM_MODE_CONNECTOR_HDMIB       12
 
 struct drm_mode_get_connector {
 
@@ -166,47 +166,47 @@ struct drm_mode_get_connector {
        uint64_t props_ptr;
        uint64_t prop_values_ptr;
 
-       int count_modes;
-       int count_props;
-       int count_encoders;
+       uint32_t count_modes;
+       uint32_t count_props;
+       uint32_t count_encoders;
 
-       unsigned int encoder_id; /**< Current Encoder */
-       unsigned int connector_id; /**< Id */
-       unsigned int connector_type;
-       unsigned int connector_type_id;
+       uint32_t encoder_id; /**< Current Encoder */
+       uint32_t connector_id; /**< Id */
+       uint32_t connector_type;
+       uint32_t connector_type_id;
 
-       unsigned int connection;
-       unsigned int mm_width, mm_height; /**< HxW in millimeters */
-       unsigned int subpixel;
+       uint32_t connection;
+       uint32_t mm_width, mm_height; /**< HxW in millimeters */
+       uint32_t subpixel;
 };
 
-#define DRM_MODE_PROP_PENDING (1<<0)
-#define DRM_MODE_PROP_RANGE (1<<1)
-#define DRM_MODE_PROP_IMMUTABLE (1<<2)
-#define DRM_MODE_PROP_ENUM (1<<3) /* enumerated type with text strings */
-#define DRM_MODE_PROP_BLOB (1<<4)
+#define DRM_MODE_PROP_PENDING  (1<<0)
+#define DRM_MODE_PROP_RANGE    (1<<1)
+#define DRM_MODE_PROP_IMMUTABLE        (1<<2)
+#define DRM_MODE_PROP_ENUM     (1<<3) /* enumerated type with text strings */
+#define DRM_MODE_PROP_BLOB     (1<<4)
 
 struct drm_mode_property_enum {
        uint64_t value;
-       unsigned char name[DRM_PROP_NAME_LEN];
+       char name[DRM_PROP_NAME_LEN];
 };
 
 struct drm_mode_get_property {
        uint64_t values_ptr; /* values and blob lengths */
        uint64_t enum_blob_ptr; /* enum and blob id ptrs */
 
-       unsigned int prop_id;
-       unsigned int flags;
-       unsigned char name[DRM_PROP_NAME_LEN];
+       uint32_t prop_id;
+       uint32_t flags;
+       char name[DRM_PROP_NAME_LEN];
 
-       int count_values;
-       int count_enum_blobs;
+       uint32_t count_values;
+       uint32_t count_enum_blobs;
 };
 
 struct drm_mode_connector_set_property {
        uint64_t value;
-       unsigned int prop_id;
-       unsigned int connector_id;
+       uint32_t prop_id;
+       uint32_t connector_id;
 };
 
 struct drm_mode_get_blob {
@@ -216,22 +216,22 @@ struct drm_mode_get_blob {
 };
 
 struct drm_mode_fb_cmd {
-       unsigned int buffer_id;
-       unsigned int width, height;
-       unsigned int pitch;
-       unsigned int bpp;
-       unsigned int depth;
-
-       unsigned int handle;
+       uint32_t fb_id;
+       uint32_t width, height;
+       uint32_t pitch;
+       uint32_t bpp;
+       uint32_t depth;
+       /* driver specific handle */
+       uint32_t handle;
 };
 
 struct drm_mode_mode_cmd {
-       unsigned int connector_id;
+       uint32_t connector_id;
        struct drm_mode_modeinfo mode;
 };
 
-#define DRM_MODE_CURSOR_BO   0x01
-#define DRM_MODE_CURSOR_MOVE 0x02
+#define DRM_MODE_CURSOR_BO     (1<<0)
+#define DRM_MODE_CURSOR_MOVE   (1<<1)
 
 /*
  * depending on the value in flags diffrent members are used.
@@ -248,24 +248,17 @@ struct drm_mode_mode_cmd {
  *    y
  */
 struct drm_mode_cursor {
-       unsigned int flags;
-       unsigned int crtc;
-       int x;
-       int y;
+       uint32_t flags;
+       uint32_t crtc_id;
+       int32_t x;
+       int32_t y;
        uint32_t width;
        uint32_t height;
-       unsigned int handle;
-};
-
-/*
- * oh so ugly hotplug
- */
-struct drm_mode_hotplug {
-       uint32_t counter;
+       /* driver specific handle */
+       uint32_t handle;
 };
 
 struct drm_mode_crtc_lut {
-
        uint32_t crtc_id;
        uint32_t gamma_size;