/* SPDX-License-Identifier: GPL-2.0 */

#ifndef _PS3_ERR_INJECT_H_
#define _PS3_ERR_INJECT_H_

#include <linux/workqueue.h>

#include "ps3_platform_utils.h"
#include "ps3_htp_def.h"

enum InjectType {
	PS3_ERR_IJ_WATCHDOG_CONCURY = 1,      
	PS3_ERR_IJ_STOP_DUMP_CONCURY = 2,     
	PS3_ERR_IJ_SOFT_TO_HARD = 3,          
	PS3_ERR_IJ_WATCHDOG_DELAY,            
	PS3_ERR_IJ_EVENT_DELAY,               
	PS3_ERR_IJ_VD_PENDING_DELAY,          
	PS3_ERR_IJ_IOCTL_CMD_DEAD,            
	PS3_ERR_IJ_IOCTL_CMD_PENDING,         
	PS3_ERR_IJ_IOCTL_CMD_SIG_INTERRUPT,   
	PS3_ERR_IJ_IOCTL_CMD_INTERRUPT,       
	PS3_ERR_IJ_IOCTL_CMD_NO_RESP,         
	PS3_ERR_IJ_IOCTL_CMD_ABORT_FAIL,      
	PS3_ERR_IJ_IOCTL_CMD_ABORT_NO_RESP,   
	PS3_ERR_IJ_IOCTL_CMD_FORCE_DONE,      
	PS3_ERR_IJ_IOCTL_CMD_RECOVERY_CANCEL, 
	PS3_ERR_IJ_WAIT_NORMAL,               
	PS3_ERR_IJ_FIRMWARE_INIT_FAIL,        
	PS3_ERR_IJ_SCSI_SCAN_HOST_DELAY,      
	PS3_ERR_IJ_SCSI_SCAN_HOST_NOT_FINISH, 
	PS3_ERR_IJ_IGNORE_TASK_IO,            
	PS3_ERR_IJ_IGNORE_TASK_ABORT,         
	PS3_ERR_IJ_IGNORE_TASK_RESET,         
	PS3_ERR_IJ_EVENT_HANDLE,              
	PS3_ERR_IJ_DEL_SCSI_DEV1,             
	PS3_ERR_IJ_DEL_SCSI_DEV2,             
	PS3_ERR_IJ_PRIV_DATA_NULL1,           
	PS3_ERR_IJ_PRIV_DATA_NULL2,           
	PS3_ERR_IJ_PRIV_DATA_NULL3,           
	PS3_ERR_IJ_PRIV_DATA_NULL4,           
	PS3_ERR_IJ_R1X_DEL_SCSI_DEV1,         
	PS3_ERR_IJ_R1X_PRIV_DATA_NULL1,       
	PS3_ERR_IJ_HT_ABNORMAL1,              
	PS3_ERR_IJ_HT_ABNORMAL2,              
	PS3_ERR_IJ_EVENT_INT_WAIT_HARD_FLAG,            
	PS3_ERR_IJ_EVENT_INT_WAIT_HARD_SUBCRIBE,        
	PS3_ERR_IJ_EVENT_PROC_WAIT_HARD_FLAG,           
	PS3_ERR_IJ_EVENT_PROC_WAIT_HARD_SUBCRIBE,       
	PS3_ERR_IJ_EVENT_SUBC_WAIT_HARD_FLAG,           
	PS3_ERR_IJ_EVENT_SUBC_WAIT_HARD_SUBCRIBE,       
	PS3_ERR_IJ_FLAG_WAIT_EVENT_INT,                 
	PS3_ERR_IJ_FLAG_WAIT_EVENT_PROC,                
	PS3_ERR_IJ_FLAG_WAIT_EVENT_SUBCRIBE,            
	PS3_ERR_IJ_HARD_SUBC_WAIT_EVENT_INT,            
	PS3_ERR_IJ_HARD_SUBC_WAIT_EVENT_PROC,           
	PS3_ERR_IJ_HARD_SUBC_WAIT_EVENT_SUBCRIBE,       
	PS3_ERR_IJ_STORE_NO_TRIGGER_LOG,                
	PS3_ERR_IJ_DETECT_NO_TRIGGER_LOG,               
	PS3_ERR_IJ_EVENT_CMD_NULL,                      
	PS3_ERR_IJ_SUBC_EVENT_CMD_INIT,                 
	PS3_ERR_IJ_RESUBC_EVENT_CMD_INIT,               
	PS3_ERR_IJ_CANCEL_EVENT_CMD_FAIL,               
	PS3_ERR_IJ_CANCEL_VDPENDING_CMD_FAIL,           
	PS3_ERR_IJ_R1X_ABORT,                           
	PS3_ERR_IJ_TASK_RESET_DELAY,                    
	PS3_ERR_IJ_SCSI_DELIVER_DELAY,                  
	PS3_ERR_IJ_SCSI_DELIVER_DELAY_2,                
	PS3_ERR_IJ_FW_STATE_RUNNING,                    
	PS3_ERR_IJ_SET_IOC_IN_SECURITY,       
	PS3_ERR_IJ_WAIT_UNNORMAL,             
	PS3_ERR_IJ_DUMP_WAIT_RECO_VALID,      
	PS3_ERR_IJ_DUMP_WAIT_RECO_VALID_2,    
	PS3_ERR_IJ_DUMP_WAIT_NORMAL,          
	PS3_ERR_IJ_WAIT_OPT,                  
	PS3_ERR_IJ_WAIT_READY,                
	PS3_ERR_IJ_HARD_WAIT_READY_FAILED_F1,    
	PS3_ERR_IJ_HARD_WAIT_READY_FAILED_F0,    
	PS3_ERR_IJ_FWSTATE_REMOVE,            
	PS3_ERR_IJ_IOCTL_CMD_RETRY_DONE,      
	PS3_ERR_IJ_IOCTL_WAIT_UNNORMAL,       
	PS3_ERR_IJ_QOS_SET_SHARE_COUNT,       
	PS3_ERR_IJ_FORCE_EVENT_CMD_FAIL_DEAD, 
	PS3_ERR_IJ_IOCTL_WAIT_IRQ_DISABLE,    
	PS3_ERR_IJ_WAIT_IOCTL_IN_RECOVERY,    
	PS3_ERR_IJ_WAIT_IOCTL_IN_DEVICE_RESET,
	PS3_ERR_IJ_SEND_IOCTL_BLOCK_MODE_FLAG,
	PS3_ERR_IJ_FORCE_HAS_SCIS_PENDING_IO, 
	PS3_ERR_IJ_HOST_RESET_WAIT_DECIDE,          
	PS3_ERR_IJ_ABORT_PRE1_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_ABORT_PRE2_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_ABORT_PRE_BULID_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_ABORT_PRE_BULID1_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_ABORT_PRE_SEND_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_ABORT_PRE_DEAL_FORCE_ABORTED_CMD_DONE,			  
	PS3_ERR_IJ_FORCE_STOP_ALL_CMD_DONE,			  
	PS3_ERR_IJ_PROBE_HOST_RESET,			  
	PS3_ERR_IJ_IOC_NOT_RUNNING, 		
	PS3_ERR_IJ_IOC_IS_NOT_NORMAL_IN_UNLOAD,	
	PS3_ERR_IJ_HALF_HARD_RESET,			
	PS3_ERR_IJ_ROMOVE_UNLOAD_FAIL,		
	PS3_ERR_IJ_WAIT_TASK_MGR_BUSY,		
	PS3_ERR_IJ_RESET_TARGET_PAUSE,		
	PS3_ERR_IJ_SEND_CMD_TASK_MGR_BUSY,	
	PS3_ERR_IJ_UNLOAD_TIMEOUT,				
	PS3_ERR_IJ_ABORT_CMD_TIMEOUT,	
	PS3_ERR_IJ_RESET_CMD_TIMEOUT,	
	PS3_ERR_IJ_ABORT_CMD_ERROR,	
	PS3_ERR_IJ_RESET_CMD_ERROR,	
	PS3_ERR_IJ_ABORT_CMD_NORMAL,	
	PS3_ERR_IJ_RESET_CMD_NORMAL,	
	PS3_ERR_IJ_QOS_NOT_AWAKE_PD, 			 
	PS3_ERR_IJ_QOS_PD_RESEND_NOT_EXPIRED,     
	PS3_ERR_IJ_QOS_VD_MEMBER_CLEARING, 
	PS3_ERR_IJ_QOS_WAIT_VD_SEND,
	PS3_ERR_IJ_SCSI_TASK_PRE_CHECK_FAILED,	
	PS3_ERR_IJ_TASK_CMD_ALLOC_FAILED,		  
	PS3_ERR_IJ_SAS_REQ_PRE_CHECK,
	PS3_ERR_IJ_SAS_RPHY_SLOT_GET_FAILED,
	PS3_ERR_IJ_SAS_ENCL_ID_GET_FAILED,
	PS3_ERR_IJ_MGR_CMD_ALLOC_FAILED,  
	PS3_ERR_IJ_CMD_POLLING,  
	PS3_ERR_IJ_PCI_ERR_RECOVERY,
	PS3_ERR_IJ_SMP_CMD_TIMEOUT,	
	PS3_ERR_IJ_SMP_CMD_ERROR,
	PS3_ERR_IJ_GET_LINKERRORS_CMD_ERROR,
	PS3_ERR_IJ_PHY_CTRL_CMD_ERROR,
	PS3_ERR_IJ_SAS_EXP_RPHY_SLOT_GET_FAILED,
	PS3_ERR_IJ_INS_STATE_UNNORMAL,
	PS3_ERR_IJ_INS_STATE_DEAD,
	PS3_ERR_IJ_RPHY_PARENT_SAS_ADDR_GET_FAILED,
	PS3_ERR_IJ_SAS_NODE_NOT_FOUND,
	PS3_ERR_IJ_SAS_REQ_EXT_BUF_INVALLID,
	PS3_ERR_IJ_EXT_BUF_TO_RSP_INVALLID,
	PS3_ERR_IJ_WAIT_CMD_DONE,      
	PS3_ERR_IJ_CMD_SEND_BLOCK,	
	PS3_ERR_IJ_FORCE_TASK_MGR_BUSY,         
	PS3_ERR_IJ_FORCE_INS_UNLOAD,		
	PS3_ERR_IJ_FORCE_INSTANCE_UNNORMAL, 
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_1,		
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_2, 		
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_3, 		
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_4,		
	PS3_ERR_IJ_QOS_TAG_INIT_FAIL_1,		
	PS3_ERR_IJ_QOS_TAG_INIT_FAIL_2,		
	PS3_ERR_IJ_QOS_VD_INIT_FAIL_1,		
	PS3_ERR_IJ_QOS_VD_INIT_FAIL_2,		
	PS3_ERR_IJ_QOS_VD_INIT_FAIL_3,		
	PS3_ERR_IJ_QOS_WAIT_PD_WAITQ_CLEAR,	
	PS3_ERR_IJ_QOS_WAIT_PD_WAITQ_CLEAR_2,
	PS3_ERR_IJ_QOS_WAIT_VD_WAITQ_CLEAR,	
	PS3_ERR_IJ_QOS_WAIT_TAG_WAITQ_CLEAR,
	PS3_ERR_IJ_QOS_NOT_AWAKE_TAG,		
	PS3_ERR_IJ_CMD_SEND_FORCE_INS_UNLOAD,
	PS3_ERR_IJ_CMD_SEND_FORCE_UNORMAL,	
	PS3_ERR_IJ_CMD_SEND_FORCE_PCI_ERR,	
	PS3_ERR_IJ_QOS_FORCE_VD_SEQ_CHANGE, 
	PS3_ERR_IJ_QOS_FORCE_MGRQ_ZERO_DEPTH,
	PS3_ERR_IJ_QOS_FORCE_CMDQ_ZERO_DEPTH,
	PS3_ERR_IJ_QOS_MGRQ_INIT_FAIL_1,	
	PS3_ERR_IJ_QOS_MGRQ_INIT_FAIL_2,	
	PS3_ERR_IJ_QOS_CMDQ_INIT_FAIL_1,	
	PS3_ERR_IJ_QOS_CMDQ_INIT_FAIL_2,	
	PS3_ERR_IJ_QOS_WAIT_SOFT_WAITQ_CLEAR, 
	PS3_ERR_IJ_BLOCK_HOST_RESET, 		
	PS3_ERR_IJ_R1X_CONFLICTQ_PROCESS_FINISH,	
	PS3_ERR_IJ_RECOVERY_WAIT_FUNC0_RUNNING_1,
	PS3_ERR_IJ_RECOVERY_WAIT_FUNC0_RUNNING_2,
	PS3_ERR_IJ_WAIT_HARD_RESET,			   
	PS3_ERR_IJ_FORCE_IOC_RUNNING,			   
	PS3_ERR_IJ_FORCE_INIT_FAIL,			   
	PS3_ERR_IJ_FORCE_INIT_RUNNING_FAIL,			   
	PS3_ERR_IJ_FORCE_INIT_RUNNING_FAIL2,			   
	PS3_ERR_IJ_FORCE_F1_LOAD_START_HARD,	
	PS3_ERR_IJ_FORCE_F1_LOAD_ENTER_HARD,	
	PS3_ERR_IJ_FORCE_F1_HOST_START_HARD,
	PS3_ERR_IJ_FORCE_F1_SCAN_START_HARD,
	PS3_ERR_IJ_FORCE_F1_A_SCAN_START_HARD,
	PS3_ERR_IJ_FORCE_F1_A_SCAN_FINISH_HARD,
	PS3_ERR_IJ_F1_PROBE_FORCE_IOC_FAULT,
	PS3_ERR_IJ_RECOVERY_WAIT_FUNC1_PROBE,
	PS3_ERR_IJ_RECOVERY_WAIT_FUNC1_REMOVE,
	PS3_ERR_IJ_RECOVERY_F1_B_READY,
	PS3_ERR_IJ_RECOVERY_F1_A_READY,
	PS3_ERR_IJ_RECOVERY_F1_B_INIT,
	PS3_ERR_IJ_RECOVERY_F1_A_INIT,
	PS3_ERR_IJ_RECOVERY_F1_RUNNING,
	PS3_ERR_IJ_RECOVERY_F1_CTRL_INFO,
	PS3_ERR_IJ_RECOVERY_F1_OPER,
	PS3_ERR_IJ_RECOVERY_F1_SCSI_INIT,
	PS3_ERR_IJ_RECOVERY_F1_LOAD,
	PS3_ERR_IJ_RECOVERY_F1_B_SCAN,
	PS3_ERR_IJ_RECOVERY_F1_A_SCAN,
	PS3_ERR_IJ_RECOVERY_F1_SCAN_FINISH,
	PS3_ERR_IJ_RECOVERY_F1_EVENT,
	PS3_ERR_IJ_RECOVERY_REQ_WAIT_FUNC1_PROBE,
	PS3_ERR_IJ_RECOVERY_REQ_WAIT_FUNC1_REMOVE,
	PS3_ERR_IJ_FORCE_IOC_RUNNING_RESUME_RECOVERY,			   
	PS3_ERR_IJ_FORCE_INIT_FAIL_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_INIT_RUNNING_FAIL_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_INIT_RUNNING_FAIL2_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_F1_LOAD_START_HARD_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_F1_HOST_START_HARD_RESUME_RECOVERY,
	PS3_ERR_IJ_F1_PROBE_FORCE_IOC_FAULT_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_F1_SCAN_START_HARD_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_F1_A_SCAN_START_HARD_RESUME_RECOVERY,
	PS3_ERR_IJ_FORCE_F1_REMOVE_IOC_NOT_RUNNING,
	PS3_ERR_IJ_FORCE_F1_REMOVE_IOC_EVENT_FAIL,
	PS3_ERR_IJ_FORCE_F1_REMOVE_IOC_VDINFO_FAIL,
	PS3_ERR_IJ_FORCE_F1_REMOVE_IOC_WEB_FAIL,
	PS3_ERR_IJ_FORCE_F1_REMOVE_IOC_UNLOAD_FAIL,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_REQ_IOC_CANCEL_EVENT_WORK_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_REQ_IOC_EVENT_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_REQ_IOC_VDINFO_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_REQ_IOC_WEB_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_REQ_IOC_UNLOAD_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_IOC_CANCEL_EVENT_WORK_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_IOC_EVENT_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_IOC_VDINFO_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_IOC_WEB_FAIL_RESUME,
	PS3_ERR_IJ_FORCE_F1_REMOVE_RECOVERY_IOC_UNLOAD_FAIL_RESUME,
	PS3_ERR_IJ_WAIT_SCSI_CMD_DONE_FAIL,	
	PS3_ERR_IJ_INIT_CMD_PROC_FAIL,         
	PS3_ERR_IJ_IOC_STATE_WAIT_TO_RUNNING_FAIL,         
	PS3_ERR_IJ_IOC_INIT_PROC_STATE_RUNNING,
	PS3_ERR_IJ_INIT_PROC_FAIL_UNLOAD_IOC_RUN,
	PS3_ERR_IJ_INIT_PROC_FAIL_NOUNLOAD,
	PS3_ERR_IJ_GET_PD_INFO_RETURN_FAILED,
	PS3_ERR_IJ_FORCE_MEMDUP_USER_RETURN_FAILED,
	PS3_ERR_IJ_FORCE_IOCTL_WAIT_NORMAL_FAILED,
	PS3_ERR_IJ_FORCE_IOCTL_ALLOC_CMD_FAILED,
	PS3_ERR_IJ_WAIT_CMD_FREE,
	PS3_ERR_IJ_WAIT_ABORT_FLAG,
	PS3_ERR_IJ_WAIT_CMD_ALLOC, 
	PS3_ERR_IJ_SET_CMD_TID_FLAG,
	PS3_ERR_IJ_WAIT_CMD_FREE1,
	PS3_ERR_IJ_WAIT_ABORT_FLAG1,
	PS3_ERR_IJ_SET_ABORT_COUNT,
	PS3_ERR_IJ_WAIT_CMD_ALLOC1,
	PS3_ERR_IJ_WAIT_CMD_ALLOC2,
	PS3_ERR_IJ_FORCE_ALLOC_DMA_BUF_FAILED, 
	PS3_ERR_IJ_FORCE_PCIE_ERR_PCI_INIT_FAILED,
	PS3_ERR_IJ_FORCE_PCIE_ERR_PCI_INIT_COMP_FAILED,
	PS3_ERR_IJ_FORCE_PCIE_ERR_RES_ONLINE_FAILED,
	PS3_ERR_IJ_PCI_FORCE_HARD_RECOVERY_REQ_FAILED,
	PS3_ERR_IJ_PCI_FORCE_WAIT_OPERARIONAL_FAILED,
	PS3_ERR_IJ_FORCE_PCIE_ERR_IOC_RUNNING_INIT_FAILED,
	PS3_ERR_IJ_FORCE_STREAM_DETECT_TRUE,
	PS3_ERR_IJ_FORCE_SEQ_CMD,
	PS3_ERR_IJ_FORCE_RAND_CMD,
	PS3_ERR_IJ_FORCE_RET_FAIL1,
	PS3_ERR_IJ_FORCE_VD_COUNT_ERR,
	PS3_ERR_IJ_FORCE_MOD_CHAN,  
	PS3_ERR_IJ_FORCE_MOD_CHAN1, 
	PS3_ERR_IJ_FORCE_MOD_TARGET,
	PS3_ERR_IJ_FORCE_MOD_DISKPOS,
	PS3_ERR_IJ_FORCE_RET_FAIL2, 
	PS3_ERR_IJ_FORCE_LUN_ERROR, 
	PS3_ERR_IJ_FORCE_INSTANCE_NULL,
	PS3_ERR_IJ_FORCE_VD_ENTRY_NULL,
	PS3_ERR_IJ_FORCE_VD_ENTRY_NULL1,
	PS3_ERR_IJ_FORCE_PRIV_DATA_NULL,
	PS3_ERR_IJ_FORCE_RB_INFO_NULL,  
	PS3_ERR_IJ_FORCE_HASH_MGR_NULL, 
	PS3_ERR_IJ_FORCE_MGR_CONFLICT_NULL,
	PS3_ERR_IJ_FORCE_SEND_TH_NULL,  
	PS3_ERR_IJ_FORCE_RET_FAIL3,     
	PS3_ERR_IJ_FORCE_INSTANCE_NULL1,
	PS3_ERR_IJ_FORCE_PRIV_DATA_NULL1,
	PS3_ERR_IJ_FORCE_MOD_DEV_TYPE,  
	PS3_ERR_IJ_FORCE_VD_ENTRY_NULL2,
	PS3_ERR_IJ_FORCE_RET_FAIL4,     
	PS3_ERR_IJ_FORCE_INSTANCE_NULL2,
	PS3_ERR_IJ_FORCE_RET_FAIL5,     
	PS3_ERR_IJ_FORCE_RET_FAIL6,     
	PS3_ERR_IJ_FORCE_MOD_DISKPOS1,  
	PS3_ERR_IJ_FORCE_MOD_ALIGN,     
	PS3_ERR_IJ_FORCE_MOD_ALIGN1,    
	PS3_ERR_IJ_FORCE_MOD_CHAN2,     
	PS3_ERR_IJ_FORCE_MOD_DISKID,    
	PS3_ERR_IJ_FORCE_MOD_CHAN3,     
	PS3_ERR_IJ_FORCE_MOD_DISKPOS2,  
	PS3_ERR_IJ_FORCE_PD_ENTRY_NULL, 
	PS3_ERR_IJ_FORCE_PD_ENTRY_NULL1,
	PS3_ERR_IJ_FORCE_PD_STATE_ERROR,
	PS3_ERR_IJ_FORCE_PRIV_DATA_NULL2,
	PS3_ERR_IJ_FORCE_PD_ENTRY_NULL2,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_0,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_1,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_2,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_3,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_4,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_5,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_6,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_7,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_8,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_9,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_10,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_11,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_12,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_13,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_14,
	PS3_ERR_IJ_FORCE_RECOVERY_PRE_PCIE_ERR_15,
	PS3_ERR_IJ_FORCE_RET_FAIL7,               
	PS3_ERR_IJ_FORCE_RET_FAIL8,               
	PS3_ERR_IJ_FORCE_RECOVERY_DOORBELL_FAILED,
	PS3_ERR_IJ_FORCE_DEBUG_INIT_FAIL,         
	PS3_ERR_IJ_FORCE_TRANSPORT_INIT_FAIL,     
	PS3_ERR_IJ_FORCE_CHARDEV_INIT_FAIL,       
	PS3_ERR_IJ_FORCE_PCIDRV_INIT_FAIL,        
	PS3_ERR_IJ_FORCE_VERFILE_INIT_FAIL,       
	PS3_ERR_IJ_FORCE_VERFILE2_INIT_FAIL,      
	PS3_ERR_IJ_FORCE_RECOVERY_INIT_FAIL,      
	PS3_ERR_IJ_FORCE_RECOVERY_OPE_FAIL,       
	PS3_ERR_IJ_IO_RW_FLAG_SET_UNKNOWN,         
	PS3_ERR_IJ_SOFT_ZONE_TYPE_SET_UNKNOWN,     
	PS3_ERR_IJ_WATCHDOG_WAIT_RUNNING,         
	PS3_ERR_IJ_WATCHDOG_IRQ_QUEUE,            
	PS3_ERR_IJ_WATCHDOG_IRQ_QUEUE_1,          
	PS3_ERR_IJ_READ_FW_STATE_REG_FF,          
	PS3_ERR_IJ_SET_HIGH_IOPS_CHANNEL_IN_QOS,  
	PS3_ERR_IJ_FORCE_F0_WATCHDOG_START_HARD,  
	PS3_ERR_IJ_ADD_DISK_HOST_RESET,           
	PS3_ERR_IJ_PCIE_FROZEN,                   
	PS3_ERR_IJ_PEER_PCIE_FROZEN,              
	PS3_ERR_IJ_ASYNC_HARDRESET_PROBE,         
	PS3_ERR_IJ_ASYNC_HARDRESET_REMOVE,        
	PS3_ERR_IJ_WAIT_SUSPEND_WAIT_RECOVERY,    
	PS3_ERR_IJ_WAIT_SUSPEND_WAIT_RECOVERY_1,  
	PS3_ERR_IJ_MOD_SO_ADDR,                   
	PS3_ERR_IJ_SHUTDOWN_HARDRESET,            
	PS3_ERR_IJ_CANCEL_WEB_CMD_ALLOC_NULL,     
	PS3_ERR_IJ_GET_REPLYQ_COUNT_INVALID,      
	PS3_ERR_IJ_GET_MSIX_VEC_COUNT_INVALID,    
	PS3_ERR_IJ_GET_MSI_VEC_COUNT_INVALID,     
	PS3_ERR_IJ_GET_MAX_CMD_COUNT_INVALID,     
	PS3_ERR_IJ_ALLOC_LEGACY_VECTOR_FAILED,    
	PS3_ERR_IJ_CPU_MSIX_TABLE_ALLOC_FAILED,   
	PS3_ERR_IJ_REPLY_FIFO_DESC_BUF_POOL_ALLOC_FAILED,
	PS3_ERR_IJ_REPLY_FIFO_DESC_BUF_ALLOC_FAILED,
	PS3_ERR_IJ_REPLY_FIFO_POOL_ALLOC_FAILED,  
	PS3_ERR_IJ_REPLY_VIRT_BASE_ALLOC_FAILED,  
	PS3_ERR_IJ_IRQS_ALLOC_FAILED,             
	PS3_ERR_IJ_REPLY_REQ_IRQS_FAILED,         
	PS3_ERR_IJ_DUMP_REQ_IRQS_FAILED,          
	PS3_ERR_IJ_IRQ_VECTORS_ALLOC_FAILED,      
	PS3_ERR_IJ_SAS_PHY_GET_ERR,               
	PS3_ERR_IJ_SAS_PORT_ALLOC_NULL,           
	PS3_ERR_IJ_SAS_ALLOC_NUM_NULL,            
	PS3_ERR_IJ_SAS_PORT_ADD_FAILED,           
	PS3_ERR_IJ_SAS_ALLOC_PHY_NULL,            
	PS3_ERR_IJ_SAS_PHY_ADD_FAILED,            
	PS3_ERR_IJ_SAS_ADD_ACK_FAILED,            
	PS3_ERR_IJ_ALLOC_EXP_NODE_NULL,           
	PS3_ERR_IJ_ALLOC_EXP_PHYS_NULL,           
	PS3_ERR_IJ_SAS_PORT_ALLOC_NULL1,          
	PS3_ERR_IJ_SAS_PHY_GET_ERR1,              
	PS3_ERR_IJ_SAS_ALLOC_PHY_NULL1,           
	PS3_ERR_IJ_SAS_PHY_ADD_FAILED1,           
	PS3_ERR_IJ_READ_ATU_REG_FAILED,           
	PS3_ERR_IJ_IOC_TO_READY_FAILED,           
	PS3_ERR_IJ_BIT_POS_ERR,                   
	PS3_ERR_RECOVERY_CONTEXT_ALLOC_FAILED,    
	PS3_ERR_IJ_FORCE_ALLOC_CANCEL_CMD_FAILED, 
	PS3_ERR_IJ_FORCE_CANCEL_CMD_RET_RECOVERY, 
	PS3_ERR_IJ_FORCE_CANCEL_CMD_PCIE_ERR,     
	PS3_ERR_IJ_WAIT_RESUME_WAIT_RECOVERY,     
	PS3_ERR_IJ_FORCE_STREAM_DETECT_FALSE,     
	PS3_ERR_IJ_PS3_INIT_FRAME_SYS_INFO_BUF_ALLOC,
	PS3_ERR_IJ_PS3_CMD_BUF_ALLOC,             
	PS3_ERR_IJ_PS3_PS3_CMD_ALLOC,             
	PS3_ERR_IJ_PS3_REQ_FRAME_BUF_ALLOC,       
	PS3_ERR_IJ_PS3_RESP_FRAME_BUF_ALLOC,      
	PS3_ERR_IJ_PS3_EXT_BUF_ALLOC,             
	PS3_ERR_IJ_PS3_MGR_EXT_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_R1XLOCK_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_IOCTL_TRANSIENT_ALLOC,     
	PS3_ERR_IJ_PS3_PERCPU_ALLOC,              
	PS3_ERR_IJ_PS3_DELAY_WORK_POOL_ALLOC,     
	PS3_ERR_IJ_PS3_CMD_STAT_BUF_ALLOC1,       
	PS3_ERR_IJ_PS3_CMD_STAT_BUF_ALLOC2,       
	PS3_ERR_IJ_PS3_CMD_STAT_BACKUP_BUF_ALLOC1,
	PS3_ERR_IJ_PS3_CMD_STAT_BACKUP_BUF_ALLOC2,
	PS3_ERR_IJ_PS3_CMD_LAST_STAT_BUF_ALLOC1,  
	PS3_ERR_IJ_PS3_CMD_LAST_STAT_BUF_ALLOC2,  
	PS3_ERR_IJ_PS3_DEBUG_MEM_BUF_ALLOC,       
	PS3_ERR_IJ_PS3_DEBUG_MEM_ADDR_ALLOC,      
	PS3_ERR_IJ_PS3_DRV_INFO_BUF_ALLOC,        
	PS3_ERR_IJ_PS3_HOST_MEM_BUF_ALLOC,        
	PS3_ERR_IJ_PS3_PD_LIST_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_PD_INFO_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_VD_LIST_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_VD_INFO_BUF_SYNC_ALLOC,    
	PS3_ERR_IJ_PS3_VD_INFO_BUF_ASYNC_ALLOC,   
	PS3_ERR_IJ_PS3_VD_IDX_ARRAY_ALLOC,        
	PS3_ERR_IJ_PS3_VD_ENTRIES_ARRAY_ALLOC,    
	PS3_ERR_IJ_PS3_VD_DEVS_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_VD_PRI_DATA_IDXS_ARRAY_ALLOC,
	PS3_ERR_IJ_PS3_PD_ENTRIES_ARRAY_ALLOC,    
	PS3_ERR_IJ_PS3_PD_IDX_ARRAY_ALLOC,        
	PS3_ERR_IJ_PS3_PD_DEVS_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_SAS_BUF_ALLOC,             
	PS3_ERR_IJ_PS3_SAS_PHY_BUF_ALLOC,         
	PS3_ERR_IJ_PS3_VD_PENDING_CMD_ALLOC,      
	PS3_ERR_IJ_FORCE_PCI_EN_MEM_FAILED,       
	PS3_ERR_IJ_FORCE_PCI_RES_FLAGS_FAILED,    
	PS3_ERR_IJ_FORCE_PCI_REQ_REGION_FAILED,   
	PS3_ERR_IJ_FORCE_PCI_IOREMAP_FAILED,      
	PS3_ERR_IJ_ADD_INSTANCE_WAIT,             
	PS3_ERR_IJ_REMOVE_INSTANCE_WAIT,          
	PS3_ERR_IJ_ADD_INSTANCE,                  
	PS3_ERR_IJ_REMOVE_INSTANCE,               
	PS3_ERR_IJ_FORCE_DUL_RECOVERY,            
	PS3_ERR_IJ_FORCE_START_DUL_RECOVERY,      
	PS3_ERR_IJ_FORCE_DUL_RECOVERY_PENDING,    
	PS3_ERR_IJ_FORCE_DESTROY_RECOVERY,        
	PS3_ERR_IJ_FORCE_START_DESTROY_RECOVERY,  
	PS3_ERR_IJ_FORCE_RECOVERY_STATE_DEAD,     
	PS3_ERR_IJ_FORCE_RECOVERY_PEER_STATE_DEAD,
	PS3_ERR_IJ_FORCE_RECOVERY_NOT_SUPPORT,    
	PS3_ERR_IJ_FORCE_TO_PREOPERTIONAL_DEAD_FAIL,
	PS3_ERR_IJ_FORCE_TO_PREOPERTIONAL_PEER_DEAD_FAIL,
	PS3_ERR_IJ_FORCE_RECOVERY_REG_FAILED,     
	PS3_ERR_IJ_FORCE_RECOVERY_PEER_COMPLETE_FAILED,
	PS3_ERR_IJ_WAIT_HARDRESET,                
	PS3_ERR_IJ_EVENT_MGR_CMD_ALLOC_FAILED,    
	PS3_ERR_IJ_PD_LIST_WAIT_IRQ_DISABLE,      
	PS3_ERR_IJ_PD_LIST_CMD_NO_RESP,           
	PS3_ERR_IJ_PD_LIST_RESP_RETRY,            
	PS3_ERR_IJ_FORCE_ENTRY_NULL,              
	PS3_ERR_IJ_FORCE_TO_PREOPERTIONAL_DEAD_FAIL1,
	PS3_ERR_IJ_FORCE_RECOVERY_ALLOC_FAIL,     
	PS3_ERR_IJ_FORCE_RECOVERY_DECIDE_PEER_INSTANCE_FAIL,
	PS3_ERR_IJ_FORCE_RECOVERY_PREPARE_PCIE_ERR,
	PS3_ERR_IJ_FORCE_RECOVERY_PREPARE_PEER_PCIE_ERR,
	PS3_ERR_IJ_FORCE_RECOVERY_PREPARE_IOC_HALT,
	PS3_ERR_IJ_FORCE_RECOVERY_PREPARE_PEER_IOC_HALT,
	PS3_ERR_IJ_FORCE_IOC_RUNNING_PCI_ERR,
	PS3_ERR_IJ_FORCE_VDINFO_SUB_FAIL,
	PS3_ERR_IJ_FORCE_WEB_SUB_FAIL,
	PS3_ERR_IJ_WAIT_RUNNING_FAIL, 
	PS3_ERR_IJ_WEB_SUBSCRIBE,  	  
	PS3_ERR_IJ_FORCE_RECOVERY_FINISH_STATE_NOOPERATIONAL,
	PS3_ERR_IJ_FORCE_HARD_INIT_RUNNING_UNNORMAL,
	PS3_ERR_IJ_FORCE_HARD_READY_PCIE_ERRL,
	PS3_ERR_IJ_WAIT_RUNNING_FAIL1,        
	PS3_ERR_DUMP_ALLOC_FAILED,                
	PS3_ERR_IJ_DUMP_WORK_FAILED,              
	PS3_ERR_IJ_FEATURE_SUPPORT_ERR,           
	PS3_ERR_IJ_DUMP_STATUS_ERR,               
	PS3_ERR_IJ_DUMP_TYPE_INVALID,             
	PS3_ERR_IJ_DUMP_PCIE_ERR,                 
	PS3_ERR_IJ_DUMP_RECOVERY_ERR,             
	PS3_ERR_IJ_DUMP_TYPE_ILLEGAL,             
	PS3_ERR_IJ_DUMP_WORK_QUEUE_NULL,          
	PS3_ERR_IJ_DUMP_STATE_ILLEGAL,            
	PS3_ERR_IJ_DUMP_TRIGGER_FAIL,             
	PS3_ERR_IJ_DUMP_DUMP_STATE_GET_FAIL,      
	PS3_ERR_IJ_DUMP_DUMP_STATE_INVALID,       
	PS3_ERR_IJ_DUMP_FILE_OPEN_FAIL,           
	PS3_ERR_IJ_DUMP_DATA_SIZE_FAIL,           
	PS3_ERR_IJ_DUMP_WRITE_FAIL,               
	PS3_ERR_IJ_DUMP_ABORT_GET_CTRL_FAIL,      
	PS3_ERR_IJ_DUMP_END_GET_CTRL_FAIL,        
	PS3_ERR_IJ_DUMP_TRIGGER_GET_CTRL_FAIL,    
	PS3_ERR_IJ_DUMP_DATA_COPY_GET_CTRL_FAIL,  
	PS3_ERR_IJ_DUMP_IS_TRIGGER_GET_CTRL_FAIL, 
	PS3_ERR_IJ_DUMP_CTRL_ERR,                 
	PS3_ERR_IJ_WAIT_PM_INSTANCE_NULL,         
	PS3_ERR_IJ_WAIT_SUSPEND_HALT_RESET,       
	PS3_ERR_IJ_WAIT_SUSPEND_HALT_RESET_1,     
	PS3_ERR_IJ_WAIT_SUSPEND_WEB_UNSUB_FAILED, 
	PS3_ERR_IJ_WAIT_SUSPEND_WEB_UNSUB_FAILED_1,
	PS3_ERR_IJ_WAIT_SUSPEND_WEB_UNSUB_FAILED_2,
	PS3_ERR_IJ_WAIT_SUSPEND_VD_PENDING_FAILED,
	PS3_ERR_IJ_WAIT_RESUME_EVENT_FAILED,      
	PS3_ERR_IJ_WAIT_SUSPEND_HALT_RESET_2,     
	PS3_ERR_IJ_WAIT_RESUME_FUNCID_INVALID,    
	PS3_ERR_FORCE_SET_CMD_INDEX_NOT_MGR,      
	PS3_ERR_EXP_ID_ERR,                       
	PS3_ERR_HBA_PHY_COUNT_ZERO,               
	PS3_ERR_IJ_IOC_TO_READY_FAILED1,          
	PS3_ERR_IJ_REG_READ_ZERO,                 
	PS3_ERR_IJ_REG_READ_ERR,                  
	PS3_ERR_IJ_QOS_FORCE_TFIFO_ZERO_DEPTH,    
	PS3_ERR_IJ_FEATURE_REG_READ_ERR,          
	PS3_ERR_IJ_IOC_TO_CRITICAL,               
	PS3_ERR_IJ_CHANGE_FW_TO_HALT_IN_PREPARE,  
	PS3_ERR_IJ_GET_PRIV_DATA_DELAY,           
	PS3_ERR_IJ_DEL_DEV_WAIT_OS_PRIV_DATA,     
	PS3_ERR_IJ_ADD_DEV_WAIT_OS_PRIV_DATA,     
	PS3_ERR_IJ_FORCE_WAIT,                    
	PS3_ERR_IJ_PD_ATTR_WAIT_OS_SCAN,          
	PS3_ERR_IJ_OS_SCAN,                       
	PS3_ERR_IJ_PD_ATTR_WAIT_PD_ATTR,          
	PS3_ERR_IJ_PD_ATTR,                       
	PS3_ERR_IJ_CMD_BLOCK_BEFORE_SEND_TO_IOC,  
	PS3_ERR_IJ_SGL_ADDR_PAGE_MODE_5,	   	  
	PS3_ERR_IJ_SGL_ADDR_RESTORE,		   	  
	PS3_ERR_IJ_FORCE_IOCTL_WAIT_RECOVERY,     
	PS3_ERR_IJ_FORCE_WAIT_CLI_CMD,            
	PS3_ERR_IJ_WDT_WAIT_REC_REQ,              
	PS3_ERR_IJ_WDT_WAIT_REC_REQ_2,            
	PS3_ERR_IJ_WDT_WAIT_REC_REQ_3,            
	PS3_ERR_IJ_WDT_WAIT_REC_REQ_4,            
	PS3_ERR_IJ_RECOVERY_BLOCK_BEFORE_RUNNING, 
	PS3_ERR_IJ_CMD_SEND_WAIT_RECOVERY_END,    
	PS3_ERR_IJ_CMD_SEND_INSTANCE_RECOVERY,    
	PS3_ERR_IJ_CMD_BLOCK_BEFORE_DELIVER_CNT,  
	PS3_ERR_IJ_V2_IS_LOAD_FALSE,              
	PS3_ERR_IJ_V2_PCIE_ERR,                   
	PS3_ERR_IJ_V2_FORCE_INSTANCE_WAIT_UNORMAL,
	PS3_ERR_IJ_V2_WAKE_RECOVERY_WAIT,         
	PS3_ERR_IJ_V2_RECOVERY_WAIT_NOTIFY,       
	PS3_ERR_IJ_V2_FORCE_INSTANCE_STATE_NORMAL,
	PS3_ERR_IJ_V2_FORCE_INS_STATE_UNNORMAL,   
	PS3_ERR_IJ_V2_FORCE_INSTANCE_WAIT_NORMAL, 
	PS3_ERR_IJ_V2_FORCE_INS_DEAD,             
	PS3_ERR_IJ_V2_IS_LOAD_FALSE1,             
	PS3_ERR_IJ_V2_FORCE_INS_DEAD1,            
	PS3_ERR_IJ_ABORT_BLOCK1,			      
	PS3_ERR_IJ_ABORT_BLOCK2,			      
	PS3_ERR_IJ_SAS_PORT_CREATE_FAIL,          
	PS3_ERR_IJ_DETECTED_REMOVE_BREAK,         
	PS3_ERR_IJ_DETECTED_REMOVE_BREAK_2,       
	PS3_ERR_IJ_DETECTED_REMOVE_BREAK_3,       
	PS3_ERR_IJ_RECOVERY_STATE_SHALLOW,        
	PS3_ERR_IJ_RECOVERY_HALT_BREAK,           
	PS3_ERR_IJ_RECOVERY_HALT_BREAK_1,         
	PS3_ERR_IJ_FORCE_RECOVERY_DOORBELL_DONE,  
	PS3_ERR_IJ_RECOVERY_PCIE_ERR,             
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_1,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_2,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_3,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_4,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_5,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_6,           
	PS3_ERR_IJ_RECOVERY_PCIE_ERR_7,           
	PS3_ERR_IJ_RECOVERY_KEY_STATE_CHECK,      
	PS3_ERR_IJ_BIT_POS_READ_ERR,              
	PS3_ERR_IJ_WAIT_RUNNING_CRITICAL,         
	PS3_ERR_IJ_WAIT_RUNNING_FAULT,            
	PS3_ERR_IJ_WAIT_RUNNING_COUNT_MAX,        
	PS3_ERR_IJ_WAIT_RUNNING_READY,            
	PS3_ERR_IJ_WAIT_RUNNING_WAIT,             
	PS3_ERR_IJ_WAIT_RUNNING_RESP_ERR,         
	PS3_ERR_IJ_OP_EVENT_SUB_FAILED,           
	PS3_ERR_IJ_OP_PENDING_SUB_FAILED,         
	PS3_ERR_IJ_OP_WEB_SUB_FAILED,             
	PS3_ERR_IJ_COMPLETE_FAULT,                
	PS3_ERR_IJ_FORCE_RECOVERY_DOORBELL_START, 
	PS3_ERR_IJ_CHECK_SUSPEND,                 
	PS3_ERR_IJ_CMD_TIMEOUT_RECOVERY_CHECK,    
	PS3_ERR_IJ_HALF_RECOVERY_CHECK,           
	PS3_ERR_IJ_WITHOUT_DETAIL_BREAK_CHECK,    
	PS3_ERR_IJ_DETAIL_BREAK_CHECK1,           
	PS3_ERR_IJ_DETAIL_BREAK_CHECK2,           
	PS3_ERR_IJ_DETAIL_BREAK_CHECK3,           
	PS3_ERR_IJ_CHECK_EVENT_CMD_NULL,          
	PS3_ERR_IJ_EVENT_CMD_NULL_CHECK1,         
	PS3_ERR_IJ_EVENT_CMD_NULL_CHECK2,         
	PS3_ERR_IJ_DETAIL_BREAK_CHECK4,           
	PS3_ERR_IJ_EVENT_WAIT_SUSPEND_END,        
	PS3_ERR_IJ_SUSPEND_END,                   
	PS3_ERR_IJ_REPLY_BLOCK,                   
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_5,            
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_6,            
	PS3_ERR_IJ_QOS_PD_INIT_FAIL_7,            
	PS3_ERR_IJ_MAX_COUNT,
};
struct ps3_rec_work_context {
	struct delayed_work _work;
	struct workqueue_struct *_queue;
	struct ps3_instance *instance;
	unsigned int state;
};

