blob: 1a95297ae397e317f6be8c26076dd66c74c4fdd9 [file] [log] [blame]
/*******************************************************************************
This software file (the "File") is distributed by Marvell International Ltd.
or its affiliate(s) under the terms of the GNU General Public License Version 2,
June 1991 (the "License"). You may use, redistribute and/or modify this File
in accordance with the terms and conditions of the License, a copy of which
is available along with the File in the license.txt file or by writing to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
(C) Copyright 2004 - 2007 Marvell Semiconductor Israel Ltd. All Rights Reserved.
(C) Copyright 1999 - 2004 Chipidea Microelectronica, S.A. All Rights Reserved.
*******************************************************************************/
#ifndef __mvUsbDesc_h__
#define __mvUsbDesc_h__
#include "mvUsbTypes.h"
typedef struct usb_device_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 18 */
uint_8 bDescriptorType; /* DEVICE descriptor type = 1 */
uint_8 bcdUSD[2]; /* USB spec in BCD, e.g. 0x0200 */
uint_8 bDeviceClass; /* Class code, if 0 see interface */
uint_8 bDeviceSubClass; /* Sub-Class code, 0 if class = 0 */
uint_8 bDeviceProtocol; /* Protocol, if 0 see interface */
uint_8 bMaxPacketSize; /* Endpoint 0 max. size */
uint_8 idVendor[2]; /* Vendor ID per USB-IF */
uint_8 idProduct[2]; /* Product ID per manufacturer */
uint_8 bcdDevice[2]; /* Device release # in BCD */
uint_8 iManufacturer; /* Index to manufacturer string */
uint_8 iProduct; /* Index to product string */
uint_8 iSerialNumber; /* Index to serial number string */
uint_8 bNumConfigurations; /* Number of possible configurations */
} DEVICE_DESCRIPTOR, _PTR_ DEVICE_DESCRIPTOR_PTR;
typedef struct usb_configuration_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 9 */
uint_8 bDescriptorType; /* CONFIGURATION type = 2 or 7 */
uint_8 wTotalLength[2]; /* Length of concatenated descriptors */
uint_8 bNumInterfaces; /* Number of interfaces, this config. */
uint_8 bConfigurationValue; /* Value to set this config. */
uint_8 iConfig; /* Index to configuration string */
uint_8 bmAttributes; /* Config. characteristics */
#define CONFIG_RES7 (0x80) /* Reserved, always = 1 */
#define CONFIG_SELF_PWR (0x40) /* Self-powered device */
#define CONFIG_WAKEUP (0x20) /* Remote wakeup */
uint_8 bMaxPower; /* Max.power from bus, 2mA units */
} CONFIGURATION_DESCRIPTOR, _PTR_ CONFIGURATION_DESCRIPTOR_PTR;
typedef struct usb_interface_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 9 */
uint_8 bDescriptorType; /* INTERFACE descriptor type = 4 */
uint_8 bInterfaceNumber; /* Interface no.*/
uint_8 bAlternateSetting; /* Value to select this IF */
uint_8 bNumEndpoints; /* Number of endpoints excluding 0 */
uint_8 bInterfaceClass; /* Class code, 0xFF = vendor */
uint_8 bInterfaceSubClass; /* Sub-Class code, 0 if class = 0 */
uint_8 bInterfaceProtocol; /* Protocol, 0xFF = vendor */
uint_8 iInterface; /* Index to interface string */
} INTERFACE_DESCRIPTOR, _PTR_ INTERFACE_DESCRIPTOR_PTR;
typedef struct usb_endpoint_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 7 */
uint_8 bDescriptorType; /* ENDPOINT descriptor type = 5 */
uint_8 bEndpointAddress; /* Endpoint # 0 - 15 | IN/OUT */
#define IN_ENDPOINT (0x80) /* IN endpoint, device to host */
#define OUT_ENDPOINT (0x00) /* OUT endpoint, host to device */
#define ENDPOINT_MASK (0x0F) /* Mask endpoint # */
uint_8 bmAttributes; /* Transfer type */
#define CONTROL_ENDPOINT (0x00) /* Control transfers */
#define ISOCH_ENDPOINT (0x01) /* Isochronous transfers */
#define BULK_ENDPOINT (0x02) /* Bulk transfers */
#define IRRPT_ENDPOINT (0x03) /* Interrupt transfers */
#define EP_TYPE_MASK (0x03) /* Mask type bits */
/* Following must be zero except for isochronous endpoints */
#define ISOCH_NOSYNC (0x00) /* No synchronization */
#define ISOCH_ASYNC (0x04) /* Asynchronous */
#define ISOCH_ADAPT (0x08) /* Adaptive */
#define ISOCH_SYNCH (0x0C) /* Synchrounous */
#define ISOCH_DATA (0x00) /* Data endpoint */
#define ISOCH_FEEDBACK (0x10) /* Feedback endpoint */
#define ISOCH_IMPLICIT (0x20) /* Implicit feedback */
#define ISOCH_RESERVED (0x30) /* Reserved */
uint_8 wMaxPacketSize[2]; /* Bits 10:0 = max. packet size */
/* For high-speed interrupt or isochronous only, additional
** transaction opportunities per microframe follow.*/
#define PACKET_SIZE_MASK (0x7FF) /* packet size bits */
#define NO_ADDITONAL (0x0000) /* 1 / microframe */
#define ONE_ADDITIONAL (0x0800) /* 2 / microframe */
#define TWO_ADDITIONAL (0x1000) /* 3 / microframe */
#define ADDITIONAL_MASK (ONE_ADDITIONAL | TWO_ADDITIONAL)
uint_8 iInterval; /* Polling interval in (micro) frames */
} ENDPOINT_DESCRIPTOR, _PTR_ ENDPOINT_DESCRIPTOR_PTR;
typedef struct usb_qualifier_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 10 */
uint_8 bDescriptorType; /* DEVICE QUALIFIER type = 6 */
uint_8 bcdUSD[2]; /* USB spec in BCD, e.g. 0x0200 */
uint_8 bDeviceClass; /* Class code, if 0 see interface */
uint_8 bDeviceSubClass; /* Sub-Class code, 0 if class = 0 */
uint_8 bDeviceProtocol; /* Protocol, if 0 see interface */
uint_8 bMaxPacketSize; /* Endpoint 0 max. size */
uint_8 bNumConfigurations; /* Number of possible configurations */
uint_8 bReserved; /* Reserved = 0 */
} QUALIFIER_DESCRIPTOR, _PTR_ QUALIFIER_DESCRIPTOR_PTR;
/* Other-Config type 7 fields are identical to type 2 above */
/* Interface-Power descriptor type 8 not used in this version */
typedef struct usb_otg_descriptor
{
uint_8 bLength; /* Descriptor size in bytes = 9 */
uint_8 bDescriptorType; /* CONFIGURATION type = 2 or 7 */
uint_8 bmAttributes; /* OTG characteristics */
#define OTG_SRP_SUPPORT (0x01) /* Supports SRP */
#define OTG_HNP_SUPPORT (0x02) /* Supports HNP */
} OTG_DESCRIPTOR, _PTR_ OTG_DESCRIPTOR_PTR;
typedef union descriptor_union
{
uint_32 word;
uint_8_ptr bufr;
pointer pntr;
DEVICE_DESCRIPTOR_PTR dvic;
CONFIGURATION_DESCRIPTOR_PTR cfig;
INTERFACE_DESCRIPTOR_PTR intf;
ENDPOINT_DESCRIPTOR_PTR ndpt;
QUALIFIER_DESCRIPTOR_PTR qual;
OTG_DESCRIPTOR_PTR otg;
} DESCRIPTOR_UNION, _PTR_ DESCRIPTOR_UNION_PTR;
/* Prototypes */
#ifdef __cplusplus
extern "C" {
#endif
extern uint_32 usb_host_init(uint_8, uint_32,
_usb_host_handle _PTR_);
extern uint_32 _usb_host_open_pipe(_usb_host_handle,
PIPE_INIT_PARAM_STRUCT_PTR, _usb_pipe_handle _PTR_ );
#ifdef __cplusplus
}
#endif
#endif /* __mvUsbDesc_h__ */
/* EOF */