/* SPDX-License-Identifier: MIT */ /* * Copyright © 2023 Intel Corporation */ #ifndef _XE_GSC_TYPES_H_ #define _XE_GSC_TYPES_H_ #include #include #include #include #include #include "xe_uc_fw_types.h" struct xe_bo; struct xe_exec_queue; struct i915_gsc_proxy_component; /** * struct xe_gsc - GSC */ struct xe_gsc { /** @fw: Generic uC firmware management */ struct xe_uc_fw fw; /** @security_version: SVN found in the fetched blob */ u32 security_version; /** @private: Private data for use by the GSC FW */ struct xe_bo *private; /** @q: Default queue used for submissions to GSC FW */ struct xe_exec_queue *q; /** @wq: workqueue to handle jobs for delayed load and proxy handling */ struct workqueue_struct *wq; /** @work: delayed load and proxy handling work */ struct work_struct work; /** @lock: protects access to the work_actions mask */ spinlock_t lock; /** @work_actions: mask of actions to be performed in the work */ u32 work_actions; #define GSC_ACTION_FW_LOAD BIT(0) #define GSC_ACTION_SW_PROXY BIT(1) /** @proxy: sub-structure containing the SW proxy-related variables */ struct { /** @proxy.component: struct for communication with mei component */ struct i915_gsc_proxy_component *component; /** @proxy.mutex: protects the component binding and usage */ struct mutex mutex; /** @proxy.component_added: whether the component has been added */ bool component_added; /** @proxy.bo: object to store message to and from the GSC */ struct xe_bo *bo; /** @proxy.to_gsc: map of the memory used to send messages to the GSC */ struct iosys_map to_gsc; /** @proxy.from_gsc: map of the memory used to recv messages from the GSC */ struct iosys_map from_gsc; /** @proxy.to_csme: pointer to the memory used to send messages to CSME */ void *to_csme; /** @proxy.from_csme: pointer to the memory used to recv messages from CSME */ void *from_csme; } proxy; }; #endif