308 lines
8.4 KiB
C
308 lines
8.4 KiB
C
/*
|
|
|
|
Copyright (c) 2011 Cypress Semiconductor Corporation
|
|
|
|
Module Name:
|
|
|
|
CyIoclt.h
|
|
|
|
Additional Notes:
|
|
|
|
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
PURPOSE.
|
|
|
|
*/
|
|
#ifndef __IOCTL_H__
|
|
#define __IOCTL_H__
|
|
|
|
#ifndef DRIVER
|
|
|
|
#ifndef CTL_CODE
|
|
#include <devioctl.h>
|
|
#endif
|
|
|
|
#ifndef BM_REQUEST_TYPE
|
|
#include "usb200.h"
|
|
#endif
|
|
|
|
#define DIR_HOST_TO_DEVICE 0
|
|
#define DIR_DEVICE_TO_HOST 1
|
|
|
|
#define DEVICE_SPEED_UNKNOWN 0x00000000
|
|
#define DEVICE_SPEED_LOW_FULL 0x00000001
|
|
#define DEVICE_SPEED_HIGH 0x00000002
|
|
|
|
typedef struct _WORD_SPLIT {
|
|
UCHAR lowByte;
|
|
UCHAR hiByte;
|
|
} WORD_SPLIT, *PWORD_SPLIT;
|
|
|
|
typedef struct _BM_REQ_TYPE {
|
|
UCHAR Recipient : 2;
|
|
UCHAR Reserved : 3;
|
|
UCHAR Type : 2;
|
|
UCHAR Direction : 1;
|
|
} BM_REQ_TYPE, *PBM_REQ_TYPE;
|
|
|
|
typedef struct _SETUP_PACKET {
|
|
union {
|
|
BM_REQ_TYPE bmReqType;
|
|
UCHAR bmRequest;
|
|
};
|
|
|
|
UCHAR bRequest;
|
|
|
|
union {
|
|
WORD_SPLIT wVal;
|
|
USHORT wValue;
|
|
};
|
|
|
|
union {
|
|
WORD_SPLIT wIndx;
|
|
USHORT wIndex;
|
|
};
|
|
|
|
union {
|
|
WORD_SPLIT wLen;
|
|
USHORT wLength;
|
|
};
|
|
|
|
ULONG ulTimeOut;
|
|
|
|
} SETUP_PACKET, *PSETUP_PACKET;
|
|
|
|
#define USB_ISO_ID 0x4945
|
|
#define USB_ISO_CMD_ASAP 0x8000
|
|
#define USB_ISO_CMD_CURRENT_FRAME 0x8001
|
|
#define USB_ISO_CMD_SET_FRAME 0x8002
|
|
|
|
typedef struct _ISO_ADV_PARAMS {
|
|
USHORT isoId;
|
|
USHORT isoCmd;
|
|
|
|
ULONG ulParam1;
|
|
ULONG ulParam2;
|
|
|
|
} ISO_ADV_PARAMS, *PISO_ADV_PARAMS;
|
|
|
|
typedef struct _ISO_PACKET_INFO {
|
|
ULONG Status;
|
|
ULONG Length;
|
|
} ISO_PACKET_INFO, *PISO_PACKET_INFO;
|
|
|
|
/* icex2 changes: force packed struct */
|
|
#pragma pack(push, packing)
|
|
#pragma pack(1)
|
|
typedef struct _SINGLE_TRANSFER {
|
|
union {
|
|
SETUP_PACKET SetupPacket;
|
|
ISO_ADV_PARAMS IsoParams;
|
|
};
|
|
|
|
UCHAR reserved;
|
|
|
|
UCHAR ucEndpointAddress;
|
|
ULONG NtStatus;
|
|
ULONG UsbdStatus;
|
|
ULONG IsoPacketOffset;
|
|
ULONG IsoPacketLength;
|
|
ULONG BufferOffset;
|
|
ULONG BufferLength;
|
|
} SINGLE_TRANSFER, *PSINGLE_TRANSFER;
|
|
#pragma pack(pop, packing)
|
|
|
|
#endif // #ifndef DRIVER
|
|
|
|
typedef struct _SET_TRANSFER_SIZE_INFO {
|
|
UCHAR EndpointAddress;
|
|
ULONG TransferSize;
|
|
} SET_TRANSFER_SIZE_INFO, *PSET_TRANSFER_SIZE_INFO;
|
|
|
|
//
|
|
// Macro to extract function out of the device io control code
|
|
//
|
|
#ifdef WIN_98_DDK
|
|
#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) \
|
|
(((ULONG)(ctrlCode & 0xffff0000)) >> 16)
|
|
#endif
|
|
#define FUNCTION_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0x00003FFC)) >> 2)
|
|
#define ACCESS_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0x000C0000)) >> 14)
|
|
//#define METHOD_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode &
|
|
// 0x00000003)))
|
|
|
|
#define IOCTL_ADAPT_INDEX 0x0000
|
|
|
|
// Get the driver version
|
|
#define IOCTL_ADAPT_GET_DRIVER_VERSION \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get the current USBDI version
|
|
#define IOCTL_ADAPT_GET_USBDI_VERSION \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 1, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get the current device alt interface settings from driver
|
|
#define IOCTL_ADAPT_GET_ALT_INTERFACE_SETTING \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 2, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Set the device interface and alt interface setting
|
|
#define IOCTL_ADAPT_SELECT_INTERFACE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 3, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get device address from driver
|
|
#define IOCTL_ADAPT_GET_ADDRESS \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 4, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get number of endpoints for current interface and alt interface setting from
|
|
// driver
|
|
#define IOCTL_ADAPT_GET_NUMBER_ENDPOINTS \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 5, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get the current device power state
|
|
#define IOCTL_ADAPT_GET_DEVICE_POWER_STATE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 6, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Set the device power state
|
|
#define IOCTL_ADAPT_SET_DEVICE_POWER_STATE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 7, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Send a raw packet to endpoint 0
|
|
#define IOCTL_ADAPT_SEND_EP0_CONTROL_TRANSFER \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 8, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Send/receive data to/from nonep0
|
|
#define IOCTL_ADAPT_SEND_NON_EP0_TRANSFER \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 9, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Simulate a disconnect/reconnect
|
|
#define IOCTL_ADAPT_CYCLE_PORT \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 10, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Reset the pipe
|
|
#define IOCTL_ADAPT_RESET_PIPE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 11, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Reset the device
|
|
#define IOCTL_ADAPT_RESET_PARENT_PORT \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 12, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get the current transfer size of an endpoint (in number of bytes)
|
|
#define IOCTL_ADAPT_GET_TRANSFER_SIZE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 13, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Set the transfer size of an endpoint (in number of bytes)
|
|
#define IOCTL_ADAPT_SET_TRANSFER_SIZE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 14, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Return the name of the device
|
|
#define IOCTL_ADAPT_GET_DEVICE_NAME \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 15, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Return the "Friendly Name" of the device
|
|
#define IOCTL_ADAPT_GET_FRIENDLY_NAME \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 16, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Abort all outstanding transfers on the pipe
|
|
#define IOCTL_ADAPT_ABORT_PIPE \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 17, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Send/receive data to/from nonep0 w/ direct buffer acccess (no buffering)
|
|
#define IOCTL_ADAPT_SEND_NON_EP0_DIRECT \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 18, \
|
|
METHOD_NEITHER, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Return device speed
|
|
#define IOCTL_ADAPT_GET_DEVICE_SPEED \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 19, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
// Get the current USB frame number
|
|
#define IOCTL_ADAPT_GET_CURRENT_FRAME \
|
|
CTL_CODE( \
|
|
FILE_DEVICE_UNKNOWN, \
|
|
IOCTL_ADAPT_INDEX + 20, \
|
|
METHOD_BUFFERED, \
|
|
FILE_ANY_ACCESS)
|
|
|
|
#define NUMBER_OF_ADAPT_IOCTLS 21 // Last IOCTL_ADAPT_INDEX + 1
|
|
|
|
#endif // __IOCTL_H__
|