Commit 1233d1d5 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

tools headers UAPI: Update tools's copy of drm.h headers to pick DRM_IOCTL_MODE_CLOSEFB

Picking the changes from:

  8570c279 ("drm/syncobj: Add deadline support for syncobj waits")
  9724ed6c ("drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT")
  e4d983ac ("drm: introduce DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP")
  d208d875 ("drm: introduce CLOSEFB IOCTL")
  afa5cf31 ("drm/i915/uapi: fix typos/spellos and punctuation")

Addressing these perf build warnings:

  Warning: Kernel ABI header differences:

Now 'perf trace' and other code that might use the
tools/perf/trace/beauty autogenerated tables will be able to translate
this new ioctl command into a string:

  $ tools/perf/trace/beauty/drm_ioctl.sh > before
  $ cp include/uapi/drm/drm.h tools/include/uapi/drm/drm.h
  $ tools/perf/trace/beauty/drm_ioctl.sh > after
  $ diff -u before after
  --- before	2024-01-26 10:54:23.486381862 -0300
  +++ after	2024-01-26 10:54:35.767902442 -0300
  @@ -109,6 +109,7 @@
   	[0xCD] = "SYNCOBJ_TIMELINE_SIGNAL",
   	[0xCE] = "MODE_GETFB2",
   	[0xCF] = "SYNCOBJ_EVENTFD",
  +	[0xD0] = "MODE_CLOSEFB",
   	[DRM_COMMAND_BASE + 0x00] = "I915_INIT",
   	[DRM_COMMAND_BASE + 0x01] = "I915_FLUSH",
   	[DRM_COMMAND_BASE + 0x02] = "I915_FLIP",
  $

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Rob Clark <robdclark@chromium.org>
Cc: Simon Ser <contact@emersion.fr>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>
Link: https://lore.kernel.org/lkml/ZbPIN9Dcc5AM0uxo@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9a8dd2f2
Loading
Loading
Loading
Loading
+71 −1
Original line number Diff line number Diff line
@@ -713,7 +713,8 @@ struct drm_gem_open {
/**
 * DRM_CAP_ASYNC_PAGE_FLIP
 *
 * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC.
 * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for legacy
 * page-flips.
 */
#define DRM_CAP_ASYNC_PAGE_FLIP		0x7
/**
@@ -773,6 +774,13 @@ struct drm_gem_open {
 * :ref:`drm_sync_objects`.
 */
#define DRM_CAP_SYNCOBJ_TIMELINE	0x14
/**
 * DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP
 *
 * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for atomic
 * commits.
 */
#define DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP	0x15

/* DRM_IOCTL_GET_CAP ioctl argument type */
struct drm_get_cap {
@@ -842,6 +850,31 @@ struct drm_get_cap {
 */
#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS	5

/**
 * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
 *
 * Drivers for para-virtualized hardware (e.g. vmwgfx, qxl, virtio and
 * virtualbox) have additional restrictions for cursor planes (thus
 * making cursor planes on those drivers not truly universal,) e.g.
 * they need cursor planes to act like one would expect from a mouse
 * cursor and have correctly set hotspot properties.
 * If this client cap is not set the DRM core will hide cursor plane on
 * those virtualized drivers because not setting it implies that the
 * client is not capable of dealing with those extra restictions.
 * Clients which do set cursor hotspot and treat the cursor plane
 * like a mouse cursor should set this property.
 * The client must enable &DRM_CLIENT_CAP_ATOMIC first.
 *
 * Setting this property on drivers which do not special case
 * cursor planes (i.e. non-virtualized drivers) will return
 * EOPNOTSUPP, which can be used by userspace to gauge
 * requirements of the hardware/drivers they're running on.
 *
 * This capability is always supported for atomic-capable virtualized
 * drivers starting from kernel version 6.6.
 */
#define DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT	6

/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
struct drm_set_client_cap {
	__u64 capability;
@@ -893,6 +926,7 @@ struct drm_syncobj_transfer {
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0)
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1)
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */
#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE (1 << 3) /* set fence deadline to deadline_nsec */
struct drm_syncobj_wait {
	__u64 handles;
	/* absolute timeout */
@@ -901,6 +935,14 @@ struct drm_syncobj_wait {
	__u32 flags;
	__u32 first_signaled; /* only valid when not waiting all */
	__u32 pad;
	/**
	 * @deadline_nsec - fence deadline hint
	 *
	 * Deadline hint, in absolute CLOCK_MONOTONIC, to set on backing
	 * fence(s) if the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE flag is
	 * set.
	 */
	__u64 deadline_nsec;
};

struct drm_syncobj_timeline_wait {
@@ -913,6 +955,14 @@ struct drm_syncobj_timeline_wait {
	__u32 flags;
	__u32 first_signaled; /* only valid when not waiting all */
	__u32 pad;
	/**
	 * @deadline_nsec - fence deadline hint
	 *
	 * Deadline hint, in absolute CLOCK_MONOTONIC, to set on backing
	 * fence(s) if the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE flag is
	 * set.
	 */
	__u64 deadline_nsec;
};

/**
@@ -1218,6 +1268,26 @@ extern "C" {

#define DRM_IOCTL_SYNCOBJ_EVENTFD	DRM_IOWR(0xCF, struct drm_syncobj_eventfd)

/**
 * DRM_IOCTL_MODE_CLOSEFB - Close a framebuffer.
 *
 * This closes a framebuffer previously added via ADDFB/ADDFB2. The IOCTL
 * argument is a framebuffer object ID.
 *
 * This IOCTL is similar to &DRM_IOCTL_MODE_RMFB, except it doesn't disable
 * planes and CRTCs. As long as the framebuffer is used by a plane, it's kept
 * alive. When the plane no longer uses the framebuffer (because the
 * framebuffer is replaced with another one, or the plane is disabled), the
 * framebuffer is cleaned up.
 *
 * This is useful to implement flicker-free transitions between two processes.
 *
 * Depending on the threat model, user-space may want to ensure that the
 * framebuffer doesn't expose any sensitive user information: closed
 * framebuffers attached to a plane can be read back by the next DRM master.
 */
#define DRM_IOCTL_MODE_CLOSEFB		DRM_IOWR(0xD0, struct drm_mode_closefb)

/*
 * Device specific ioctls should only be in their respective headers
 * The device specific ioctl range is from 0x40 to 0x9f.
+6 −6
Original line number Diff line number Diff line
@@ -693,7 +693,7 @@ typedef struct drm_i915_irq_wait {
#define I915_PARAM_HAS_EXEC_FENCE	 44

/* Query whether DRM_I915_GEM_EXECBUFFER2 supports the ability to capture
 * user specified bufffers for post-mortem debugging of GPU hangs. See
 * user-specified buffers for post-mortem debugging of GPU hangs. See
 * EXEC_OBJECT_CAPTURE.
 */
#define I915_PARAM_HAS_EXEC_CAPTURE	 45
@@ -1606,7 +1606,7 @@ struct drm_i915_gem_busy {
	 * is accurate.
	 *
	 * The returned dword is split into two fields to indicate both
	 * the engine classess on which the object is being read, and the
	 * the engine classes on which the object is being read, and the
	 * engine class on which it is currently being written (if any).
	 *
	 * The low word (bits 0:15) indicate if the object is being written
@@ -1815,7 +1815,7 @@ struct drm_i915_gem_madvise {
	__u32 handle;

	/* Advice: either the buffer will be needed again in the near future,
	 *         or wont be and could be discarded under memory pressure.
	 *         or won't be and could be discarded under memory pressure.
	 */
	__u32 madv;

@@ -3256,7 +3256,7 @@ struct drm_i915_query_topology_info {
 * 	// Now that we allocated the required number of bytes, we call the ioctl
 * 	// again, this time with the data_ptr pointing to our newly allocated
 * 	// blob, which the kernel can then populate with info on all engines.
 * 	item.data_ptr = (uintptr_t)&info,
 *	item.data_ptr = (uintptr_t)&info;
 *
 * 	err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
 * 	if (err) ...
@@ -3286,7 +3286,7 @@ struct drm_i915_query_topology_info {
/**
 * struct drm_i915_engine_info
 *
 * Describes one engine and it's capabilities as known to the driver.
 * Describes one engine and its capabilities as known to the driver.
 */
struct drm_i915_engine_info {
	/** @engine: Engine class and instance. */