extern "C" {
#endif
+#define MAX_CONTEXT_COUNT 64
+
struct aub_ppgtt_table {
uint64_t phys_addr;
struct aub_ppgtt_table *subtables[512];
};
+struct aub_hw_context {
+ bool initialized;
+ uint64_t ring_addr;
+ uint64_t pphwsp_addr;
+};
+
+/* GEM context, as seen from userspace */
+struct aub_context {
+ uint32_t id;
+ struct aub_hw_context hw_contexts[I915_ENGINE_CLASS_VIDEO + 1];
+};
+
struct aub_file {
FILE *file;
+ bool has_default_setup;
+
/* Set if you want extra logging */
FILE *verbose_log_file;
int addr_bits;
struct aub_ppgtt_table pml4;
+ uint64_t phys_addrs_allocator;
+ uint64_t ggtt_addrs_allocator;
+
+ struct {
+ uint64_t hwsp_addr;
+ } engine_setup[I915_ENGINE_CLASS_VIDEO_ENHANCE + 1];
+
+ struct aub_context contexts[MAX_CONTEXT_COUNT];
+ int num_contexts;
+
+ uint32_t next_context_handle;
};
void aub_file_init(struct aub_file *aub, FILE *file, FILE *debug, uint16_t pci_id, const char *app_name);
void aub_write_default_setup(struct aub_file *aub);
void aub_map_ppgtt(struct aub_file *aub, uint64_t start, uint64_t size);
+void aub_write_ggtt(struct aub_file *aub, uint64_t virt_addr, uint64_t size, const void *data);
void aub_write_trace_block(struct aub_file *aub,
uint32_t type, void *virtual,
uint32_t size, uint64_t gtt_offset);
-void aub_write_exec(struct aub_file *aub, uint64_t batch_addr,
+void aub_write_exec(struct aub_file *aub, uint32_t ctx_id, uint64_t batch_addr,
uint64_t offset, enum drm_i915_gem_engine_class engine_class);
+void aub_write_context_execlists(struct aub_file *aub, uint64_t context_addr,
+ enum drm_i915_gem_engine_class engine_class);
+
+uint32_t aub_write_context_create(struct aub_file *aub, uint32_t *ctx_id);
#ifdef __cplusplus
}