// ioctl.h    Include file for Advantech Port I/O Driver
//
// Define the IOCTL codes we will use.  The IOCTL code contains a command
// identifier, plus other information about the device, the type of access
// with which the file must have been opened, and the type of buffering.
//

// Device type           -- in the "User Defined" range."
#define AD_TYPE 40000

// The IOCTL function codes from 0x800 to 0xFFF are for customer use.

#define IOCTL_AD_READ_PORT_UCHAR \
    CTL_CODE( AD_TYPE, 0x900, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_READ_PORT_USHORT \
    CTL_CODE( AD_TYPE, 0x901, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_READ_PORT_ULONG \
    CTL_CODE( AD_TYPE, 0x902, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_READ_SECPORT_UCHAR \
    CTL_CODE( AD_TYPE, 0x903, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_READ_SECPORT_USHORT \
    CTL_CODE( AD_TYPE, 0x904, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_READ_SECPORT_ULONG \
    CTL_CODE( AD_TYPE, 0x905, METHOD_BUFFERED, FILE_READ_ACCESS )

#define IOCTL_AD_WRITE_PORT_UCHAR \
    CTL_CODE(AD_TYPE,  0x910, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_WRITE_PORT_USHORT \
    CTL_CODE(AD_TYPE,  0x911, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_WRITE_PORT_ULONG \
    CTL_CODE(AD_TYPE,  0x912, METHOD_BUFFERED, FILE_WRITE_ACCESS)

// High Speed IOCTL
#define IOCTL_AD_FAI_INT_START \
    CTL_CODE(AD_TYPE,  0x913, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_DMA_START \
    CTL_CODE(AD_TYPE,  0x914, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_DUAL_DMA_START \
    CTL_CODE(AD_TYPE,  0x915, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_INT_WATCHDOG_START \
    CTL_CODE(AD_TYPE,  0x916, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_DMA_WATCHDOG_START \
    CTL_CODE(AD_TYPE,  0x917, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_CLEAR_OVERRUN \
    CTL_CODE(AD_TYPE,  0x918, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_TRANSFER \
    CTL_CODE(AD_TYPE,  0x919, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_CHECK \
    CTL_CODE(AD_TYPE,  0x920, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_WATCHDOG_CHECK \
    CTL_CODE(AD_TYPE,  0x921, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_STOP \
    CTL_CODE(AD_TYPE,  0x922, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAO_INT_START \
    CTL_CODE(AD_TYPE,  0x923, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAO_DMA_START \
    CTL_CODE(AD_TYPE,  0x924, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAO_LOAD  \
    CTL_CODE(AD_TYPE,  0x925, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

#define IOCTL_AD_FAO_CHECK \
    CTL_CODE(AD_TYPE,  0x926, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAO_STOP  \
    CTL_CODE(AD_TYPE,  0x927, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_ALLOCATE_DMA_BUFFER \
    CTL_CODE(AD_TYPE,  0x928, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FREE_DMA_BUFFER \
    CTL_CODE(AD_TYPE,  0x929, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_INT_SCAN_START \
    CTL_CODE(AD_TYPE,  0x930, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_ENABLE_EVENT \
    CTL_CODE(AD_TYPE,  0x931, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_CHECK_CONFLICT \
    CTL_CODE( AD_TYPE, 0x932, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_RESET_RESOURCE \
    CTL_CODE( AD_TYPE, 0x933, METHOD_BUFFERED, FILE_ANY_ACCESS)
    

//Interrupt Event functions
#define IOCTL_AD_IE_SET_EVENT \
    CTL_CODE( AD_TYPE, 0x934, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_IE_CLEAR_EVENT \
    CTL_CODE( AD_TYPE, 0x935, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_ENABLE_EVENTEX \
    CTL_CODE(AD_TYPE,  0x936, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FDI_CHECK \
    CTL_CODE(AD_TYPE,  0x937, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_AD_FAI_INTDMAUSAGE_CHECK \
    CTL_CODE(AD_TYPE,  0x938, METHOD_BUFFERED, FILE_ANY_ACCESS)

//
#define IOCTL_AD_WRITE_SECPORT_UCHAR \
    CTL_CODE(AD_TYPE,  0x939, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_WRITE_SECPORT_USHORT \
    CTL_CODE(AD_TYPE,  0x93a, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_WRITE_SECPORT_ULONG \
    CTL_CODE(AD_TYPE,  0x93b, METHOD_BUFFERED, FILE_WRITE_ACCESS)

#define IOCTL_AD_FAI_BUSMASTER_DMA_START \
    CTL_CODE(AD_TYPE,  0x93c, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
    
#define IOCTL_AD_FAO_BUSMASTER_DMA_START \
    CTL_CODE(AD_TYPE,  0x93d, METHOD_IN_DIRECT, FILE_ANY_ACCESS)

// Qinjing add at 2002/07/15 for PCI1710 Series update eeprom
#define IOCTL_PCI_EEPROM_MODIFY \
    CTL_CODE( AD_TYPE,  0x93e, METHOD_IN_DIRECT, FILE_ANY_ACCESS )
// Qinjing end.

//\\\\\\\\\\\\\\\\\\\\\\\\\ 2.0C //////////////////////
//Fast DI control codes
#define IOCTL_AD_FDI_START_CONFIG\
    CTL_CODE(AD_TYPE,  0x93e, METHOD_BUFFERED, FILE_READ_ACCESS) 

#define IOCTL_AD_FDI_STOP\
    CTL_CODE(AD_TYPE,  0x93f, METHOD_BUFFERED, FILE_READ_ACCESS) 

// Fast DO control code.
#define IOCTL_AD_FDO_START_CONFIG\
    CTL_CODE(AD_TYPE,  0x940, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_FDO_STOP\
    CTL_CODE(AD_TYPE,  0x941, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_FDO_CHECK \
    CTL_CODE(AD_TYPE,  0x942, METHOD_BUFFERED, FILE_ANY_ACCESS)  

//Get kernel driver information.
#define IOCTL_AD_GET_INFOMATION\
    CTL_CODE(AD_TYPE,  0xF00, METHOD_BUFFERED, FILE_READ_ACCESS)  
///////////////////////////// 2.0C \\\\\\\\\\\\\\\\\\\\\\


// Watchdog Command Control Code: Begin. Range 0xF10-0xF2F Reserved
#define IOCTL_AD_WATCHDOG_INIT\
    CTL_CODE(AD_TYPE,  0xF10, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_DEINIT\
    CTL_CODE(AD_TYPE,  0xF11, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_START\
    CTL_CODE(AD_TYPE,  0xF12, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_ENABLE\
    CTL_CODE(AD_TYPE,  0xF13, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_DISABLE\
    CTL_CODE(AD_TYPE,  0xF14, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_REBOOT\
    CTL_CODE(AD_TYPE,  0xF15, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_STROBE\
    CTL_CODE(AD_TYPE,  0xF16, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_FEEDDOG\
    CTL_CODE(AD_TYPE,  0xF17, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_START_HARDWARE\
    CTL_CODE(AD_TYPE,  0xF18, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_SET_MODE\
    CTL_CODE(AD_TYPE,  0xF19, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_MODE\
    CTL_CODE(AD_TYPE,  0xF1A, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_SET_TIMER\
    CTL_CODE(AD_TYPE,  0xF1B, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_TIMER\
    CTL_CODE(AD_TYPE,  0xF1C, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_RUNNINGSTATUS\
    CTL_CODE(AD_TYPE,  0xF1D, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_LOGINFO\
    CTL_CODE(AD_TYPE,  0xF1E, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_SET_LOGINFO\
    CTL_CODE(AD_TYPE,  0xF1F, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_SET_CHIPSET\
    CTL_CODE(AD_TYPE,  0xF20, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_CHIPSET\
    CTL_CODE(AD_TYPE,  0xF21, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_STARTUPTIME\
    CTL_CODE(AD_TYPE,  0xF22, METHOD_BUFFERED, FILE_ANY_ACCESS)  

#define IOCTL_AD_WATCHDOG_GET_REBOOTINFO\
    CTL_CODE(AD_TYPE,  0xF23, METHOD_BUFFERED, FILE_ANY_ACCESS)  


// Watchdog Command Control Code: End
#define FILE_DEVICE_SMBUS		FILE_DEVICE_UNKNOWN
#define IOCTL_SMBUS_WRITE_BYTE \
    CTL_CODE( FILE_DEVICE_SMBUS, 0x9c0, METHOD_BUFFERED, FILE_WRITE_ACCESS )
#define IOCTL_SMBUS_READ_BYTE \
    CTL_CODE( FILE_DEVICE_SMBUS, 0x9c1, METHOD_BUFFERED, FILE_WRITE_ACCESS )
