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