On Wed, 2025-02-05 at 11:53 +0100, Erik Faye-Lund wrote: > On Tue, 2025-02-04 at 17:28 -0600, Rob Herring (Arm) wrote: > > Use an enum instead of #defines for panthor IOCTLs. This allows the > > header to be used with Rust code as bindgen can't handle complex > > defines. > > > > > Unfortunately, this goes in the opposite direction than what I was > asked to do here: > > https://lore.kernel.org/dri-devel/20241029140125.0607c26f@xxxxxxxxxxxxx/ > > ...I still intend to get around to doing that, because we have > problems > with C enum and large values. I don't know if we can solve that while > making Rust happy without requiring C23 (which allows to specify the > underlying type of an enum), unfortunately... > Seems I misunderstood Boris, and he was referring to flags. The enums are of course fine to make into real enums. > > Cc: Beata Michalska <beata.michalska@xxxxxxx> > > Signed-off-by: Rob Herring (Arm) <robh@xxxxxxxxxx> > > --- > > include/uapi/drm/panthor_drm.h | 86 +++++++++++++++++------------- > > -- > > -- > > 1 file changed, 44 insertions(+), 42 deletions(-) > > > > diff --git a/include/uapi/drm/panthor_drm.h > > b/include/uapi/drm/panthor_drm.h > > index b99763cbae48..97e2c4510e69 100644 > > --- a/include/uapi/drm/panthor_drm.h > > +++ b/include/uapi/drm/panthor_drm.h > > @@ -129,48 +129,6 @@ enum drm_panthor_ioctl_id { > > DRM_PANTHOR_TILER_HEAP_DESTROY, > > }; > > > > -/** > > - * DRM_IOCTL_PANTHOR() - Build a Panthor IOCTL number > > - * @__access: Access type. Must be R, W or RW. > > - * @__id: One of the DRM_PANTHOR_xxx id. > > - * @__type: Suffix of the type being passed to the IOCTL. > > - * > > - * Don't use this macro directly, use the DRM_IOCTL_PANTHOR_xxx > > - * values instead. > > - * > > - * Return: An IOCTL number to be passed to ioctl() from userspace. > > - */ > > -#define DRM_IOCTL_PANTHOR(__access, __id, __type) \ > > - DRM_IO ## __access(DRM_COMMAND_BASE + DRM_PANTHOR_ ## > > __id, > > \ > > - struct drm_panthor_ ## __type) > > - > > -#define DRM_IOCTL_PANTHOR_DEV_QUERY \ > > - DRM_IOCTL_PANTHOR(WR, DEV_QUERY, dev_query) > > -#define DRM_IOCTL_PANTHOR_VM_CREATE \ > > - DRM_IOCTL_PANTHOR(WR, VM_CREATE, vm_create) > > -#define DRM_IOCTL_PANTHOR_VM_DESTROY \ > > - DRM_IOCTL_PANTHOR(WR, VM_DESTROY, vm_destroy) > > -#define DRM_IOCTL_PANTHOR_VM_BIND \ > > - DRM_IOCTL_PANTHOR(WR, VM_BIND, vm_bind) > > -#define DRM_IOCTL_PANTHOR_VM_GET_STATE \ > > - DRM_IOCTL_PANTHOR(WR, VM_GET_STATE, vm_get_state) > > -#define DRM_IOCTL_PANTHOR_BO_CREATE \ > > - DRM_IOCTL_PANTHOR(WR, BO_CREATE, bo_create) > > -#define DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET \ > > - DRM_IOCTL_PANTHOR(WR, BO_MMAP_OFFSET, bo_mmap_offset) > > -#define DRM_IOCTL_PANTHOR_GROUP_CREATE \ > > - DRM_IOCTL_PANTHOR(WR, GROUP_CREATE, group_create) > > -#define DRM_IOCTL_PANTHOR_GROUP_DESTROY \ > > - DRM_IOCTL_PANTHOR(WR, GROUP_DESTROY, group_destroy) > > -#define DRM_IOCTL_PANTHOR_GROUP_SUBMIT \ > > - DRM_IOCTL_PANTHOR(WR, GROUP_SUBMIT, group_submit) > > -#define DRM_IOCTL_PANTHOR_GROUP_GET_STATE \ > > - DRM_IOCTL_PANTHOR(WR, GROUP_GET_STATE, group_get_state) > > -#define DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE \ > > - DRM_IOCTL_PANTHOR(WR, TILER_HEAP_CREATE, > > tiler_heap_create) > > -#define DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY \ > > - DRM_IOCTL_PANTHOR(WR, TILER_HEAP_DESTROY, > > tiler_heap_destroy) > > - > > /** > > * DOC: IOCTL arguments > > */ > > @@ -1019,6 +977,50 @@ struct drm_panthor_tiler_heap_destroy { > > __u32 pad; > > }; > > > > +/** > > + * DRM_IOCTL_PANTHOR() - Build a Panthor IOCTL number > > + * @__access: Access type. Must be R, W or RW. > > + * @__id: One of the DRM_PANTHOR_xxx id. > > + * @__type: Suffix of the type being passed to the IOCTL. > > + * > > + * Don't use this macro directly, use the DRM_IOCTL_PANTHOR_xxx > > + * values instead. > > + * > > + * Return: An IOCTL number to be passed to ioctl() from userspace. > > + */ > > +#define DRM_IOCTL_PANTHOR(__access, __id, __type) \ > > + DRM_IO ## __access(DRM_COMMAND_BASE + DRM_PANTHOR_ ## > > __id, > > \ > > + struct drm_panthor_ ## __type) > > + > > +enum { > > + DRM_IOCTL_PANTHOR_DEV_QUERY = > > + DRM_IOCTL_PANTHOR(WR, DEV_QUERY, dev_query), > > + DRM_IOCTL_PANTHOR_VM_CREATE = > > + DRM_IOCTL_PANTHOR(WR, VM_CREATE, vm_create), > > + DRM_IOCTL_PANTHOR_VM_DESTROY = > > + DRM_IOCTL_PANTHOR(WR, VM_DESTROY, vm_destroy), > > + DRM_IOCTL_PANTHOR_VM_BIND = > > + DRM_IOCTL_PANTHOR(WR, VM_BIND, vm_bind), > > + DRM_IOCTL_PANTHOR_VM_GET_STATE = > > + DRM_IOCTL_PANTHOR(WR, VM_GET_STATE, vm_get_state), > > + DRM_IOCTL_PANTHOR_BO_CREATE = > > + DRM_IOCTL_PANTHOR(WR, BO_CREATE, bo_create), > > + DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET = > > + DRM_IOCTL_PANTHOR(WR, BO_MMAP_OFFSET, > > bo_mmap_offset), > > + DRM_IOCTL_PANTHOR_GROUP_CREATE = > > + DRM_IOCTL_PANTHOR(WR, GROUP_CREATE, group_create), > > + DRM_IOCTL_PANTHOR_GROUP_DESTROY = > > + DRM_IOCTL_PANTHOR(WR, GROUP_DESTROY, > > group_destroy), > > + DRM_IOCTL_PANTHOR_GROUP_SUBMIT = > > + DRM_IOCTL_PANTHOR(WR, GROUP_SUBMIT, group_submit), > > + DRM_IOCTL_PANTHOR_GROUP_GET_STATE = > > + DRM_IOCTL_PANTHOR(WR, GROUP_GET_STATE, > > group_get_state), > > + DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE = > > + DRM_IOCTL_PANTHOR(WR, TILER_HEAP_CREATE, > > tiler_heap_create), > > + DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY = > > + DRM_IOCTL_PANTHOR(WR, TILER_HEAP_DESTROY, > > tiler_heap_destroy), > > +}; > > + > > #if defined(__cplusplus) > > } > > #endif >