From patchwork Wed Jan 10 06:05:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 124014 Delivered-To: patches@linaro.org Received: by 10.140.22.227 with SMTP id 90csp4884373qgn; Tue, 9 Jan 2018 22:05:54 -0800 (PST) X-Received: by 10.98.64.219 with SMTP id f88mr16108005pfd.197.1515564354844; Tue, 09 Jan 2018 22:05:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515564354; cv=none; d=google.com; s=arc-20160816; b=uaDxWTtSXSFdOZwTk6r+fLmHrXKsPBRNhN1qkx38lz4PSDzn3jN1mk/BrRrzU+qaPZ u3jyP2XxotvnpiSUspptikrzboDYscT8/qSxm0TSX6mnYkzZjnIyFPArOAshZrtxafxB 1Ue8ToLuPPevFq4y8HFuV+RjpFk3q+fZUpN2TEkDmjR9lhdZioFVA8VFT8F0cRTFKSAV kjCLnTZhdOak8j3eUXFGny0KOUbYD3vhAua7/DnEZgVPnUKheEM41Any2K9d8HT0RqFL rU2C2zrs+YtGk8WbEQreiqvFj7EWCu8oC+zwEGcPGsLIVgLu9z40de9yTNbrJdmbIhdZ jHGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=7aQ7ZT/kzFtdbQcbOcz3Nr5RReLTPtiEetYq6eLN9+s=; b=K+g6/bNtKvZurvhHuN1GkqdJ0lA8d7O/Jb+C0TMSbDzkfbfp/JEXgIETpLD4LdQ577 I7YwiLqX8KP7S3WzWDtBky35cLV/IsNfNCTTKfHq6YhmXG0nBV8gnphqL6wEmE+zlOK9 dsy6HV3bwlF/FOOQ3/tsipcopSPgJYmc/fhHCiywjmy8W9FNTPECm07K3RwWgIJv0+jp /qLcosAgHO/2yX6+Q9Yez1df5vow6qXVZkfExsXvaynZK+T/fpU99+y5uZ1H1arUTQyr Sy57bI5v4XziDfq0/Ph8/GajaDPZId8845wOVjkDk4KaPysFXc5M8j/Kj95hylu16zrF HOAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jO98w1HO; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v24sor4055994pfi.142.2018.01.09.22.05.54 for (Google Transport Security); Tue, 09 Jan 2018 22:05:54 -0800 (PST) Received-SPF: pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jO98w1HO; spf=pass (google.com: domain of john.stultz@linaro.org designates 209.85.220.65 as permitted sender) smtp.mailfrom=john.stultz@linaro.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7aQ7ZT/kzFtdbQcbOcz3Nr5RReLTPtiEetYq6eLN9+s=; b=jO98w1HO5pBfBJuPewhmh0WTrx0oFmkTZaIt/pSAb3dqmA4t0ruYsAxKeaO/2pN1jT LAJW5F+A9RCt4iWy0i07wzlV4CaBAXNRQdc9KPx9iUwHIqXSn4orXnske6ufifFSioIa W8Vs75PJNAnjMzsTbqwIbml3qa42xdpqKIejM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7aQ7ZT/kzFtdbQcbOcz3Nr5RReLTPtiEetYq6eLN9+s=; b=Q4Rrsn+u7oMik/692YHbXEI2l1IlAPmwQQufm/DkXnsmonpyavDiYu97K/Vm4NfFf5 ca5o6zhVL0omWelo+p27tDuLkuMZNuIdGx2aG0K67r/jlCbmDrp2fdYEayCAGg5CnpZI ThswmOtIquxNEUR12UIuPCIpIPeN7OEnHLa7Y++42INrbw2OJwyqkkX/DgwJTv2FSj9i CWzGp2QyHmZopFUKPxGnONQbF3LEdsK30WiejTgEc97NfcghqhnanKBwq4pO87p2WXM7 zHxVncodSGYmfgow32/FR3lqt/tHSspDyCjDt20R6yM2esK1JUxI8owKt9Ivmxb2S0tv H8fQ== X-Gm-Message-State: AKGB3mKcORSXEzkRbgpSQamvirJyfM2uzCNVDM4Z3EukLEvBX5z7jUVt JSbR3yEL9mr3KB+z+PwtRBaG1jOJk095/Q== X-Google-Smtp-Source: ACJfBosJcyxVumyogBeb+OeNy9SP6gnT+Q8PTEg8Q+3qLWy12mY1YkPwxY3qlVI6JToI9Gzg3zqMdA== X-Received: by 10.98.90.195 with SMTP id o186mr15930629pfb.121.1515564354448; Tue, 09 Jan 2018 22:05:54 -0800 (PST) Return-Path: Received: from localhost.localdomain ([2601:1c2:600:5100:4e72:b9ff:fe99:466a]) by smtp.gmail.com with ESMTPSA id g8sm25538595pgs.55.2018.01.09.22.05.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 09 Jan 2018 22:05:53 -0800 (PST) From: John Stultz To: dri-devel@lists.freedesktop.org Cc: Rob Herring , Marissa Wall , Sean Paul , Dmitry Shmidt , Robert Foss , Matt Szczesiak , Liviu Dudau , David Hanna , John Stultz Subject: [RFC][PATCH 1/5] drm_hwcomposer: provide a common gralloc handle definition Date: Tue, 9 Jan 2018 22:05:41 -0800 Message-Id: <1515564345-1339-2-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515564345-1339-1-git-send-email-john.stultz@linaro.org> References: <1515564345-1339-1-git-send-email-john.stultz@linaro.org> From: Rob Herring EGL, gralloc, and HWC must all have a common definition of fd's and int's in native_handle_t to share the fd and width, height, format, etc. of a dmabuf. Move the definition into HWC so we aren't dependent on a specific gralloc implementation and so we don't have to create an importer just for different native_handle_t layouts. This will allow supporting multiple gralloc implementations that conform to this layout. For now, this is aligned with gbm_gralloc's struct. Once we change gbm_gralloc and mesa to point to this copy, we can make modifications to the struct. Change-Id: I0e0e9994c7a13e6c47f00a70d13cd2ef9b1543d3 Cc: Marissa Wall Cc: Sean Paul Cc: Dmitry Shmidt Cc: Robert Foss Cc: Matt Szczesiak Cc: Liviu Dudau Cc: David Hanna Signed-off-by: Rob Herring [jstultz: This patch is important to be able to build AOSP without having to include the gbm_gralloc project.] Signed-off-by: John Stultz --- Android.mk | 1 - gralloc_drm_handle.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 gralloc_drm_handle.h -- 2.7.4 diff --git a/Android.mk b/Android.mk index 8b11e37..ee5b8bf 100644 --- a/Android.mk +++ b/Android.mk @@ -47,7 +47,6 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_STATIC_LIBRARIES := libdrmhwc_utils LOCAL_C_INCLUDES := \ - external/drm_gralloc \ system/core/libsync LOCAL_SRC_FILES := \ diff --git a/gralloc_drm_handle.h b/gralloc_drm_handle.h new file mode 100644 index 0000000..e2f35dd --- /dev/null +++ b/gralloc_drm_handle.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2010-2011 Chia-I Wu + * Copyright (C) 2010-2011 LunarG Inc. + * Copyright (C) 2016-2017 Linaro, Ltd., Rob Herring + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef _GRALLOC_DRM_HANDLE_H_ +#define _GRALLOC_DRM_HANDLE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct gralloc_drm_handle_t { + native_handle_t base; + + /* file descriptors */ + int prime_fd; + + /* integers */ + int magic; + + int width; + int height; + int format; + int usage; + + int name; /* the name of the bo */ + int stride; /* the stride in bytes */ + int data_owner; /* owner of data (for validation) */ + + uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ + union { + void *data; /* private pointer for gralloc */ + uint64_t reserved; + } __attribute__((aligned(8))); +}; +#define GRALLOC_HANDLE_MAGIC 0x5f47424d +#define GRALLOC_HANDLE_NUM_FDS 1 +#define GRALLOC_HANDLE_NUM_INTS ( \ + ((sizeof(struct gralloc_drm_handle_t) - sizeof(native_handle_t))/sizeof(int)) \ + - GRALLOC_HANDLE_NUM_FDS) + +static inline struct gralloc_drm_handle_t *gralloc_drm_handle(buffer_handle_t _handle) +{ + struct gralloc_drm_handle_t *handle = + (struct gralloc_drm_handle_t *) _handle; + + if (handle && (handle->base.version != sizeof(handle->base) || + handle->base.numInts != GRALLOC_HANDLE_NUM_INTS || + handle->base.numFds != GRALLOC_HANDLE_NUM_FDS || + handle->magic != GRALLOC_HANDLE_MAGIC)) + return NULL; + + return handle; +} + +static inline int gralloc_drm_get_prime_fd(buffer_handle_t _handle) +{ + struct gralloc_drm_handle_t *handle = gralloc_drm_handle(_handle); + return (handle) ? handle->prime_fd : -1; +} + +#ifdef __cplusplus +} +#endif +#endif /* _GRALLOC_DRM_HANDLE_H_ */