diff options
Diffstat (limited to 'sys/linux')
| -rw-r--r-- | sys/linux/dev_dri.txt | 160 | ||||
| -rw-r--r-- | sys/linux/dev_dri.txt.const | 1 |
2 files changed, 98 insertions, 63 deletions
diff --git a/sys/linux/dev_dri.txt b/sys/linux/dev_dri.txt index e78bf4df0..fc47601b0 100644 --- a/sys/linux/dev_dri.txt +++ b/sys/linux/dev_dri.txt @@ -13,20 +13,20 @@ resource drmctx[int32] resource drm_agp_handle[intptr] resource drm_gem_handle[int32] resource drm_gem_name[int32] - -# TODO: these seems to be pretty important things, where does one get these? -type drm_crtc_id int32 -type drm_fb_id int32 +resource drm_obj_id[int32] +resource drm_crtc_id[drm_obj_id] +resource drm_connector_id[drm_obj_id] +resource drm_fb_id[drm_obj_id] syz_open_dev$dri(dev ptr[in, string["/dev/dri/card#"]], id intptr, flags flags[open_flags]) fd_dri syz_open_dev$dricontrol(dev ptr[in, string["/dev/dri/controlD#"]], id intptr, flags flags[open_flags]) fd_dri syz_open_dev$drirender(dev ptr[in, string["/dev/dri/renderD#"]], id intptr, flags flags[open_flags]) fd_dri openat$drirender128(fd const[AT_FDCWD], file ptr[in, string["/dev/dri/renderD128"]], flags flags[open_flags], mode const[0]) fd_dri -ioctl$DRM_IOCTL_VERSION(fd fd_dri, cmd const[DRM_IOCTL_VERSION], arg ptr[in, drm_version]) +ioctl$DRM_IOCTL_VERSION(fd fd_dri, cmd const[DRM_IOCTL_VERSION], arg ptr[inout, drm_version]) ioctl$DRM_IOCTL_GET_UNIQUE(fd fd_dri, cmd const[DRM_IOCTL_GET_UNIQUE], arg ptr[in, drm_unique$out]) ioctl$DRM_IOCTL_GET_MAGIC(fd fd_dri, cmd const[DRM_IOCTL_GET_MAGIC], arg ptr[in, int32]) -ioctl$DRM_IOCTL_IRQ_BUSID(fd fd_dri, cmd const[DRM_IOCTL_IRQ_BUSID], arg ptr[in, drm_irq_busid]) +ioctl$DRM_IOCTL_IRQ_BUSID(fd fd_dri, cmd const[DRM_IOCTL_IRQ_BUSID], arg ptr[inout, drm_irq_busid]) ioctl$DRM_IOCTL_GET_MAP(fd fd_dri, cmd const[DRM_IOCTL_GET_MAP], arg ptr[inout, drm_map$DRM_IOCTL_GET_MAP]) ioctl$DRM_IOCTL_GET_CLIENT(fd fd_dri, cmd const[DRM_IOCTL_GET_CLIENT], arg ptr[inout, drm_client]) ioctl$DRM_IOCTL_GET_STATS(fd fd_dri, cmd const[DRM_IOCTL_GET_STATS], arg buffer[out]) @@ -71,17 +71,17 @@ ioctl$DRM_IOCTL_MODESET_CTL(fd fd_dri, cmd const[DRM_IOCTL_MODESET_CTL], arg ptr ioctl$DRM_IOCTL_GEM_OPEN(fd fd_dri, cmd const[DRM_IOCTL_GEM_OPEN], arg ptr[inout, drm_gem_open]) ioctl$DRM_IOCTL_GEM_CLOSE(fd fd_dri, cmd const[DRM_IOCTL_GEM_CLOSE], arg ptr[in, drm_gem_close]) ioctl$DRM_IOCTL_GEM_FLINK(fd fd_dri, cmd const[DRM_IOCTL_GEM_FLINK], arg ptr[inout, drm_gem_flink]) -ioctl$DRM_IOCTL_MODE_GETRESOURCES(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETRESOURCES], arg ptr[in, drm_mode_card_res]) +ioctl$DRM_IOCTL_MODE_GETRESOURCES(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETRESOURCES], arg ptr[inout, drm_mode_card_res]) ioctl$DRM_IOCTL_PRIME_HANDLE_TO_FD(fd fd_dri, cmd const[DRM_IOCTL_PRIME_HANDLE_TO_FD], arg ptr[inout, drm_prime_handle$DRM_IOCTL_PRIME_HANDLE_TO_FD]) ioctl$DRM_IOCTL_PRIME_FD_TO_HANDLE(fd fd_dri, cmd const[DRM_IOCTL_PRIME_FD_TO_HANDLE], arg ptr[inout, drm_prime_handle$DRM_IOCTL_PRIME_FD_TO_HANDLE]) -ioctl$DRM_IOCTL_MODE_GETPLANERESOURCES(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPLANERESOURCES], arg ptr[in, drm_mode_get_plane_res]) -ioctl$DRM_IOCTL_MODE_GETCRTC(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETCRTC], arg ptr[in, drm_mode_crtc]) -ioctl$DRM_IOCTL_MODE_SETCRTC(fd fd_dri, cmd const[DRM_IOCTL_MODE_SETCRTC], arg ptr[in, drm_mode_crtc]) +ioctl$DRM_IOCTL_MODE_GETPLANERESOURCES(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPLANERESOURCES], arg ptr[inout, drm_mode_get_plane_res]) +ioctl$DRM_IOCTL_MODE_GETCRTC(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETCRTC], arg ptr[inout, drm_mode_crtc$DRM_IOCTL_MODE_GETCRTC]) +ioctl$DRM_IOCTL_MODE_SETCRTC(fd fd_dri, cmd const[DRM_IOCTL_MODE_SETCRTC], arg ptr[in, drm_mode_crtc$DRM_IOCTL_MODE_SETCRTC]) -ioctl$DRM_IOCTL_MODE_GETPLANE(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPLANE], arg ptr[in, drm_mode_get_plane]) +ioctl$DRM_IOCTL_MODE_GETPLANE(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPLANE], arg ptr[inout, drm_mode_get_plane]) ioctl$DRM_IOCTL_MODE_SETPLANE(fd fd_dri, cmd const[DRM_IOCTL_MODE_SETPLANE], arg ptr[in, drm_mode_set_plane]) -resource drm_plane_id[int32] +resource drm_plane_id[drm_obj_id] drm_mode_get_plane_res { ids ptr64[out, array[drm_plane_id]] @@ -89,10 +89,10 @@ drm_mode_get_plane_res { } drm_mode_get_plane { - plane_id drm_plane_id + plane_id drm_plane_id (in) # These are outputs: - crtc_id const[0, int32] - fb_id const[0, int32] + crtc_id drm_crtc_id + fb_id drm_fb_id possible_crtcs const[0, int32] gamma_size const[0, int32] count_format_types len[format_type_ptr, int32] @@ -154,32 +154,34 @@ drm_mode_crtc_lut { blue ptr64[in, array[int16]] } -ioctl$DRM_IOCTL_MODE_GETENCODER(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETENCODER], arg ptr[in, drm_mode_get_encoder]) +ioctl$DRM_IOCTL_MODE_GETENCODER(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETENCODER], arg ptr[inout, drm_mode_get_encoder]) + +resource drm_encoder_id[drm_obj_id] drm_mode_get_encoder { -# TODO: where does one get these? - encoder_id int32 + encoder_id drm_encoder_id (in) # Outputs: encoder_type const[0, int32] - crtc_id const[0, int32] + crtc_id drm_crtc_id (out) possible_crtcs const[0, int32] possible_clones const[0, int32] } -ioctl$DRM_IOCTL_MODE_GETCONNECTOR(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETCONNECTOR], arg ptr[in, drm_mode_get_connector]) +ioctl$DRM_IOCTL_MODE_GETCONNECTOR(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETCONNECTOR], arg ptr[inout, drm_mode_get_connector]) + +resource drm_prop_id[drm_obj_id] drm_mode_get_connector { # Everything except for connector_id are outputs. - encoders_ptr ptr64[out, array[int32]] - modes_ptr ptr64[out, array[int32]] - props_ptr ptr64[out, array[int32]] - prop_values_ptr ptr64[out, array[int32]] + encoders_ptr ptr64[out, array[drm_encoder_id]] + modes_ptr ptr64[out, array[drm_mode_modeinfo]] + props_ptr ptr64[out, array[drm_prop_id]] + prop_values_ptr ptr64[out, array[int64]] count_modes len[modes_ptr, int32] count_props len[props_ptr, int32] - count_encoders len[count_modes, int32] - encoder_id const[0, int32] -# TODO: where does one get these? - connector_id int32 + count_encoders len[encoders_ptr, int32] + encoder_id drm_encoder_id (out) + connector_id drm_connector_id (in) connector_type const[0, int32] connector_type_id const[0, int32] connection const[0, int32] @@ -189,10 +191,10 @@ drm_mode_get_connector { pad const[0, int32] } -ioctl$DRM_IOCTL_MODE_GETPROPERTY(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPROPERTY], arg ptr[in, drm_mode_get_property]) +ioctl$DRM_IOCTL_MODE_GETPROPERTY(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPROPERTY], arg ptr[inout, drm_mode_get_property]) ioctl$DRM_IOCTL_MODE_SETPROPERTY(fd fd_dri, cmd const[DRM_IOCTL_MODE_SETPROPERTY], arg ptr[in, drm_mode_connector_set_property]) ioctl$DRM_IOCTL_MODE_GETPROPBLOB(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETPROPBLOB], arg ptr[in, drm_mode_get_blob]) -ioctl$DRM_IOCTL_MODE_OBJ_GETPROPERTIES(fd fd_dri, cmd const[DRM_IOCTL_MODE_OBJ_GETPROPERTIES], arg ptr[in, drm_mode_obj_get_properties]) +ioctl$DRM_IOCTL_MODE_OBJ_GETPROPERTIES(fd fd_dri, cmd const[DRM_IOCTL_MODE_OBJ_GETPROPERTIES], arg ptr[inout, drm_mode_obj_get_properties]) ioctl$DRM_IOCTL_MODE_OBJ_SETPROPERTY(fd fd_dri, cmd const[DRM_IOCTL_MODE_OBJ_SETPROPERTY], arg ptr[in, drm_mode_obj_set_property]) ioctl$DRM_IOCTL_MODE_CREATEPROPBLOB(fd fd_dri, cmd const[DRM_IOCTL_MODE_CREATEPROPBLOB], arg ptr[inout, drm_mode_create_blob]) ioctl$DRM_IOCTL_MODE_DESTROYPROPBLOB(fd fd_dri, cmd const[DRM_IOCTL_MODE_DESTROYPROPBLOB], arg ptr[in, drm_mode_destroy_blob]) @@ -200,8 +202,7 @@ ioctl$DRM_IOCTL_MODE_DESTROYPROPBLOB(fd fd_dri, cmd const[DRM_IOCTL_MODE_DESTROY drm_mode_get_property { values_ptr ptr64[out, array[int64]] enum_blob_ptr ptr64[out, array[drm_mode_property_enum]] -# TODO: where does one get these? - prop_id int32 + prop_id drm_prop_id (in) flags const[0, int32] name array[const[0, int8], DRM_PROP_NAME_LEN] count_values len[values_ptr, int32] @@ -215,30 +216,29 @@ drm_mode_property_enum { drm_mode_connector_set_property { value int64 - prop_id int32 - connector_id int32 + prop_id drm_prop_id + connector_id drm_connector_id } drm_mode_obj_set_property { value int64 - prop_id int32 - obj_id int32 + prop_id drm_prop_id + obj_id drm_obj_id obj_type flags[drm_obj_type, int32] } drm_obj_type = DRM_MODE_OBJECT_CRTC, DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_ENCODER, DRM_MODE_OBJECT_MODE, DRM_MODE_OBJECT_PROPERTY, DRM_MODE_OBJECT_FB, DRM_MODE_OBJECT_BLOB, DRM_MODE_OBJECT_PLANE, DRM_MODE_OBJECT_ANY drm_mode_obj_get_properties { - props_ptr ptr64[in, array[int32]] + props_ptr ptr64[out, array[drm_prop_id]] # NEED: this should be the same size as props_ptr. prop_values_ptr ptr64[out, array[int64]] count_props len[props_ptr, int32] - obj_id int32 + obj_id drm_obj_id (in) obj_type flags[drm_obj_type, int32] } -# TODO: are there pre-existing blobs? what ids do they have? -resource drm_blob_id[int32]: 0, 1, 2 +resource drm_blob_id[drm_obj_id] drm_mode_get_blob { blob_id drm_blob_id @@ -256,11 +256,22 @@ drm_mode_destroy_blob { blob_id drm_blob_id } -ioctl$DRM_IOCTL_MODE_GETFB(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETFB], arg ptr[in, drm_mode_fb_cmd]) -ioctl$DRM_IOCTL_MODE_ADDFB(fd fd_dri, cmd const[DRM_IOCTL_MODE_ADDFB], arg ptr[in, drm_mode_fb_cmd]) -ioctl$DRM_IOCTL_MODE_ADDFB2(fd fd_dri, cmd const[DRM_IOCTL_MODE_ADDFB2], arg ptr[in, drm_mode_fb_cmd2]) +ioctl$DRM_IOCTL_MODE_GETFB(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETFB], arg ptr[inout, drm_mode_fb_cmd$DRM_IOCTL_MODE_GETFB]) +ioctl$DRM_IOCTL_MODE_ADDFB(fd fd_dri, cmd const[DRM_IOCTL_MODE_ADDFB], arg ptr[in, drm_mode_fb_cmd$DRM_IOCTL_MODE_ADDFB]) +ioctl$DRM_IOCTL_MODE_GETFB2(fd fd_dri, cmd const[DRM_IOCTL_MODE_GETFB2], arg ptr[inout, drm_mode_fb_cmd2$DRM_IOCTL_MODE_GETFB2]) +ioctl$DRM_IOCTL_MODE_ADDFB2(fd fd_dri, cmd const[DRM_IOCTL_MODE_ADDFB2], arg ptr[in, drm_mode_fb_cmd2$DRM_IOCTL_MODE_ADDFB2]) -drm_mode_fb_cmd { +drm_mode_fb_cmd$DRM_IOCTL_MODE_GETFB { + fb_id drm_fb_id (in) + width int32 (out) + height int32 (out) + pitch int32 (out) + bpp int32 (out) + depth int32 (out) + handle int32 (out) +} + +drm_mode_fb_cmd$DRM_IOCTL_MODE_ADDFB { fb_id drm_fb_id width int32 height int32 @@ -270,13 +281,25 @@ drm_mode_fb_cmd { handle int32 } -drm_mode_fb_cmd2 { +drm_mode_fb_cmd2$DRM_IOCTL_MODE_GETFB2 { + fb_id drm_fb_id (in) + width int32 + height int32 + pixel_format int32 + flags flags[drm_mode_fb_flags, int32] + handles array[drm_gem_handle, 4] (out) + pitches array[int32, 4] + offsets array[int32, 4] + modifier array[int64, 4] +} + +drm_mode_fb_cmd2$DRM_IOCTL_MODE_ADDFB2 { fb_id drm_fb_id width int32 height int32 pixel_format int32 flags flags[drm_mode_fb_flags, int32] - handles array[int32, 4] + handles array[drm_gem_handle, 4] pitches array[int32, 4] offsets array[int32, 4] modifier array[int64, 4] @@ -348,11 +371,11 @@ ioctl$DRM_IOCTL_MODE_ATOMIC(fd fd_dri, cmd const[DRM_IOCTL_MODE_ATOMIC], arg ptr drm_mode_atomic { flags flags[drm_mode_atomic_flags, int32] count_objs len[objs_ptr, int32] - objs_ptr ptr64[in, array[int32]] + objs_ptr ptr64[in, array[drm_obj_id]] # NEED: this array is probably parallel to objs_ptr. count_props_ptr ptr64[in, array[int32]] - props_ptr ptr64[in, array[int32]] - prop_values_ptr ptr64[in, array[int32]] + props_ptr ptr64[in, array[drm_prop_id]] + prop_values_ptr ptr64[in, array[int64]] reserved const[0, int64] user_data int64 } @@ -470,14 +493,13 @@ drm_syncobj_timeline_array { ioctl$DRM_IOCTL_MODE_CREATE_LEASE(fd fd_dri, cmd const[DRM_IOCTL_MODE_CREATE_LEASE], arg ptr[inout, drm_mode_create_lease]) ioctl$DRM_IOCTL_MODE_LIST_LESSEES(fd fd_dri, cmd const[DRM_IOCTL_MODE_LIST_LESSEES], arg ptr[in, drm_mode_list_lessees]) -ioctl$DRM_IOCTL_MODE_GET_LEASE(fd fd_dri, cmd const[DRM_IOCTL_MODE_GET_LEASE], arg ptr[in, drm_mode_get_lease]) +ioctl$DRM_IOCTL_MODE_GET_LEASE(fd fd_dri, cmd const[DRM_IOCTL_MODE_GET_LEASE], arg ptr[inout, drm_mode_get_lease]) ioctl$DRM_IOCTL_MODE_REVOKE_LEASE(fd fd_dri, cmd const[DRM_IOCTL_MODE_REVOKE_LEASE], arg ptr[in, drm_mode_revoke_lease]) resource drm_lessee_id[int32] drm_mode_create_lease { -# TODO: what are these "object ids"? where does one get these? - object_ids ptr64[in, array[int32]] (in) + object_ids ptr64[in, array[drm_obj_id]] (in) object_count len[object_ids, int32] (in) flags flags[drm_mode_create_lease_flag, int32] (in) lessee_id drm_lessee_id (out) @@ -495,7 +517,7 @@ drm_mode_list_lessees { drm_mode_get_lease { count_objects len[objects_ptr, int32] pad const[0, int32] - objects_ptr ptr64[out, array[int32]] + objects_ptr ptr64[out, array[drm_obj_id]] } drm_mode_revoke_lease { @@ -525,10 +547,10 @@ drm_unique$out { } drm_irq_busid { - irq int32 - bus int32 - dev int32 - func int32 + irq int32 (out) + bus int32 (in) + dev int32 (in) + func int32 (in) } drm_map$DRM_IOCTL_GET_MAP { @@ -701,10 +723,10 @@ drm_gem_flink { } drm_mode_card_res { - fbid ptr64[out, array[int32]] - crtcid ptr64[out, array[int32]] - connid ptr64[out, array[int32]] - encid ptr64[out, array[int32]] + fbid ptr64[out, array[drm_fb_id]] + crtcid ptr64[out, array[drm_crtc_id]] + connid ptr64[out, array[drm_connector_id]] + encid ptr64[out, array[drm_encoder_id]] nfbid len[fbid, int32] ncrtcid len[crtcid, int32] nconnid len[connid, int32] @@ -727,8 +749,20 @@ drm_prime_handle$DRM_IOCTL_PRIME_FD_TO_HANDLE { fd fd_dri (in) } -drm_mode_crtc { - set_connectors_ptr ptr64[in, array[int32]] +drm_mode_crtc$DRM_IOCTL_MODE_GETCRTC { + set_connectors_ptr ptr64[in, array[const[0, int32]]] + count_connectors len[set_connectors_ptr, int32] + crtc_id drm_crtc_id (in) + fb_id drm_fb_id (out) + x int32 (out) + y int32 (out) + gamma_size int32 (out) + mode_valid int32 (out) + mode drm_mode_modeinfo (out) +} + +drm_mode_crtc$DRM_IOCTL_MODE_SETCRTC { + set_connectors_ptr ptr64[in, array[drm_connector_id]] count_connectors len[set_connectors_ptr, int32] crtc_id drm_crtc_id fb_id drm_fb_id diff --git a/sys/linux/dev_dri.txt.const b/sys/linux/dev_dri.txt.const index e65913d93..248118f5b 100644 --- a/sys/linux/dev_dri.txt.const +++ b/sys/linux/dev_dri.txt.const @@ -68,6 +68,7 @@ DRM_IOCTL_MODE_GETCONNECTOR = 3226494119 DRM_IOCTL_MODE_GETCRTC = 3228066977 DRM_IOCTL_MODE_GETENCODER = 3222561958 DRM_IOCTL_MODE_GETFB = 3223086253 +DRM_IOCTL_MODE_GETFB2 = 3228067022, 386:3227804878 DRM_IOCTL_MODE_GETGAMMA = 3223348388 DRM_IOCTL_MODE_GETPLANE = 3223348406 DRM_IOCTL_MODE_GETPLANERESOURCES = 3222299829, 386:3222037685 |
