From 44af059741593587f1c500b00e7b07c5d7240c61 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 17 Jun 2019 17:05:01 +0300 Subject: lib/igt_edid: add edid_get_size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a simple helper to get the size in bytes of an arbitrary EDID. Signed-off-by: Simon Ser Reviewed-by: Ville Syrjälä --- lib/igt_chamelium.c | 6 ++---- lib/igt_edid.c | 10 ++++++++++ lib/igt_edid.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c index b83ff395..966d78dc 100644 --- a/lib/igt_chamelium.c +++ b/lib/igt_chamelium.c @@ -538,12 +538,10 @@ struct chamelium_edid *chamelium_new_edid(struct chamelium *chamelium, xmlrpc_value *res; struct chamelium_edid *chamelium_edid; int edid_id; - struct edid *edid = (struct edid *) raw_edid; - size_t edid_size = sizeof(struct edid) + - edid->extensions_len * sizeof(struct edid_ext); + const struct edid *edid = (struct edid *) raw_edid; res = chamelium_rpc(chamelium, NULL, "CreateEdid", "(6)", - raw_edid, edid_size); + raw_edid, edid_get_size(edid)); xmlrpc_read_int(&chamelium->env, res, &edid_id); xmlrpc_DECREF(res); diff --git a/lib/igt_edid.c b/lib/igt_edid.c index e71136f4..6cc5e7dd 100644 --- a/lib/igt_edid.c +++ b/lib/igt_edid.c @@ -274,6 +274,16 @@ void edid_update_checksum(struct edid *edid) sizeof(struct edid)); } +/** + * edid_get_size: return the size of the EDID block in bytes including EDID + * extensions, if any. + */ +size_t edid_get_size(const struct edid *edid) +{ + return sizeof(struct edid) + + edid->extensions_len * sizeof(struct edid_ext); +} + /** * cea_sad_init_pcm: * @channels: the number of supported channels (max. 8) diff --git a/lib/igt_edid.h b/lib/igt_edid.h index 00596ef1..8d8e30ec 100644 --- a/lib/igt_edid.h +++ b/lib/igt_edid.h @@ -297,6 +297,7 @@ struct edid { void edid_init(struct edid *edid); void edid_init_with_mode(struct edid *edid, drmModeModeInfo *mode); void edid_update_checksum(struct edid *edid); +size_t edid_get_size(const struct edid *edid); void detailed_timing_set_mode(struct detailed_timing *dt, drmModeModeInfo *mode, int width_mm, int height_mm); void detailed_timing_set_monitor_range_mode(struct detailed_timing *dt, -- cgit v1.2.3