Update to v4.17.3 kernel headers.

Test: Builds, boots on a walleye.
Change-Id: I389d8b61ec00ea309e38d1b1a2e0dace48c21edb
diff --git a/libc/kernel/uapi/drm/amdgpu_drm.h b/libc/kernel/uapi/drm/amdgpu_drm.h
index 1cdae16..59f5260 100644
--- a/libc/kernel/uapi/drm/amdgpu_drm.h
+++ b/libc/kernel/uapi/drm/amdgpu_drm.h
@@ -106,10 +106,14 @@
 #define AMDGPU_CTX_OP_ALLOC_CTX 1
 #define AMDGPU_CTX_OP_FREE_CTX 2
 #define AMDGPU_CTX_OP_QUERY_STATE 3
+#define AMDGPU_CTX_OP_QUERY_STATE2 4
 #define AMDGPU_CTX_NO_RESET 0
 #define AMDGPU_CTX_GUILTY_RESET 1
 #define AMDGPU_CTX_INNOCENT_RESET 2
 #define AMDGPU_CTX_UNKNOWN_RESET 3
+#define AMDGPU_CTX_QUERY2_FLAGS_RESET (1 << 0)
+#define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1 << 1)
+#define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1 << 2)
 #define AMDGPU_CTX_PRIORITY_UNSET - 2048
 #define AMDGPU_CTX_PRIORITY_VERY_LOW - 1023
 #define AMDGPU_CTX_PRIORITY_LOW - 512
@@ -392,6 +396,7 @@
 #define AMDGPU_INFO_FW_SDMA 0x0b
 #define AMDGPU_INFO_FW_SOS 0x0c
 #define AMDGPU_INFO_FW_ASD 0x0d
+#define AMDGPU_INFO_FW_VCN 0x0e
 #define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
 #define AMDGPU_INFO_VRAM_USAGE 0x10
 #define AMDGPU_INFO_GTT_USAGE 0x11
@@ -415,6 +420,8 @@
 #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5
 #define AMDGPU_INFO_SENSOR_VDDNB 0x6
 #define AMDGPU_INFO_SENSOR_VDDGFX 0x7
+#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8
+#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9
 #define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E
 #define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F
 #define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0
@@ -494,6 +501,7 @@
 #define AMDGPU_VRAM_TYPE_GDDR5 5
 #define AMDGPU_VRAM_TYPE_HBM 6
 #define AMDGPU_VRAM_TYPE_DDR3 7