#ifdef PS3_SUPPORT_INJECT

#define PS3_ERR_SCENE_NUM (1000)

typedef int (*injectCallback)(void* userData, ...);

typedef struct Ps3Injection
{
	enum InjectType type;	
	injectCallback callback;
	unsigned char active;
	unsigned short count;
	unsigned char is_hit_pre:1;
	unsigned char is_hit_post:1;
	unsigned char reserved:6;
}Ps3Injection_t;

void inject_register(unsigned short err_type, int (*callback)(void *userData, ...));
void inject_active_intf(unsigned short err_type, unsigned short count);
void inject_execute_callback(unsigned short err_type, void *data);
void inject_execute_callback_at_time(unsigned short err_type, void *data);
void inject_execute_callback_relevance_wait_pre(unsigned short err_type,
						unsigned short err_type_wait,
						void *data);
void inject_execute_callback_relevance_wait_post(unsigned short err_type,
						 unsigned short err_type_wait,
						 void *data);
void inject_execute_callback_at_time_relevance_wait_pre(
	unsigned short err_type, unsigned short err_type_wait, void *data);
void inject_execute_callback_at_time_relevance_wait_post(
	unsigned short err_type, unsigned short err_type_wait, void *data);

#define INJECT_REG(type, callback)                                             \
	inject_register(type, (int (*)(void *userData, ...))callback);
