update signed/object prop types
Signed-off-by: Rob Clark <robclark@freedesktop.org>main
parent
c2c0346e1f
commit
fb4177046d
|
@ -239,6 +239,21 @@ struct drm_mode_get_connector {
|
|||
#define DRM_MODE_PROP_BLOB (1<<4)
|
||||
#define DRM_MODE_PROP_BITMASK (1<<5) /* bitmask of enumerated types */
|
||||
|
||||
/* non-extended types: legacy bitmask, one bit per type: */
|
||||
#define DRM_MODE_PROP_LEGACY_TYPE ( \
|
||||
DRM_MODE_PROP_RANGE | \
|
||||
DRM_MODE_PROP_ENUM | \
|
||||
DRM_MODE_PROP_BLOB | \
|
||||
DRM_MODE_PROP_BITMASK)
|
||||
|
||||
/* extended-types: rather than continue to consume a bit per type,
|
||||
* grab a chunk of the bits to use as integer type id.
|
||||
*/
|
||||
#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0
|
||||
#define DRM_MODE_PROP_TYPE(n) ((n) << 6)
|
||||
#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1)
|
||||
#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2)
|
||||
|
||||
struct drm_mode_property_enum {
|
||||
__u64 value;
|
||||
char name[DRM_PROP_NAME_LEN];
|
||||
|
|
|
@ -116,6 +116,10 @@ struct device {
|
|||
};
|
||||
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||
static inline int64_t U642I64(uint64_t val)
|
||||
{
|
||||
return (int64_t)*((int64_t *)&val);
|
||||
}
|
||||
|
||||
struct type_name {
|
||||
int type;
|
||||
|
@ -296,32 +300,43 @@ static void dump_prop(struct device *dev, drmModePropertyPtr prop,
|
|||
printf("\t\tflags:");
|
||||
if (prop->flags & DRM_MODE_PROP_PENDING)
|
||||
printf(" pending");
|
||||
if (prop->flags & DRM_MODE_PROP_RANGE)
|
||||
printf(" range");
|
||||
if (prop->flags & DRM_MODE_PROP_IMMUTABLE)
|
||||
printf(" immutable");
|
||||
if (prop->flags & DRM_MODE_PROP_ENUM)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE))
|
||||
printf(" signed range");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE))
|
||||
printf(" range");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM))
|
||||
printf(" enum");
|
||||
if (prop->flags & DRM_MODE_PROP_BITMASK)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK))
|
||||
printf(" bitmask");
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
|
||||
printf(" blob");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_OBJECT))
|
||||
printf(" object");
|
||||
printf("\n");
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_RANGE) {
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_values; i++)
|
||||
printf(" %"PRId64, U642I64(prop->values[i]));
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_values; i++)
|
||||
printf(" %"PRIu64, prop->values[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_ENUM) {
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM)) {
|
||||
printf("\t\tenums:");
|
||||
for (i = 0; i < prop->count_enums; i++)
|
||||
printf(" %s=%llu", prop->enums[i].name,
|
||||
prop->enums[i].value);
|
||||
printf("\n");
|
||||
} else if (prop->flags & DRM_MODE_PROP_BITMASK) {
|
||||
} else if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_enums; i++)
|
||||
printf(" %s=0x%llx", prop->enums[i].name,
|
||||
|
@ -331,7 +346,7 @@ static void dump_prop(struct device *dev, drmModePropertyPtr prop,
|
|||
assert(prop->count_enums == 0);
|
||||
}
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB) {
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) {
|
||||
printf("\t\tblobs:\n");
|
||||
for (i = 0; i < prop->count_blobs; i++)
|
||||
dump_blob(dev, prop->blob_ids[i]);
|
||||
|
@ -341,7 +356,7 @@ static void dump_prop(struct device *dev, drmModePropertyPtr prop,
|
|||
}
|
||||
|
||||
printf("\t\tvalue:");
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
|
||||
dump_blob(dev, value);
|
||||
else
|
||||
printf(" %"PRIu64"\n", value);
|
||||
|
|
|
@ -36,6 +36,10 @@
|
|||
#include "xf86drmMode.h"
|
||||
|
||||
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||
static inline int64_t U642I64(uint64_t val)
|
||||
{
|
||||
return (int64_t)*((int64_t *)&val);
|
||||
}
|
||||
|
||||
int fd;
|
||||
drmModeResPtr res = NULL;
|
||||
|
@ -87,8 +91,10 @@ dump_blob(uint32_t blob_id)
|
|||
drmModePropertyBlobPtr blob;
|
||||
|
||||
blob = drmModeGetPropertyBlob(fd, blob_id);
|
||||
if (!blob)
|
||||
if (!blob) {
|
||||
printf("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
blob_data = blob->data;
|
||||
|
||||
|
@ -121,34 +127,54 @@ dump_prop(uint32_t prop_id, uint64_t value)
|
|||
printf("\t\tflags:");
|
||||
if (prop->flags & DRM_MODE_PROP_PENDING)
|
||||
printf(" pending");
|
||||
if (prop->flags & DRM_MODE_PROP_RANGE)
|
||||
printf(" range");
|
||||
if (prop->flags & DRM_MODE_PROP_IMMUTABLE)
|
||||
printf(" immutable");
|
||||
if (prop->flags & DRM_MODE_PROP_ENUM)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE))
|
||||
printf(" signed range");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE))
|
||||
printf(" range");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM))
|
||||
printf(" enum");
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK))
|
||||
printf(" bitmask");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
|
||||
printf(" blob");
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_OBJECT))
|
||||
printf(" object");
|
||||
printf("\n");
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_RANGE) {
|
||||
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_SIGNED_RANGE)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_values; i++)
|
||||
printf(" %"PRId64, U642I64(prop->values[i]));
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_RANGE)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_values; i++)
|
||||
printf(" %"PRIu64, prop->values[i]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_ENUM) {
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_ENUM)) {
|
||||
printf("\t\tenums:");
|
||||
for (i = 0; i < prop->count_enums; i++)
|
||||
printf(" %s=%llu", prop->enums[i].name,
|
||||
prop->enums[i].value);
|
||||
printf("\n");
|
||||
} else if (drm_property_type_is(prop, DRM_MODE_PROP_BITMASK)) {
|
||||
printf("\t\tvalues:");
|
||||
for (i = 0; i < prop->count_enums; i++)
|
||||
printf(" %s=0x%llx", prop->enums[i].name,
|
||||
(1LL << prop->enums[i].value));
|
||||
printf("\n");
|
||||
} else {
|
||||
assert(prop->count_enums == 0);
|
||||
}
|
||||
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB) {
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB)) {
|
||||
printf("\t\tblobs:\n");
|
||||
for (i = 0; i < prop->count_blobs; i++)
|
||||
dump_blob(prop->blob_ids[i]);
|
||||
|
@ -158,7 +184,7 @@ dump_prop(uint32_t prop_id, uint64_t value)
|
|||
}
|
||||
|
||||
printf("\t\tvalue:");
|
||||
if (prop->flags & DRM_MODE_PROP_BLOB)
|
||||
if (drm_property_type_is(prop, DRM_MODE_PROP_BLOB))
|
||||
dump_blob(value);
|
||||
else
|
||||
printf(" %"PRIu64"\n", value);
|
||||
|
|
|
@ -240,6 +240,15 @@ typedef struct _drmModeProperty {
|
|||
uint32_t *blob_ids; /* store the blob IDs */
|
||||
} drmModePropertyRes, *drmModePropertyPtr;
|
||||
|
||||
static inline int drm_property_type_is(drmModePropertyPtr property,
|
||||
uint32_t type)
|
||||
{
|
||||
/* instanceof for props.. handles extended type vs original types: */
|
||||
if (property->flags & DRM_MODE_PROP_EXTENDED_TYPE)
|
||||
return (property->flags & DRM_MODE_PROP_EXTENDED_TYPE) == type;
|
||||
return property->flags & type;
|
||||
}
|
||||
|
||||
typedef struct _drmModeCrtc {
|
||||
uint32_t crtc_id;
|
||||
uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
|
||||
|
|
Loading…
Reference in New Issue