+#define AMDGPU_VRAM_TYPE_DDR4 8
 struct drm_amdgpu_info_device {
   __u32 device_id;
   __u32 chip_rev;
@@ -540,6 +548,8 @@
   __u32 max_gs_waves_per_vgt;
   __u32 _pad1;
   __u32 cu_ao_bitmap[4][4];
+  __u64 high_va_offset;
+  __u64 high_va_max;
 };
 struct drm_amdgpu_info_hw_ip {
   __u32 hw_ip_version_major;
diff --git a/libc/kernel/uapi/drm/drm_fourcc.h b/libc/kernel/uapi/drm/drm_fourcc.h
index da416cf..d5fb055 100644
--- a/libc/kernel/uapi/drm/drm_fourcc.h
+++ b/libc/kernel/uapi/drm/drm_fourcc.h
@@ -101,13 +101,13 @@
 #define DRM_FORMAT_MOD_VENDOR_NONE 0
 #define DRM_FORMAT_MOD_VENDOR_INTEL 0x01
 #define DRM_FORMAT_MOD_VENDOR_AMD 0x02
-#define DRM_FORMAT_MOD_VENDOR_NV 0x03
+#define DRM_FORMAT_MOD_VENDOR_NVIDIA 0x03
 #define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
 #define DRM_FORMAT_MOD_VENDOR_QCOM 0x05
 #define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06
 #define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07
 #define DRM_FORMAT_RESERVED ((1ULL << 56) - 1)
-#define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | (val & 0x00ffffffffffffffULL))
+#define fourcc_mod_code(vendor,val) ((((__u64) DRM_FORMAT_MOD_VENDOR_ ##vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
 #define DRM_FORMAT_MOD_INVALID fourcc_mod_code(NONE, DRM_FORMAT_RESERVED)
 #define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0)
 #define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1)
@@ -120,12 +120,14 @@
 #define DRM_FORMAT_MOD_VIVANTE_SUPER_TILED fourcc_mod_code(VIVANTE, 2)
 #define DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED fourcc_mod_code(VIVANTE, 3)
 #define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4)
-#define __fourcc_mod_tegra_mode_shift 32
-#define fourcc_mod_tegra_code(val,params) fourcc_mod_code(NV, ((((__u64) val) << __fourcc_mod_tegra_mode_shift) | params))
-#define fourcc_mod_tegra_mod(m) (m & ~((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
-#define fourcc_mod_tegra_param(m) (m & ((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
-#define NV_FORMAT_MOD_TEGRA_TILED fourcc_mod_tegra_code(1, 0)
-#define NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(v) fourcc_mod_tegra_code(2, v)
+#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf))
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB fourcc_mod_code(NVIDIA, 0x10)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB fourcc_mod_code(NVIDIA, 0x11)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB fourcc_mod_code(NVIDIA, 0x12)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB fourcc_mod_code(NVIDIA, 0x13)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB fourcc_mod_code(NVIDIA, 0x14)
+#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB fourcc_mod_code(NVIDIA, 0x15)
 #define DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED fourcc_mod_code(BROADCOM, 1)
 #ifdef __cplusplus
 #endif
diff --git a/libc/kernel/uapi/drm/drm_mode.h b/libc/kernel/uapi/drm/drm_mode.h
index 2c9defb..b91f161 100644
--- a/libc/kernel/uapi/drm/drm_mode.h
+++ b/libc/kernel/uapi/drm/drm_mode.h
@@ -32,6 +32,7 @@
 #define DRM_MODE_TYPE_DEFAULT (1 << 4)
 #define DRM_MODE_TYPE_USERDEF (1 << 5)
 #define DRM_MODE_TYPE_DRIVER (1 << 6)
+#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_USERDEF | DRM_MODE_TYPE_DRIVER)
 #define DRM_MODE_FLAG_PHSYNC (1 << 0)
 #define DRM_MODE_FLAG_NHSYNC (1 << 1)
 #define DRM_MODE_FLAG_PVSYNC (1 << 2)
@@ -63,6 +64,7 @@
 #define DRM_MODE_FLAG_PIC_AR_NONE (DRM_MODE_PICTURE_ASPECT_NONE << 19)
 #define DRM_MODE_FLAG_PIC_AR_4_3 (DRM_MODE_PICTURE_ASPECT_4_3 << 19)
 #define DRM_MODE_FLAG_PIC_AR_16_9 (DRM_MODE_PICTURE_ASPECT_16_9 << 19)
+#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLSCAN | DRM_MODE_FLAG_CSYNC | DRM_MODE_FLAG_PCSYNC | DRM_MODE_FLAG_NCSYNC | DRM_MODE_FLAG_HSKEW | DRM_MODE_FLAG_DBLCLK | DRM_MODE_FLAG_CLKDIV2 | DRM_MODE_FLAG_3D_MASK)
 #define DRM_MODE_DPMS_ON 0
 #define DRM_MODE_DPMS_STANDBY 1
 #define DRM_MODE_DPMS_SUSPEND 2
@@ -87,6 +89,9 @@
 #define DRM_MODE_REFLECT_X (1 << 4)
 #define DRM_MODE_REFLECT_Y (1 << 5)
 #define DRM_MODE_REFLECT_MASK (DRM_MODE_REFLECT_X | DRM_MODE_REFLECT_Y)
+#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED 0
+#define DRM_MODE_CONTENT_PROTECTION_DESIRED 1
+#define DRM_MODE_CONTENT_PROTECTION_ENABLED 2
 struct drm_mode_modeinfo {
   __u32 clock;
   __u16 hdisplay;
@@ -345,7 +350,7 @@
   __u64 blue;
 };
 struct drm_color_ctm {
-  __s64 matrix[9];
+  __u64 matrix[9];
 };
 struct drm_color_lut {
   __u16 red;
diff --git a/libc/kernel/uapi/drm/etnaviv_drm.h b/libc/kernel/uapi/drm/etnaviv_drm.h
index 58bd536..bb502d9 100644
--- a/libc/kernel/uapi/drm/etnaviv_drm.h
+++ b/libc/kernel/uapi/drm/etnaviv_drm.h
@@ -34,6 +34,12 @@
 #define ETNAVIV_PARAM_GPU_FEATURES_4 0x07
 #define ETNAVIV_PARAM_GPU_FEATURES_5 0x08
 #define ETNAVIV_PARAM_GPU_FEATURES_6 0x09
+#define ETNAVIV_PARAM_GPU_FEATURES_7 0x0a
+#define ETNAVIV_PARAM_GPU_FEATURES_8 0x0b
+#define ETNAVIV_PARAM_GPU_FEATURES_9 0x0c
+#define ETNAVIV_PARAM_GPU_FEATURES_10 0x0d
+#define ETNAVIV_PARAM_GPU_FEATURES_11 0x0e
+#define ETNAVIV_PARAM_GPU_FEATURES_12 0x0f
 #define ETNAVIV_PARAM_GPU_STREAM_COUNT 0x10
 #define ETNAVIV_PARAM_GPU_REGISTER_MAX 0x11
 #define ETNAVIV_PARAM_GPU_THREAD_COUNT 0x12
diff --git a/libc/kernel/uapi/drm/exynos_drm.h b/libc/kernel/uapi/drm/exynos_drm.h
index 9514d75..ed9022b 100644
--- a/libc/kernel/uapi/drm/exynos_drm.h
+++ b/libc/kernel/uapi/drm/exynos_drm.h
@@ -80,103 +80,6 @@
 struct drm_exynos_g2d_exec {
   __u64 async;
 };
-enum drm_exynos_ops_id {
-  EXYNOS_DRM_OPS_SRC,
-  EXYNOS_DRM_OPS_DST,
-  EXYNOS_DRM_OPS_MAX,
-};
-struct drm_exynos_sz {
-  __u32 hsize;
-  __u32 vsize;
-};
-struct drm_exynos_pos {
-  __u32 x;
-  __u32 y;
-  __u32 w;
-  __u32 h;
-};
-enum drm_exynos_flip {
-  EXYNOS_DRM_FLIP_NONE = (0 << 0),
-  EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),
-  EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),
-  EXYNOS_DRM_FLIP_BOTH = EXYNOS_DRM_FLIP_VERTICAL | EXYNOS_DRM_FLIP_HORIZONTAL,
-};
-enum drm_exynos_degree {
-  EXYNOS_DRM_DEGREE_0,
-  EXYNOS_DRM_DEGREE_90,
-  EXYNOS_DRM_DEGREE_180,
-  EXYNOS_DRM_DEGREE_270,
-};
-enum drm_exynos_planer {
-  EXYNOS_DRM_PLANAR_Y,
-  EXYNOS_DRM_PLANAR_CB,
-  EXYNOS_DRM_PLANAR_CR,
-  EXYNOS_DRM_PLANAR_MAX,
-};
-struct drm_exynos_ipp_prop_list {
-  __u32 version;
-  __u32 ipp_id;
-  __u32 count;
-  __u32 writeback;
-  __u32 flip;
-  __u32 degree;
-  __u32 csc;
-  __u32 crop;
-  __u32 scale;
-  __u32 refresh_min;
-  __u32 refresh_max;
-  __u32 reserved;
-  struct drm_exynos_sz crop_min;
-  struct drm_exynos_sz crop_max;
-  struct drm_exynos_sz scale_min;
-  struct drm_exynos_sz scale_max;
-};
-struct drm_exynos_ipp_config {
-  __u32 ops_id;
-  __u32 flip;
-  __u32 degree;
-  __u32 fmt;
-  struct drm_exynos_sz sz;
-  struct drm_exynos_pos pos;
-};
-enum drm_exynos_ipp_cmd {
-  IPP_CMD_NONE,
-  IPP_CMD_M2M,
-  IPP_CMD_WB,
-  IPP_CMD_OUTPUT,
-  IPP_CMD_MAX,
-};
-struct drm_exynos_ipp_property {
-  struct drm_exynos_ipp_config config[EXYNOS_DRM_OPS_MAX];
-  __u32 cmd;
-  __u32 ipp_id;
-  __u32 prop_id;
-  __u32 refresh_rate;
-};
-enum drm_exynos_ipp_buf_type {
-  IPP_BUF_ENQUEUE,
-  IPP_BUF_DEQUEUE,
-};
-struct drm_exynos_ipp_queue_buf {
-  __u32 ops_id;
-  __u32 buf_type;
-  __u32 prop_id;
-  __u32 buf_id;
-  __u32 handle[EXYNOS_DRM_PLANAR_MAX];
-  __u32 reserved;
-  __u64 user_data;
-};
-enum drm_exynos_ipp_ctrl {
-  IPP_CTRL_PLAY,
-  IPP_CTRL_STOP,
-  IPP_CTRL_PAUSE,
-  IPP_CTRL_RESUME,
-  IPP_CTRL_MAX,
-};
-struct drm_exynos_ipp_cmd_ctrl {
-  __u32 prop_id;
-  __u32 ctrl;
-};
 #define DRM_EXYNOS_GEM_CREATE 0x00
 #define DRM_EXYNOS_GEM_MAP 0x01
 #define DRM_EXYNOS_GEM_GET 0x04
