github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/sys/linux/dev_mali.txt (about) 1 # Copyright 2024 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 # Generated on android14-gs-pixel-5.15-udc-d1 5 # CSF and non-csf builds have overlapping definitions. Must define 6 # "MALI_USE_CSF" during generation. 7 meta noextract 8 9 include <gpu/common/include/uapi/gpu/arm/midgard/mali_kbase_hwcnt_reader.h> 10 include <gpu/common/include/uapi/gpu/arm/midgard/mali_base_kernel.h> 11 include <gpu/common/include/uapi/gpu/arm/midgard/mali_kbase_ioctl.h> 12 include <gpu/mali_kbase/mali_kbase.h> 13 include <uapi/linux/fcntl.h> 14 15 define max_supported_streams (MAX_SUPPORTED_CSGS * MAX_SUPPORTED_STREAMS_PER_GROUP) 16 17 resource fd_kinstr[fd] 18 resource gpu_heap_va[int64] 19 resource kcpu_queue_id[int8] 20 resource cs_queue_group_handle[int8] 21 22 ioctl$KBASE_IOCTL_READ_USER_PAGE(fd fd_bifrost, cmd const[KBASE_IOCTL_READ_USER_PAGE], arg ptr[inout, kbase_ioctl_read_user_page]) 23 ioctl$KBASE_IOCTL_MEM_ALLOC_EX(fd fd_bifrost, cmd const[KBASE_IOCTL_MEM_ALLOC_EX], arg ptr[inout, kbase_ioctl_mem_alloc_ex]) 24 ioctl$KBASE_IOCTL_CS_CPU_QUEUE_DUMP(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_CPU_QUEUE_DUMP], arg ptr[in, kbase_ioctl_cs_cpu_queue_info]) 25 ioctl$KBASE_IOCTL_CS_GET_GLB_IFACE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_GET_GLB_IFACE], arg ptr[inout, kbase_ioctl_cs_get_glb_iface]) 26 ioctl$KBASE_IOCTL_CS_TILER_HEAP_TERM(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_TERM], arg ptr[in, kbase_ioctl_cs_tiler_heap_term]) 27 ioctl$KBASE_IOCTL_CS_TILER_HEAP_INIT_1_13(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_INIT_1_13], arg ptr[inout, kbase_ioctl_cs_tiler_heap_init_1_13]) 28 ioctl$KBASE_IOCTL_CS_TILER_HEAP_INIT(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_INIT], arg ptr[inout, kbase_ioctl_cs_tiler_heap_init]) 29 ioctl$KBASE_IOCTL_KCPU_QUEUE_ENQUEUE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_ENQUEUE], arg ptr[in, kbase_ioctl_kcpu_queue_enqueue]) 30 ioctl$KBASE_IOCTL_KCPU_QUEUE_DELETE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_DELETE], arg ptr[in, kbase_ioctl_kcpu_queue_delete]) 31 ioctl$KBASE_IOCTL_KCPU_QUEUE_CREATE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_CREATE], arg ptr[out, kbase_ioctl_kcpu_queue_new]) 32 ioctl$KBASE_IOCTL_CS_EVENT_SIGNAL(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_EVENT_SIGNAL]) 33 ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_TERMINATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_TERMINATE], arg ptr[in, kbase_ioctl_cs_queue_group_terminate]) 34 ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_CREATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_CREATE], arg ptr[inout, kbase_ioctl_cs_queue_group_create]) 35 ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_CREATE_1_6(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_CREATE_1_6], arg ptr[inout, kbase_ioctl_cs_queue_group_create_1_6]) 36 ioctl$KBASE_IOCTL_CS_QUEUE_TERMINATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_TERMINATE], arg ptr[in, kbase_ioctl_cs_queue_terminate]) 37 ioctl$KBASE_IOCTL_CS_QUEUE_REGISTER_EX(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_REGISTER_EX], arg ptr[in, kbase_ioctl_cs_queue_register_ex]) 38 ioctl$KBASE_IOCTL_CS_QUEUE_BIND(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_BIND], arg ptr[inout, kbase_ioctl_cs_queue_bind]) 39 ioctl$KBASE_IOCTL_CS_QUEUE_KICK(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_KICK], arg ptr[in, kbase_ioctl_cs_queue_kick]) 40 ioctl$KBASE_IOCTL_CS_QUEUE_REGISTER(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_REGISTER], arg ptr[in, base_ioctl_cs_queue_register]) 41 ioctl$KBASE_IOCTL_VERSION_CHECK_RESERVED(fd fd_bifrost, cmd const[KBASE_IOCTL_VERSION_CHECK_RESERVED], arg ptr[inout, kbase_ioctl_version_check]) 42 ioctl$KBASE_IOCTL_BUFFER_LIVENESS_UPDATE(fd fd_bifrost, cmd const[KBASE_IOCTL_BUFFER_LIVENESS_UPDATE], arg ptr[in, kbase_ioctl_buffer_liveness_update]) 43 ioctl$KBASE_IOCTL_KINSTR_PRFCNT_SETUP(fd fd_bifrost, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_SETUP], arg ptr[inout, kbase_ioctl_kinstr_prfcnt_setup]) fd_kinstr 44 ioctl$KBASE_IOCTL_KINSTR_PRFCNT_ENUM_INFO(fd fd_bifrost, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_ENUM_INFO], arg ptr[inout, kbase_ioctl_kinstr_prfcnt_enum_info]) 45 ioctl$KBASE_IOCTL_SET_LIMITED_CORE_COUNT(fd fd_bifrost, cmd const[KBASE_IOCTL_SET_LIMITED_CORE_COUNT], arg ptr[in, kbase_ioctl_set_limited_core_count]) 46 ioctl$KBASE_IOCTL_CONTEXT_PRIORITY_CHECK(fd fd_bifrost, cmd const[KBASE_IOCTL_CONTEXT_PRIORITY_CHECK], arg ptr[inout, kbase_ioctl_context_priority_check]) 47 ioctl$KBASE_HWCNT_READER_GET_BUFFER_WITH_CYCLES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_GET_BUFFER_WITH_CYCLES], arg ptr[out, kbase_hwcnt_reader_metadata_with_cycles]) 48 ioctl$KBASE_HWCNT_READER_PUT_BUFFER_WITH_CYCLES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_PUT_BUFFER_WITH_CYCLES], arg ptr[in, kbase_hwcnt_reader_metadata_with_cycles]) 49 ioctl$KBASE_HWCNT_READER_GET_API_VERSION_WITH_FEATURES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_GET_API_VERSION], arg ptr[out, kbase_hwcnt_reader_api_version]) 50 ioctl$KBASE_IOCTL_KINSTR_PRFCNT_CMD(fd fd_kinstr, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_CMD], arg ptr[in, prfcnt_control_cmd]) 51 ioctl$KBASE_IOCTL_KINSTR_PRFCNT_GET_SAMPLE(fd fd_kinstr, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_GET_SAMPLE], arg ptr[out, prfcnt_sample_access]) 52 ioctl$KBASE_IOCTL_KINSTR_PRFCNT_PUT_SAMPLE(fd fd_kinstr, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_PUT_SAMPLE], arg ptr[in, prfcnt_sample_access]) 53 54 kbase_hwcnt_reader_metadata_cycles { 55 top int64 56 shader_cores int64 57 } 58 59 kbase_hwcnt_reader_metadata_with_cycles { 60 timestamp int64 61 event_id int32 62 buffer_idx int32 63 cycles kbase_hwcnt_reader_metadata_cycles 64 } 65 66 kbase_hwcnt_reader_api_version { 67 version int32 68 features int32 69 } 70 71 kbase_ioctl_read_user_page { 72 offset flags[user_offsets, int32] 73 padding const[0, int32] 74 val_lo int32 (out_overlay) 75 val_hi int32 76 } 77 78 kbase_ioctl_mem_alloc_ex { 79 va_pages int64 80 commit_pages int64 81 extension int64 82 flags flags[base_mem_alloc_flags, int64] 83 fixed_address int64 84 extra array[const[0, int64], 3] 85 out_flags int64 (out_overlay) 86 gpu_va gpu_addr 87 } 88 89 kbase_ioctl_cs_cpu_queue_info { 90 buffer ptr64[in, array[int8]] 91 size len[buffer, int64] 92 } 93 94 kbase_ioctl_cs_get_glb_iface { 95 max_group_num int32[0:MAX_SUPPORTED_CSGS] 96 max_total_stream_num int32[0:max_supported_streams] 97 groups_ptr ptr64[out, int64] 98 streams_ptr ptr64[out, int64] 99 glb_version int32 (out_overlay) 100 features int32 101 group_num int32 102 prfcnt_size int32 103 total_stream_num int32 104 instr_featurs int32 105 } 106 107 kbase_ioctl_cs_tiler_heap_term { 108 gpu_heap_va gpu_heap_va 109 } 110 111 kbase_ioctl_cs_tiler_heap_init_1_13 { 112 chunk_size flags[tiler_heap_chunk_sizes, int32] 113 initial_chunks int32 114 max_chunks int32 115 target_in_flight int16 116 group_id int8[0:BASE_MEM_GROUP_COUNT] 117 padding const[0, int8] 118 gpu_heap_va gpu_heap_va (out_overlay) 119 first_chunk_va int64 120 } 121 122 kbase_ioctl_cs_tiler_heap_init { 123 chunk_size flags[tiler_heap_chunk_sizes, int32] 124 initial_chunks int32 125 max_chunks int32 126 target_in_flight int16 127 group_id int8[0:BASE_MEM_GROUP_COUNT] 128 padding const[0, int8] 129 buf_desc_va int64 130 gpu_heap_va gpu_heap_va (out_overlay) 131 first_chunk_va int64 132 } 133 134 kbase_ioctl_kcpu_queue_new { 135 id kcpu_queue_id 136 pad array[const[0, int8], 7] 137 } 138 139 kbase_ioctl_kcpu_queue_delete { 140 id kcpu_queue_id 141 pad array[const[0, int8], 7] 142 } 143 144 kbase_ioctl_kcpu_queue_enqueue { 145 addr gpu_addr 146 nr_commands len[addr, int32] 147 id kcpu_queue_id 148 padding array[const[0, int8], 3] 149 } 150 151 kbase_ioctl_cs_queue_terminate { 152 buffer_gpu_addr gpu_addr 153 } 154 155 kbase_ioctl_cs_queue_group_terminate { 156 group_handle cs_queue_group_handle 157 padding array[const[0, int8], 7] 158 } 159 160 kbase_ioctl_cs_queue_group_create { 161 tiler_mask int64 162 fragment_mask int64 163 compute_mask int64 164 cs_min int8 165 priority flags[queue_group_priority, int8] 166 tiler_max int8 167 fragment_max int8 168 compute_max int8 169 csi_handlers flags[csf_csi_flags, int8] 170 padding array[const[0, int8], 2] 171 reserved int64 172 group_handle cs_queue_group_handle (out_overlay) 173 padding_out array[const[0, int8], 3] 174 group_uid int32 175 } 176 177 kbase_ioctl_cs_queue_group_create_1_6 { 178 tiler_mask int64 179 fragment_mask int64 180 compute_mask int64 181 cs_min int8 182 priority flags[queue_group_priority, int8] 183 tiler_max int8 184 fragment_max int8 185 compute_max int8 186 padding array[const[0, int8], 2] 187 reserved int64 188 group_handle cs_queue_group_handle (out_overlay) 189 padding_out array[const[0, int8], 3] 190 group_uid int32 191 } 192 193 kbase_ioctl_cs_queue_register_ex { 194 buffer_gpu_addr gpu_addr 195 buffer_size int32 196 priority int8[0:BASE_QUEUE_MAX_PRIORITY] 197 padding array[const[0, int8], 3] 198 ex_offset_var_addr gpu_addr 199 ex_buffer_base gpu_addr 200 ex_buffer_size int32 201 ex_event_size int8 202 ex_event_state int8 203 ex_padding array[const[0, int8], 2] 204 } 205 206 kbase_ioctl_cs_queue_bind { 207 buffer_gpu_addr gpu_addr 208 group_handle cs_queue_group_handle 209 csi_index int8 210 padding array[const[0, int8], 6] 211 mmap_handle int64 (out_overlay) 212 } 213 214 kbase_ioctl_cs_queue_kick { 215 buffer_gpu_addr gpu_addr 216 } 217 218 base_ioctl_cs_queue_register { 219 buffer_gpu_addr gpu_addr 220 buffer_size int32 221 priority int8[0:BASE_QUEUE_MAX_PRIORITY] 222 padding array[const[0, int8], 6] 223 } 224 225 kbase_ioctl_buffer_liveness_update { 226 live_ranges_address ptr64[in, array[kbase_pixel_gpu_slc_liveness_mark]] 227 live_ranges_count len[live_ranges_address, int64] 228 buffer_va_address ptr64[in, array[gpu_addr]] 229 buffer_sizes_address ptr64[in, array[int64]] 230 buffer_count len[buffer_va_address, int64] 231 } 232 233 kbase_pixel_gpu_slc_liveness_mark { 234 type int32 235 index int32 236 } 237 238 kbase_ioctl_kinstr_prfcnt_setup { 239 request_item_count len[requests_ptr, int32] 240 request_item_size int32 241 requests_ptr ptr64[in, array[prfcnt_request_item]] 242 prfcnt_metadata_item_size int32 (out_overlay) 243 prfcnt_mmap_size_bytes int32 244 } 245 246 prfcnt_request_item { 247 hdr prfcnt_request_item_header 248 u prfcnt_request_union 249 } 250 251 prfcnt_request_item_header { 252 item_type flags[prfcnt_request_item_type, int16] 253 item_version const[0, int16] 254 } 255 256 prfcnt_request_union [ 257 req_mode prfcnt_request_mode 258 req_enable prfcnt_request_enable 259 req_scope prfcnt_request_scope 260 ] [varlen] 261 262 prfcnt_request_mode { 263 mode flags[prfcnt_mode, int8] 264 pad array[const[0, int8], 7] 265 mode_config prfcnt_request_mode_union 266 } 267 268 prfcnt_request_mode_union [ 269 periodic periodic_config 270 ] 271 272 periodic_config { 273 period_ns int64 274 } 275 276 prfcnt_request_enable { 277 block_type flags[prfcnt_block_type, int8] 278 set flags[prfcnt_set, int8] 279 pad array[const[0, int8], 6] 280 enable_mask array[int64, 2] 281 } 282 283 prfcnt_request_scope { 284 scope flags[prfcnt_scope, int8] 285 pad array[const[0, int8], 7] 286 } 287 288 kbase_ioctl_kinstr_prfcnt_enum_info { 289 info_item_size len[info_list_ptr, int32] 290 info_item_count bytesize[info_list_ptr, int32] 291 info_list_ptr ptr[out, array[prfcnt_enum_item]] 292 } 293 294 prfcnt_enum_item { 295 hdr prfcnt_enum_item_header 296 u prfcnt_enum_union 297 } 298 299 prfcnt_enum_item_header { 300 item_type flags[prfcnt_request_item_type, int16] 301 item_version const[0, int16] 302 } 303 304 prfcnt_enum_union [ 305 block_counter prfcnt_enum_block_counter 306 request prfcnt_enum_request 307 sample_info prfcnt_enum_sample_info 308 ] [varlen] 309 310 prfcnt_enum_block_counter { 311 block_type flags[prfcnt_block_type, int8] 312 set flags[prfcnt_set, int8] 313 pad array[const[0, int8], 2] 314 num_instances int16 315 num_values int16 316 counter_mask array[int64, 2] 317 } 318 319 prfcnt_enum_request { 320 request_item_type flags[prfcnt_request_enum_type, int16] 321 pad const[0, int16] 322 versions_mask const[0, int32] 323 } 324 325 prfcnt_enum_sample_info { 326 num_clock_domains int32 327 pad const[0, int32] 328 } 329 330 kbase_ioctl_set_limited_core_count { 331 max_core_count int8 332 } 333 334 kbase_ioctl_context_priority_check { 335 priority flags[queue_group_priority, int8] 336 } 337 338 prfcnt_control_cmd { 339 cmd flags[control_cmd, int16] 340 padding array[const[0, int16], 3] 341 user_data ptr64[out, array[int64]] 342 } 343 344 prfcnt_sample_access { 345 sequence int64 346 sample_offset_bytes int64 347 } 348 349 csf_csi_flags = BASE_CSF_TILER_OOM_EXCEPTION_FLAG 350 user_offsets = LATEST_FLUSH 351 prfcnt_request_enum_type = PRFCNT_ENUM_TYPE_BLOCK, PRFCNT_ENUM_TYPE_REQUEST, PRFCNT_ENUM_TYPE_SAMPLE_INFO 352 prfcnt_request_item_type = PRFCNT_REQUEST_TYPE_MODE, PRFCNT_REQUEST_TYPE_ENABLE, PRFCNT_REQUEST_TYPE_SCOPE 353 prfcnt_scope = PRFCNT_SCOPE_GLOBAL, PRFCNT_SCOPE_RESERVED 354 prfcnt_set = PRFCNT_SET_PRIMARY, PRFCNT_SET_SECONDARY, PRFCNT_SET_TERTIARY, PRFCNT_SET_RESERVED 355 prfcnt_block_type = PRFCNT_BLOCK_TYPE_FE, PRFCNT_BLOCK_TYPE_TILER, PRFCNT_BLOCK_TYPE_MEMORY, PRFCNT_BLOCK_TYPE_SHADER_CORE, PRFCNT_BLOCK_TYPE_RESERVED 356 prfcnt_mode = PRFCNT_MODE_MANUAL, PRFCNT_MODE_PERIODIC, PRFCNT_MODE_RESERVED 357 tiler_heap_chunk_sizes = 2048, 4096 358 queue_group_priority = KBASE_QUEUE_GROUP_PRIORITY_REALTIME, KBASE_QUEUE_GROUP_PRIORITY_HIGH, KBASE_QUEUE_GROUP_PRIORITY_MEDIUM, KBASE_QUEUE_GROUP_PRIORITY_LOW, KBASE_QUEUE_GROUP_PRIORITY_COUNT 359 # PRFCNT_CONTROL_CMD_RESERVED is no longer supported 360 control_cmd = PRFCNT_CONTROL_CMD_START, PRFCNT_CONTROL_CMD_STOP, PRFCNT_CONTROL_CMD_SAMPLE_SYNC, PRFCNT_CONTROL_CMD_DISCARD