/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _PS3_KERNEL_VERSION_H_
#define _PS3_KERNEL_VERSION_H_

#if (defined(PS3_PRIV_BUSY) || (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) || \
	(defined(KYLIN_MAJOR) && defined(CONFIG_X86) && (KYLIN_MAJOR == 10 && KYLIN_MINOR == 4))))
#define DRIVER_SUPPORT_PRIV_BUSY
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0))
#define PS3_HOST_ATTRS
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0))
#define PS3_TRACK_QUEUE_DEPTH
#endif

#if ((defined(RHEL_MAJOR) && \
	((RHEL_MAJOR == 8) || (RHEL_MAJOR == 9 && RHEL_MINOR < 4))) || \
	(!defined(RHEL_MAJOR) && LINUX_VERSION_CODE <= KERNEL_VERSION(6, 5, 13)))
#define PS3_SUPPORT_PCIE_REPORT
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0))
#define PS3_SUPPORT_BIO_MERGE
#endif

#if ((defined(RHEL_MAJOR) && (RHEL_MAJOR == 9) && (RHEL_MINOR >= 3)) || \
	(LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0)))
#define PS3_RESET_TIMER
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(4, 16, 0)
#define PS3_BLK_EH_NOT_HANDLED
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
#define PS3_SUPPORT_CMD_SCP
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0))
#define PS3_SUPPORT_DRIVER_SENSE
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 14, 0))
#define PS3_SUPPORT_FS
#endif

#if ((defined(RHEL_MAJOR) && \
	((RHEL_MAJOR < 9) || (RHEL_MAJOR == 9 && RHEL_MINOR < 3))) || \
	(!defined(RHEL_MAJOR) && LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 38)))
#define PS3_DID_NEXUS_FAILURE
#endif

#if ((defined(RHEL_MAJOR) && (RHEL_MAJOR == 7) && (RHEL_MINOR == 3)) || \
	((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) && \
	(LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 14))))
#define PS3_DID_REQUEUE
#endif

#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)
#define PS3_FALLTHROUGH
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0))
#define PS3_SCMD_IO_DONE
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))
#define PS3_SCMD_GET_REQUEST
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(4, 14, 0)
#define PS3_SAS_SMP_RETURN
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
#define PS3_SYPPORT_BIO_ITER
#endif

#if (LINUX_VERSION_CODE > KERNEL_VERSION(4, 9, 0) && \
	LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0))
#define PS3_SUPPORT_LINX80
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 10, 0)
#define PS3_SCSI_DEVICE_LOOKUP
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 10, 0)
#define PS3_CHANGE_QUEUE_DEPTH
#endif

#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0)) || \
	(defined(RHEL_MAJOR) && (RHEL_MAJOR == 8) && (RHEL_MINOR >= 3)) || \
	(defined(CONFIG_SUSE_KERNEL) && \
	((CONFIG_SUSE_VERSION == 15) && (CONFIG_SUSE_PATCHLEVEL >= 2))))
#define PS3_AER_CLEAR_STATUS
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
#define PS3_AER_CLEAR_STATUS_LOW_KERNER
#endif

#if ((defined(RHEL_MAJOR) && (RHEL_MAJOR == 8) && (RHEL_MINOR > 5)) || \
	(defined(RHEL_MAJOR) && (RHEL_MAJOR == 9) && (RHEL_MINOR >= 1)) || \
	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 16, 0)))
#define PS3_SUPPORT_TAGSET
#endif

#if (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 0) || \
	LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
#define PS3_LINUX_SIGNAL
#endif

#if ((defined(RHEL_MAJOR) && (RHEL_MAJOR == 8) && (RHEL_MINOR >= 2)) ||        \
	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)))
#define DRIVER_SUPPORT_KERNEL_IRQ_AFFINITY
#endif

#if (LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 0) ||                          \
	LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0))
#define PS3_OS_MANAGED_IRQ_SUPPORT
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0))
#define PS3_CMD_CDB_CHECK
#endif

#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) || \
	(defined(RHEL_MAJOR) && (RHEL_MAJOR == 9 && RHEL_MINOR >= 2)) || \
	(defined(CONFIG_SUSE_KERNEL) && \
	((CONFIG_SUSE_VERSION == 15) && (CONFIG_SUSE_PATCHLEVEL >= 5))))
#define PS3_MAP_QUEUES
#endif

#if ((defined(RHEL_MAJOR) && (RHEL_MAJOR == 8) && (RHEL_MINOR >= 4)) || \
	(defined(RHEL_MAJOR) && (RHEL_MAJOR == 9) && (RHEL_MINOR >= 1)) || \
	(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)))
#include <linux/blk-mq-pci.h>
#ifndef PS3_TAGSET_SUPPORT
#define PS3_TAGSET_SUPPORT
#endif
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0))
#define PS3_CMD_CREATE_INJECT
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 6, 0)
#define PS3_INJECT_PRANDOWM
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
#define PS3_KERNEL_WRITE_GET_DS
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
#define PS3_KERNEL_WRITE
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 14, 0)
#define PS3_VFS_WRITE
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
#define PS3_SET_FS
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 14, 0)
#define PS3_FORCE_UACCESS
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)
#define PS3_DMA_MAPPING
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0))
#define PS3_DUMP_TIME_32
#endif

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)
#define PS3_FSNOTIFY_FILE
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
#define PS3_FSNOTIFY_FILE_PATH
#endif

#if LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 0)
#define PS3_KERNEL_WRITE_FILE_OP
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
#define PS3_KERNEL_WRITE_FILE_VFS
#else
#define PS3_KERNEL_WRITE_FILE
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0)
#define PS3_FILEMAP_WAIT
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
#define PS3_THREAD_INFO
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
#define PS3_SAS_LONG_LUN
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0))
#define PS3_BLK_DMA_PAD
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0))
#define PS3_BACK_DEV_INFO
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) || \
	(defined(RHEL_MAJOR) && (RHEL_MAJOR >= 8) && (RHEL_MINOR >= 6)))
#define PS3_BLK_QUEUE_FLAG_CLEAR
#endif

#if ((defined(RHEL_MAJOR) && \
	((RHEL_MAJOR < 9) || (RHEL_MAJOR == 9 && RHEL_MINOR < 3))) || \
	(!defined(RHEL_MAJOR) && LINUX_VERSION_CODE < KERNEL_VERSION(6, 6, 0)))
#define PS3_STATIC_MINOR
#endif

#if ((LINUX_VERSION_CODE < KERNEL_VERSION(6, 6, 0) && !defined(RHEL_MAJOR)) || \
	(defined(RHEL_MAJOR) && ((RHEL_MAJOR < 9) || (RHEL_MAJOR == 9 && RHEL_MINOR < 5))))
#define PS3_SUPPORT_FLUSH_SCHEDULED
#endif

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0))
#define PS3_MAP_QUEUES_RET
#endif

#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0)
#define PS3_DISALLOW_ZERO_ARRAY
#define PS3_WORK_FUNC_CHECK
#endif

#endif