@@ -184,10 +87,6 @@
 #define DRM_EXYNOS_G2D_GET_VER 0x20
 #define DRM_EXYNOS_G2D_SET_CMDLIST 0x21
 #define DRM_EXYNOS_G2D_EXEC 0x22
-#define DRM_EXYNOS_IPP_GET_PROPERTY 0x30
-#define DRM_EXYNOS_IPP_SET_PROPERTY 0x31
-#define DRM_EXYNOS_IPP_QUEUE_BUF 0x32
-#define DRM_EXYNOS_IPP_CMD_CTRL 0x33
 #define DRM_IOCTL_EXYNOS_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
 #define DRM_IOCTL_EXYNOS_GEM_MAP DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_MAP, struct drm_exynos_gem_map)
 #define DRM_IOCTL_EXYNOS_GEM_GET DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_GEM_GET, struct drm_exynos_gem_info)
@@ -195,12 +94,7 @@
 #define DRM_IOCTL_EXYNOS_G2D_GET_VER DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_GET_VER, struct drm_exynos_g2d_get_ver)
 #define DRM_IOCTL_EXYNOS_G2D_SET_CMDLIST DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_SET_CMDLIST, struct drm_exynos_g2d_set_cmdlist)
 #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
-#define DRM_IOCTL_EXYNOS_IPP_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_GET_PROPERTY, struct drm_exynos_ipp_prop_list)
-#define DRM_IOCTL_EXYNOS_IPP_SET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_SET_PROPERTY, struct drm_exynos_ipp_property)
-#define DRM_IOCTL_EXYNOS_IPP_QUEUE_BUF DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_QUEUE_BUF, struct drm_exynos_ipp_queue_buf)
-#define DRM_IOCTL_EXYNOS_IPP_CMD_CTRL DRM_IOWR(DRM_COMMAND_BASE + DRM_EXYNOS_IPP_CMD_CTRL, struct drm_exynos_ipp_cmd_ctrl)
 #define DRM_EXYNOS_G2D_EVENT 0x80000000
