• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_CONTEXT,
18    XE_TOPIC_INVALID,
19 };
20 
21 enum xe_vm_topic_type {
22    XE_VM_TOPIC_TYPE_UNKNOWN = 0,
23    XE_VM_TOPIC_TYPE_LENGTH,
24    XE_VM_TOPIC_TYPE_DATA,
25    XE_VM_TOPIC_TYPE_ERROR,
26 };
27 
28 struct xe_vm_entry {
29    uint64_t address;
30    uint32_t length;
31    const uint32_t *data;
32 };
33 
34 struct xe_vm {
35    /* TODO: entries could be appended sorted or a hash could be used to
36     * optimize performance
37     */
38    struct xe_vm_entry *entries;
39    uint32_t entries_len;
40 
41    struct xe_vm_entry hw_context;
42 };
43 
44 bool error_decode_xe_read_u64_hexacimal_parameter(const char *line, const char *parameter, uint64_t *value);
45 bool error_decode_xe_read_hexacimal_parameter(const char *line, const char *parameter, uint32_t *value);
46 bool error_decode_xe_read_engine_name(const char *line, char *ring_name);
47 
48 bool error_decode_xe_decode_topic(const char *line, enum xe_topic *new_topic);
49 
50 enum xe_vm_topic_type error_decode_xe_read_vm_line(const char *line, uint64_t *address, const char **value_ptr);
51 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);
52 
53 void error_decode_xe_vm_init(struct xe_vm *xe_vm);
54 void error_decode_xe_vm_fini(struct xe_vm *xe_vm);
55 void error_decode_xe_vm_hw_ctx_set(struct xe_vm *xe_vm, const uint32_t length, const uint32_t *data);
56 bool error_decode_xe_vm_append(struct xe_vm *xe_vm, const uint64_t address, const uint32_t length, const uint32_t *data);
57 const struct xe_vm_entry *error_decode_xe_vm_entry_get(struct xe_vm *xe_vm, const uint64_t address);
58 uint32_t *error_decode_xe_vm_entry_address_get_data(const struct xe_vm_entry *entry, const uint64_t address);
59 uint32_t error_decode_xe_vm_entry_address_get_len(const struct xe_vm_entry *entry, const uint64_t address);
60 
61 bool error_decode_xe_ascii85_decode_allocated(const char *in, uint32_t *out, uint32_t vm_entry_bytes_len);
62