root/drivers/gpu/drm/xe/xe_mmio_types.h
/* SPDX-License-Identifier: MIT */
/*
 * Copyright © 2022-2026 Intel Corporation
 */

#ifndef _XE_MMIO_TYPES_H_
#define _XE_MMIO_TYPES_H_

#include <linux/types.h>

struct xe_gt;
struct xe_tile;

/**
 * struct xe_mmio - register mmio structure
 *
 * Represents an MMIO region that the CPU may use to access registers.  A
 * region may share its IO map with other regions (e.g., all GTs within a
 * tile share the same map with their parent tile, but represent different
 * subregions of the overall IO space).
 */
struct xe_mmio {
        /** @tile: Backpointer to tile, used for tracing */
        struct xe_tile *tile;

        /** @regs: Map used to access registers. */
        void __iomem *regs;

        /**
         * @sriov_vf_gt: Backpointer to GT.
         *
         * This pointer is only set for GT MMIO regions and only when running
         * as an SRIOV VF structure
         */
        struct xe_gt *sriov_vf_gt;

        /**
         * @regs_size: Length of the register region within the map.
         *
         * The size of the iomap set in *regs is generally larger than the
         * register mmio space since it includes unused regions and/or
         * non-register regions such as the GGTT PTEs.
         */
        size_t regs_size;

        /** @adj_limit: adjust MMIO address if address is below this value */
        u32 adj_limit;

        /** @adj_offset: offset to add to MMIO address when adjusting */
        u32 adj_offset;
};

/**
 * struct xe_mmio_range - register range structure
 *
 * @start: first register offset in the range.
 * @end: last register offset in the range.
 */
struct xe_mmio_range {
        u32 start;
        u32 end;
};

#endif