#define INJECT_ACTIVE(type, count) inject_active_intf(type, count);
#define INJECT_START(type, data) inject_execute_callback(type, data);
#define INJECT_AT_TIMES(type, data) inject_execute_callback_at_time(type, data)
#define INJECT_START_WAIT_REV_PRE(type, type_wait, data);                       \
	inject_execute_callback_relevance_wait_pre(type, type_wait, data)
#define INJECT_START_WAIT_REV_POST(type, type_wait, data);                      \
	inject_execute_callback_relevance_wait_post(type, type_wait, data)
#define INJECT_START_AT_TIME_WAIT_REV_PRE(type, type_wait, data);               \
	inject_execute_callback_at_time_relevance_wait_pre(type, type_wait,    \
							   data);
#define INJECT_START_AT_TIME_WAIT_REV_POST(type, type_wait, data)              \
	inject_execute_callback_at_time_relevance_wait_post(type, type_wait,   \
							    data);



#define PS3_IJ_SLEEP(ms, err_t) do {ps3_err_inject_sleep((ms), (err_t));} while(0)
#define PS3_IJ_SLEEP_RAND(min, max, err_t) do {ps3_err_inject_sleep_rand((min), (max), (err_t));} while(0)

void ps3_err_inject_sleep(unsigned int ms, unsigned short err_type);