-#define DRM_EXYNOS_IPP_EVENT 0x80000001
 struct drm_exynos_g2d_event {
   struct drm_event base;
   __u64 user_data;
@@ -209,15 +103,6 @@
   __u32 cmdlist_no;
   __u32 reserved;
 };
-struct drm_exynos_ipp_event {
-  struct drm_event base;
-  __u64 user_data;
-  __u32 tv_sec;
-  __u32 tv_usec;
-  __u32 prop_id;
-  __u32 reserved;
-  __u32 buf_id[EXYNOS_DRM_OPS_MAX];
-};
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/i915_drm.h b/libc/kernel/uapi/drm/i915_drm.h
index 34342bf..4c1d87f 100644
--- a/libc/kernel/uapi/drm/i915_drm.h
+++ b/libc/kernel/uapi/drm/i915_drm.h
@@ -29,6 +29,32 @@
   I915_MOCS_PTE,
   I915_MOCS_CACHED,
 };
+enum drm_i915_gem_engine_class {
+  I915_ENGINE_CLASS_RENDER = 0,
+  I915_ENGINE_CLASS_COPY = 1,
+  I915_ENGINE_CLASS_VIDEO = 2,
+  I915_ENGINE_CLASS_VIDEO_ENHANCE = 3,
+  I915_ENGINE_CLASS_INVALID = - 1
+};
+enum drm_i915_pmu_engine_sample {
+  I915_SAMPLE_BUSY = 0,
+  I915_SAMPLE_WAIT = 1,
+  I915_SAMPLE_SEMA = 2
+};
+#define I915_PMU_SAMPLE_BITS (4)
+#define I915_PMU_SAMPLE_MASK (0xf)
+#define I915_PMU_SAMPLE_INSTANCE_BITS (8)
+#define I915_PMU_CLASS_SHIFT (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS)
+#define __I915_PMU_ENGINE(class,instance,sample) ((class) << I915_PMU_CLASS_SHIFT | (instance) << I915_PMU_SAMPLE_BITS | (sample))
+#define I915_PMU_ENGINE_BUSY(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY)
+#define I915_PMU_ENGINE_WAIT(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT)
+#define I915_PMU_ENGINE_SEMA(class,instance) __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA)
+#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x))
+#define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0)
+#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_LAST I915_PMU_RC6_RESIDENCY
 #define I915_NR_TEX_REGIONS 255
 #define I915_LOG_MIN_TEX_REGION_SIZE 14
 typedef struct _drm_i915_init {
@@ -174,6 +200,7 @@
 #define DRM_I915_PERF_OPEN 0x36
 #define DRM_I915_PERF_ADD_CONFIG 0x37
 #define DRM_I915_PERF_REMOVE_CONFIG 0x38
+#define DRM_I915_QUERY 0x39
 #define DRM_IOCTL_I915_INIT DRM_IOW(DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
 #define DRM_IOCTL_I915_FLUSH DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLUSH)
 #define DRM_IOCTL_I915_FLIP DRM_IO(DRM_COMMAND_BASE + DRM_I915_FLIP)
@@ -230,6 +257,7 @@
 #define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)
 #define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
 #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
+#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
 typedef struct drm_i915_batchbuffer {
   int start;
   int used;
@@ -304,6 +332,8 @@
 #define I915_PARAM_SUBSLICE_MASK 47
 #define I915_PARAM_HAS_EXEC_BATCH_FIRST 48
 #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49
+#define I915_PARAM_HAS_CONTEXT_ISOLATION 50
+#define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51
 typedef struct drm_i915_getparam {
   __s32 param;
   int __user * value;
@@ -721,6 +751,29 @@
   __u64 boolean_regs_ptr;
   __u64 flex_regs_ptr;
 };
+struct drm_i915_query_item {
+  __u64 query_id;
+#define DRM_I915_QUERY_TOPOLOGY_INFO 1
+  __s32 length;
+  __u32 flags;
+  __u64 data_ptr;
+};
+struct drm_i915_query {
+  __u32 num_items;
+  __u32 flags;
+  __u64 items_ptr;
+};
+struct drm_i915_query_topology_info {
+  __u16 flags;
+  __u16 max_slices;
+  __u16 max_subslices;
+  __u16 max_eus_per_subslice;
+  __u16 subslice_offset;
+  __u16 subslice_stride;
+  __u16 eu_offset;
+  __u16 eu_stride;
+  __u8 data[];
+};
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/msm_drm.h b/libc/kernel/uapi/drm/msm_drm.h
index d2f1b57..1d53c5d 100644
--- a/libc/kernel/uapi/drm/msm_drm.h
+++ b/libc/kernel/uapi/drm/msm_drm.h
@@ -105,7 +105,8 @@
 #define MSM_SUBMIT_NO_IMPLICIT 0x80000000
 #define MSM_SUBMIT_FENCE_FD_IN 0x40000000
 #define MSM_SUBMIT_FENCE_FD_OUT 0x20000000
-#define MSM_SUBMIT_FLAGS (MSM_SUBMIT_NO_IMPLICIT | MSM_SUBMIT_FENCE_FD_IN | MSM_SUBMIT_FENCE_FD_OUT | 0)
+#define MSM_SUBMIT_SUDO 0x10000000
+#define MSM_SUBMIT_FLAGS (MSM_SUBMIT_NO_IMPLICIT | MSM_SUBMIT_FENCE_FD_IN | MSM_SUBMIT_FENCE_FD_OUT | MSM_SUBMIT_SUDO | 0)
 struct drm_msm_gem_submit {
   __u32 flags;
   __u32 fence;
diff --git a/libc/kernel/uapi/drm/vc4_drm.h b/libc/kernel/uapi/drm/vc4_drm.h
index 3ca378f..05ed172 100644
--- a/libc/kernel/uapi/drm/vc4_drm.h
+++ b/libc/kernel/uapi/drm/vc4_drm.h
@@ -33,6 +33,9 @@
 #define DRM_VC4_GET_TILING 0x09
 #define DRM_VC4_LABEL_BO 0x0a
 #define DRM_VC4_GEM_MADVISE 0x0b
+#define DRM_VC4_PERFMON_CREATE 0x0c
+#define DRM_VC4_PERFMON_DESTROY 0x0d
+#define DRM_VC4_PERFMON_GET_VALUES 0x0e
 #define DRM_IOCTL_VC4_SUBMIT_CL DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl)
 #define DRM_IOCTL_VC4_WAIT_SEQNO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno)
 #define DRM_IOCTL_VC4_WAIT_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_BO, struct drm_vc4_wait_bo)
@@ -45,6 +48,9 @@
 #define DRM_IOCTL_VC4_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling)
 #define DRM_IOCTL_VC4_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo)
 #define DRM_IOCTL_VC4_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise)
+#define DRM_IOCTL_VC4_PERFMON_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create)
+#define DRM_IOCTL_VC4_PERFMON_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy)
+#define DRM_IOCTL_VC4_PERFMON_GET_VALUES DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values)
 struct drm_vc4_submit_rcl_surface {
   __u32 hindex;
   __u32 offset;
@@ -84,6 +90,8 @@
 #define VC4_SUBMIT_CL_RCL_ORDER_INCREASING_Y (1 << 3)
   __u32 flags;
   __u64 seqno;
+  __u32 perfmonid;
+  __u32 pad2;
 };
 struct drm_vc4_wait_seqno {
   __u64 seqno;
@@ -145,6 +153,7 @@
 #define DRM_VC4_PARAM_SUPPORTS_THREADED_FS 5
 #define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER 6
 #define DRM_VC4_PARAM_SUPPORTS_MADVISE 7
+#define DRM_VC4_PARAM_SUPPORTS_PERFMON 8
 struct drm_vc4_get_param {
   __u32 param;
   __u32 pad;
@@ -175,6 +184,52 @@
   __u32 retained;
   __u32 pad;
 };
+enum {
+  VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER,
+  VC4_PERFCNT_FEP_VALID_PRIMS_RENDER,
+  VC4_PERFCNT_FEP_CLIPPED_QUADS,
+  VC4_PERFCNT_FEP_VALID_QUADS,
+  VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL,
+  VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL,
+  VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL,
+  VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE,
+  VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE,
+  VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF,
+  VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT,
+  VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING,
+  VC4_PERFCNT_PSE_PRIMS_REVERSED,
+  VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD,
+  VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS,
+  VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT,
+  VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS,
+  VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT,
+  VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS,
+  VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED,
+  VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS,
+  VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED,
+  VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED,
+  VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT,
+  VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS,
+  VC4_PERFCNT_NUM_EVENTS,
+};
+#define DRM_VC4_MAX_PERF_COUNTERS 16
+struct drm_vc4_perfmon_create {
+  __u32 id;
+  __u32 ncounters;
+  __u8 events[DRM_VC4_MAX_PERF_COUNTERS];
+};
+struct drm_vc4_perfmon_destroy {
+  __u32 id;
+};
+struct drm_vc4_perfmon_get_values {
+  __u32 id;
+  __u64 values_ptr;
+};
 #ifdef __cplusplus
 #endif
 #endif
diff --git a/libc/kernel/uapi/drm/virtgpu_drm.h b/libc/kernel/uapi/drm/virtgpu_drm.h
index 31e6715..6b7fb0b 100644
--- a/libc/kernel/uapi/drm/virtgpu_drm.h
+++ b/libc/kernel/uapi/drm/virtgpu_drm.h
@@ -44,6 +44,7 @@
   __u32 pad;
 };
 #define VIRTGPU_PARAM_3D_FEATURES 1
+#define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2
 struct drm_virtgpu_getparam {
   __u64 param;
   __u64 value;