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