/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2024 Intel Corporation
*/
#ifndef _XE_HW_ENGINE_GROUP_TYPES_H_
#define _XE_HW_ENGINE_GROUP_TYPES_H_
#include "xe_force_wake_types.h"
#include "xe_lrc_types.h"
#include "xe_reg_sr_types.h"
/**
* enum xe_hw_engine_group_execution_mode - possible execution modes of a hw
* engine group
*
* @EXEC_MODE_LR: execution in long-running mode
* @EXEC_MODE_DMA_FENCE: execution in dma fence mode
*/
enum xe_hw_engine_group_execution_mode {
EXEC_MODE_LR,
EXEC_MODE_DMA_FENCE,
};
/**
* struct xe_hw_engine_group - Hardware engine group
*
* hw engines belong to the same group if they share hardware resources in a way
* that prevents them from making progress when one is stuck on a page fault.
*/
struct xe_hw_engine_group {
/**
* @exec_queue_list: list of exec queues attached to this
* xe_hw_engine_group
*/
struct list_head exec_queue_list;
/** @resume_work: worker to resume faulting LR exec queues */
struct work_struct resume_work;
/** @resume_wq: workqueue to resume faulting LR exec queues */
struct workqueue_struct *resume_wq;
/**
* @mode_sem: used to protect this group's hardware resources and ensure
* mutual exclusion between execution only in faulting LR mode and
* execution only in DMA_FENCE mode
*/
struct rw_semaphore mode_sem;
/** @cur_mode: current execution mode of this hw engine group */
enum xe_hw_engine_group_execution_mode cur_mode;
};
#endif