2020-06-04 11:12:34 -04:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2020 Red Hat
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License as
|
|
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
* 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include "backends/native/meta-kms-mode-private.h"
|
|
|
|
|
|
|
|
#include "backends/native/meta-kms-impl-device.h"
|
|
|
|
|
|
|
|
struct _MetaKmsMode
|
|
|
|
{
|
|
|
|
MetaKmsImplDevice *impl_device;
|
2020-07-02 05:50:34 -04:00
|
|
|
MetaKmsModeFlag flags;
|
2020-06-04 11:12:34 -04:00
|
|
|
drmModeModeInfo drm_mode;
|
2020-06-04 11:20:36 -04:00
|
|
|
uint32_t blob_id;
|
2020-06-04 11:12:34 -04:00
|
|
|
};
|
|
|
|
|
2020-06-04 11:20:36 -04:00
|
|
|
uint32_t
|
|
|
|
meta_kms_mode_ensure_blob_id (MetaKmsMode *mode,
|
|
|
|
GError **error)
|
|
|
|
{
|
|
|
|
int fd;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
fd = meta_kms_impl_device_get_fd (mode->impl_device);
|
|
|
|
|
|
|
|
ret = drmModeCreatePropertyBlob (fd,
|
|
|
|
&mode->drm_mode,
|
|
|
|
sizeof (mode->drm_mode),
|
|
|
|
&mode->blob_id);
|
|
|
|
if (ret < 0)
|
|
|
|
{
|
|
|
|
g_set_error (error, G_IO_ERROR, g_io_error_from_errno (-ret),
|
|
|
|
"drmModeCreatePropertyBlob: %s",
|
|
|
|
g_strerror (-ret));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return mode->blob_id;
|
|
|
|
}
|
|
|
|
|
2020-07-02 05:51:32 -04:00
|
|
|
const char *
|
|
|
|
meta_kms_mode_get_name (MetaKmsMode *mode)
|
|
|
|
{
|
|
|
|
return mode->drm_mode.name;
|
|
|
|
}
|
|
|
|
|
2020-07-02 05:50:34 -04:00
|
|
|
MetaKmsModeFlag
|
|
|
|
meta_kms_mode_get_flags (MetaKmsMode *mode)
|
|
|
|
{
|
|
|
|
return mode->flags;
|
|
|
|
}
|
|
|
|
|
2020-06-04 11:12:34 -04:00
|
|
|
const drmModeModeInfo *
|
|
|
|
meta_kms_mode_get_drm_mode (MetaKmsMode *mode)
|
|
|
|
{
|
|
|
|
return &mode->drm_mode;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
meta_kms_mode_free (MetaKmsMode *mode)
|
|
|
|
{
|
2020-06-04 11:20:36 -04:00
|
|
|
if (mode->blob_id)
|
|
|
|
{
|
|
|
|
int fd;
|
|
|
|
|
|
|
|
fd = meta_kms_impl_device_get_fd (mode->impl_device);
|
|
|
|
|
|
|
|
drmModeDestroyPropertyBlob (fd, mode->blob_id);
|
|
|
|
}
|
|
|
|
|
2020-06-04 11:12:34 -04:00
|
|
|
g_free (mode);
|
|
|
|
}
|
|
|
|
|
|
|
|
MetaKmsMode *
|
|
|
|
meta_kms_mode_new (MetaKmsImplDevice *impl_device,
|
2020-07-02 05:50:34 -04:00
|
|
|
const drmModeModeInfo *drm_mode,
|
|
|
|
MetaKmsModeFlag flags)
|
2020-06-04 11:12:34 -04:00
|
|
|
{
|
|
|
|
MetaKmsMode *mode;
|
|
|
|
|
|
|
|
mode = g_new0 (MetaKmsMode, 1);
|
|
|
|
mode->impl_device = impl_device;
|
2020-07-02 05:50:34 -04:00
|
|
|
mode->flags = flags;
|
2020-06-04 11:12:34 -04:00
|
|
|
mode->drm_mode = *drm_mode;
|
|
|
|
|
|
|
|
return mode;
|
|
|
|
}
|