History

drm/i915/uapi: introduce drm_i915_gem_create_ext

Same old gem_create but with now with extensions support. This is needed to support various upcoming usecases. v2:(Chris) - Use separate ioctl number for gem_create_ext, instead of hijacking the existing gem_create ioctl, otherwise we run into the issue with being unable to detect if the kernel supports the new extension behaviour. - We now have gem_create_ext.flags, which should be zeroed. - I915_GEM_CREATE_EXT_SETPARAM value is now zero, since this is the index into our array of extensions. - Setup a "vanilla" object which we can directly apply our extensions to. v3:(Daniel & Jason) - drop I915_GEM_CREATE_EXT_SETPARAM. Instead just have each extension do one thing only, instead of generic setparam which can cover various use cases. - add some kernel-doc.

Matthew Auld committed 5 years ago

Commit ebcb4021 parent 357814f4 files · +101 −0Browse files

Showing the changes to include/uapi (1 of 4 files). Show all

Unified · Split

include/uapi/drm/i915_drm.h+42−0
@@ -406,6 +406,7 @@ typedef struct _drm_i915_sarea { · 405 unmodified lines
406#define DRM_I915_QUERY 0x39406#define DRM_I915_QUERY 0x39
407#define DRM_I915_GEM_VM_CREATE 0x3a407#define DRM_I915_GEM_VM_CREATE 0x3a
408#define DRM_I915_GEM_VM_DESTROY 0x3b408#define DRM_I915_GEM_VM_DESTROY 0x3b
409#define DRM_I915_GEM_CREATE_EXT 0x3c
409/* Must be kept compact -- no holes */410/* Must be kept compact -- no holes */
410 411
411#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)412#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
@@ -438,6 +439,7 @@ typedef struct _drm_i915_sarea { · 26 unmodified lines
438#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)439#define DRM_IOCTL_I915_GEM_ENTERVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_ENTERVT)
439#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)440#define DRM_IOCTL_I915_GEM_LEAVEVT DRM_IO(DRM_COMMAND_BASE + DRM_I915_GEM_LEAVEVT)
440#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)441#define DRM_IOCTL_I915_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE, struct drm_i915_gem_create)
442#define DRM_IOCTL_I915_GEM_CREATE_EXT DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_CREATE_EXT, struct drm_i915_gem_create_ext)
441#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)443#define DRM_IOCTL_I915_GEM_PREAD DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PREAD, struct drm_i915_gem_pread)
442#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)444#define DRM_IOCTL_I915_GEM_PWRITE DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_PWRITE, struct drm_i915_gem_pwrite)
443#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)445#define DRM_IOCTL_I915_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GEM_MMAP, struct drm_i915_gem_mmap)
@@ -2598,6 +2600,46 @@ struct drm_i915_query_memory_regions { · 2154 unmodified lines
2598 struct drm_i915_memory_region_info regions[];2600 struct drm_i915_memory_region_info regions[];
2599};2601};
2600 2602
2603/**
2604 * struct drm_i915_gem_create_ext - Existing gem_create behaviour, with added
2605 * extension support using struct i915_user_extension.
2606 *
2607 * Note that in the future we want to have our buffer flags here, at least for
2608 * the stuff that is immutable. Previously we would have two ioctls, one to
2609 * create the object with gem_create, and another to apply various parameters,
2610 * however this creates some ambiguity for the params which are considered
2611 * immutable. Also in general we're phasing out the various SET/GET ioctls.
2612 */
2613struct drm_i915_gem_create_ext {
2614 /**
2615 * @size: Requested size for the object.
2616 *
2617 * The (page-aligned) allocated size for the object will be returned.
2618 *
2619 */
2620 __u64 size;
2621 /**
2622 * @handle: Returned handle for the object.
2623 *
2624 * Object handles are nonzero.
2625 */
2626 __u32 handle;
2627 /** @flags: MBZ */
2628 __u32 flags;
2629 /**
2630 * @extensions: The chain of extensions to apply to this object.
2631 *
2632 * This will be useful in the future when we need to support several
2633 * different extensions, and we need to apply more than one when
2634 * creating the object. See struct i915_user_extension.
2635 *
2636 * If we don't supply any extensions then we get the same old gem_create
2637 * behaviour.
2638 *
2639 */
2640 __u64 extensions;
2641};
2642
2601#if defined(__cplusplus)2643#if defined(__cplusplus)
2602}2644}
2603#endif2645#endif