/* SPDX-License-Identifier: MIT */ /* * Copyright © 2024 Intel Corporation */ #ifndef _XE_GT_SRIOV_PF_CONTROL_TYPES_H_ #define _XE_GT_SRIOV_PF_CONTROL_TYPES_H_ #include <linux/completion.h> #include <linux/spinlock.h> #include <linux/workqueue_types.h> /** * enum xe_gt_sriov_control_bits - Various bits used by the PF to represent a VF state * * @XE_GT_SRIOV_STATE_WIP: indicates that some operations are in progress. * @XE_GT_SRIOV_STATE_FLR_WIP: indicates that a VF FLR is in progress. * @XE_GT_SRIOV_STATE_FLR_SEND_START: indicates that the PF wants to send a FLR START command. * @XE_GT_SRIOV_STATE_FLR_WAIT_GUC: indicates that the PF awaits for a response from the GuC. * @XE_GT_SRIOV_STATE_FLR_GUC_DONE: indicates that the PF has received a response from the GuC. * @XE_GT_SRIOV_STATE_FLR_SYNC: indicates that the PF awaits to synchronize with other GuCs. * @XE_GT_SRIOV_STATE_FLR_RESET_CONFIG: indicates that the PF needs to clear VF's resources. * @XE_GT_SRIOV_STATE_FLR_RESET_DATA: indicates that the PF needs to clear VF's data. * @XE_GT_SRIOV_STATE_FLR_RESET_MMIO: indicates that the PF needs to reset VF's registers. * @XE_GT_SRIOV_STATE_FLR_SEND_FINISH: indicates that the PF wants to send a FLR FINISH message. * @XE_GT_SRIOV_STATE_FLR_FAILED: indicates that VF FLR sequence failed. * @XE_GT_SRIOV_STATE_PAUSE_WIP: indicates that a VF pause operation is in progress. * @XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE: indicates that the PF is about to send a PAUSE command. * @XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC: indicates that the PF awaits for a response from the GuC. * @XE_GT_SRIOV_STATE_PAUSE_GUC_DONE: indicates that the PF has received a response from the GuC. * @XE_GT_SRIOV_STATE_PAUSE_FAILED: indicates that a VF pause operation has failed. * @XE_GT_SRIOV_STATE_PAUSED: indicates that the VF is paused. * @XE_GT_SRIOV_STATE_SAVE_WIP: indicates that VF save operation is in progress. * @XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA: indicates that VF migration data is being produced. * @XE_GT_SRIOV_STATE_SAVE_WAIT_DATA: indicates that PF awaits for space in migration data ring. * @XE_GT_SRIOV_STATE_SAVE_DATA_DONE: indicates that all migration data was produced by Xe. * @XE_GT_SRIOV_STATE_SAVE_FAILED: indicates that VF save operation has failed. * @XE_GT_SRIOV_STATE_SAVED: indicates that VF data is saved. * @XE_GT_SRIOV_STATE_RESTORE_WIP: indicates that VF restore operation is in progress. * @XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA: indicates that VF migration data is being consumed. * @XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA: indicates that PF awaits for data in migration data ring. * @XE_GT_SRIOV_STATE_RESTORE_DATA_DONE: indicates that all migration data was produced by the user. * @XE_GT_SRIOV_STATE_RESTORE_FAILED: indicates that VF restore operation has failed. * @XE_GT_SRIOV_STATE_RESTORED: indicates that VF data is restored. * @XE_GT_SRIOV_STATE_RESUME_WIP: indicates the a VF resume operation is in progress. * @XE_GT_SRIOV_STATE_RESUME_SEND_RESUME: indicates that the PF is about to send RESUME command. * @XE_GT_SRIOV_STATE_RESUME_FAILED: indicates that a VF resume operation has failed. * @XE_GT_SRIOV_STATE_RESUMED: indicates that the VF was resumed. * @XE_GT_SRIOV_STATE_STOP_WIP: indicates that a VF stop operation is in progress. * @XE_GT_SRIOV_STATE_STOP_SEND_STOP: indicates that the PF wants to send a STOP command. * @XE_GT_SRIOV_STATE_STOP_FAILED: indicates that the VF stop operation has failed * @XE_GT_SRIOV_STATE_STOPPED: indicates that the VF was stopped. * @XE_GT_SRIOV_STATE_MISMATCH: indicates that the PF has detected a VF state mismatch. */ enum xe_gt_sriov_control_bits { XE_GT_SRIOV_STATE_WIP = 1, XE_GT_SRIOV_STATE_FLR_WIP, XE_GT_SRIOV_STATE_FLR_SEND_START, XE_GT_SRIOV_STATE_FLR_WAIT_GUC, XE_GT_SRIOV_STATE_FLR_GUC_DONE, XE_GT_SRIOV_STATE_FLR_SYNC, XE_GT_SRIOV_STATE_FLR_RESET_CONFIG, XE_GT_SRIOV_STATE_FLR_RESET_DATA, XE_GT_SRIOV_STATE_FLR_RESET_MMIO, XE_GT_SRIOV_STATE_FLR_SEND_FINISH, XE_GT_SRIOV_STATE_FLR_FAILED, XE_GT_SRIOV_STATE_PAUSE_WIP, XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE, XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC, XE_GT_SRIOV_STATE_PAUSE_GUC_DONE, XE_GT_SRIOV_STATE_PAUSE_FAILED, XE_GT_SRIOV_STATE_PAUSED, XE_GT_SRIOV_STATE_SAVE_WIP, XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA, XE_GT_SRIOV_STATE_SAVE_WAIT_DATA, XE_GT_SRIOV_STATE_SAVE_DATA_DONE, XE_GT_SRIOV_STATE_SAVE_FAILED, XE_GT_SRIOV_STATE_SAVED, XE_GT_SRIOV_STATE_RESTORE_WIP, XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA, XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA, XE_GT_SRIOV_STATE_RESTORE_DATA_DONE, XE_GT_SRIOV_STATE_RESTORE_FAILED, XE_GT_SRIOV_STATE_RESTORED, XE_GT_SRIOV_STATE_RESUME_WIP, XE_GT_SRIOV_STATE_RESUME_SEND_RESUME, XE_GT_SRIOV_STATE_RESUME_FAILED, XE_GT_SRIOV_STATE_RESUMED, XE_GT_SRIOV_STATE_STOP_WIP, XE_GT_SRIOV_STATE_STOP_SEND_STOP, XE_GT_SRIOV_STATE_STOP_FAILED, XE_GT_SRIOV_STATE_STOPPED, XE_GT_SRIOV_STATE_MISMATCH, /* always keep as last */ }; #define XE_GT_SRIOV_NUM_STATES (XE_GT_SRIOV_STATE_MISMATCH + 1) /** * struct xe_gt_sriov_control_state - GT-level per-VF control state. * * Used by the PF driver to maintain per-VF control data. */ struct xe_gt_sriov_control_state { /** @state: VF state bits */ DECLARE_BITMAP(state, XE_GT_SRIOV_NUM_STATES); /** @done: completion of async operations */ struct completion done; /** @link: link into worker list */ struct list_head link; }; /** * struct xe_gt_sriov_pf_control - GT-level control data. * * Used by the PF driver to maintain its data. */ struct xe_gt_sriov_pf_control { /** @worker: worker that executes a VF operations */ struct work_struct worker; /** @list: list of VF entries that have a pending work */ struct list_head list; /** @lock: protects VF pending list */ spinlock_t lock; }; #endif