blob: cd80802e891893bdb8bfbeb138d2423e87e8d5f9 [file] [log] [blame]
/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2022 Intel Corporation
*/
#ifndef _XE_GUC_TYPES_H_
#define _XE_GUC_TYPES_H_
#include <linux/idr.h>
#include <linux/xarray.h>
#include "regs/xe_reg_defs.h"
#include "xe_guc_ads_types.h"
#include "xe_guc_ct_types.h"
#include "xe_guc_fwif.h"
#include "xe_guc_log_types.h"
#include "xe_guc_pc_types.h"
#include "xe_uc_fw_types.h"
/**
* struct xe_guc - Graphic micro controller
*/
struct xe_guc {
/** @fw: Generic uC firmware management */
struct xe_uc_fw fw;
/** @log: GuC log */
struct xe_guc_log log;
/** @ads: GuC ads */
struct xe_guc_ads ads;
/** @ct: GuC ct */
struct xe_guc_ct ct;
/** @pc: GuC Power Conservation */
struct xe_guc_pc pc;
/** @submission_state: GuC submission state */
struct {
/** @exec_queue_lookup: Lookup an xe_engine from guc_id */
struct xarray exec_queue_lookup;
/** @guc_ids: used to allocate new guc_ids, single-lrc */
struct ida guc_ids;
/** @guc_ids_bitmap: used to allocate new guc_ids, multi-lrc */
unsigned long *guc_ids_bitmap;
/** @stopped: submissions are stopped */
atomic_t stopped;
/** @lock: protects submission state */
struct mutex lock;
/** @suspend: suspend fence state */
struct {
/** @lock: suspend fences lock */
spinlock_t lock;
/** @context: suspend fences context */
u64 context;
/** @seqno: suspend fences seqno */
u32 seqno;
} suspend;
#ifdef CONFIG_PROVE_LOCKING
#define NUM_SUBMIT_WQ 256
/** @submit_wq_pool: submission ordered workqueues pool */
struct workqueue_struct *submit_wq_pool[NUM_SUBMIT_WQ];
/** @submit_wq_idx: submission ordered workqueue index */
int submit_wq_idx;
#endif
/** @enabled: submission is enabled */
bool enabled;
} submission_state;
/** @hwconfig: Hardware config state */
struct {
/** @bo: buffer object of the hardware config */
struct xe_bo *bo;
/** @size: size of the hardware config */
u32 size;
} hwconfig;
/**
* @notify_reg: Register which is written to notify GuC of H2G messages
*/
struct xe_reg notify_reg;
/** @params: Control params for fw initialization */
u32 params[GUC_CTL_MAX_DWORDS];
};
#endif