STRUCT DRM_PVR_IOCTL_VM_MAP_ARGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct drm_pvr_ioctl_vm_map_args β€” NAME

okay so bestie, this is a Kernel API Manual page (the man page name is struct drm_p..._vm_map_args(9), yes the truncated vibe is intentional and yes it's iconic of the kernel docs to do that ✨), and it's literally all about:

struct drm_pvr_ioctl_vm_map_args β€” the args struct for %DRM_IOCTL_PVR_VM_MAP. That's it. That's the whole name section. Short queen. πŸŽ€


πŸ¦‹ SYNOPSIS

here's the whole struct, and ngl she's giving "I have exactly seven fields and I know it":

struct drm_pvr_ioctl_vm_map_args {
    __u32 vm_context_handle;
    __u32 flags;
    __u64 device_addr;
    __u32 handle;
    __u32 _padding_14;
    __u64 offset;
    __u64 size;
 };

✨ Members ✨

okay bestie this is the part you actually came for, let's go field by field, no skips, no cap 🫢

  • vm_context_handle β€” [IN] Handle for the VM context this mapping is gonna exist in. That's her home. 🏠
  • flags β€” [IN] Flags that affect this mapping. Currently always 0. Like, there are no flags yet. It's a flags field with a dream. πŸ’€
  • device_addr β€” [IN] The device-virtual address you're requesting for the mapping. Rules, and I cannot stress this enough, bestie:
    • it must be non-zero, no zeroes allowed πŸ™ˆ
    • it must be aligned to the device page size for the heap containing the requested address
    • it is an error to specify an address that isn't contained within one of the heaps returned by DRM_PVR_DEV_QUERY_HEAP_INFO_GET

so like, you can't just make up an address, she has to live in a real heap, periodt.

  • handle β€” [IN] Handle of the target buffer object. This must be a valid handle returned by DRM_IOCTL_PVR_CREATE_BO. No random numbers, the vibe check is strict. πŸ”₯
  • _padding_14 β€” Reserved. This field must be zeroed. Like actually, zero it. Don't be cute with it. 🚫
  • offset β€” [IN] Offset into the target bo from which to begin the mapping. Where in the bo you're starting from, basically. 🌸
  • size β€” [IN] Size of the requested mapping. And the alignment requirements are stacked, bestie:
    • it must be aligned to the device page size for the heap containing the requested address, as well as the host page size
    • when added to device_addr, the result must not overflow the heap which contains device_addr β€” i.e. the range specified by device_addr and size must be completely contained within a single heap specified by DRM_PVR_DEV_QUERY_HEAP_INFO_GET
⚠️ lowkey the whole "must be completely contained within a single heap" thing is the main character of this page. One heap. Not two. Don't try her. 😭

πŸ‘‘ SEE ALSO

every single one of these, bestie, in order, because the kernel docs said "list them all" and I respect the assignment 🧚

Kernel file ./include/uapi/drm/pvr_drm.h PowerVR UAPI(9), struct drm_pvr_obj_array(9), DRM_PVR_OBJ_ARRAY(9), PowerVR IOCTL interface(9), PVR_IOCTL(9), PowerVR IOCTL DEV_QUERY interface(9), struct drm_pvr_dev_query_gpu_info(9), struct drm_pvr_dev_query_runtime_info(9), struct drm_pvr_dev_query_quirks(9), struct drm_pvr_dev_query_enhancements(9), enum drm_pvr_heap_id(9), struct drm_pvr_heap(9), struct drm_pvr_dev_query_heap_info(9), enum drm_pvr_static_data_area_usage(9), struct drm_pvr_static_data_area(9), struct drm_pvr_dev_query_static_data_areas(9), enum drm_pvr_dev_query(9), struct drm_pvr_ioctl_dev_query_args(9), PowerVR IOCTL CREATE_BO interface(9), Flags for CREATE_BO(9), struct drm_pvr_ioctl_create_bo_args(9), PowerVR IOCTL GET_BO_MMAP_OFFSET interface(9), struct drm_pvr_ioctl_get_bo_mmap_offset_args(9), PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces(9), struct drm_pvr_ioctl_create_vm_context_args(9), struct drm_pvr_ioctl_destroy_vm_context_args(9), PowerVR IOCTL VM_MAP and VM_UNMAP interfaces(9), struct drm_pvr_ioctl_vm_unmap_args(9), PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces(9), enum drm_pvr_ctx_priority(9), enum drm_pvr_ctx_type(9), struct drm_pvr_ioctl_create_context_args(9), struct drm_pvr_ioctl_destroy_context_args(9), PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces(9), struct drm_pvr_ioctl_create_free_list_args(9), struct drm_pvr_ioctl_destroy_free_list_args(9), PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces(9), struct drm_pvr_create_hwrt_geom_data_args(9), struct drm_pvr_create_hwrt_rt_data_args(9), struct drm_pvr_ioctl_create_hwrt_dataset_args(9), struct drm_pvr_ioctl_destroy_hwrt_dataset_args(9), PowerVR IOCTL SUBMIT_JOBS interface(9), Flags for the drm_pvr_sync_op object.(9), struct drm_pvr_sync_op(9), Flags for SUBMIT_JOB ioctl geometry command.(9), Flags for SUBMIT_JOB ioctl fragment command.(9), Flags for SUBMIT_JOB ioctl compute command.(9), Flags for SUBMIT_JOB ioctl transfer command.(9), enum drm_pvr_job_type(9), struct drm_pvr_hwrt_data_ref(9), struct drm_pvr_job(9), struct drm_pvr_ioctl_submit_jobs_args(9)

like I said. All of them. πŸ’œ


and that's the page!! source/version is ./include/uapi/drm, dated October 2026 β€” she's from the future bestie, we stan a time-traveling man page β­πŸ’– bye!! πŸŽ€

πŸ“¦ where this page comes from