drm: sanitise drm modesetting API + remove unused hotplug

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>
This commit is contained in:
Jakob Bornecrantz 2008-12-19 14:50:50 +10:00 committed by Dave Airlie
parent df989374a9
commit e0c8463a8b
5 changed files with 112 additions and 137 deletions

View file

@ -804,7 +804,6 @@ void drm_mode_config_init(struct drm_device *dev)
dev->mode_config.num_connector = 0; dev->mode_config.num_connector = 0;
dev->mode_config.num_crtc = 0; dev->mode_config.num_crtc = 0;
dev->mode_config.num_encoder = 0; dev->mode_config.num_encoder = 0;
dev->mode_config.hotplug_counter = 0;
} }
EXPORT_SYMBOL(drm_mode_config_init); 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); 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 * drm_crtc_convert_to_umode - convert a drm_display_mode into a modeinfo
* @out: drm_mode_modeinfo struct to return to the user * @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); 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) { if (!obj) {
DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc); DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc_id);
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
} }
@ -1622,7 +1611,7 @@ int drm_mode_addfb(struct drm_device *dev,
goto out; goto out;
} }
r->buffer_id = fb->base.id; r->fb_id = fb->base.id;
list_add(&fb->filp_head, &file_priv->fbs); list_add(&fb->filp_head, &file_priv->fbs);
out: out:
@ -1714,7 +1703,7 @@ int drm_mode_getfb(struct drm_device *dev,
int ret = 0; int ret = 0;
mutex_lock(&dev->mode_config.mutex); 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) { if (!obj) {
DRM_ERROR("invalid framebuffer id\n"); DRM_ERROR("invalid framebuffer id\n");
ret = -EINVAL; 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 */ /* right replace the current bo attached to this fb with a new bo */
mutex_lock(&dev->mode_config.mutex); 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) { if (!obj) {
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;

View file

@ -780,8 +780,6 @@ EXPORT_SYMBOL(drm_helper_initial_config);
*/ */
int drm_helper_hotplug_stage_two(struct drm_device *dev) int drm_helper_hotplug_stage_two(struct drm_device *dev)
{ {
dev->mode_config.hotplug_counter++;
drm_helper_plugged_event(dev); drm_helper_plugged_event(dev);
return 0; return 0;

View 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_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_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_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_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_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_MASTER),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER),
DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW), 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_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_ATTACHMODE, drm_mode_attachmode_ioctl, 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_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_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_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 ) #define DRM_CORE_IOCTL_COUNT ARRAY_SIZE( drm_ioctls )

View file

@ -573,9 +573,6 @@ struct drm_mode_config {
/* Optional properties */ /* Optional properties */
struct drm_property *scaling_mode_property; struct drm_property *scaling_mode_property;
struct drm_property *dithering_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) #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)

View file

@ -81,14 +81,14 @@
#define DRM_MODE_DITHERING_ON 1 #define DRM_MODE_DITHERING_ON 1
struct drm_mode_modeinfo { struct drm_mode_modeinfo {
unsigned int clock; uint32_t clock;
unsigned short hdisplay, hsync_start, hsync_end, htotal, hskew; uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
unsigned short vdisplay, vsync_start, vsync_end, vtotal, vscan; uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
unsigned int vrefresh; /* vertical refresh * 1000 */ uint32_t vrefresh; /* vertical refresh * 1000 */
unsigned int flags; uint32_t flags;
unsigned int type; uint32_t type;
char name[DRM_DISPLAY_MODE_LEN]; char name[DRM_DISPLAY_MODE_LEN];
}; };
@ -97,25 +97,25 @@ struct drm_mode_card_res {
uint64_t crtc_id_ptr; uint64_t crtc_id_ptr;
uint64_t connector_id_ptr; uint64_t connector_id_ptr;
uint64_t encoder_id_ptr; uint64_t encoder_id_ptr;
int count_fbs; uint32_t count_fbs;
int count_crtcs; uint32_t count_crtcs;
int count_connectors; uint32_t count_connectors;
int count_encoders; uint32_t count_encoders;
int min_width, max_width; uint32_t min_width, max_width;
int min_height, max_height; uint32_t min_height, max_height;
}; };
struct drm_mode_crtc { struct drm_mode_crtc {
uint64_t set_connectors_ptr; uint64_t set_connectors_ptr;
int count_connectors; uint32_t count_connectors;
unsigned int crtc_id; /**< Id */ uint32_t crtc_id; /**< Id */
unsigned int fb_id; /**< Id of framebuffer */ 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; uint32_t gamma_size;
int mode_valid; uint32_t mode_valid;
struct drm_mode_modeinfo mode; struct drm_mode_modeinfo mode;
}; };
@ -126,10 +126,10 @@ struct drm_mode_crtc {
#define DRM_MODE_ENCODER_TVDAC 4 #define DRM_MODE_ENCODER_TVDAC 4
struct drm_mode_get_encoder { struct drm_mode_get_encoder {
unsigned int encoder_id; uint32_t encoder_id;
unsigned int encoder_type; 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_crtcs;
uint32_t possible_clones; uint32_t possible_clones;
@ -166,18 +166,18 @@ struct drm_mode_get_connector {
uint64_t props_ptr; uint64_t props_ptr;
uint64_t prop_values_ptr; uint64_t prop_values_ptr;
int count_modes; uint32_t count_modes;
int count_props; uint32_t count_props;
int count_encoders; uint32_t count_encoders;
unsigned int encoder_id; /**< Current Encoder */ uint32_t encoder_id; /**< Current Encoder */
unsigned int connector_id; /**< Id */ uint32_t connector_id; /**< Id */
unsigned int connector_type; uint32_t connector_type;
unsigned int connector_type_id; uint32_t connector_type_id;
unsigned int connection; uint32_t connection;
unsigned int mm_width, mm_height; /**< HxW in millimeters */ uint32_t mm_width, mm_height; /**< HxW in millimeters */
unsigned int subpixel; uint32_t subpixel;
}; };
#define DRM_MODE_PROP_PENDING (1<<0) #define DRM_MODE_PROP_PENDING (1<<0)
@ -188,25 +188,25 @@ struct drm_mode_get_connector {
struct drm_mode_property_enum { struct drm_mode_property_enum {
uint64_t value; uint64_t value;
unsigned char name[DRM_PROP_NAME_LEN]; char name[DRM_PROP_NAME_LEN];
}; };
struct drm_mode_get_property { struct drm_mode_get_property {
uint64_t values_ptr; /* values and blob lengths */ uint64_t values_ptr; /* values and blob lengths */
uint64_t enum_blob_ptr; /* enum and blob id ptrs */ uint64_t enum_blob_ptr; /* enum and blob id ptrs */
unsigned int prop_id; uint32_t prop_id;
unsigned int flags; uint32_t flags;
unsigned char name[DRM_PROP_NAME_LEN]; char name[DRM_PROP_NAME_LEN];
int count_values; uint32_t count_values;
int count_enum_blobs; uint32_t count_enum_blobs;
}; };
struct drm_mode_connector_set_property { struct drm_mode_connector_set_property {
uint64_t value; uint64_t value;
unsigned int prop_id; uint32_t prop_id;
unsigned int connector_id; uint32_t connector_id;
}; };
struct drm_mode_get_blob { struct drm_mode_get_blob {
@ -216,22 +216,22 @@ struct drm_mode_get_blob {
}; };
struct drm_mode_fb_cmd { struct drm_mode_fb_cmd {
unsigned int buffer_id; uint32_t fb_id;
unsigned int width, height; uint32_t width, height;
unsigned int pitch; uint32_t pitch;
unsigned int bpp; uint32_t bpp;
unsigned int depth; uint32_t depth;
/* driver specific handle */
unsigned int handle; uint32_t handle;
}; };
struct drm_mode_mode_cmd { struct drm_mode_mode_cmd {
unsigned int connector_id; uint32_t connector_id;
struct drm_mode_modeinfo mode; struct drm_mode_modeinfo mode;
}; };
#define DRM_MODE_CURSOR_BO 0x01 #define DRM_MODE_CURSOR_BO (1<<0)
#define DRM_MODE_CURSOR_MOVE 0x02 #define DRM_MODE_CURSOR_MOVE (1<<1)
/* /*
* depending on the value in flags diffrent members are used. * depending on the value in flags diffrent members are used.
@ -248,24 +248,17 @@ struct drm_mode_mode_cmd {
* y * y
*/ */
struct drm_mode_cursor { struct drm_mode_cursor {
unsigned int flags; uint32_t flags;
unsigned int crtc; uint32_t crtc_id;
int x; int32_t x;
int y; int32_t y;
uint32_t width; uint32_t width;
uint32_t height; uint32_t height;
unsigned int handle; /* driver specific handle */
}; uint32_t handle;
/*
* oh so ugly hotplug
*/
struct drm_mode_hotplug {
uint32_t counter;
}; };
struct drm_mode_crtc_lut { struct drm_mode_crtc_lut {
uint32_t crtc_id; uint32_t crtc_id;
uint32_t gamma_size; uint32_t gamma_size;