#ifndef _NTIOCTL_H_
#define _NTIOCTL_H_

#include <ntddk.h>
#include "flioctl.h"

#define FILE_DEVICE_TFFS_IOCTL		0x8000
#define ACCESS_DEVICE_TFFS_IOCTL	0x800


#define IOCTL_TFFS_GET_INFO										\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_GET_INFO),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_DEFRAGMENT									\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_DEFRAGMENT),		\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_WRITE_PROTECT								\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_WRITE_PROTECT),	\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_MOUNT_VOLUME									\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_MOUNT_VOLUME),		\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_FORMAT_VOLUME								\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_FORMAT_VOLUME),	\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_BDK_OPERATION								\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_BDK_OPERATION),	\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_DELETE_SECTORS								\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_DELETE_SECTORS),	\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_READ_SECTORS									\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_READ_SECTORS),		\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_WRITE_SECTORS								\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_WRITE_SECTORS),	\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_NUMBER_OF_PARTITIONS									\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_NUMBER_OF_PARTITIONS),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_CUSTOMER_ID									\
	CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_CUSTOMER_ID),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_EXTENDED_WRITE_IPL									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_EXTENDED_WRITE_IPL),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_EXTENDED_ENVIRONMENT_VARIABLES									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFSFL_UNIQUE_ID									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_UNIQUE_ID),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFSFL_INQUIRE_CAPABILITIES									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_INQUIRE_CAPABILITIES),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_DEEP_POWER_DOWN_MODE									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_DEEP_POWER_DOWN_MODE),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_FORMAT_PHYSICAL_DRIVE									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,							\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_FORMAT_PHYSICAL_DRIVE),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_BDTL_HW_PROTECTION									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_BDTL_HW_PROTECTION),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_BINARY_HW_PROTECTION									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_BINARY_HW_PROTECTION),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_OTP									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_OTP),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_PLACE_EXB_BY_BUFFER									\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_PLACE_EXB_BY_BUFFER),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_EXTENDED_ENVIRONMENT_VARIABLES				\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_TFFS_VERIFY_VOLUME				\
CTL_CODE( FILE_DEVICE_TFFS_IOCTL,												\
		(ACCESS_DEVICE_TFFS_IOCTL + FL_IOCTL_VERIFY_VOLUME),			\
		METHOD_BUFFERED, FILE_ANY_ACCESS )

#endif /* _NTIOCTL_H_ */
