include/drm-uapi: bump headers
From drm-next at the following commit: commit 2a7005c8a3982ba27fab237d85c27da446484e9c (HEAD) Merge: 0666cba1f5b2b 47c65b3853f88 Author: Dave Airlie <airlied@redhat.com> Date: Fri Jun 11 13:34:42 2021 +1000 Merge tag 'drm-intel-gt-next-2021-06-10' of... Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5599>
This commit is contained in:
parent
2fe2eb1911
commit
8dc3c91a5c
|
@ -13,9 +13,9 @@ $ make headers_install INSTALL_HDR_PATH=/path/to/install
|
|||
|
||||
The last update was done at the following kernel commit :
|
||||
|
||||
commit 3393649977f9a8847c659e282ea290d4b703295c
|
||||
Merge: cbc2e82932ae ced026e959be
|
||||
commit 2a7005c8a3982ba27fab237d85c27da446484e9c (HEAD)
|
||||
Merge: 0666cba1f5b2b 47c65b3853f88
|
||||
Author: Dave Airlie <airlied@redhat.com>
|
||||
Date: Fri Aug 28 13:51:30 2020 +1000
|
||||
Date: Fri Jun 11 13:34:42 2021 +1000
|
||||
|
||||
Merge tag 'drm-intel-next-2020-08-24-1' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
|
||||
Merge tag 'drm-intel-gt-next-2021-06-10' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
|
||||
|
|
|
@ -116,8 +116,6 @@ extern "C" {
|
|||
#define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2)
|
||||
/* Flag that the memory should be in VRAM and cleared */
|
||||
#define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3)
|
||||
/* Flag that create shadow bo(GTT) while allocating vram bo */
|
||||
#define AMDGPU_GEM_CREATE_SHADOW (1 << 4)
|
||||
/* Flag that allocating the BO should use linear VRAM */
|
||||
#define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5)
|
||||
/* Flag that BO is always valid in this VM */
|
||||
|
@ -138,6 +136,10 @@ extern "C" {
|
|||
* accessing it with various hw blocks
|
||||
*/
|
||||
#define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10)
|
||||
/* Flag that BO will be used only in preemptible context, which does
|
||||
* not require GTT memory accounting
|
||||
*/
|
||||
#define AMDGPU_GEM_CREATE_PREEMPTIBLE (1 << 11)
|
||||
|
||||
struct drm_amdgpu_gem_create_in {
|
||||
/** the requested memory size */
|
||||
|
@ -755,6 +757,8 @@ struct drm_amdgpu_cs_chunk_data {
|
|||
#define AMDGPU_INFO_VBIOS_SIZE 0x1
|
||||
/* Subquery id: Query vbios image */
|
||||
#define AMDGPU_INFO_VBIOS_IMAGE 0x2
|
||||
/* Subquery id: Query vbios info */
|
||||
#define AMDGPU_INFO_VBIOS_INFO 0x3
|
||||
/* Query UVD handles */
|
||||
#define AMDGPU_INFO_NUM_HANDLES 0x1C
|
||||
/* Query sensor related information */
|
||||
|
@ -948,6 +952,15 @@ struct drm_amdgpu_info_firmware {
|
|||
__u32 feature;
|
||||
};
|
||||
|
||||
struct drm_amdgpu_info_vbios {
|
||||
__u8 name[64];
|
||||
__u8 vbios_pn[64];
|
||||
__u32 version;
|
||||
__u32 pad;
|
||||
__u8 vbios_ver_str[32];
|
||||
__u8 date[32];
|
||||
};
|
||||
|
||||
#define AMDGPU_VRAM_TYPE_UNKNOWN 0
|
||||
#define AMDGPU_VRAM_TYPE_GDDR1 1
|
||||
#define AMDGPU_VRAM_TYPE_DDR2 2
|
||||
|
@ -1121,6 +1134,7 @@ struct drm_amdgpu_info_video_caps {
|
|||
#define AMDGPU_FAMILY_RV 142 /* Raven */
|
||||
#define AMDGPU_FAMILY_NV 143 /* Navi10 */
|
||||
#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */
|
||||
#define AMDGPU_FAMILY_YC 146 /* Yellow Carp */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
/**
|
||||
* \file drm.h
|
||||
/*
|
||||
* Header for the Direct Rendering Manager
|
||||
*
|
||||
* \author Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Author: Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
*
|
||||
* \par Acknowledgments:
|
||||
* Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
|
||||
* Acknowledgments:
|
||||
* Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic cmpxchg.
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -79,7 +78,7 @@ typedef unsigned int drm_context_t;
|
|||
typedef unsigned int drm_drawable_t;
|
||||
typedef unsigned int drm_magic_t;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Cliprect.
|
||||
*
|
||||
* \warning: If you change this structure, make sure you change
|
||||
|
@ -95,7 +94,7 @@ struct drm_clip_rect {
|
|||
unsigned short y2;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Drawable information.
|
||||
*/
|
||||
struct drm_drawable_info {
|
||||
|
@ -103,7 +102,7 @@ struct drm_drawable_info {
|
|||
struct drm_clip_rect *rects;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Texture region,
|
||||
*/
|
||||
struct drm_tex_region {
|
||||
|
@ -114,7 +113,7 @@ struct drm_tex_region {
|
|||
unsigned int age;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Hardware lock.
|
||||
*
|
||||
* The lock structure is a simple cache-line aligned integer. To avoid
|
||||
|
@ -126,7 +125,7 @@ struct drm_hw_lock {
|
|||
char padding[60]; /**< Pad to cache line */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_VERSION ioctl argument type.
|
||||
*
|
||||
* \sa drmGetVersion().
|
||||
|
@ -143,7 +142,7 @@ struct drm_version {
|
|||
char *desc; /**< User-space buffer to hold desc */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_GET_UNIQUE ioctl argument type.
|
||||
*
|
||||
* \sa drmGetBusid() and drmSetBusId().
|
||||
|
@ -162,7 +161,7 @@ struct drm_block {
|
|||
int unused;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_CONTROL ioctl argument type.
|
||||
*
|
||||
* \sa drmCtlInstHandler() and drmCtlUninstHandler().
|
||||
|
@ -177,7 +176,7 @@ struct drm_control {
|
|||
int irq;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Type of memory to map.
|
||||
*/
|
||||
enum drm_map_type {
|
||||
|
@ -189,7 +188,7 @@ enum drm_map_type {
|
|||
_DRM_CONSISTENT = 5 /**< Consistent memory for PCI DMA */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Memory mapping flags.
|
||||
*/
|
||||
enum drm_map_flags {
|
||||
|
@ -208,7 +207,7 @@ struct drm_ctx_priv_map {
|
|||
void *handle; /**< Handle of map */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
|
||||
* argument type.
|
||||
*
|
||||
|
@ -225,7 +224,7 @@ struct drm_map {
|
|||
/* Private data */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_GET_CLIENT ioctl argument type.
|
||||
*/
|
||||
struct drm_client {
|
||||
|
@ -257,7 +256,7 @@ enum drm_stat_type {
|
|||
/* Add to the *END* of the list */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_GET_STATS ioctl argument type.
|
||||
*/
|
||||
struct drm_stats {
|
||||
|
@ -268,7 +267,7 @@ struct drm_stats {
|
|||
} data[15];
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Hardware locking flags.
|
||||
*/
|
||||
enum drm_lock_flags {
|
||||
|
@ -283,7 +282,7 @@ enum drm_lock_flags {
|
|||
_DRM_HALT_CUR_QUEUES = 0x20 /**< Halt all current queues */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
|
||||
*
|
||||
* \sa drmGetLock() and drmUnlock().
|
||||
|
@ -293,7 +292,7 @@ struct drm_lock {
|
|||
enum drm_lock_flags flags;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DMA flags
|
||||
*
|
||||
* \warning
|
||||
|
@ -322,7 +321,7 @@ enum drm_dma_flags {
|
|||
_DRM_DMA_LARGER_OK = 0x40 /**< Larger-than-requested buffers OK */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
|
||||
*
|
||||
* \sa drmAddBufs().
|
||||
|
@ -345,7 +344,7 @@ struct drm_buf_desc {
|
|||
*/
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_INFO_BUFS ioctl argument type.
|
||||
*/
|
||||
struct drm_buf_info {
|
||||
|
@ -353,7 +352,7 @@ struct drm_buf_info {
|
|||
struct drm_buf_desc *list;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_FREE_BUFS ioctl argument type.
|
||||
*/
|
||||
struct drm_buf_free {
|
||||
|
@ -361,7 +360,7 @@ struct drm_buf_free {
|
|||
int *list;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Buffer information
|
||||
*
|
||||
* \sa drm_buf_map.
|
||||
|
@ -373,7 +372,7 @@ struct drm_buf_pub {
|
|||
void *address; /**< Address of buffer */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_MAP_BUFS ioctl argument type.
|
||||
*/
|
||||
struct drm_buf_map {
|
||||
|
@ -386,7 +385,7 @@ struct drm_buf_map {
|
|||
struct drm_buf_pub *list; /**< Buffer information */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_DMA ioctl argument type.
|
||||
*
|
||||
* Indices here refer to the offset into the buffer list in drm_buf_get.
|
||||
|
@ -411,7 +410,7 @@ enum drm_ctx_flags {
|
|||
_DRM_CONTEXT_2DONLY = 0x02
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_ADD_CTX ioctl argument type.
|
||||
*
|
||||
* \sa drmCreateContext() and drmDestroyContext().
|
||||
|
@ -421,7 +420,7 @@ struct drm_ctx {
|
|||
enum drm_ctx_flags flags;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_RES_CTX ioctl argument type.
|
||||
*/
|
||||
struct drm_ctx_res {
|
||||
|
@ -429,14 +428,14 @@ struct drm_ctx_res {
|
|||
struct drm_ctx *contexts;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
|
||||
*/
|
||||
struct drm_draw {
|
||||
drm_drawable_t handle;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_UPDATE_DRAW ioctl argument type.
|
||||
*/
|
||||
typedef enum {
|
||||
|
@ -450,14 +449,14 @@ struct drm_update_draw {
|
|||
unsigned long long data;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
|
||||
*/
|
||||
struct drm_auth {
|
||||
drm_magic_t magic;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_IRQ_BUSID ioctl argument type.
|
||||
*
|
||||
* \sa drmGetInterruptFromBusID().
|
||||
|
@ -499,7 +498,7 @@ struct drm_wait_vblank_reply {
|
|||
long tval_usec;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_WAIT_VBLANK ioctl argument type.
|
||||
*
|
||||
* \sa drmWaitVBlank().
|
||||
|
@ -512,7 +511,7 @@ union drm_wait_vblank {
|
|||
#define _DRM_PRE_MODESET 1
|
||||
#define _DRM_POST_MODESET 2
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_MODESET_CTL ioctl argument type
|
||||
*
|
||||
* \sa drmModesetCtl().
|
||||
|
@ -522,7 +521,7 @@ struct drm_modeset_ctl {
|
|||
__u32 cmd;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_AGP_ENABLE ioctl argument type.
|
||||
*
|
||||
* \sa drmAgpEnable().
|
||||
|
@ -531,7 +530,7 @@ struct drm_agp_mode {
|
|||
unsigned long mode; /**< AGP mode */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
|
||||
*
|
||||
* \sa drmAgpAlloc() and drmAgpFree().
|
||||
|
@ -543,7 +542,7 @@ struct drm_agp_buffer {
|
|||
unsigned long physical; /**< Physical used by i810 */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
|
||||
*
|
||||
* \sa drmAgpBind() and drmAgpUnbind().
|
||||
|
@ -553,7 +552,7 @@ struct drm_agp_binding {
|
|||
unsigned long offset; /**< In bytes -- will round to page boundary */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_AGP_INFO ioctl argument type.
|
||||
*
|
||||
* \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
|
||||
|
@ -574,7 +573,7 @@ struct drm_agp_info {
|
|||
unsigned short id_device;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_SG_ALLOC ioctl argument type.
|
||||
*/
|
||||
struct drm_scatter_gather {
|
||||
|
@ -582,7 +581,7 @@ struct drm_scatter_gather {
|
|||
unsigned long handle; /**< Used for mapping / unmapping */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* DRM_IOCTL_SET_VERSION ioctl argument type.
|
||||
*/
|
||||
struct drm_set_version {
|
||||
|
@ -592,14 +591,14 @@ struct drm_set_version {
|
|||
int drm_dd_minor;
|
||||
};
|
||||
|
||||
/** DRM_IOCTL_GEM_CLOSE ioctl argument type */
|
||||
/* DRM_IOCTL_GEM_CLOSE ioctl argument type */
|
||||
struct drm_gem_close {
|
||||
/** Handle of the object to be closed. */
|
||||
__u32 handle;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
/** DRM_IOCTL_GEM_FLINK ioctl argument type */
|
||||
/* DRM_IOCTL_GEM_FLINK ioctl argument type */
|
||||
struct drm_gem_flink {
|
||||
/** Handle for the object being named */
|
||||
__u32 handle;
|
||||
|
@ -608,7 +607,7 @@ struct drm_gem_flink {
|
|||
__u32 name;
|
||||
};
|
||||
|
||||
/** DRM_IOCTL_GEM_OPEN ioctl argument type */
|
||||
/* DRM_IOCTL_GEM_OPEN ioctl argument type */
|
||||
struct drm_gem_open {
|
||||
/** Name of object being opened */
|
||||
__u32 name;
|
||||
|
@ -620,33 +619,150 @@ struct drm_gem_open {
|
|||
__u64 size;
|
||||
};
|
||||
|
||||
/**
|
||||
* DRM_CAP_DUMB_BUFFER
|
||||
*
|
||||
* If set to 1, the driver supports creating dumb buffers via the
|
||||
* &DRM_IOCTL_MODE_CREATE_DUMB ioctl.
|
||||
*/
|
||||
#define DRM_CAP_DUMB_BUFFER 0x1
|
||||
/**
|
||||
* DRM_CAP_VBLANK_HIGH_CRTC
|
||||
*
|
||||
* If set to 1, the kernel supports specifying a CRTC index in the high bits of
|
||||
* &drm_wait_vblank_request.type.
|
||||
*
|
||||
* Starting kernel version 2.6.39, this capability is always set to 1.
|
||||
*/
|
||||
#define DRM_CAP_VBLANK_HIGH_CRTC 0x2
|
||||
/**
|
||||
* DRM_CAP_DUMB_PREFERRED_DEPTH
|
||||
*
|
||||
* The preferred bit depth for dumb buffers.
|
||||
*
|
||||
* The bit depth is the number of bits used to indicate the color of a single
|
||||
* pixel excluding any padding. This is different from the number of bits per
|
||||
* pixel. For instance, XRGB8888 has a bit depth of 24 but has 32 bits per
|
||||
* pixel.
|
||||
*
|
||||
* Note that this preference only applies to dumb buffers, it's irrelevant for
|
||||
* other types of buffers.
|
||||
*/
|
||||
#define DRM_CAP_DUMB_PREFERRED_DEPTH 0x3
|
||||
/**
|
||||
* DRM_CAP_DUMB_PREFER_SHADOW
|
||||
*
|
||||
* If set to 1, the driver prefers userspace to render to a shadow buffer
|
||||
* instead of directly rendering to a dumb buffer. For best speed, userspace
|
||||
* should do streaming ordered memory copies into the dumb buffer and never
|
||||
* read from it.
|
||||
*
|
||||
* Note that this preference only applies to dumb buffers, it's irrelevant for
|
||||
* other types of buffers.
|
||||
*/
|
||||
#define DRM_CAP_DUMB_PREFER_SHADOW 0x4
|
||||
/**
|
||||
* DRM_CAP_PRIME
|
||||
*
|
||||
* Bitfield of supported PRIME sharing capabilities. See &DRM_PRIME_CAP_IMPORT
|
||||
* and &DRM_PRIME_CAP_EXPORT.
|
||||
*
|
||||
* PRIME buffers are exposed as dma-buf file descriptors. See
|
||||
* Documentation/gpu/drm-mm.rst, section "PRIME Buffer Sharing".
|
||||
*/
|
||||
#define DRM_CAP_PRIME 0x5
|
||||
/**
|
||||
* DRM_PRIME_CAP_IMPORT
|
||||
*
|
||||
* If this bit is set in &DRM_CAP_PRIME, the driver supports importing PRIME
|
||||
* buffers via the &DRM_IOCTL_PRIME_FD_TO_HANDLE ioctl.
|
||||
*/
|
||||
#define DRM_PRIME_CAP_IMPORT 0x1
|
||||
/**
|
||||
* DRM_PRIME_CAP_EXPORT
|
||||
*
|
||||
* If this bit is set in &DRM_CAP_PRIME, the driver supports exporting PRIME
|
||||
* buffers via the &DRM_IOCTL_PRIME_HANDLE_TO_FD ioctl.
|
||||
*/
|
||||
#define DRM_PRIME_CAP_EXPORT 0x2
|
||||
/**
|
||||
* DRM_CAP_TIMESTAMP_MONOTONIC
|
||||
*
|
||||
* If set to 0, the kernel will report timestamps with ``CLOCK_REALTIME`` in
|
||||
* struct drm_event_vblank. If set to 1, the kernel will report timestamps with
|
||||
* ``CLOCK_MONOTONIC``. See ``clock_gettime(2)`` for the definition of these
|
||||
* clocks.
|
||||
*
|
||||
* Starting from kernel version 2.6.39, the default value for this capability
|
||||
* is 1. Starting kernel version 4.15, this capability is always set to 1.
|
||||
*/
|
||||
#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
|
||||
/**
|
||||
* DRM_CAP_ASYNC_PAGE_FLIP
|
||||
*
|
||||
* If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC.
|
||||
*/
|
||||
#define DRM_CAP_ASYNC_PAGE_FLIP 0x7
|
||||
/*
|
||||
* The CURSOR_WIDTH and CURSOR_HEIGHT capabilities return a valid widthxheight
|
||||
* combination for the hardware cursor. The intention is that a hardware
|
||||
* agnostic userspace can query a cursor plane size to use.
|
||||
/**
|
||||
* DRM_CAP_CURSOR_WIDTH
|
||||
*
|
||||
* The ``CURSOR_WIDTH`` and ``CURSOR_HEIGHT`` capabilities return a valid
|
||||
* width x height combination for the hardware cursor. The intention is that a
|
||||
* hardware agnostic userspace can query a cursor plane size to use.
|
||||
*
|
||||
* Note that the cross-driver contract is to merely return a valid size;
|
||||
* drivers are free to attach another meaning on top, eg. i915 returns the
|
||||
* maximum plane size.
|
||||
*/
|
||||
#define DRM_CAP_CURSOR_WIDTH 0x8
|
||||
/**
|
||||
* DRM_CAP_CURSOR_HEIGHT
|
||||
*
|
||||
* See &DRM_CAP_CURSOR_WIDTH.
|
||||
*/
|
||||
#define DRM_CAP_CURSOR_HEIGHT 0x9
|
||||
/**
|
||||
* DRM_CAP_ADDFB2_MODIFIERS
|
||||
*
|
||||
* If set to 1, the driver supports supplying modifiers in the
|
||||
* &DRM_IOCTL_MODE_ADDFB2 ioctl.
|
||||
*/
|
||||
#define DRM_CAP_ADDFB2_MODIFIERS 0x10
|
||||
/**
|
||||
* DRM_CAP_PAGE_FLIP_TARGET
|
||||
*
|
||||
* If set to 1, the driver supports the &DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE and
|
||||
* &DRM_MODE_PAGE_FLIP_TARGET_RELATIVE flags in
|
||||
* &drm_mode_crtc_page_flip_target.flags for the &DRM_IOCTL_MODE_PAGE_FLIP
|
||||
* ioctl.
|
||||
*/
|
||||
#define DRM_CAP_PAGE_FLIP_TARGET 0x11
|
||||
/**
|
||||
* DRM_CAP_CRTC_IN_VBLANK_EVENT
|
||||
*
|
||||
* If set to 1, the kernel supports reporting the CRTC ID in
|
||||
* &drm_event_vblank.crtc_id for the &DRM_EVENT_VBLANK and
|
||||
* &DRM_EVENT_FLIP_COMPLETE events.
|
||||
*
|
||||
* Starting kernel version 4.12, this capability is always set to 1.
|
||||
*/
|
||||
#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12
|
||||
/**
|
||||
* DRM_CAP_SYNCOBJ
|
||||
*
|
||||
* If set to 1, the driver supports sync objects. See
|
||||
* Documentation/gpu/drm-mm.rst, section "DRM Sync Objects".
|
||||
*/
|
||||
#define DRM_CAP_SYNCOBJ 0x13
|
||||
/**
|
||||
* DRM_CAP_SYNCOBJ_TIMELINE
|
||||
*
|
||||
* If set to 1, the driver supports timeline operations on sync objects. See
|
||||
* Documentation/gpu/drm-mm.rst, section "DRM Sync Objects".
|
||||
*/
|
||||
#define DRM_CAP_SYNCOBJ_TIMELINE 0x14
|
||||
|
||||
/** DRM_IOCTL_GET_CAP ioctl argument type */
|
||||
/* DRM_IOCTL_GET_CAP ioctl argument type */
|
||||
struct drm_get_cap {
|
||||
__u64 capability;
|
||||
__u64 value;
|
||||
|
@ -655,9 +771,12 @@ struct drm_get_cap {
|
|||
/**
|
||||
* DRM_CLIENT_CAP_STEREO_3D
|
||||
*
|
||||
* if set to 1, the DRM core will expose the stereo 3D capabilities of the
|
||||
* If set to 1, the DRM core will expose the stereo 3D capabilities of the
|
||||
* monitor by advertising the supported 3D layouts in the flags of struct
|
||||
* drm_mode_modeinfo.
|
||||
* drm_mode_modeinfo. See ``DRM_MODE_FLAG_3D_*``.
|
||||
*
|
||||
* This capability is always supported for all drivers starting from kernel
|
||||
* version 3.13.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_STEREO_3D 1
|
||||
|
||||
|
@ -666,13 +785,25 @@ struct drm_get_cap {
|
|||
*
|
||||
* If set to 1, the DRM core will expose all planes (overlay, primary, and
|
||||
* cursor) to userspace.
|
||||
*
|
||||
* This capability has been introduced in kernel version 3.15. Starting from
|
||||
* kernel version 3.17, this capability is always supported for all drivers.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2
|
||||
|
||||
/**
|
||||
* DRM_CLIENT_CAP_ATOMIC
|
||||
*
|
||||
* If set to 1, the DRM core will expose atomic properties to userspace
|
||||
* If set to 1, the DRM core will expose atomic properties to userspace. This
|
||||
* implicitly enables &DRM_CLIENT_CAP_UNIVERSAL_PLANES and
|
||||
* &DRM_CLIENT_CAP_ASPECT_RATIO.
|
||||
*
|
||||
* If the driver doesn't support atomic mode-setting, enabling this capability
|
||||
* will fail with -EOPNOTSUPP.
|
||||
*
|
||||
* This capability has been introduced in kernel version 4.0. Starting from
|
||||
* kernel version 4.2, this capability is always supported for atomic-capable
|
||||
* drivers.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_ATOMIC 3
|
||||
|
||||
|
@ -680,6 +811,10 @@ struct drm_get_cap {
|
|||
* DRM_CLIENT_CAP_ASPECT_RATIO
|
||||
*
|
||||
* If set to 1, the DRM core will provide aspect ratio information in modes.
|
||||
* See ``DRM_MODE_FLAG_PIC_AR_*``.
|
||||
*
|
||||
* This capability is always supported for all drivers starting from kernel
|
||||
* version 4.18.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_ASPECT_RATIO 4
|
||||
|
||||
|
@ -687,12 +822,15 @@ struct drm_get_cap {
|
|||
* DRM_CLIENT_CAP_WRITEBACK_CONNECTORS
|
||||
*
|
||||
* If set to 1, the DRM core will expose special connectors to be used for
|
||||
* writing back to memory the scene setup in the commit. Depends on client
|
||||
* also supporting DRM_CLIENT_CAP_ATOMIC
|
||||
* writing back to memory the scene setup in the commit. The client must enable
|
||||
* &DRM_CLIENT_CAP_ATOMIC first.
|
||||
*
|
||||
* This capability is always supported for atomic-capable drivers starting from
|
||||
* kernel version 4.19.
|
||||
*/
|
||||
#define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS 5
|
||||
|
||||
/** DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
|
||||
/* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
|
||||
struct drm_set_client_cap {
|
||||
__u64 capability;
|
||||
__u64 value;
|
||||
|
@ -944,7 +1082,7 @@ extern "C" {
|
|||
|
||||
#define DRM_IOCTL_MODE_GETFB2 DRM_IOWR(0xCE, struct drm_mode_fb_cmd2)
|
||||
|
||||
/**
|
||||
/*
|
||||
* Device specific ioctls should only be in their respective headers
|
||||
* The device specific ioctl range is from 0x40 to 0x9f.
|
||||
* Generic IOCTLS restart at 0xA0.
|
||||
|
@ -955,7 +1093,7 @@ extern "C" {
|
|||
#define DRM_COMMAND_BASE 0x40
|
||||
#define DRM_COMMAND_END 0xA0
|
||||
|
||||
/**
|
||||
/*
|
||||
* Header for events written back to userspace on the drm fd. The
|
||||
* type defines the type of event, the length specifies the total
|
||||
* length of the event (including the header), and user_data is
|
||||
|
|
|
@ -168,6 +168,13 @@ extern "C" {
|
|||
#define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* [31:0] R:G:B:A 10:10:10:2 little endian */
|
||||
#define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* [31:0] B:G:R:A 10:10:10:2 little endian */
|
||||
|
||||
/* 64 bpp RGB */
|
||||
#define DRM_FORMAT_XRGB16161616 fourcc_code('X', 'R', '4', '8') /* [63:0] x:R:G:B 16:16:16:16 little endian */
|
||||
#define DRM_FORMAT_XBGR16161616 fourcc_code('X', 'B', '4', '8') /* [63:0] x:B:G:R 16:16:16:16 little endian */
|
||||
|
||||
#define DRM_FORMAT_ARGB16161616 fourcc_code('A', 'R', '4', '8') /* [63:0] A:R:G:B 16:16:16:16 little endian */
|
||||
#define DRM_FORMAT_ABGR16161616 fourcc_code('A', 'B', '4', '8') /* [63:0] A:B:G:R 16:16:16:16 little endian */
|
||||
|
||||
/*
|
||||
* Floating point 64bpp RGB
|
||||
* IEEE 754-2008 binary16 half-precision float
|
||||
|
@ -729,7 +736,7 @@ extern "C" {
|
|||
* which corresponds to the "generic" kind used for simple single-sample
|
||||
* uncompressed color formats on Fermi - Volta GPUs.
|
||||
*/
|
||||
static inline __u64
|
||||
static __inline__ __u64
|
||||
drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
|
||||
{
|
||||
if (!(modifier & 0x10) || (modifier & (0xff << 12)))
|
||||
|
|
|
@ -218,6 +218,27 @@ extern "C" {
|
|||
#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
|
||||
#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
|
||||
|
||||
/**
|
||||
* struct drm_mode_modeinfo - Display mode information.
|
||||
* @clock: pixel clock in kHz
|
||||
* @hdisplay: horizontal display size
|
||||
* @hsync_start: horizontal sync start
|
||||
* @hsync_end: horizontal sync end
|
||||
* @htotal: horizontal total size
|
||||
* @hskew: horizontal skew
|
||||
* @vdisplay: vertical display size
|
||||
* @vsync_start: vertical sync start
|
||||
* @vsync_end: vertical sync end
|
||||
* @vtotal: vertical total size
|
||||
* @vscan: vertical scan
|
||||
* @vrefresh: approximate vertical refresh rate in Hz
|
||||
* @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines
|
||||
* @type: bitmask of type flags, see DRM_MODE_TYPE_* defines
|
||||
* @name: string describing the mode resolution
|
||||
*
|
||||
* This is the user-space API display mode information structure. For the
|
||||
* kernel version see struct drm_display_mode.
|
||||
*/
|
||||
struct drm_mode_modeinfo {
|
||||
__u32 clock;
|
||||
__u16 hdisplay;
|
||||
|
@ -367,28 +388,95 @@ enum drm_mode_subconnector {
|
|||
#define DRM_MODE_CONNECTOR_DPI 17
|
||||
#define DRM_MODE_CONNECTOR_WRITEBACK 18
|
||||
#define DRM_MODE_CONNECTOR_SPI 19
|
||||
#define DRM_MODE_CONNECTOR_USB 20
|
||||
|
||||
/**
|
||||
* struct drm_mode_get_connector - Get connector metadata.
|
||||
*
|
||||
* User-space can perform a GETCONNECTOR ioctl to retrieve information about a
|
||||
* connector. User-space is expected to retrieve encoders, modes and properties
|
||||
* by performing this ioctl at least twice: the first time to retrieve the
|
||||
* number of elements, the second time to retrieve the elements themselves.
|
||||
*
|
||||
* To retrieve the number of elements, set @count_props and @count_encoders to
|
||||
* zero, set @count_modes to 1, and set @modes_ptr to a temporary struct
|
||||
* drm_mode_modeinfo element.
|
||||
*
|
||||
* To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr,
|
||||
* @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and
|
||||
* @count_encoders to their capacity.
|
||||
*
|
||||
* Performing the ioctl only twice may be racy: the number of elements may have
|
||||
* changed with a hotplug event in-between the two ioctls. User-space is
|
||||
* expected to retry the last ioctl until the number of elements stabilizes.
|
||||
* The kernel won't fill any array which doesn't have the expected length.
|
||||
*
|
||||
* **Force-probing a connector**
|
||||
*
|
||||
* If the @count_modes field is set to zero and the DRM client is the current
|
||||
* DRM master, the kernel will perform a forced probe on the connector to
|
||||
* refresh the connector status, modes and EDID. A forced-probe can be slow,
|
||||
* might cause flickering and the ioctl will block.
|
||||
*
|
||||
* User-space needs to force-probe connectors to ensure their metadata is
|
||||
* up-to-date at startup and after receiving a hot-plug event. User-space
|
||||
* may perform a forced-probe when the user explicitly requests it. User-space
|
||||
* shouldn't perform a forced-probe in other situations.
|
||||
*/
|
||||
struct drm_mode_get_connector {
|
||||
|
||||
/** @encoders_ptr: Pointer to ``__u32`` array of object IDs. */
|
||||
__u64 encoders_ptr;
|
||||
/** @modes_ptr: Pointer to struct drm_mode_modeinfo array. */
|
||||
__u64 modes_ptr;
|
||||
/** @props_ptr: Pointer to ``__u32`` array of property IDs. */
|
||||
__u64 props_ptr;
|
||||
/** @prop_values_ptr: Pointer to ``__u64`` array of property values. */
|
||||
__u64 prop_values_ptr;
|
||||
|
||||
/** @count_modes: Number of modes. */
|
||||
__u32 count_modes;
|
||||
/** @count_props: Number of properties. */
|
||||
__u32 count_props;
|
||||
/** @count_encoders: Number of encoders. */
|
||||
__u32 count_encoders;
|
||||
|
||||
__u32 encoder_id; /**< Current Encoder */
|
||||
__u32 connector_id; /**< Id */
|
||||
/** @encoder_id: Object ID of the current encoder. */
|
||||
__u32 encoder_id;
|
||||
/** @connector_id: Object ID of the connector. */
|
||||
__u32 connector_id;
|
||||
/**
|
||||
* @connector_type: Type of the connector.
|
||||
*
|
||||
* See DRM_MODE_CONNECTOR_* defines.
|
||||
*/
|
||||
__u32 connector_type;
|
||||
/**
|
||||
* @connector_type_id: Type-specific connector number.
|
||||
*
|
||||
* This is not an object ID. This is a per-type connector number. Each
|
||||
* (type, type_id) combination is unique across all connectors of a DRM
|
||||
* device.
|
||||
*/
|
||||
__u32 connector_type_id;
|
||||
|
||||
/**
|
||||
* @connection: Status of the connector.
|
||||
*
|
||||
* See enum drm_connector_status.
|
||||
*/
|
||||
__u32 connection;
|
||||
__u32 mm_width; /**< width in millimeters */
|
||||
__u32 mm_height; /**< height in millimeters */
|
||||
/** @mm_width: Width of the connected sink in millimeters. */
|
||||
__u32 mm_width;
|
||||
/** @mm_height: Height of the connected sink in millimeters. */
|
||||
__u32 mm_height;
|
||||
/**
|
||||
* @subpixel: Subpixel order of the connected sink.
|
||||
*
|
||||
* See enum subpixel_order.
|
||||
*/
|
||||
__u32 subpixel;
|
||||
|
||||
/** @pad: Padding, must be zero. */
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
|
@ -904,26 +992,31 @@ struct drm_format_modifier {
|
|||
};
|
||||
|
||||
/**
|
||||
* struct drm_mode_create_blob - Create New block property
|
||||
* @data: Pointer to data to copy.
|
||||
* @length: Length of data to copy.
|
||||
* @blob_id: new property ID.
|
||||
* struct drm_mode_create_blob - Create New blob property
|
||||
*
|
||||
* Create a new 'blob' data property, copying length bytes from data pointer,
|
||||
* and returning new blob ID.
|
||||
*/
|
||||
struct drm_mode_create_blob {
|
||||
/** Pointer to data to copy. */
|
||||
/** @data: Pointer to data to copy. */
|
||||
__u64 data;
|
||||
/** Length of data to copy. */
|
||||
/** @length: Length of data to copy. */
|
||||
__u32 length;
|
||||
/** Return: new property ID. */
|
||||
/** @blob_id: Return: new property ID. */
|
||||
__u32 blob_id;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_mode_destroy_blob - Destroy user blob
|
||||
* @blob_id: blob_id to destroy
|
||||
*
|
||||
* Destroy a user-created blob property.
|
||||
*
|
||||
* User-space can release blobs as soon as they do not need to refer to them by
|
||||
* their blob object ID. For instance, if you are using a MODE_ID blob in an
|
||||
* atomic commit and you will not make another commit re-using the same ID, you
|
||||
* can destroy the blob as soon as the commit has been issued, without waiting
|
||||
* for it to complete.
|
||||
*/
|
||||
struct drm_mode_destroy_blob {
|
||||
__u32 blob_id;
|
||||
|
@ -931,36 +1024,32 @@ struct drm_mode_destroy_blob {
|
|||
|
||||
/**
|
||||
* struct drm_mode_create_lease - Create lease
|
||||
* @object_ids: Pointer to array of object ids.
|
||||
* @object_count: Number of object ids.
|
||||
* @flags: flags for new FD.
|
||||
* @lessee_id: unique identifier for lessee.
|
||||
* @fd: file descriptor to new drm_master file.
|
||||
*
|
||||
* Lease mode resources, creating another drm_master.
|
||||
*/
|
||||
struct drm_mode_create_lease {
|
||||
/** Pointer to array of object ids (__u32) */
|
||||
/** @object_ids: Pointer to array of object ids (__u32) */
|
||||
__u64 object_ids;
|
||||
/** Number of object ids */
|
||||
/** @object_count: Number of object ids */
|
||||
__u32 object_count;
|
||||
/** flags for new FD (O_CLOEXEC, etc) */
|
||||
/** @flags: flags for new FD (O_CLOEXEC, etc) */
|
||||
__u32 flags;
|
||||
|
||||
/** Return: unique identifier for lessee. */
|
||||
/** @lessee_id: Return: unique identifier for lessee. */
|
||||
__u32 lessee_id;
|
||||
/** Return: file descriptor to new drm_master file */
|
||||
/** @fd: Return: file descriptor to new drm_master file */
|
||||
__u32 fd;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_mode_list_lessees - List lessees
|
||||
* @count_lessees: Number of lessees.
|
||||
* @pad: pad.
|
||||
* @lessees_ptr: Pointer to lessess.
|
||||
* List lesses from a drm_master
|
||||
*
|
||||
* List lesses from a drm_master.
|
||||
*/
|
||||
struct drm_mode_list_lessees {
|
||||
/** Number of lessees.
|
||||
/**
|
||||
* @count_lessees: Number of lessees.
|
||||
*
|
||||
* On input, provides length of the array.
|
||||
* On output, provides total number. No
|
||||
* more than the input number will be written
|
||||
|
@ -968,23 +1057,26 @@ struct drm_mode_list_lessees {
|
|||
* the size and then the data.
|
||||
*/
|
||||
__u32 count_lessees;
|
||||
/** @pad: Padding. */
|
||||
__u32 pad;
|
||||
|
||||
/** Pointer to lessees.
|
||||
* pointer to __u64 array of lessee ids
|
||||
/**
|
||||
* @lessees_ptr: Pointer to lessees.
|
||||
*
|
||||
* Pointer to __u64 array of lessee ids
|
||||
*/
|
||||
__u64 lessees_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_mode_get_lease - Get Lease
|
||||
* @count_objects: Number of leased objects.
|
||||
* @pad: pad.
|
||||
* @objects_ptr: Pointer to objects.
|
||||
* Get leased objects
|
||||
*
|
||||
* Get leased objects.
|
||||
*/
|
||||
struct drm_mode_get_lease {
|
||||
/** Number of leased objects.
|
||||
/**
|
||||
* @count_objects: Number of leased objects.
|
||||
*
|
||||
* On input, provides length of the array.
|
||||
* On output, provides total number. No
|
||||
* more than the input number will be written
|
||||
|
@ -992,22 +1084,22 @@ struct drm_mode_get_lease {
|
|||
* the size and then the data.
|
||||
*/
|
||||
__u32 count_objects;
|
||||
/** @pad: Padding. */
|
||||
__u32 pad;
|
||||
|
||||
/** Pointer to objects.
|
||||
* pointer to __u32 array of object ids
|
||||
/**
|
||||
* @objects_ptr: Pointer to objects.
|
||||
*
|
||||
* Pointer to __u32 array of object ids.
|
||||
*/
|
||||
__u64 objects_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_mode_revoke_lease - Revoke lease
|
||||
* @lessee_id: Unique ID of lessee.
|
||||
* Revoke lease
|
||||
*/
|
||||
struct drm_mode_revoke_lease {
|
||||
/** Unique ID of lessee
|
||||
*/
|
||||
/** @lessee_id: Unique ID of lessee */
|
||||
__u32 lessee_id;
|
||||
};
|
||||
|
||||
|
|
|
@ -74,6 +74,9 @@ struct drm_etnaviv_timespec {
|
|||
#define ETNAVIV_PARAM_GPU_NUM_CONSTANTS 0x19
|
||||
#define ETNAVIV_PARAM_GPU_NUM_VARYINGS 0x1a
|
||||
#define ETNAVIV_PARAM_SOFTPIN_START_ADDR 0x1b
|
||||
#define ETNAVIV_PARAM_GPU_PRODUCT_ID 0x1c
|
||||
#define ETNAVIV_PARAM_GPU_CUSTOMER_ID 0x1d
|
||||
#define ETNAVIV_PARAM_GPU_ECO_ID 0x1e
|
||||
|
||||
#define ETNA_MAX_PIPES 4
|
||||
|
||||
|
|
|
@ -62,8 +62,8 @@ extern "C" {
|
|||
#define I915_ERROR_UEVENT "ERROR"
|
||||
#define I915_RESET_UEVENT "RESET"
|
||||
|
||||
/*
|
||||
* i915_user_extension: Base class for defining a chain of extensions
|
||||
/**
|
||||
* struct i915_user_extension - Base class for defining a chain of extensions
|
||||
*
|
||||
* Many interfaces need to grow over time. In most cases we can simply
|
||||
* extend the struct and have userspace pass in more data. Another option,
|
||||
|
@ -76,12 +76,58 @@ extern "C" {
|
|||
* increasing complexity, and for large parts of that interface to be
|
||||
* entirely optional. The downside is more pointer chasing; chasing across
|
||||
* the boundary with pointers encapsulated inside u64.
|
||||
*
|
||||
* Example chaining:
|
||||
*
|
||||
* .. code-block:: C
|
||||
*
|
||||
* struct i915_user_extension ext3 {
|
||||
* .next_extension = 0, // end
|
||||
* .name = ...,
|
||||
* };
|
||||
* struct i915_user_extension ext2 {
|
||||
* .next_extension = (uintptr_t)&ext3,
|
||||
* .name = ...,
|
||||
* };
|
||||
* struct i915_user_extension ext1 {
|
||||
* .next_extension = (uintptr_t)&ext2,
|
||||
* .name = ...,
|
||||
* };
|
||||
*
|
||||
* Typically the struct i915_user_extension would be embedded in some uAPI
|
||||
* struct, and in this case we would feed it the head of the chain(i.e ext1),
|
||||
* which would then apply all of the above extensions.
|
||||
*
|
||||
*/
|
||||
struct i915_user_extension {
|
||||
/**
|
||||
* @next_extension:
|
||||
*
|
||||
* Pointer to the next struct i915_user_extension, or zero if the end.
|
||||
*/
|
||||
__u64 next_extension;
|
||||
/**
|
||||
* @name: Name of the extension.
|
||||
*
|
||||
* Note that the name here is just some integer.
|
||||
*
|
||||
* Also note that the name space for this is not global for the whole
|
||||
* driver, but rather its scope/meaning is limited to the specific piece
|
||||
* of uAPI which has embedded the struct i915_user_extension.
|
||||
*/
|
||||
__u32 name;
|
||||
__u32 flags; /* All undefined bits must be zero. */
|
||||
__u32 rsvd[4]; /* Reserved for future use; must be zero. */
|
||||
/**
|
||||
* @flags: MBZ
|
||||
*
|
||||
* All undefined bits must be zero.
|
||||
*/
|
||||
__u32 flags;
|
||||
/**
|
||||
* @rsvd: MBZ
|
||||
*
|
||||
* Reserved for future use; must be zero.
|
||||
*/
|
||||
__u32 rsvd[4];
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -177,8 +223,9 @@ enum drm_i915_pmu_engine_sample {
|
|||
#define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1)
|
||||
#define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2)
|
||||
#define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3)
|
||||
#define I915_PMU_SOFTWARE_GT_AWAKE_TIME __I915_PMU_OTHER(4)
|
||||
|
||||
#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY
|
||||
#define I915_PMU_LAST /* Deprecated - do not use */ I915_PMU_RC6_RESIDENCY
|
||||
|
||||
/* Each region is a minimum of 16k, and there are at most 255 of them.
|
||||
*/
|
||||
|
@ -359,6 +406,7 @@ typedef struct _drm_i915_sarea {
|
|||
#define DRM_I915_QUERY 0x39
|
||||
#define DRM_I915_GEM_VM_CREATE 0x3a
|
||||
#define DRM_I915_GEM_VM_DESTROY 0x3b
|
||||
#define DRM_I915_GEM_CREATE_EXT 0x3c
|
||||
/* Must be kept compact -- no holes */
|
||||
|
||||
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
|
||||
|
@ -391,6 +439,7 @@ typedef struct _drm_i915_sarea {
|
|||
#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
|
||||
#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
|
||||
#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
|
||||
#define DRM_IOCTL_I915_GEM_CREATE_EXT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE_EXT, struct drm_i915_gem_create_ext)
|
||||
#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
|
||||
#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
|
||||
#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
|
||||
|
@ -942,6 +991,7 @@ struct drm_i915_gem_exec_object {
|
|||
__u64 offset;
|
||||
};
|
||||
|
||||
/* DRM_IOCTL_I915_GEM_EXECBUFFER was removed in Linux 5.13 */
|
||||
struct drm_i915_gem_execbuffer {
|
||||
/**
|
||||
* List of buffers to be validated with their relocations to be
|
||||
|
@ -1052,12 +1102,12 @@ struct drm_i915_gem_exec_fence {
|
|||
__u32 flags;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* See drm_i915_gem_execbuffer_ext_timeline_fences.
|
||||
*/
|
||||
#define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0
|
||||
|
||||
/**
|
||||
/*
|
||||
* This structure describes an array of drm_syncobj and associated points for
|
||||
* timeline variants of drm_syncobj. It is invalid to append this structure to
|
||||
* the execbuf if I915_EXEC_FENCE_ARRAY is set.
|
||||
|
@ -1698,7 +1748,7 @@ struct drm_i915_gem_context_param {
|
|||
__u64 value;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Context SSEU programming
|
||||
*
|
||||
* It may be necessary for either functional or performance reason to configure
|
||||
|
@ -2065,7 +2115,7 @@ struct drm_i915_perf_open_param {
|
|||
__u64 properties_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Enable data capture for a stream that was either opened in a disabled state
|
||||
* via I915_PERF_FLAG_DISABLED or was later disabled via
|
||||
* I915_PERF_IOCTL_DISABLE.
|
||||
|
@ -2079,7 +2129,7 @@ struct drm_i915_perf_open_param {
|
|||
*/
|
||||
#define I915_PERF_IOCTL_ENABLE _IO('i', 0x0)
|
||||
|
||||
/**
|
||||
/*
|
||||
* Disable data capture for a stream.
|
||||
*
|
||||
* It is an error to try and read a stream that is disabled.
|
||||
|
@ -2088,7 +2138,7 @@ struct drm_i915_perf_open_param {
|
|||
*/
|
||||
#define I915_PERF_IOCTL_DISABLE _IO('i', 0x1)
|
||||
|
||||
/**
|
||||
/*
|
||||
* Change metrics_set captured by a stream.
|
||||
*
|
||||
* If the stream is bound to a specific context, the configuration change
|
||||
|
@ -2101,7 +2151,7 @@ struct drm_i915_perf_open_param {
|
|||
*/
|
||||
#define I915_PERF_IOCTL_CONFIG _IO('i', 0x2)
|
||||
|
||||
/**
|
||||
/*
|
||||
* Common to all i915 perf records
|
||||
*/
|
||||
struct drm_i915_perf_record_header {
|
||||
|
@ -2149,7 +2199,7 @@ enum drm_i915_perf_record_type {
|
|||
DRM_I915_PERF_RECORD_MAX /* non-ABI */
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* Structure to upload perf dynamic configuration into the kernel.
|
||||
*/
|
||||
struct drm_i915_perf_oa_config {
|
||||
|
@ -2170,53 +2220,95 @@ struct drm_i915_perf_oa_config {
|
|||
__u64 flex_regs_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_query_item - An individual query for the kernel to process.
|
||||
*
|
||||
* The behaviour is determined by the @query_id. Note that exactly what
|
||||
* @data_ptr is also depends on the specific @query_id.
|
||||
*/
|
||||
struct drm_i915_query_item {
|
||||
/** @query_id: The id for this query */
|
||||
__u64 query_id;
|
||||
#define DRM_I915_QUERY_TOPOLOGY_INFO 1
|
||||
#define DRM_I915_QUERY_ENGINE_INFO 2
|
||||
#define DRM_I915_QUERY_PERF_CONFIG 3
|
||||
#define DRM_I915_QUERY_MEMORY_REGIONS 4
|
||||
/* Must be kept compact -- no holes and well documented */
|
||||
|
||||
/*
|
||||
/**
|
||||
* @length:
|
||||
*
|
||||
* When set to zero by userspace, this is filled with the size of the
|
||||
* data to be written at the data_ptr pointer. The kernel sets this
|
||||
* data to be written at the @data_ptr pointer. The kernel sets this
|
||||
* value to a negative value to signal an error on a particular query
|
||||
* item.
|
||||
*/
|
||||
__s32 length;
|
||||
|
||||
/*
|
||||
/**
|
||||
* @flags:
|
||||
*
|
||||
* When query_id == DRM_I915_QUERY_TOPOLOGY_INFO, must be 0.
|
||||
*
|
||||
* When query_id == DRM_I915_QUERY_PERF_CONFIG, must be one of the
|
||||
* following :
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_LIST
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_FOR_UUID
|
||||
* following:
|
||||
*
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_LIST
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID
|
||||
* - DRM_I915_QUERY_PERF_CONFIG_FOR_UUID
|
||||
*/
|
||||
__u32 flags;
|
||||
#define DRM_I915_QUERY_PERF_CONFIG_LIST 1
|
||||
#define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID 2
|
||||
#define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID 3
|
||||
|
||||
/*
|
||||
* Data will be written at the location pointed by data_ptr when the
|
||||
* value of length matches the length of the data to be written by the
|
||||
/**
|
||||
* @data_ptr:
|
||||
*
|
||||
* Data will be written at the location pointed by @data_ptr when the
|
||||
* value of @length matches the length of the data to be written by the
|
||||
* kernel.
|
||||
*/
|
||||
__u64 data_ptr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_query - Supply an array of struct drm_i915_query_item for the
|
||||
* kernel to fill out.
|
||||
*
|
||||
* Note that this is generally a two step process for each struct
|
||||
* drm_i915_query_item in the array:
|
||||
*
|
||||
* 1. Call the DRM_IOCTL_I915_QUERY, giving it our array of struct
|
||||
* drm_i915_query_item, with &drm_i915_query_item.length set to zero. The
|
||||
* kernel will then fill in the size, in bytes, which tells userspace how
|
||||
* memory it needs to allocate for the blob(say for an array of properties).
|
||||
*
|
||||
* 2. Next we call DRM_IOCTL_I915_QUERY again, this time with the
|
||||
* &drm_i915_query_item.data_ptr equal to our newly allocated blob. Note that
|
||||
* the &drm_i915_query_item.length should still be the same as what the
|
||||
* kernel previously set. At this point the kernel can fill in the blob.
|
||||
*
|
||||
* Note that for some query items it can make sense for userspace to just pass
|
||||
* in a buffer/blob equal to or larger than the required size. In this case only
|
||||
* a single ioctl call is needed. For some smaller query items this can work
|
||||
* quite well.
|
||||
*
|
||||
*/
|
||||
struct drm_i915_query {
|
||||
/** @num_items: The number of elements in the @items_ptr array */
|
||||
__u32 num_items;
|
||||
|
||||
/*
|
||||
* Unused for now. Must be cleared to zero.
|
||||
/**
|
||||
* @flags: Unused for now. Must be cleared to zero.
|
||||
*/
|
||||
__u32 flags;
|
||||
|
||||
/*
|
||||
* This points to an array of num_items drm_i915_query_item structures.
|
||||
/**
|
||||
* @items_ptr:
|
||||
*
|
||||
* Pointer to an array of struct drm_i915_query_item. The number of
|
||||
* array elements is @num_items.
|
||||
*/
|
||||
__u64 items_ptr;
|
||||
};
|
||||
|
@ -2290,21 +2382,21 @@ struct drm_i915_query_topology_info {
|
|||
* Describes one engine and it's capabilities as known to the driver.
|
||||
*/
|
||||
struct drm_i915_engine_info {
|
||||
/** Engine class and instance. */
|
||||
/** @engine: Engine class and instance. */
|
||||
struct i915_engine_class_instance engine;
|
||||
|
||||
/** Reserved field. */
|
||||
/** @rsvd0: Reserved field. */
|
||||
__u32 rsvd0;
|
||||
|
||||
/** Engine flags. */
|
||||
/** @flags: Engine flags. */
|
||||
__u64 flags;
|
||||
|
||||
/** Capabilities of this engine. */
|
||||
/** @capabilities: Capabilities of this engine. */
|
||||
__u64 capabilities;
|
||||
#define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0)
|
||||
#define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1)
|
||||
|
||||
/** Reserved fields. */
|
||||
/** @rsvd1: Reserved fields. */
|
||||
__u64 rsvd1[4];
|
||||
};
|
||||
|
||||
|
@ -2315,13 +2407,13 @@ struct drm_i915_engine_info {
|
|||
* an array of struct drm_i915_engine_info structures.
|
||||
*/
|
||||
struct drm_i915_query_engine_info {
|
||||
/** Number of struct drm_i915_engine_info structs following. */
|
||||
/** @num_engines: Number of struct drm_i915_engine_info structs following. */
|
||||
__u32 num_engines;
|
||||
|
||||
/** MBZ */
|
||||
/** @rsvd: MBZ */
|
||||
__u32 rsvd[3];
|
||||
|
||||
/** Marker for drm_i915_engine_info structures. */
|
||||
/** @engines: Marker for drm_i915_engine_info structures. */
|
||||
struct drm_i915_engine_info engines[];
|
||||
};
|
||||
|
||||
|
@ -2375,6 +2467,241 @@ struct drm_i915_query_perf_config {
|
|||
__u8 data[];
|
||||
};
|
||||
|
||||
/**
|
||||
* enum drm_i915_gem_memory_class - Supported memory classes
|
||||
*/
|
||||
enum drm_i915_gem_memory_class {
|
||||
/** @I915_MEMORY_CLASS_SYSTEM: System memory */
|
||||
I915_MEMORY_CLASS_SYSTEM = 0,
|
||||
/** @I915_MEMORY_CLASS_DEVICE: Device local-memory */
|
||||
I915_MEMORY_CLASS_DEVICE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_gem_memory_class_instance - Identify particular memory region
|
||||
*/
|
||||
struct drm_i915_gem_memory_class_instance {
|
||||
/** @memory_class: See enum drm_i915_gem_memory_class */
|
||||
__u16 memory_class;
|
||||
|
||||
/** @memory_instance: Which instance */
|
||||
__u16 memory_instance;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_memory_region_info - Describes one region as known to the
|
||||
* driver.
|
||||
*
|
||||
* Note that we reserve some stuff here for potential future work. As an example
|
||||
* we might want expose the capabilities for a given region, which could include
|
||||
* things like if the region is CPU mappable/accessible, what are the supported
|
||||
* mapping types etc.
|
||||
*
|
||||
* Note that to extend struct drm_i915_memory_region_info and struct
|
||||
* drm_i915_query_memory_regions in the future the plan is to do the following:
|
||||
*
|
||||
* .. code-block:: C
|
||||
*
|
||||
* struct drm_i915_memory_region_info {
|
||||
* struct drm_i915_gem_memory_class_instance region;
|
||||
* union {
|
||||
* __u32 rsvd0;
|
||||
* __u32 new_thing1;
|
||||
* };
|
||||
* ...
|
||||
* union {
|
||||
* __u64 rsvd1[8];
|
||||
* struct {
|
||||
* __u64 new_thing2;
|
||||
* __u64 new_thing3;
|
||||
* ...
|
||||
* };
|
||||
* };
|
||||
* };
|
||||
*
|
||||
* With this things should remain source compatible between versions for
|
||||
* userspace, even as we add new fields.
|
||||
*
|
||||
* Note this is using both struct drm_i915_query_item and struct drm_i915_query.
|
||||
* For this new query we are adding the new query id DRM_I915_QUERY_MEMORY_REGIONS
|
||||
* at &drm_i915_query_item.query_id.
|
||||
*/
|
||||
struct drm_i915_memory_region_info {
|
||||
/** @region: The class:instance pair encoding */
|
||||
struct drm_i915_gem_memory_class_instance region;
|
||||
|
||||
/** @rsvd0: MBZ */
|
||||
__u32 rsvd0;
|
||||
|
||||
/** @probed_size: Memory probed by the driver (-1 = unknown) */
|
||||
__u64 probed_size;
|
||||
|
||||
/** @unallocated_size: Estimate of memory remaining (-1 = unknown) */
|
||||
__u64 unallocated_size;
|
||||
|
||||
/** @rsvd1: MBZ */
|
||||
__u64 rsvd1[8];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_query_memory_regions
|
||||
*
|
||||
* The region info query enumerates all regions known to the driver by filling
|
||||
* in an array of struct drm_i915_memory_region_info structures.
|
||||
*
|
||||
* Example for getting the list of supported regions:
|
||||
*
|
||||
* .. code-block:: C
|
||||
*
|
||||
* struct drm_i915_query_memory_regions *info;
|
||||
* struct drm_i915_query_item item = {
|
||||
* .query_id = DRM_I915_QUERY_MEMORY_REGIONS;
|
||||
* };
|
||||
* struct drm_i915_query query = {
|
||||
* .num_items = 1,
|
||||
* .items_ptr = (uintptr_t)&item,
|
||||
* };
|
||||
* int err, i;
|
||||
*
|
||||
* // First query the size of the blob we need, this needs to be large
|
||||
* // enough to hold our array of regions. The kernel will fill out the
|
||||
* // item.length for us, which is the number of bytes we need.
|
||||
* err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
|
||||
* if (err) ...
|
||||
*
|
||||
* info = calloc(1, item.length);
|
||||
* // 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 the all the region info.
|
||||
* item.data_ptr = (uintptr_t)&info,
|
||||
*
|
||||
* err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query);
|
||||
* if (err) ...
|
||||
*
|
||||
* // We can now access each region in the array
|
||||
* for (i = 0; i < info->num_regions; i++) {
|
||||
* struct drm_i915_memory_region_info mr = info->regions[i];
|
||||
* u16 class = mr.region.class;
|
||||
* u16 instance = mr.region.instance;
|
||||
*
|
||||
* ....
|
||||
* }
|
||||
*
|
||||
* free(info);
|
||||
*/
|
||||
struct drm_i915_query_memory_regions {
|
||||
/** @num_regions: Number of supported regions */
|
||||
__u32 num_regions;
|
||||
|
||||
/** @rsvd: MBZ */
|
||||
__u32 rsvd[3];
|
||||
|
||||
/** @regions: Info about each supported region */
|
||||
struct drm_i915_memory_region_info regions[];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_gem_create_ext - Existing gem_create behaviour, with added
|
||||
* extension support using struct i915_user_extension.
|
||||
*
|
||||
* Note that in the future we want to have our buffer flags here, at least for
|
||||
* the stuff that is immutable. Previously we would have two ioctls, one to
|
||||
* create the object with gem_create, and another to apply various parameters,
|
||||
* however this creates some ambiguity for the params which are considered
|
||||
* immutable. Also in general we're phasing out the various SET/GET ioctls.
|
||||
*/
|
||||
struct drm_i915_gem_create_ext {
|
||||
/**
|
||||
* @size: Requested size for the object.
|
||||
*
|
||||
* The (page-aligned) allocated size for the object will be returned.
|
||||
*
|
||||
* Note that for some devices we have might have further minimum
|
||||
* page-size restrictions(larger than 4K), like for device local-memory.
|
||||
* However in general the final size here should always reflect any
|
||||
* rounding up, if for example using the I915_GEM_CREATE_EXT_MEMORY_REGIONS
|
||||
* extension to place the object in device local-memory.
|
||||
*/
|
||||
__u64 size;
|
||||
/**
|
||||
* @handle: Returned handle for the object.
|
||||
*
|
||||
* Object handles are nonzero.
|
||||
*/
|
||||
__u32 handle;
|
||||
/** @flags: MBZ */
|
||||
__u32 flags;
|
||||
/**
|
||||
* @extensions: The chain of extensions to apply to this object.
|
||||
*
|
||||
* This will be useful in the future when we need to support several
|
||||
* different extensions, and we need to apply more than one when
|
||||
* creating the object. See struct i915_user_extension.
|
||||
*
|
||||
* If we don't supply any extensions then we get the same old gem_create
|
||||
* behaviour.
|
||||
*
|
||||
* For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see
|
||||
* struct drm_i915_gem_create_ext_memory_regions.
|
||||
*/
|
||||
#define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0
|
||||
__u64 extensions;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct drm_i915_gem_create_ext_memory_regions - The
|
||||
* I915_GEM_CREATE_EXT_MEMORY_REGIONS extension.
|
||||
*
|
||||
* Set the object with the desired set of placements/regions in priority
|
||||
* order. Each entry must be unique and supported by the device.
|
||||
*
|
||||
* This is provided as an array of struct drm_i915_gem_memory_class_instance, or
|
||||
* an equivalent layout of class:instance pair encodings. See struct
|
||||
* drm_i915_query_memory_regions and DRM_I915_QUERY_MEMORY_REGIONS for how to
|
||||
* query the supported regions for a device.
|
||||
*
|
||||
* As an example, on discrete devices, if we wish to set the placement as
|
||||
* device local-memory we can do something like:
|
||||
*
|
||||
* .. code-block:: C
|
||||
*
|
||||
* struct drm_i915_gem_memory_class_instance region_lmem = {
|
||||
* .memory_class = I915_MEMORY_CLASS_DEVICE,
|
||||
* .memory_instance = 0,
|
||||
* };
|
||||
* struct drm_i915_gem_create_ext_memory_regions regions = {
|
||||
* .base = { .name = I915_GEM_CREATE_EXT_MEMORY_REGIONS },
|
||||
* .regions = (uintptr_t)®ion_lmem,
|
||||
* .num_regions = 1,
|
||||
* };
|
||||
* struct drm_i915_gem_create_ext create_ext = {
|
||||
* .size = 16 * PAGE_SIZE,
|
||||
* .extensions = (uintptr_t)®ions,
|
||||
* };
|
||||
*
|
||||
* int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext);
|
||||
* if (err) ...
|
||||
*
|
||||
* At which point we get the object handle in &drm_i915_gem_create_ext.handle,
|
||||
* along with the final object size in &drm_i915_gem_create_ext.size, which
|
||||
* should account for any rounding up, if required.
|
||||
*/
|
||||
struct drm_i915_gem_create_ext_memory_regions {
|
||||
/** @base: Extension link. See struct i915_user_extension. */
|
||||
struct i915_user_extension base;
|
||||
|
||||
/** @pad: MBZ */
|
||||
__u32 pad;
|
||||
/** @num_regions: Number of elements in the @regions array. */
|
||||
__u32 num_regions;
|
||||
/**
|
||||
* @regions: The regions/placements array.
|
||||
*
|
||||
* An array of struct drm_i915_gem_memory_class_instance.
|
||||
*/
|
||||
__u64 regions;
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -171,6 +171,7 @@ enum drm_panfrost_param {
|
|||
DRM_PANFROST_PARAM_JS_FEATURES15,
|
||||
DRM_PANFROST_PARAM_NR_CORE_GROUPS,
|
||||
DRM_PANFROST_PARAM_THREAD_TLS_ALLOC,
|
||||
DRM_PANFROST_PARAM_AFBC_FEATURES,
|
||||
};
|
||||
|
||||
struct drm_panfrost_get_param {
|
||||
|
|
Loading…
Reference in New Issue