xref: /aosp_15_r20/external/mesa3d/src/intel/tools/error_decode_xe_lib.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2024 Intel Corporation
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #pragma once
7 
8 #include <stdbool.h>
9 #include <stdint.h>
10 
11 enum xe_topic {
12    XE_TOPIC_DEVICE = 0,
13    XE_TOPIC_GUC_CT,
14    XE_TOPIC_JOB,
15    XE_TOPIC_HW_ENGINES,
16    XE_TOPIC_VM,
17    XE_TOPIC_INVALID,
18 };
19 
20 enum xe_vm_topic_type {
21    XE_VM_TOPIC_TYPE_UNKNOWN = 0,
22    XE_VM_TOPIC_TYPE_LENGTH,
23    XE_VM_TOPIC_TYPE_DATA,
24    XE_VM_TOPIC_TYPE_ERROR,
25 };
26 
27 struct xe_vm_entry {
28    uint64_t address;
29    uint32_t length;
30    const uint32_t *data;
31 };
32 
33 struct xe_vm {
34    /* TODO: entries could be appended sorted or a hash could be used to
35     * optimize performance
36     */
37    struct xe_vm_entry *entries;
38    uint32_t entries_len;
39 
40    struct xe_vm_entry hw_context;
41 };
42 
43 bool error_decode_xe_read_u64_hexacimal_parameter(const char *line, const char *parameter, uint64_t *value);
44 bool error_decode_xe_read_hexacimal_parameter(const char *line, const char *parameter, uint32_t *value);
45 bool error_decode_xe_read_engine_name(const char *line, char *ring_name);
46 
47 bool error_decode_xe_decode_topic(const char *line, enum xe_topic *new_topic);
48 
49 enum xe_vm_topic_type error_decode_xe_read_vm_line(const char *line, uint64_t *address, const char **value_ptr);
50 enum xe_vm_topic_type error_decode_xe_read_hw_sp_or_ctx_line(const char *line, const char **value_ptr, bool *is_hw_ctx);
51 
52 void error_decode_xe_vm_init(struct xe_vm *xe_vm);
53 void error_decode_xe_vm_fini(struct xe_vm *xe_vm);
54 void error_decode_xe_vm_hw_ctx_set(struct xe_vm *xe_vm, const uint32_t length, const uint32_t *data);
55 bool error_decode_xe_vm_append(struct xe_vm *xe_vm, const uint64_t address, const uint32_t length, const uint32_t *data);
56 const struct xe_vm_entry *error_decode_xe_vm_entry_get(struct xe_vm *xe_vm, const uint64_t address);
57 uint32_t *error_decode_xe_vm_entry_address_get_data(const struct xe_vm_entry *entry, const uint64_t address);
58 uint32_t error_decode_xe_vm_entry_address_get_len(const struct xe_vm_entry *entry, const uint64_t address);
59 
60 bool error_decode_xe_ascii85_decode_allocated(const char *in, uint32_t *out, uint32_t vm_entry_bytes_len);
61