1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2024 Intel Corporation 4 */ 5 6 #ifndef _XE_GT_SRIOV_PF_CONTROL_TYPES_H_ 7 #define _XE_GT_SRIOV_PF_CONTROL_TYPES_H_ 8 9 #include <linux/completion.h> 10 #include <linux/spinlock.h> 11 #include <linux/workqueue_types.h> 12 13 /** 14 * enum xe_gt_sriov_control_bits - Various bits used by the PF to represent a VF state 15 * 16 * @XE_GT_SRIOV_STATE_WIP: indicates that some operations are in progress. 17 * @XE_GT_SRIOV_STATE_FLR_WIP: indicates that a VF FLR is in progress. 18 * @XE_GT_SRIOV_STATE_FLR_SEND_START: indicates that the PF wants to send a FLR START command. 19 * @XE_GT_SRIOV_STATE_FLR_WAIT_GUC: indicates that the PF awaits for a response from the GuC. 20 * @XE_GT_SRIOV_STATE_FLR_GUC_DONE: indicates that the PF has received a response from the GuC. 21 * @XE_GT_SRIOV_STATE_FLR_SYNC: indicates that the PF awaits to synchronize with other GuCs. 22 * @XE_GT_SRIOV_STATE_FLR_RESET_CONFIG: indicates that the PF needs to clear VF's resources. 23 * @XE_GT_SRIOV_STATE_FLR_RESET_DATA: indicates that the PF needs to clear VF's data. 24 * @XE_GT_SRIOV_STATE_FLR_RESET_MMIO: indicates that the PF needs to reset VF's registers. 25 * @XE_GT_SRIOV_STATE_FLR_SEND_FINISH: indicates that the PF wants to send a FLR FINISH message. 26 * @XE_GT_SRIOV_STATE_FLR_FAILED: indicates that VF FLR sequence failed. 27 * @XE_GT_SRIOV_STATE_PAUSE_WIP: indicates that a VF pause operation is in progress. 28 * @XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE: indicates that the PF is about to send a PAUSE command. 29 * @XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC: indicates that the PF awaits for a response from the GuC. 30 * @XE_GT_SRIOV_STATE_PAUSE_GUC_DONE: indicates that the PF has received a response from the GuC. 31 * @XE_GT_SRIOV_STATE_PAUSE_FAILED: indicates that a VF pause operation has failed. 32 * @XE_GT_SRIOV_STATE_PAUSED: indicates that the VF is paused. 33 * @XE_GT_SRIOV_STATE_SAVE_WIP: indicates that VF save operation is in progress. 34 * @XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA: indicates that VF migration data is being produced. 35 * @XE_GT_SRIOV_STATE_SAVE_WAIT_DATA: indicates that PF awaits for space in migration data ring. 36 * @XE_GT_SRIOV_STATE_SAVE_DATA_DONE: indicates that all migration data was produced by Xe. 37 * @XE_GT_SRIOV_STATE_SAVE_FAILED: indicates that VF save operation has failed. 38 * @XE_GT_SRIOV_STATE_SAVED: indicates that VF data is saved. 39 * @XE_GT_SRIOV_STATE_RESTORE_WIP: indicates that VF restore operation is in progress. 40 * @XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA: indicates that VF migration data is being consumed. 41 * @XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA: indicates that PF awaits for data in migration data ring. 42 * @XE_GT_SRIOV_STATE_RESTORE_DATA_DONE: indicates that all migration data was produced by the user. 43 * @XE_GT_SRIOV_STATE_RESTORE_FAILED: indicates that VF restore operation has failed. 44 * @XE_GT_SRIOV_STATE_RESTORED: indicates that VF data is restored. 45 * @XE_GT_SRIOV_STATE_RESUME_WIP: indicates the a VF resume operation is in progress. 46 * @XE_GT_SRIOV_STATE_RESUME_SEND_RESUME: indicates that the PF is about to send RESUME command. 47 * @XE_GT_SRIOV_STATE_RESUME_FAILED: indicates that a VF resume operation has failed. 48 * @XE_GT_SRIOV_STATE_RESUMED: indicates that the VF was resumed. 49 * @XE_GT_SRIOV_STATE_STOP_WIP: indicates that a VF stop operation is in progress. 50 * @XE_GT_SRIOV_STATE_STOP_SEND_STOP: indicates that the PF wants to send a STOP command. 51 * @XE_GT_SRIOV_STATE_STOP_FAILED: indicates that the VF stop operation has failed 52 * @XE_GT_SRIOV_STATE_STOPPED: indicates that the VF was stopped. 53 * @XE_GT_SRIOV_STATE_MISMATCH: indicates that the PF has detected a VF state mismatch. 54 */ 55 enum xe_gt_sriov_control_bits { 56 XE_GT_SRIOV_STATE_WIP = 1, 57 58 XE_GT_SRIOV_STATE_FLR_WIP, 59 XE_GT_SRIOV_STATE_FLR_SEND_START, 60 XE_GT_SRIOV_STATE_FLR_WAIT_GUC, 61 XE_GT_SRIOV_STATE_FLR_GUC_DONE, 62 XE_GT_SRIOV_STATE_FLR_SYNC, 63 XE_GT_SRIOV_STATE_FLR_RESET_CONFIG, 64 XE_GT_SRIOV_STATE_FLR_RESET_DATA, 65 XE_GT_SRIOV_STATE_FLR_RESET_MMIO, 66 XE_GT_SRIOV_STATE_FLR_SEND_FINISH, 67 XE_GT_SRIOV_STATE_FLR_FAILED, 68 69 XE_GT_SRIOV_STATE_PAUSE_WIP, 70 XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE, 71 XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC, 72 XE_GT_SRIOV_STATE_PAUSE_GUC_DONE, 73 XE_GT_SRIOV_STATE_PAUSE_FAILED, 74 XE_GT_SRIOV_STATE_PAUSED, 75 76 XE_GT_SRIOV_STATE_SAVE_WIP, 77 XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA, 78 XE_GT_SRIOV_STATE_SAVE_WAIT_DATA, 79 XE_GT_SRIOV_STATE_SAVE_DATA_DONE, 80 XE_GT_SRIOV_STATE_SAVE_FAILED, 81 XE_GT_SRIOV_STATE_SAVED, 82 83 XE_GT_SRIOV_STATE_RESTORE_WIP, 84 XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA, 85 XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA, 86 XE_GT_SRIOV_STATE_RESTORE_DATA_DONE, 87 XE_GT_SRIOV_STATE_RESTORE_FAILED, 88 XE_GT_SRIOV_STATE_RESTORED, 89 90 XE_GT_SRIOV_STATE_RESUME_WIP, 91 XE_GT_SRIOV_STATE_RESUME_SEND_RESUME, 92 XE_GT_SRIOV_STATE_RESUME_FAILED, 93 XE_GT_SRIOV_STATE_RESUMED, 94 95 XE_GT_SRIOV_STATE_STOP_WIP, 96 XE_GT_SRIOV_STATE_STOP_SEND_STOP, 97 XE_GT_SRIOV_STATE_STOP_FAILED, 98 XE_GT_SRIOV_STATE_STOPPED, 99 100 XE_GT_SRIOV_STATE_MISMATCH, /* always keep as last */ 101 }; 102 103 #define XE_GT_SRIOV_NUM_STATES (XE_GT_SRIOV_STATE_MISMATCH + 1) 104 105 /** 106 * struct xe_gt_sriov_control_state - GT-level per-VF control state. 107 * 108 * Used by the PF driver to maintain per-VF control data. 109 */ 110 struct xe_gt_sriov_control_state { 111 /** @state: VF state bits */ 112 DECLARE_BITMAP(state, XE_GT_SRIOV_NUM_STATES); 113 114 /** @done: completion of async operations */ 115 struct completion done; 116 117 /** @link: link into worker list */ 118 struct list_head link; 119 }; 120 121 /** 122 * struct xe_gt_sriov_pf_control - GT-level control data. 123 * 124 * Used by the PF driver to maintain its data. 125 */ 126 struct xe_gt_sriov_pf_control { 127 /** @worker: worker that executes a VF operations */ 128 struct work_struct worker; 129 130 /** @list: list of VF entries that have a pending work */ 131 struct list_head list; 132 133 /** @lock: protects VF pending list */ 134 spinlock_t lock; 135 }; 136 137 #endif 138