blob: 329b9eb8ed837e5b0a352d4edd70de1102e3d4f9 [file] [log] [blame]
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* usb.h
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This file intends for usb1.1 definitions.
*
* Author:
* -------
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef USB_H
#define USB_H
#include "usb_custom.h"
#include "usb_custom_def.h"
//#include "usb_drv.h"
#include "dcl.h"
#include "usb_comm.h"
#include "kal_general_types.h"
/* Remove dependence.
* It should be releated to MMI behavior. Thus, add it on makefile if request is incoming.
*/
//#ifdef __TC01__
//#define __USB_BOOT_NOT_CHECK_NVRAM_SETTING__
//#endif
/***********************************************
standard command definition
************************************************/
/* Standard Request Codes */
#define USB_GET_STATUS 0x00
#define USB_CLEAR_FEATURE 0x01
#define USB_SET_FEATURE 0x03
#define USB_SET_ADDRESS 0x05
#define USB_GET_DESCRIPTOR 0x06
#define USB_SET_DESCRIPTOR 0x07
#define USB_GET_CONFIGURATION 0x08
#define USB_SET_CONFIGURATION 0x09
#define USB_GET_INTERFACE 0x0A
#define USB_SET_INTERFACE 0x0B
#define USB_SYNCH_FRAME 0x0C
/* Vendor Request Codes */
#define USB_GET_MS_DESCRIPTOR 0xCC
/* Command bit fields */
#define USB_CMD_DATADIR 0x80
/* Request Type Field */
#define USB_CMD_TYPEMASK 0x60
#define USB_CMD_STDREQ 0x00
#define USB_CMD_CLASSREQ 0x20
#define USB_CMD_VENDREQ 0x40
#define USB_CMD_STDDEVIN 0x80
#define USB_CMD_STDDEVOUT 0x00
#define USB_CMD_STDIFIN 0x81
#define USB_CMD_STDIFOUT 0x01
#define USB_CMD_STDEPIN 0x82
#define USB_CMD_STDEPOUT 0x02
#define USB_CMD_CLASSIFIN 0xA1
#define USB_CMD_CLASSIFOUT 0x21
#define USB_CMD_VENDDEVIN 0xC0
#define USB_CMD_VENDDEVOUT 0x40
/* Standard command descriptor type*/
#define USB_DEVICE 0x01
#define USB_CONFIG 0x02
#define USB_STRING 0x03
#define USB_INTERFACE 0x04
#define USB_ENDPOINT 0x05
#define USB_DEVICE_QUALIFIER 0x06
#define USB_OTHER_SPEED 0x07
#define USB_INTERFACE_POWER 0x08
#define USB_OTG_DESC 0x09
#define USB_INTERFACE_ASSOCIATION 0x0B
#define USB_CMD_DESCMASK 0xFF00
#define USB_CMD_DEVICE (USB_DEVICE<<8)
#define USB_CMD_CONFIG (USB_CONFIG<<8)
#define USB_CMD_STRING (USB_STRING<<8)
#define USB_CMD_INTERFACE (USB_INTERFACE<<8)
#define USB_CMD_ENDPOINT (USB_ENDPOINT<<8)
#define USB_CMD_DEVICE_QUALIFIER (USB_DEVICE_QUALIFIER<<8)
#define USB_CMD_OTHER_SPEED (USB_OTHER_SPEED<<8)
#define USB_CMD_INTERFACE_POWER (USB_INTERFACE_POWER<<8)
/* Standard Device Feature Selectors */
#define USB_FTR_DEVREMWAKE 0x0001
#define USB_FTR_EPHALT 0x0000
#define USB_FTR_B_HNP_ENB 0x0003
#define USB_FTR_A_HNP_SUPPORT 0x0004
#define USB_FTR_A_ALT_HNP_SUPPORT 0x0005
#define USB_FTR_TEST_MODE 0x0002
/* Vendor OS feature descriptor, feature index */
#define USB_FTR_GENRE 0x0001
#define USB_FTR_EXT_COMPAT_ID 0x0004
#define USB_FTR_EXT_PROPERTIES 0x0005
/* USB test mode */
#define USB_TEST_J 0x01
#define USB_TEST_K 0x02
#define USB_TEST_SE0_NAK 0x03
#define USB_TEST_PACKET 0x04
/***********************************************
standard descriptor definition
************************************************/
/* Scriptor length */
#define USB_DEVDSC_LENGTH 18
#define USB_CFGDSC_LENGTH 9
#define USB_IFDSC_LENGTH 9
#define USB_MAX_IFDSC_LENGTH 258 /* this will change depend on different class interface */
/*descriptor requirment*/
/* 258 is for video streaming class interface */
#define USB_EPDSC_LENGTH 7
#define USB_OTGDSC_LENGTH 3
#define USB_MAX_CLASS_EPDESC_LENGTH 12 /* this will change depend on different class interface */
/*descriptor requirment*/
/* 12 is for video control interrupt ep */
#define USB_IAD_LENGTH 8
#define USB_DEV_QUA_DSC_LENGTH 10
#define USB_OTHER_CFGDSC_LENGTH 9
#define USB_MAX_OS_STRING_LENGTH 18
#define USB_MAX_OS_FEATURE_DESC_LENGTH 40
/* Endpoint direction */
#define USB_EP_DIR 0x80
#define USB_EP_DIR_IN 0x80
#define USB_EP_DIR_OUT 0x00
/* Endpoint transfer types */
#define USB_EP_TFMASK 0x03
#define USB_EP_CONTROL 0x00
#define USB_EP_ISO 0x01
#define USB_EP_BULK 0x02
#define USB_EP_INTR 0x03
/* ISO Synchronization types */
#define USB_ISO_NO_SYNCHRONIZATION 0x00
#define USB_ISO_ASYNCHRONOUS 0x01
#define USB_ISO_ADAPTIVE 0x02
#define USB_ISO_SYNCHRONOUS 0x03
/* ISO Usage types */
#define USB_ISO_DATA 0x00
#define USB_ISO_FEEDBACK 0x01
#define USB_ISO_IMPLICIT_FEEDBACK 0x02
/*****Descriptor Element*****/
/* Define values for Standard Device Descriptor */
/* For Device descriptor */
/* bcdDevice value */
#define USB_DEVDSC_BCDDEVICE_PHONE 0x0100 /* Release number of USB device */
#define USB_DEVDSC_BCDDEVICE_MODEM_CARD 0x0200 /* Release number of USB modem card device for ECMT */
#define USB_DEVDSC_BCDDEVICE_MODEM_CARD_FOR_NDIS 0x0300 /* Release number of USB modem card device for NDIS*/
/* Device class code for composite device */
#define USB_COMPOSITE_DEVICE_CODE 0xEF
#define USB_COMPOSITE_SUBCLASS_CODE 0x02
#define USB_COMPOSITE_PROTOCOL_CODE 0x01
/* Device class code for without IAD composite device */
#define USB_COMPOSITE_NO_IAD_DEVICE_CODE 0x00
#define USB_COMPOSITE_NO_IAD_SUBCLASS_CODE 0x00
#define USB_COMPOSITE_NO_IAD_PROTOCOL_CODE 0x00
#define USB_DEVDSC_CONFIGS USB_MAX_CONFIG // USB_DEVDSC_CONFIGS --> USB_GetChargeCurrentTableSize()
/*For Configuration descriptor*/
#define USB_CFGDSC_ATTR_NATURE 0x80
#define USB_CFGDSC_ATTR_SELFPOWER 0x40
#define USB_CFGDSC_ATTR_REMOTEWAKEUP 0x20
#define USB_CFGDSC_MAXPOWER (500/2)
#define USB_OTG_HNP_SUPPORT 0x02
#define USB_OTG_SRP_SUPPORT 0x01
/***********************************************
Hub class code definition
************************************************/
#define USB_HUB_DEVICE_CLASS_CODE 0x09
#define USB_HUB_DEVICE_SUBCLASS_CODE 0x00
//#define USB_HUB_DEVICE_PROTOCOL_CODE 0x00
#define USB_HUB_INTERFACE_CLASS_CODE 0x09
#define USB_HUB_INTERFACE_SUBCLASS_CODE 0x00
//#define USB_HUB_INTERFACE_PROTOCOL_CODE 0x00
/***********************************************
Implement definition
************************************************/
/* Define configuration, interface, ep number */
#define USB_MAX_CONFIG 6 /* configuration number */
#define USB_MAX_IAD 1
#define USB_MAX_INTERFACE 2 /* interface number */
#define USB_MAX_INTERFACE_ALTERNATE_NUM 1 /* interface alternate seting number */
#if defined(__USB_EP_TEST__)
#define USB_MAX_EP_BULK_TX 4 /* max bulk in ep number */
#define USB_MAX_EP_BULK_RX 3 /* max bulk in ep number */
#define USB_MAX_EP_ISO_TX 4 /* max interrupt ep number */
#define USB_MAX_EP_INTR_TX 4 /* max interrupt ep number */
#else
#define USB_MAX_EP_BULK_TX 1 /* max bulk in ep number */
#define USB_MAX_EP_BULK_RX 1 /* max bulk in ep number */
#define USB_MAX_EP_INTR_TX 1 /* max interrupt ep number */
#define USB_MAX_EP_ISO_TX 1 /* max interrupt ep number */
#endif
#define USB_MAX_STRING 12 /* string number */
#define USB_MAX_EP_PER_IF 3 /* 3 is for image class */
/* serial string array size for that unique Serial number*/
#define USB_SERIAL_STRING_LEN 16
/* define endpoint data parameters */
#define USB_EP_NODATA -1 /* no more data for endpoint to send */
/***********************************************
standard command structure
************************************************/
/* usb standard command structure */
typedef struct
{
kal_uint8 bmRequestType;
kal_uint8 bRequest;
kal_uint16 wValue;
kal_uint16 wIndex;
kal_uint16 wLength;
}Usb_Command;
/***********************************************
Standard descriptor structure
************************************************/
/* standard device descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint16 bcdUSB;
kal_uint8 bDeviceClass;
kal_uint8 bDeviceSubClass;
kal_uint8 bDeviceProtocol;
kal_uint8 bMaxPacketSize0;
kal_uint16 idVendor;
kal_uint16 idProduct;
kal_uint16 bcdDevice;
kal_uint8 iManufacturer;
kal_uint8 iProduct;
kal_uint8 iSerialNumber;
kal_uint8 bNumConfigurations;
}Usb_Dev_Dscr;
/* standard configuration descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint16 wTotalLength;
kal_uint8 bNumInterfaces;
kal_uint8 bConfigurationValue;
kal_uint8 iConfiguration;
kal_uint8 bmAttributes;
kal_uint8 bMaxPower;
}Usb_Cfg_Dscr;
/* standard IAD descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint8 bFirstInterface;
kal_uint8 bInterfaceCount;
kal_uint8 bFunctionClass;
kal_uint8 bFunctionSubClass;
kal_uint8 bFunctionProtocol;
kal_uint8 iFunction;
}Usb_IAD_Dscr;
/* standard interface descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint8 bInterfaceNumber;
kal_uint8 bAlternateSetting;
kal_uint8 bNumEndpoints;
kal_uint8 bInterfaceClass;
kal_uint8 bInterfaceSubClass;
kal_uint8 bInterfaceProtocol;
kal_uint8 iInterface;
}Usb_If_Dscr;
/* standard endpoint descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint8 bEndpointAddress;
kal_uint8 bmAttributes;
kal_uint8 wMaxPacketSize[2];
kal_uint8 bInterval;
}Usb_Ep_Dscr;
/* standard string descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint16 wData[1];
}Usb_String_Dscr;
/* standard string descriptor */
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint8 bAttribute;
}Usb_Otg_Dscr;
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint16 bcdUSB;
kal_uint8 bDeviceClass;
kal_uint8 bDeviceSubClass;
kal_uint8 bDeviceProtocol;
kal_uint8 bMaxPacketSize0;
kal_uint8 bNumConfigurations;
kal_uint8 bReserved;
}Usb_Dev_Qual_Dscr;
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint16 wTotalLength;
kal_uint8 bNumInterfaces;
kal_uint8 bConfigurationValue;
kal_uint8 iConfiguration;
kal_uint8 bmAttributes;
kal_uint8 MaxPower;
}Usb_Other_Speed_Cfg_Dscr;
typedef struct
{
kal_uint8 bLength;
kal_uint8 bDescriptorType;
kal_uint8 qwSignature[14];
kal_uint8 bMS_VendorCode;
kal_uint8 bPad;
}Usb_OS_String_Dscr;
typedef struct
{
kal_uint32 dwLength;
kal_uint16 bcdVersion;
kal_uint16 wIndex;
kal_uint8 bCount;
kal_uint8 bPads_1[7];
kal_uint8 bFirstInterfaceNumber;
kal_uint8 bPads_2;
kal_uint8 compatibleID[8];
kal_uint8 subcompatibleID[8];
kal_uint8 bPads_3[6];
}Usb_Ext_Compat_ID_OS_Feature_Dscr;
/***********************************************
implement enum and structure
************************************************/
/* device states */
typedef enum
{
DEVSTATE_DEFAULT = 0,
DEVSTATE_SET_ADDRESS,
DEVSTATE_ADDRESS,
DEVSTATE_CONFIG
}USB_DEVICE_STATE;
/* Endpoint 0 state */
typedef enum
{
USB_EP0_IDLE=0,
USB_EP0_RX,
USB_EP0_TX,
USB_EP0_RX_STATUS
}USB_EP0_STATE;
/* EP0 status */
typedef struct
{
kal_int32 nBytesLeft; /* number of bytes left to send in TX mode */
void *pData; /* pointer to data to transmit/receive */
kal_int32 nBytesRecv; /* number of bytes received in RX mode */
kal_uint8 byFAddr; /* new function address */
kal_bool no_ZLP; /* No need ZLP when wLength == transfer size */
}Usb_Ep0_Status;
/* Bulk IN endpoint status */
typedef struct
{
void *pData; /* pointer to data buffer */
kal_int32 nBytesLeft; /* number of bytes left to send */
kal_uint8 byEP; /* endpoint number */
}Usb_EpBIn_Status;
/* Bulk OUT endpoint status */
typedef struct
{
void *pData; /* pointer to data buffer */
kal_int32 nBuffLen; /* length of data buffer */
kal_int32 nBytesRecv; /* number of bytes received */
kal_uint8 byEP; /* endpoint number */
}Usb_EpBOut_Status;
typedef enum
{
USB_NORMAL_BOOT = 0,
USB_BOOT_ONE_PORT,
USB_BOOT_TWO_PORT,
USB_BOOT_THREE_PORT,
USB_BOOT_FOUR_PORT,
USB_BOOT_FIVE_PORT
// USB_RNDIS_ONE_PORT
}USB_Comport_Boot_Status;
typedef enum
{
USB_COMPORT_WIN = 0,
USB_COMPORT_WIN_SINGLE_INTERFACE,
USB_COMPORT_MAC,
USB_COMPORT_LINUX,
USB_COMPORT_MBIM,
}USB_Comport_OS_Driver_Status;
typedef enum
{
USB_MASK_OWNER_COM_1 = 0,
USB_MASK_OWNER_COM_2,
USB_MASK_OWNER_COM_3,
USB_MASK_OWNER_COM_4,
USB_MASK_OWNER_COM_5,
USB_MASK_OWNER_MS = 10,
USB_MASK_OWNER_ALL,
USB_MASK_OWNER_MAX
}USB_MASK_OWNER;
/* interface create function pointer */
typedef void (*usb_create_if_func_ptr)(void *);
/* interface speed reset function pointer */
typedef void (* usb_speed_if_func_ptr)(kal_bool bset);
/* EP0 rx interrupt handler */
typedef void (*usb_ep0_rx_ptr)(void *);
/* class specific command interrupt handler */
typedef void (*usb_class_specific_handler_ptr)(Usb_Ep0_Status *, Usb_Command*);
/* endpoint interrupt handler */
typedef void (*usb_ep_handler_ptr)(void);
/* EP0 command interrupt handler */
typedef void (*usb_ep0_cmd_ptr)(Usb_Command *pcmd);
typedef void (*usb_void_func)(void);
/* endpoint information, including endpoint status */
typedef struct
{
union
{
Usb_Ep_Dscr stdep; /* ep descriptor */
kal_uint8 classep[USB_MAX_CLASS_EPDESC_LENGTH];
}epdesc;
union
{
Usb_EpBIn_Status epin_status;
Usb_EpBOut_Status epout_status;
}ep_status; /* ep status */
usb_ep_handler_ptr ep_reset; /* ep reset handler */
kal_uint16 epdscr_size; /* descriptor length */
}Usb_Ep_Info;
typedef struct
{
Usb_Ep_Info *ep_info[USB_MAX_EP_PER_IF];/* endpoint attach to the interface info */
kal_uint16 ifdscr_size; /* descriptor length */
Usb_If_Dscr stdif;
}Usb_Alternate_Interface_Info;
/* interface information, including endpoint information and interface information*/
typedef struct
{
kal_char *interface_name_ptr; /* interface name */
usb_class_specific_handler_ptr if_class_specific_hdlr; /* interface specific handler, handle ep0 class specific request */
kal_uint16 ifdscr_size; /* descriptor length */
union
{
Usb_If_Dscr stdif;
kal_uint8 classif[USB_MAX_IFDSC_LENGTH];
}ifdscr;
Usb_Ep_Info *ep_info[USB_MAX_EP_PER_IF];/* endpoint attach to the interface info */
#if defined(__USB_SUPPORT_ISO_PIPE__)
Usb_Alternate_Interface_Info alternate_if_info[USB_MAX_INTERFACE_ALTERNATE_NUM];
kal_uint8 alternate_setting; /* alternate setting number */
#endif
}Usb_Interface_Info;
/* configuration information */
typedef struct
{
Usb_Cfg_Dscr stdcfg; /* config descriptor */
}Usb_Config_Info;
typedef struct
{
kal_bool b_enable;
kal_uint8 cmd;
usb_ep0_cmd_ptr ep0_cmd_hdlr;
}Usb_EP0_Cmd_Hdler;
/* device information, used for usb level */
typedef struct
{
USB_DEVICE_TYPE device_type;
USB_DEVICE_STATE nDevState; /*DEVSTATE_CONFIG,DEVSTATE_ADDRESS,DEVSTATE_DEFAULT*/
kal_bool remoteWk;
#if defined(__DUAL_TALK_MODEM_SUPPORT__)
kal_bool isRemoteWking;
#endif
kal_uint32 memory_addr;// allocate memory buffer address
kal_uint32 reserved_memory_size;//memory left size
kal_bool self_powered;
kal_bool ep0_send_one_pkt; /* the variable to record ep0 will send only one packet */
kal_bool usb_send_config_result; /* to send configure may be fail */
kal_uint8 config_num;
kal_uint8 interface_num[USB_MAX_INTERFACE];
USB_EP0_STATE ep0_state;
/* Add for multi-configurations*/
PMU_CTRL_CHR_GET_CHR_CURRENT_LIST get_chr_current_list;
kal_uint8 multi_Max_Power[USB_MAX_CONFIG];
kal_uint8 current_table_index;
/* used for resource management*/
// optimize code size : cannot change order
kal_uint8 resource_ep_bulk_tx_number;
kal_uint8 resource_ep_bulk_rx_number;
kal_uint8 resource_ep_intr_tx_number;
kal_uint8 resource_interface_number;
kal_uint8 resource_string_number;
#ifdef __USB_SUPPORT_ISO_PIPE__
kal_uint8 resource_ep_iso_tx_number;
#endif
#if defined(__USB_SUPPORT_ISO_PIPE__)
kal_uint8 resource_interface_alternate_number[USB_MAX_INTERFACE];
#endif
kal_uint8 resource_iad_number;
// resource_iad_number : must be the end of resource parameter
/* the configuration only one for saving memory */
// optimize code size : cannot change order
Usb_Dev_Dscr devdscr;
Usb_Cfg_Dscr cfgdscr;
Usb_Ep_Info ep_bulk_tx_info[USB_MAX_EP_BULK_TX];
Usb_Ep_Info ep_bulk_rx_info[USB_MAX_EP_BULK_RX];
Usb_Ep_Info ep_intr_tx_info[USB_MAX_EP_INTR_TX];
Usb_Interface_Info if_info[USB_MAX_INTERFACE];
#ifdef __USB_SUPPORT_ISO_PIPE__
Usb_Ep_Info ep_iso_tx_info[USB_MAX_EP_ISO_TX];
#endif
Usb_String_Dscr *resource_string[USB_MAX_STRING];
Usb_IAD_Dscr iad_desc[USB_MAX_IAD];
#ifdef __OTG_ENABLE__
Usb_Otg_Dscr otgdscr;
#endif
#ifdef __USB_IMAGE_CLASS__
Usb_OS_String_Dscr os_string_desc;
Usb_Ext_Compat_ID_OS_Feature_Dscr os_feature_desc;
#endif
kal_uint8 *conf; /*just for descriptor transfer*/
// conf : : must be the end of descriptor parameter
Usb_Command cmd; /*USB_COMMAND*/
Usb_Ep0_Status ep0info;
usb_ep0_rx_ptr ep0_rx_handler;
Usb_EP0_Cmd_Hdler ep0_class_cmd_handler; /* class specific ep0 cmd */
/* serial string unique for each phone*/
kal_uint16 serial_string[USB_SERIAL_STRING_LEN];
/* customizable variables*/
const USB_DEVICE_PARAM *device_param;
} Usb_Device;
/***********************************************
function and global variable
************************************************/
extern Usb_Device gUsbDevice;
void USB_EP0_Command_Hdlr(kal_bool bError);
#ifdef __RTL_SIMULATION_FOR_60QBIT__
extern void usb_irq_disable_duration_test2(void);
#endif
extern void USB_Send_Msg_Ext_Queue(module_type dstid,msg_type msg_id,void *data);
extern kal_uint32 USB_Get_Memory (kal_uint32 len);
extern void USB_Free_Memory(void);
#endif /* USB_H */