drm: add master set/drop protocol
this may not survive long - just need something for testingmain
parent
2d0411cb75
commit
607964ed9e
|
@ -2977,3 +2977,20 @@ void drmCloseOnce(int fd)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
int drmSetMaster(int fd)
|
||||
{
|
||||
int ret;
|
||||
|
||||
fprintf(stderr,"Setting master \n");
|
||||
ret = ioctl(fd, DRM_IOCTL_SET_MASTER, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int drmDropMaster(int fd)
|
||||
{
|
||||
int ret;
|
||||
fprintf(stderr,"Dropping master \n");
|
||||
ret = ioctl(fd, DRM_IOCTL_DROP_MASTER, 0);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -660,6 +660,9 @@ extern int drmSLLookupNeighbors(void *l, unsigned long key,
|
|||
extern int drmOpenOnce(void *unused, const char *BusID, int *newlyopened);
|
||||
extern void drmCloseOnce(int fd);
|
||||
|
||||
extern int drmSetMaster(int fd);
|
||||
extern int drmDropMaster(int fd);
|
||||
|
||||
#include "xf86mm.h"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1266,6 +1266,10 @@ extern int drm_agp_unbind_memory(DRM_AGP_MEM * handle);
|
|||
extern struct drm_ttm_backend *drm_agp_init_ttm(struct drm_device *dev);
|
||||
extern void drm_agp_chipset_flush(struct drm_device *dev);
|
||||
/* Stub support (drm_stub.h) */
|
||||
extern int drm_setmaster_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
extern int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
extern struct drm_master *drm_get_master(struct drm_minor *minor);
|
||||
extern void drm_put_master(struct drm_master *master);
|
||||
extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
|
||||
|
|
|
@ -76,6 +76,9 @@ static struct drm_ioctl_desc drm_ioctls[] = {
|
|||
DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_getsareactx, DRM_AUTH),
|
||||
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_ROOT_ONLY),
|
||||
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_addctx, DRM_AUTH|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
|
||||
|
|
|
@ -88,6 +88,29 @@ again:
|
|||
return new_id;
|
||||
}
|
||||
|
||||
int drm_setmaster_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
if (file_priv->minor->master && file_priv->minor->master != file_priv->master)
|
||||
return -EINVAL;
|
||||
|
||||
if (!file_priv->master)
|
||||
return -EINVAL;
|
||||
|
||||
if (!file_priv->minor->master && file_priv->minor->master != file_priv->master)
|
||||
file_priv->minor->master = file_priv->master;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv)
|
||||
{
|
||||
if (!file_priv->master)
|
||||
return -EINVAL;
|
||||
file_priv->minor->master = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct drm_master *drm_get_master(struct drm_minor *minor)
|
||||
{
|
||||
struct drm_master *master;
|
||||
|
|
|
@ -1200,6 +1200,9 @@ struct drm_mode_hotplug {
|
|||
#define DRM_IOCTL_SET_SAREA_CTX DRM_IOW( 0x1c, struct drm_ctx_priv_map)
|
||||
#define DRM_IOCTL_GET_SAREA_CTX DRM_IOWR(0x1d, struct drm_ctx_priv_map)
|
||||
|
||||
#define DRM_IOCTL_SET_MASTER DRM_IO(0x1e)
|
||||
#define DRM_IOCTL_DROP_MASTER DRM_IO(0x1f)
|
||||
|
||||
#define DRM_IOCTL_ADD_CTX DRM_IOWR(0x20, struct drm_ctx)
|
||||
#define DRM_IOCTL_RM_CTX DRM_IOWR(0x21, struct drm_ctx)
|
||||
#define DRM_IOCTL_MOD_CTX DRM_IOW( 0x22, struct drm_ctx)
|
||||
|
|
Loading…
Reference in New Issue