blob: 4f1d8c9bb1e5f437145a35cc9113ffa42e756745 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MAGMA_INTEL_GEN_DEFS_H
#define MAGMA_INTEL_GEN_DEFS_H
#include <lib/magma/magma_common_defs.h>
#include "magma_intel_gen_vendor_id.h"
#define MAGMA_VENDOR_VERSION_INTEL 1
enum MagmaIntelGenQuery {
// Returns chip details (simple result)
kMagmaIntelGenQuerySubsliceAndEuTotal = MAGMA_QUERY_VENDOR_PARAM_0,
// Returns the GTT size (simple result)
kMagmaIntelGenQueryGttSize = MAGMA_QUERY_VENDOR_PARAM_0 + 1,
// Returns the number of pages of padding used when assigning GPU addresses (simple result)
kMagmaIntelGenQueryExtraPageCount = MAGMA_QUERY_VENDOR_PARAM_0 + 2,
// Returns magma_intel_gen_timestamp_query (buffer result)
kMagmaIntelGenQueryTimestamp = MAGMA_QUERY_VENDOR_PARAM_0 + 3,
// Returns magma_intel_gen_topology (buffer result, see struct magma_intel_gen_topology)
kMagmaIntelGenQueryTopology = MAGMA_QUERY_VENDOR_PARAM_0 + 4,
// Returns boolean (simple result)
kMagmaIntelGenQueryHasContextIsolation = MAGMA_QUERY_VENDOR_PARAM_0 + 5,
// Returns timestamp frequency (simple result)
kMagmaIntelGenQueryTimestampFrequency = MAGMA_QUERY_VENDOR_PARAM_0 + 6,
};
struct magma_intel_gen_timestamp_query {
uint64_t monotonic_raw_timestamp[2]; // start and end of sample interval
uint64_t monotonic_timestamp;
uint64_t device_timestamp;
} __attribute__((packed));
enum MagmaIntelGenCommandBufferFlags {
kMagmaIntelGenCommandBufferForRender = MAGMA_COMMAND_BUFFER_VENDOR_FLAGS_0,
kMagmaIntelGenCommandBufferForVideo = MAGMA_COMMAND_BUFFER_VENDOR_FLAGS_0 << 1,
};
struct magma_intel_gen_topology {
// The number of slices, subslices, and EUs, if none are disabled by masks.
uint32_t max_slice_count;
uint32_t max_subslice_count;
uint32_t max_eu_count; // executable units
uint32_t data_byte_count; // the number of data bytes immediately following this structure
// A variable amount of mask data follows this structure, starting with a slice enable mask,
// then for each enabled slice, there follows: a subslice enable mask and an EU enable mask for
// each enabled subslice. Each mask is contained within a multiple of 8 bits (little endian).
// Example: 2 slices, 3 subslices, 5 EUs
// 8 bits (2/2 slices enabled) = 0x3
// 8 bits (slice 0, 2/3 subslices enabled) = 0x6
// 8 bits (slice 0 subslice 1, 5/5 EUs enabled) = 0x1F
// 8 bits (slice 0 subslice 2, 4/5 EUs enabled) = 0x1D
// 8 bits (slice 1, 1/3 subslices enabled) = 0x2
// 8 bits (slice 1 subslice 1, 3/5 EUs enabled) = 0x1C
} __attribute__((packed));
#endif // MSD_INTEL_GEN_QUERY_H