void ps3_err_inject_sleep_rand(unsigned int min, unsigned int max,
			       unsigned short err_type);

void ps3_err_inject_err_type_valid(unsigned short err_type);

void ps3_err_inject_err_type_clean(unsigned short err_type);

unsigned char ps3_err_inject_err_type_get(unsigned short err_type);
void active_err_inject(void);
void ps3_wait_recovery_rand_finish(void);

void ps3_err_inject_wait_pre(unsigned short err_type_wait);
void ps3_err_inject_wait_post(unsigned short err_type_wait);

#define INJECT_PROBE_ACTIVE() active_err_inject();
void inject_init(void);
void inject_exit(void);

#define INJECT_INIT() inject_init();
#define INJECT_EXIT() inject_exit();

#else

#define PS3_IJ_SLEEP(ms, err_t)
#define PS3_IJ_SLEEP_RAND(min, max, err_t)
#define INJECT_REG(type, callback)
#define INJECT_ACTIVE(type, count)
#define INJECT_START(type, data)
#define INJECT_AT_TIMES(type, data)
#define INJECT_START_WAIT_REV_PRE(type, type_wait, data)
#define INJECT_START_WAIT_REV_POST(type, type_wait, data)
#define INJECT_START_AT_TIME_WAIT_REV_PRE(type, type_wait, data)
#define INJECT_START_AT_TIME_WAIT_REV_POST(type, type_wait, data)

#define INJECT_INIT()
#define INJECT_EXIT()
#define INJECT_PROBE_ACTIVE()
#endif

#endif
