[3/9] include: Add usb.h, usb100.h, usb200.h and usbdlib.h.

Alexander Morozov amorozov at etersoft.ru
Mon Oct 6 02:20:21 CDT 2008


-------------- next part --------------
From d296f6fbada5fea9edd96cdb239613d43d0de7b0 Mon Sep 17 00:00:00 2001
From: Alexander Morozov <amorozov at etersoft.ru>
Date: Fri, 3 Oct 2008 17:48:42 +0400
Subject: [PATCH] include: Add usb.h, usb100.h, usb200.h and usbdlib.h.

---
 include/ddk/usb.h     |  340 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/ddk/usb100.h  |   99 ++++++++++++++
 include/ddk/usb200.h  |   22 +++
 include/ddk/usbdlib.h |   26 ++++
 4 files changed, 487 insertions(+), 0 deletions(-)
 create mode 100644 include/ddk/usb.h
 create mode 100644 include/ddk/usb100.h
 create mode 100644 include/ddk/usb200.h
 create mode 100644 include/ddk/usbdlib.h

diff --git a/include/ddk/usb.h b/include/ddk/usb.h
new file mode 100644
index 0000000..31cef46
--- /dev/null
+++ b/include/ddk/usb.h
@@ -0,0 +1,340 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _USB_
+#define _USB_
+
+#include "usb200.h"
+
+#define URB_FUNCTION_SELECT_CONFIGURATION            0x0000
+#define URB_FUNCTION_SELECT_INTERFACE                0x0001
+#define URB_FUNCTION_ABORT_PIPE                      0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL       0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL    0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH                0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH                0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER        0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER                0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER      0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER                  0x000A
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE      0x000B
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE        0x000C
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE           0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE        0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT         0x000F
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE         0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE      0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT       0x0012
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE          0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE       0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT        0x0015
+#define URB_FUNCTION_RESERVED_0X0016                 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE                   0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE                0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT                 0x0019
+#define URB_FUNCTION_CLASS_DEVICE                    0x001A
+#define URB_FUNCTION_CLASS_INTERFACE                 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT                  0x001C
+#define URB_FUNCTION_RESERVE_0X001D                  0x001D
+#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
+#define URB_FUNCTION_CLASS_OTHER                     0x001F
+#define URB_FUNCTION_VENDOR_OTHER                    0x0020
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER           0x0021
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER          0x0022
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER            0x0023
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT    0x0024
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT      0x0025
+#define URB_FUNCTION_GET_CONFIGURATION               0x0026
+#define URB_FUNCTION_GET_INTERFACE                   0x0027
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE   0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE     0x0029
+#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR       0x002A
+#define URB_FUNCTION_RESERVE_0X002B                  0x002B
+#define URB_FUNCTION_RESERVE_0X002C                  0x002C
+#define URB_FUNCTION_RESERVE_0X002D                  0x002D
+#define URB_FUNCTION_RESERVE_0X002E                  0x002E
+#define URB_FUNCTION_RESERVE_0X002F                  0x002F
+#define URB_FUNCTION_SYNC_RESET_PIPE                 0x0030
+#define URB_FUNCTION_SYNC_CLEAR_STALL                0x0031
+
+#define USBD_SHORT_TRANSFER_OK                       0x00000002
+#define USBD_TRANSFER_DIRECTION_OUT                  0
+#define USBD_TRANSFER_DIRECTION_IN                   1
+
+typedef LONG USBD_STATUS;
+
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+typedef enum _USBD_PIPE_TYPE {
+    UsbdPipeTypeControl,
+    UsbdPipeTypeIsochronous,
+    UsbdPipeTypeBulk,
+    UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+typedef struct _USBD_PIPE_INFORMATION {
+    USHORT MaximumPacketSize;
+    UCHAR EndpointAddress;
+    UCHAR Interval;
+    USBD_PIPE_TYPE PipeType;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG MaximumTransferSize;
+    ULONG PipeFlags;
+} USBD_PIPE_INFORMATION;
+typedef struct _USBD_PIPE_INFORMATION *PUSBD_PIPE_INFORMATION;
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+    USHORT Length;
+    UCHAR InterfaceNumber;
+    UCHAR AlternateSetting;
+    UCHAR Class;
+    UCHAR SubClass;
+    UCHAR Protocol;
+    UCHAR Reserved;
+    USBD_INTERFACE_HANDLE InterfaceHandle;
+    ULONG NumberOfPipes;
+    USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION;
+typedef struct _USBD_INTERFACE_INFORMATION *PUSBD_INTERFACE_INFORMATION;
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+    ULONG Offset;
+    ULONG Length;
+    USBD_STATUS Status;
+} USBD_ISO_PACKET_DESCRIPTOR;
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_HCD_AREA {
+    PVOID Reserved8[8];
+};
+
+struct _URB_HEADER {
+    USHORT Length;
+    USHORT Function;
+    USBD_STATUS Status;
+    PVOID UsbdDeviceHandle;
+    ULONG UsbdFlags;
+};
+
+struct _URB_SELECT_INTERFACE {
+    struct _URB_HEADER Hdr;
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_CONFIGURATION {
+    struct _URB_HEADER Hdr;
+    PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+    USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+    USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_PIPE_REQUEST {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG Reserved;
+};
+
+struct _URB_FRAME_LENGTH_CONTROL {
+    struct _URB_HEADER Hdr;
+};
+
+struct _URB_GET_FRAME_LENGTH {
+    struct _URB_HEADER Hdr;
+    ULONG FrameLength;
+    ULONG FrameNumber;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+    struct _URB_HEADER Hdr;
+    LONG FrameLengthDelta;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+    struct _URB_HEADER Hdr;
+    ULONG FrameNumber;
+};
+
+struct _URB_CONTROL_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR SetupPacket[8];
+};
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+};
+
+struct _URB_ISOCH_TRANSFER {
+    struct _URB_HEADER Hdr;
+    USBD_PIPE_HANDLE PipeHandle;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    ULONG StartFrame;
+    ULONG NumberOfPackets;
+    ULONG ErrorCount;
+    USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    USHORT Reserved1;
+    UCHAR Index;
+    UCHAR DescriptorType;
+    USHORT LanguageId;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[4];
+    USHORT Index;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved2;
+    ULONG Reserved3;
+    PVOID Reserved4;
+    PMDL Reserved5;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    USHORT Reserved0;
+    USHORT FeatureSelector;
+    USHORT Index;
+    USHORT Reserved1;
+};
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG TransferFlags;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR RequestTypeReservedBits;
+    UCHAR Request;
+    USHORT Value;
+    USHORT Index;
+    USHORT Reserved1;
+};
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[4];
+    USHORT Interface;
+    USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR Reserved1[8];
+};
+
+struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST {
+    struct _URB_HEADER Hdr;
+    PVOID Reserved;
+    ULONG Reserved0;
+    ULONG TransferBufferLength;
+    PVOID TransferBuffer;
+    PMDL TransferBufferMDL;
+    struct _URB *UrbLink;
+    struct _URB_HCD_AREA hca;
+    UCHAR   Recipient:5;
+    UCHAR   Reserved1:3;
+    UCHAR   Reserved2;
+    UCHAR   InterfaceNumber;
+    UCHAR   MS_PageIndex;
+    USHORT  MS_FeatureDescriptorIndex;
+    USHORT  Reserved3;
+};
+
+typedef struct _URB {
+    union {
+        struct _URB_HEADER UrbHeader;
+        struct _URB_SELECT_INTERFACE UrbSelectInterface;
+        struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
+        struct _URB_PIPE_REQUEST UrbPipeRequest;
+        struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
+        struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
+        struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
+        struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
+        struct _URB_CONTROL_TRANSFER UrbControlTransfer;
+        struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
+        struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
+        struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
+        struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
+        struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
+        struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
+        struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
+        struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
+        struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST UrbOSFeatureDescriptorRequest;
+    } DUMMYUNIONNAME;
+} URB;
+typedef struct _URB *PURB;
+
+#endif
diff --git a/include/ddk/usb100.h b/include/ddk/usb100.h
new file mode 100644
index 0000000..eac4399
--- /dev/null
+++ b/include/ddk/usb100.h
@@ -0,0 +1,99 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _USB100_
+#define _USB100_
+
+#define USB_DEVICE_DESCRIPTOR_TYPE                0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE         0x02
+#define USB_STRING_DESCRIPTOR_TYPE                0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE             0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE              0x05
+#define USB_RESERVED_DESCRIPTOR_TYPE              0x06
+#define USB_CONFIG_POWER_DESCRIPTOR_TYPE          0x07
+#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE       0x08
+
+#include <pshpack1.h>
+
+typedef struct _USB_DEVICE_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    USHORT bcdUSB;
+    UCHAR bDeviceClass;
+    UCHAR bDeviceSubClass;
+    UCHAR bDeviceProtocol;
+    UCHAR bMaxPacketSize0;
+    USHORT idVendor;
+    USHORT idProduct;
+    USHORT bcdDevice;
+    UCHAR iManufacturer;
+    UCHAR iProduct;
+    UCHAR iSerialNumber;
+    UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR;
+typedef struct _USB_DEVICE_DESCRIPTOR *PUSB_DEVICE_DESCRIPTOR;
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    UCHAR bEndpointAddress;
+    UCHAR bmAttributes;
+    USHORT wMaxPacketSize;
+    UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR;
+typedef struct _USB_ENDPOINT_DESCRIPTOR *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    USHORT wTotalLength;
+    UCHAR bNumInterfaces;
+    UCHAR bConfigurationValue;
+    UCHAR iConfiguration;
+    UCHAR bmAttributes;
+    UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR;
+typedef struct _USB_CONFIGURATION_DESCRIPTOR *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    UCHAR bInterfaceNumber;
+    UCHAR bAlternateSetting;
+    UCHAR bNumEndpoints;
+    UCHAR bInterfaceClass;
+    UCHAR bInterfaceSubClass;
+    UCHAR bInterfaceProtocol;
+    UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR;
+typedef struct _USB_INTERFACE_DESCRIPTOR *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+    WCHAR bString[1];
+} USB_STRING_DESCRIPTOR;
+typedef struct _USB_STRING_DESCRIPTOR *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+    UCHAR bLength;
+    UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR;
+typedef struct _USB_COMMON_DESCRIPTOR *PUSB_COMMON_DESCRIPTOR;
+
+#include <poppack.h>
+
+#endif
diff --git a/include/ddk/usb200.h b/include/ddk/usb200.h
new file mode 100644
index 0000000..162f532
--- /dev/null
+++ b/include/ddk/usb200.h
@@ -0,0 +1,22 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _USB200_
+#define _USB200_
+
+#include "usb100.h"
+
+#endif
diff --git a/include/ddk/usbdlib.h b/include/ddk/usbdlib.h
new file mode 100644
index 0000000..ef9a773
--- /dev/null
+++ b/include/ddk/usbdlib.h
@@ -0,0 +1,26 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __USBDLIB_H__
+#define __USBDLIB_H__
+
+typedef struct _USBD_INTERFACE_LIST_ENTRY {
+    PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
+    PUSBD_INTERFACE_INFORMATION Interface;
+} USBD_INTERFACE_LIST_ENTRY;
+typedef struct _USBD_INTERFACE_LIST_ENTRY *PUSBD_INTERFACE_LIST_ENTRY;
+
+#endif
-- 
1.5.6.5.GIT



More information about the wine-patches mailing list