792 lines
32 KiB
C
Vendored
792 lines
32 KiB
C
Vendored
/*
|
|
* drvhostlib.h- Sigmastar
|
|
*
|
|
* Copyright (C) 2018 Sigmastar Technology Corp.
|
|
*
|
|
* Author: jiang.ann <jiang.ann@sigmastar.com.tw>
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#ifndef __DRVHOSTLIB_H__
|
|
#define __DRVHOSTLIB_H__
|
|
|
|
#include "../hal/platform.h"
|
|
#include "ubootglue.h"
|
|
|
|
#define USBDELAY(x) wait_ms(x)
|
|
|
|
/* =================== 1.Condition Definition ============================================================ *
|
|
* ======================================================================================================== */
|
|
//#define Interrupt_No_FramList_Temp_Solution NUSED
|
|
//#define FUSBH200_HOST_ONLY // NUSED
|
|
|
|
#define Host20_Debug_Info 0x01
|
|
#define IRQ_USB_Host20 40
|
|
#define Host20_Set_Address 0x03
|
|
|
|
/* Host Configuration */
|
|
#define Host20_QHD_Nat_Counter 0x00 /* Temp Solution from 15 to 0 //Bit28~31 */
|
|
// #define Host20_EOF1Time 0x00 /* For Full Speed Device */
|
|
#define Host20_EOF1Time 0x03 /* For High Speed Device */
|
|
#define Host20_Ctrl_Timeout 5 /* 5s Control qTD Timeout */
|
|
#define Host20_Timeout 5 /* 5s Bulk qTD Timeout */
|
|
|
|
/* =================== 2.Variable Definition ============================================================= *
|
|
* ======================================================================================================== */
|
|
#define HOST20_OK 0x00
|
|
#define HOST20_FAIL 0x01
|
|
#define HOST20_FATAL 0x02
|
|
#define HOST20_DEVICE_STALL 0x03
|
|
#define HOST20_TRANSACTION_ERROR 0x04
|
|
|
|
/******************************
|
|
* Data Structure Allocation *
|
|
******************************
|
|
* 0x3000000~0x3001000 =>qHD *
|
|
* 0x3001000~0x3002000 =>qTD *
|
|
* 0x3002000~0x3003000 =>iTD *
|
|
******************************/
|
|
#define USB_BUFFER_START_ADR_4K_ALIGN 0
|
|
#define Host20_STRUCTURE_BASE_ADDRESS 0xf000 /* SDRAM start at 60K */
|
|
|
|
// #define Host20_STRUCTURE_qHD_BASE_ADDRESS ( Host20_DATA_PAGE_BASE_ADDRESS+Host20_Page_SIZE) /* (DRAM=48M) */
|
|
#define Host20_qHD_SIZE 0x40 /* (48bytes), for alignment */
|
|
#define Host20_qHD_MAX 10 /* (10 ) */
|
|
|
|
// #define Host20_STRUCTURE_qTD_BASE_ADDRESS (Host20_STRUCTURE_qHD_BASE_ADDRESS+Host20_qHD_SIZE*Host20_qHD_MAX) /* (DRAM=48M) */
|
|
#define Host20_qTD_SIZE 0x20 /* (32bytes) */
|
|
#define Host20_qTD_MAX 0x10 /* (50 ) */
|
|
|
|
// #define Host20_STRUCTURE_Preiodic_Frame_List_BASE_ADDRESS (Host20_STRUCTURE_BASE_ADDRESS+0x3000) /* (DRAM=48M) */
|
|
// #define Host20_Preiodic_Frame_SIZE 0x04 /* (4bytes) */
|
|
// #define Host20_Preiodic_Frame_List_MAX 1024 /* (1024\) */
|
|
|
|
// #define Host20_STRUCTURE_iTD_BASE_ADDRESS (Host20_STRUCTURE_BASE_ADDRESS+0x10000) /* (DRAM=48M) */
|
|
// #define Host20_iTD_SIZE 0x40 /* (64bytes) */
|
|
// #define Host20_iTD_MAX 1024 /* (10 ) */
|
|
|
|
#define Host20_TEMP_DATA (Host20_STRUCTURE_qTD_BASE_ADDRESS+Host20_qTD_SIZE*Host20_qTD_MAX)
|
|
#define Host20_TEMP_DATA_SIZE 0x80
|
|
|
|
#define Host20_Attach_Device_DATA (Host20_TEMP_DATA+Host20_TEMP_DATA_SIZE)
|
|
#define Host20_Attach_Device_SIZE sizeof(Host20_Attach_Device_Structure)
|
|
|
|
#define OTGH_PT_BLK_DATA (Host20_Attach_Device_DATA+Host20_Attach_Device_SIZE)
|
|
#define OTGH_PT_BLK_SIZE sizeof(OTGH_PT_BLK_Struct)
|
|
// #define Host20_ATTACH_DEVICE_HERE (Host20_TEMP_DATA+Host20_TEMP_DATA_SIZE)
|
|
|
|
#define Host20_MEM_TYPE_qTD 0x00
|
|
#define Host20_MEM_TYPE_iTD 0x01
|
|
#define Host20_MEM_TYPE_4K_BUFFER 0x02
|
|
#define Host20_MEM_TYPE_siTD 0x03
|
|
|
|
#define Host20_MEM_FREE 0x01
|
|
#define Host20_MEM_USED 0x02
|
|
|
|
#define MS_BIT0 0x01
|
|
#define MS_BIT1 0x02
|
|
#define MS_BIT2 0x04
|
|
#define MS_BIT3 0x08
|
|
#define MS_BIT4 0x10
|
|
#define MS_BIT5 0x20
|
|
#define MS_BIT6 0x40
|
|
#define MS_BIT7 0x80
|
|
|
|
#define MS_BIT8 0x00000100
|
|
#define MS_BIT9 0x00000200
|
|
#define MS_BIT10 0x00000400
|
|
#define MS_BIT11 0x00000800
|
|
#define MS_BIT12 0x00001000
|
|
#define MS_BIT13 0x00002000
|
|
#define MS_BIT14 0x00004000
|
|
#define MS_BIT15 0x00008000
|
|
|
|
#define MS_BIT16 0x00010000
|
|
#define MS_BIT17 0x00020000
|
|
#define MS_BIT18 0x00040000
|
|
#define MS_BIT19 0x00080000
|
|
#define MS_BIT20 0x00100000
|
|
#define MS_BIT21 0x00200000
|
|
#define MS_BIT22 0x00400000
|
|
#define MS_BIT23 0x00800000
|
|
|
|
#define MS_BIT24 0x01000000
|
|
#define MS_BIT25 0x02000000
|
|
#define MS_BIT26 0x04000000
|
|
#define MS_BIT27 0x08000000
|
|
#define MS_BIT28 0x10000000
|
|
#define MS_BIT29 0x20000000
|
|
#define MS_BIT30 0x40000000
|
|
#define MS_BIT31 0x80000000
|
|
|
|
#define OTGH_Dir_IN 0x01
|
|
#define OTGH_Dir_Out 0x00
|
|
#define OTGH_NULL 0x00
|
|
#define OTGH_ED_ISO 0x01
|
|
#define OTGH_ED_BULK 0x02
|
|
#define OTGH_ED_INT 0x03
|
|
#define OTGH_ED_Control 0x00
|
|
#define OTGH_FARADAY_TEST_AP 0x10237856
|
|
#define OTGH_SRP_HNP_Enable 0x03
|
|
#define OTGH_Remote_Wake_UP 0x00000400
|
|
#define OTGH_Remote_Wake_UP_INT 0x00000008
|
|
|
|
unsigned char mwHost20Port(int addr,int bOffset);
|
|
void mwHost20Portw(int addr,int bOffset,int value);
|
|
void mwHost20Port_wr(int addr,int bOffset, int value);
|
|
int mwHost20Bit_Rd(int addr,int bByte,int wBitNum);
|
|
void mwHost20Bit_Set(int addr,int bByte,int wBitNum);
|
|
void mwHost20Bit_Clr(int addr,int bByte,int wBitNum);
|
|
|
|
/* =================== 2.Define Register Macro ================================================================ *
|
|
* ============================================================================================================ */
|
|
/* <1>.Macro volatile */
|
|
#define mwHost20_NumPorts_Rd(a) ((mwHost20Port(a,0x04)&0x0000000F)
|
|
|
|
/* <4>.0x008(HCCPARAMS - Capability Parameters) */
|
|
#define mbHost20_ProgrammableFrameListFlag_Rd(a) (mwHost20Bit_Rd(a,0x08,MS_BIT1)) // Bit 1
|
|
|
|
#define mbHost20_USBCMD_ParkMode_CNT_Rd(a) ((mwHost20Port(a,0x10)>>8)&0x00000003)
|
|
#define mbHost20_USBCMD_ParkMode_CNT_Set(a,bValue) (mwHost20Port(a,0x011)=(mwHost20Port(a,0x011)&0xFC)|(( (MS_UINT8) bValue )<<8) ) // Bit 8~9
|
|
|
|
#define mbHost20_USBCMD_InterruptOnAsync_Rd(a) (mwHost20Bit_Rd(a,0x10,MS_BIT6)) // Bit 6
|
|
#define mbHost20_USBCMD_InterruptOnAsync_Set(a) (mwHost20Bit_Set(a,0x10,MS_BIT6)) // Bit 6
|
|
#define mbHost20_USBCMD_InterruptOnAsync_Clr(a) (mwHost20Bit_Clr(a,0x10,MS_BIT6)) // Bit 6
|
|
|
|
#define mbHost20_USBCMD_AsynchronousEnable_Rd(a) (mwHost20Bit_Rd(a,0x10,MS_BIT5)) // Bit 5
|
|
#define mbHost20_USBCMD_AsynchronousEnable_Set(a) (mwHost20Bit_Set(a,0x10,MS_BIT5)) // Bit 5
|
|
#define mbHost20_USBCMD_AsynchronousEnable_Clr(a) (mwHost20Bit_Clr(a,0x10,MS_BIT5)) // Bit 5
|
|
|
|
#define mbHost20_USBCMD_PeriodicEnable_Rd(a) (mwHost20Bit_Rd(a,0x10,MS_BIT4)) // Bit 4
|
|
#define mbHost20_USBCMD_PeriodicEnable_Set(a) (mwHost20Bit_Set(a,0x10,MS_BIT4)) // Bit 4
|
|
#define mbHost20_USBCMD_PeriodicEnable_Clr(a) (mwHost20Bit_Clr(a,0x10,MS_BIT4)) // Bit 4
|
|
|
|
#define mbHost20_USBCMD_FrameListSize_Rd(a) ((mwHost20Port(a,0x10)>>2)&0x00000003) // Bit 2~3
|
|
#define mbHost20_USBCMD_FrameListSize_Set(a,bValue) ((mwHost20Port(a,0x10)=((mwHost20Port(a,0x10)&0xFFFFFFF3)|(((MS_UINT32)(bValue))<<2))) // Bit 2~3
|
|
|
|
#define HOST20_USBCMD_FrameListSize_1024 0x00
|
|
#define HOST20_USBCMD_FrameListSize_512 0x01
|
|
#define HOST20_USBCMD_FrameListSize_256 0x02
|
|
|
|
#define mbHost20_USBCMD_HCReset_Rd(a) (mwHost20Bit_Rd(a,0x10,MS_BIT1)) // Bit 1
|
|
#define mbHost20_USBCMD_HCReset_Set(a) (mwHost20Bit_Set(a,0x10,MS_BIT1)) // Bit 1
|
|
|
|
#define mbHost20_USBCMD_RunStop_Rd(a) (mwHost20Bit_Rd(a,0x10,MS_BIT0)) // Bit 0
|
|
#define mbHost20_USBCMD_RunStop_Set(a) (mwHost20Bit_Set(a,0x10,MS_BIT0)) // Bit 0
|
|
#define mbHost20_USBCMD_RunStop_Clr(a) (mwHost20Bit_Clr(a,0x10,MS_BIT0)) // Bit 0
|
|
|
|
#define HOST20_Enable 0x01
|
|
#define HOST20_Disable 0x00
|
|
|
|
/* <5>.0x014(USBSTS - USB Status Register) */
|
|
#define mwHost20_USBSTS_Rd(a) (mwHost20Port(a,0x14))
|
|
#define mwHost20_USBSTS_Set(a,wValue) mwHost20Port_wr(a,0x14,wValue)
|
|
|
|
#define mwHost20_USBSTS_AsynchronousStatus_Rd(a) (mwHost20Bit_Rd(a,0x15,MS_BIT7)) // 14->Bit 15
|
|
#define mwHost20_USBSTS_PeriodicStatus_Rd(a) (mwHost20Bit_Rd(a,0x15,MS_BIT6))
|
|
|
|
// #define mwHost20_USBSTS_Reclamation_Rd() (mwHost20Bit_Rd(a,0x15,MS_BIT5))
|
|
#define mwHost20_USBSTS_HCHalted_Rd(a) (mwHost20Bit_Rd(a,0x15,MS_BIT4))
|
|
|
|
#define mwHost20_USBSTS_IntOnAsyncAdvance_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT5)) // Bit 5
|
|
#define mwHost20_USBSTS_IntOnAsyncAdvance_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT5)) // Bit 5
|
|
|
|
#define mwHost20_USBSTS_SystemError_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT4)) // Bit 4
|
|
#define mwHost20_USBSTS_SystemError_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT4)) // Bit 4
|
|
|
|
#define mwHost20_USBSTS_FrameRollover_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT3)) // Bit 3
|
|
#define mwHost20_USBSTS_FrameRollover_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT3)) // Bit 3
|
|
|
|
#define mwHost20_USBSTS_PortChangeDetect_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT2)) // Bit 2
|
|
#define mwHost20_USBSTS_PortChangeDetect_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT2)) // Bit 2
|
|
|
|
#define mwHost20_USBSTS_USBError_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT1)) // Bit 1
|
|
#define mwHost20_USBSTS_USBError_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT1)) // Bit 1
|
|
|
|
#define mwHost20_USBSTS_CompletionOfTransaction_Rd(a) (mwHost20Bit_Rd(a,0x14,MS_BIT0)) // Bit 0
|
|
#define mwHost20_USBSTS_CompletionOfTransaction_Set(a) (mwHost20Bit_Set(a,0x14,MS_BIT0)) // Bit 0
|
|
|
|
/* <6>.0x018(USBINTR - USB Interrupt Enable Register) */
|
|
#define mwHost20_USBINTR_Rd(a) (mwHost20Port(a,0x18))
|
|
#define mwHost20_USBINTR_Set(a,bValue) mwHost20Port_wr(a,0x18,bValue)
|
|
|
|
#define mwHost20_USBINTR_IntOnAsyncAdvance_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT5)) // Bit 5
|
|
#define mwHost20_USBINTR_IntOnAsyncAdvance_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT5)) // Bit 5
|
|
#define mwHost20_USBINTR_IntOnAsyncAdvance_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT5)) // Bit 5
|
|
|
|
#define mwHost20_USBINTR_SystemError_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT4)) // Bit 4
|
|
#define mwHost20_USBINTR_SystemError_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT4)) // Bit 4
|
|
#define mwHost20_USBINTR_SystemError_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT4)) // Bit 4
|
|
|
|
#define mwHost20_USBINTR_FrameRollover_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT3)) // Bit 3
|
|
#define mwHost20_USBINTR_FrameRollover_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT3)) // Bit 3
|
|
#define mwHost20_USBINTR_FrameRollover_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT3)) // Bit 3
|
|
|
|
#define mwHost20_USBINTR_PortChangeDetect_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT2)) // Bit 2
|
|
#define mwHost20_USBINTR_PortChangeDetect_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT2)) // Bit 2
|
|
#define mwHost20_USBINTR_PortChangeDetect_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT2)) // Bit 2
|
|
|
|
#define mwHost20_USBINTR_USBError_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT1)) // Bit 1
|
|
#define mwHost20_USBINTR_USBError_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT1)) // Bit 1
|
|
#define mwHost20_USBINTR_USBError_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT1)) // Bit 1
|
|
|
|
#define mwHost20_USBINTR_CompletionOfTransaction_Rd(a) (mwHost20Bit_Rd(a,0x18,MS_BIT0)) // Bit 0
|
|
#define mwHost20_USBINTR_CompletionOfTransaction_Set(a) (mwHost20Bit_Set(a,0x18,MS_BIT0)) // Bit 0
|
|
#define mwHost20_USBINTR_CompletionOfTransaction_Clr(a) (mwHost20Bit_Clr(a,0x18,MS_BIT0)) // Bit 0
|
|
|
|
#define HOST20_USBINTR_IntOnAsyncAdvance 0x20
|
|
#define HOST20_USBINTR_SystemError 0x10
|
|
#define HOST20_USBINTR_FrameRollover 0x08
|
|
#define HOST20_USBINTR_PortChangeDetect 0x04
|
|
#define HOST20_USBINTR_USBError 0x02
|
|
#define HOST20_USBINTR_CompletionOfTransaction 0x01
|
|
#define USBWAITEVENTS (HOST20_USBINTR_CompletionOfTransaction|HOST20_USBINTR_USBError|HOST20_USBINTR_PortChangeDetect|HOST20_USBINTR_SystemError)
|
|
|
|
/* <7>.0x01C(FRINDEX - Frame Index Register (Address = 01Ch)) */
|
|
// #define mwHost20_FrameIndex_Rd() (mwHost20Port(0x1C)&0x00001FFF) /* Only Read Bit0~Bit12(Skip Bit 13) */
|
|
// #define mwHost20_FrameIndex14Bit_Rd() (mwHost20Port(0x1C)&0x00003FFF) /* Only Read Bit0~Bit12(Skip Bit 13) */
|
|
// #define mwHost20_FrameIndex_Set(wValue) (mwHost20Port(0x1C)=wValue)
|
|
|
|
/* <8>.0x024(PERIODICLISTBASE - Periodic Frame List Base Address Register (Address = 024h)) */
|
|
// #define mwHost20_PeriodicBaseAddr_Rd() (mwHost20Port(0x24))
|
|
#define mwHost20_PeriodicBaseAddr_Set(a,wValue) mwHost20Portw(a,0x24,wValue)
|
|
|
|
/* <9>.0x028(ASYNCLISTADDR - Current Asynchronous List Address Register (Address = 028h)) */
|
|
//#define mwHost20_CurrentAsynchronousAddr_Rd() (mwHost20Port(0x28) )
|
|
#define mwHost20_CurrentAsynchronousAddr_Set(a,wValue) mwHost20Portw(a,0x28,wValue)
|
|
|
|
/* <10>.0x030(PORTSC - Port Status and Control Register(Address = 030h)) */
|
|
#define mwHost20_PORTSC_Rd(a) mwHost20Port(a,0x30)
|
|
// #define mwHost20_PORTSC_LineStatus_Rd() ((mwHost20Port(0x30)>>10)&0x00000003)
|
|
|
|
#define mwHost20_PORTSC_PortReset_Rd(a) mwHost20Bit_Rd(a,0x31,MS_BIT0) // Bit 8
|
|
#define mwHost20_PORTSC_PortReset_Set(a) mwHost20Bit_Set(a,0x31,MS_BIT0) // Bit 8
|
|
#define mwHost20_PORTSC_PortReset_Clr(a) mwHost20Bit_Clr(a,0x31,MS_BIT0) // Bit 8
|
|
|
|
#define mwHost20_PORTSC_ForceSuspend_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT7) // Bit 7
|
|
#define mwHost20_PORTSC_ForceSuspend_Set(a) mwHost20Bit_Set(a,0x30,MS_BIT7) // Bit 7
|
|
|
|
#define mwHost20_PORTSC_ForceResume_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT6) // Bit 6
|
|
#define mwHost20_PORTSC_ForceResume_Set(a) mwHost20Bit_Set(a,0x30,MS_BIT6) // Bit 6
|
|
#define mwHost20_PORTSC_ForceResume_Clr(a) mwHost20Bit_Clr(a,0x30,MS_BIT6) // Bit 6
|
|
|
|
#define mwHost20_PORTSC_EnableDisableChange_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT3) // Bit 3
|
|
#define mwHost20_PORTSC_EnableDisableChange_Set(a) mwHost20Bit_Set(a,0x30,MS_BIT3) // Bit 3
|
|
|
|
#define mwHost20_PORTSC_EnableDisable_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT2) // Bit 2
|
|
#define mwHost20_PORTSC_EnableDisable_Set(a) mwHost20Bit_Set(a,0x30,MS_BIT2) // Bit 2
|
|
#define mwHost20_PORTSC_EnableDisable_Clr(a) mwHost20Bit_Clr(a,0x30,MS_BIT2) // Bit 2
|
|
|
|
#define mwHost20_PORTSC_ConnectChange_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT1) // Bit 1
|
|
#define mwHost20_PORTSC_ConnectChange_Set(a) mwHost20Bit_Set(a,0x30,MS_BIT1) // Bit 1
|
|
|
|
#define mwHost20_PORTSC_ConnectStatus_Rd(a) mwHost20Bit_Rd(a,0x30,MS_BIT0) // Bit 0
|
|
|
|
/* <10>.0x034(Misc. Register(Address = 034h)) */
|
|
#define mwHost20_Misc_EOF1Time_Set(a,bValue) mwHost20Port_wr(a,0x34, ((mwHost20Port(a,0x34)&0xF3)|(((MS_UINT8)(bValue))<<2)) )
|
|
// (mwHost20Port(0x34)=((mwHost20Port(0x34)&0xF3)|(((MS_UINT8)(bValue))<<2))) // Bit 2~3
|
|
|
|
/* <10>.0x034(Misc. Register(Address = 40h)) */
|
|
#define mwHost20_Control_LineStatus_Rd(a) (mwHost20Port(a,0x41)& MS_BIT3)
|
|
#define mwHost20_Control_LineStatus_Set(a) (mwHost20Bit_Set(a,0x41,MS_BIT3))
|
|
#define mwHost20_Control_LineStatus_Clr(a) (mwHost20Bit_Clr(a,0x41,MS_BIT3))
|
|
|
|
#define mwOTG20_Control_HOST_SPD_TYP_Rd(a) ((mwHost20Port(a,0x41)>>1)&0x03)
|
|
|
|
#define mwHost20_Control_ForceFullSpeed_Rd(a) (mwHost20Port(a,0x40)& MS_BIT7)
|
|
#define mwHost20_Control_ForceFullSpeed_Set(a) (mwHost20Bit_Set(a,0x40,MS_BIT7))
|
|
#define mwHost20_Control_ForceFullSpeed_Clr(a) (mwHost20Bit_Clr(a,0x40,MS_BIT7))
|
|
|
|
#define mwHost20_Control_ForceHighSpeed_Rd(a) (mwHost20Port(a,0x40)& MS_BIT6)
|
|
#define mwHost20_Control_ForceHighSpeed_Set(a) (mwHost20Bit_Set(a,0x40,MS_BIT6))
|
|
#define mwHost20_Control_ForceHighSpeed_Clr(a) (mwHost20Bit_Clr(a,0x40,MS_BIT6))
|
|
|
|
#define mwOTG20_Control_Phy_Reset_Set(a) (mwHost20Bit_Set(a,0x40,MS_BIT5))
|
|
#define mwOTG20_Control_Phy_Reset_Clr(a) (mwHost20Bit_Clr(a,0x40,MS_BIT5))
|
|
|
|
#define mwOTG20_Control_Half_Speed(a) (mwHost20Bit_Set(a,0x40,MS_BIT2))
|
|
#define mwOTG20_Control_Int_Polarity_Hi(a) (mwHost20Bit_Set(a,0x40,MS_BIT3))
|
|
|
|
// #define mwHost20_Control_711MA_FS_Issue_Solve() (mwHost20Bit_Set(a,0x41,MS_BIT4))
|
|
|
|
#define flib_Host20_Allocate_QHD_Macro(x,y,z,w,u,v) \
|
|
{ x->bType=y; \
|
|
x->bDeviceAddress=z; \
|
|
x->bHeadOfReclamationListFlag=w; \
|
|
x->bEdNumber=u; \
|
|
x->bMaxPacketSize=v;}
|
|
|
|
/* =================== 3.Structure Definition ============================================================= *
|
|
* ======================================================================================================== */
|
|
|
|
/* <3.1>iTD Structure Definition*****************************************/
|
|
|
|
/* <3.2>qTD Structure Definition*****************************************/
|
|
typedef struct _BufferPointer
|
|
{
|
|
MS_UINT8 Byte0;
|
|
MS_UINT8 Byte1;
|
|
MS_UINT8 Byte2;
|
|
MS_UINT8 Byte3;
|
|
}BufferPointer_Struct;
|
|
|
|
#define Host20_Preiodic_Frame_List_MAX 256//1024 //(1024\)
|
|
|
|
typedef struct {
|
|
/* <1>.Next_Link_Pointer Word */
|
|
MS_UINT32 bTerminal:1; // Bit11~0
|
|
MS_UINT32 bType:2; // Bit11~0
|
|
MS_UINT32 bReserved:2; // Bit14~12
|
|
MS_UINT32 bLinkPointer:27; // Bit15
|
|
|
|
} Periodic_Frame_List_Cell_Structure;
|
|
|
|
typedef struct {
|
|
Periodic_Frame_List_Cell_Structure sCell[Host20_Preiodic_Frame_List_MAX];
|
|
} Periodic_Frame_List_Structure;
|
|
|
|
typedef struct _qTD {
|
|
MS_UINT32 bTerminate:1;
|
|
MS_UINT32 bReserve_1:4;
|
|
MS_UINT32 bNextQTDPointer:27;
|
|
|
|
/* <2>.Alternate Next qTD Word */
|
|
MS_UINT32 bAlternateTerminate:1;
|
|
MS_UINT32 bReserve_2:4;
|
|
MS_UINT32 bAlternateQTDPointer:27;
|
|
|
|
/* <3>.Status Word */
|
|
MS_UINT32 bStatus_PingState:1;
|
|
MS_UINT32 bStatus_SplitState:1;
|
|
MS_UINT32 bStatus_MissMicroFrame:1;
|
|
MS_UINT32 bStatus_Transaction_Err:1;
|
|
MS_UINT32 bStatus_Babble:1;
|
|
MS_UINT32 bStatus_Buffer_Err:1;
|
|
MS_UINT32 bStatus_Halted:1;
|
|
MS_UINT32 bStatus_Active:1;
|
|
|
|
MS_UINT32 bPID:2;
|
|
MS_UINT32 bErrorCounter:2;
|
|
MS_UINT32 CurrentPage:3;
|
|
MS_UINT32 bInterruptOnComplete:1;
|
|
MS_UINT32 bTotalBytes:15;
|
|
MS_UINT32 bDataToggle:1;
|
|
|
|
/* <4>.Buffer Pointer Word Array */
|
|
MS_UINT32 ArrayBufferPointer_Word[5];
|
|
} qTD_Structure;
|
|
|
|
#define HOST20_qTD_PID_OUT 0x00
|
|
#define HOST20_qTD_PID_IN 0x01
|
|
#define HOST20_qTD_PID_SETUP 0x02
|
|
|
|
#define HOST20_qTD_STATUS_Active 0x80
|
|
#define HOST20_qTD_STATUS_Halted 0x40
|
|
#define HOST20_qTD_STATUS_BufferError 0x20
|
|
#define HOST20_qTD_STATUS_Babble 0x10
|
|
#define HOST20_qTD_STATUS_TransactionError 0x08
|
|
#define HOST20_qTD_STATUS_MissMicroFrame 0x04
|
|
#define HOST20_qTD_STATUS_Split 0x02
|
|
#define HOST20_qTD_STATUS_Ping 0x01
|
|
|
|
typedef struct _qHD {
|
|
/* <1>.Next_qHD_Pointer Word */
|
|
MS_UINT32 bTerminate:1;
|
|
MS_UINT32 bType:2;
|
|
MS_UINT32 bReserve_1:2;
|
|
MS_UINT32 bNextQHDPointer:27;
|
|
|
|
/* <2>.qHD_2 Word */
|
|
MS_UINT32 bDeviceAddress:7;
|
|
MS_UINT32 bInactiveOnNextTransaction:1;
|
|
MS_UINT32 bEdNumber:4;
|
|
MS_UINT32 bEdSpeed:2;
|
|
MS_UINT32 bDataToggleControl:1;
|
|
MS_UINT32 bHeadOfReclamationListFlag:1;
|
|
MS_UINT32 bMaxPacketSize:11;
|
|
MS_UINT32 bControlEdFlag:1;
|
|
MS_UINT32 bNakCounter:4;
|
|
|
|
/* <3>.qHD_3 Word */
|
|
MS_UINT32 bInterruptScheduleMask:8;
|
|
MS_UINT32 bSplitTransactionMask:8;
|
|
MS_UINT32 bHubAddr:7;
|
|
MS_UINT32 bPortNumber:7;
|
|
MS_UINT32 bHighBandwidth:2;
|
|
|
|
/* <4>.Overlay_CurrentqTD */
|
|
MS_UINT32 bOverlay_CurrentqTD;
|
|
|
|
/* <5>.Overlay_NextqTD */
|
|
MS_UINT32 bOverlay_NextTerminate:1;
|
|
MS_UINT32 bOverlay_Reserve2:4;
|
|
MS_UINT32 bOverlay_NextqTD:27;
|
|
|
|
/* <6>.Overlay_AlternateNextqTD */
|
|
MS_UINT32 bOverlay_AlternateNextTerminate:1;
|
|
MS_UINT32 bOverlay_NanCnt:4;
|
|
MS_UINT32 bOverlay_AlternateqTD:27;
|
|
|
|
/* <7>.Overlay_TotalBytes */
|
|
MS_UINT32 bOverlay_Status:8;
|
|
MS_UINT32 bOverlay_PID:2;
|
|
MS_UINT32 bOverlay_ErrorCounter:2;
|
|
MS_UINT32 bOverlay_C_Page:3;
|
|
MS_UINT32 bOverlay_InterruptOnComplete:1;
|
|
MS_UINT32 bOverlay_TotalBytes:15;
|
|
MS_UINT32 bOverlay_Direction:1;
|
|
|
|
/* <8>.Overlay_BufferPointer0 */
|
|
MS_UINT32 bOverlay_CurrentOffset:12;
|
|
MS_UINT32 bOverlay_BufferPointer_0:20;
|
|
|
|
/* <9>.Overlay_BufferPointer1 */
|
|
MS_UINT32 bOverlay_C_Prog_Mask:8;
|
|
MS_UINT32 bOverlay_Reserve3:4;
|
|
MS_UINT32 bOverlay_BufferPointer_1:20;
|
|
|
|
/* <10>.Overlay_BufferPointer2 */
|
|
MS_UINT32 bOverlay_FrameTag:5;
|
|
MS_UINT32 bOverlay_S_Bytes:7;
|
|
MS_UINT32 bOverlay_BufferPointer_2:20;
|
|
|
|
/* <11>.Overlay_BufferPointer3 */
|
|
MS_UINT32 bOverlay_Reserve4:12;
|
|
MS_UINT32 bOverlay_BufferPointer_3:20;
|
|
|
|
/* <12>.Overlay_BufferPointer4 */
|
|
MS_UINT32 bOverlay_Reserve5:12;
|
|
MS_UINT32 bOverlay_BufferPointer_4:20;
|
|
} qHD_Structure;
|
|
|
|
#define HOST20_HD_Type_iTD 0x00
|
|
#define HOST20_HD_Type_QH 0x01
|
|
#define HOST20_HD_Type_siTD 0x02
|
|
#define HOST20_HD_Type_FSTN 0x03
|
|
|
|
/* <3.4>.Test Condition Definition****************************************/
|
|
typedef struct {
|
|
MS_UINT8 bStructureEnable; /* Enable = 0x66 Disable=>Others */
|
|
MS_UINT8 bInterruptThreshod; /* 01,02,04,08,10,20,40 */
|
|
MS_UINT8 bAsynchronousParkMode; /* 00=>Disable,01=>Enable */
|
|
MS_UINT8 bAsynchronousParkModeCounter; /* 01,02,03 */
|
|
MS_UINT8 bFrameSize; /* 00,01,02 */
|
|
} Host20_Init_Condition_Structure;
|
|
|
|
#define HOST20_FrameSize_1024 0x00
|
|
#define HOST20_FrameSize_512 0x01
|
|
#define HOST20_FrameSize_256 0x02
|
|
|
|
/* <3.5>.Host20's Attach Device Info Structure****************************************/
|
|
|
|
/* OTGHost Device Structure */
|
|
typedef struct
|
|
{
|
|
MS_UINT8 bDEVICE_LENGTH; // bLength
|
|
MS_UINT8 bDT_DEVICE; // bDescriptorType
|
|
MS_UINT8 bVerLowByte; // bcdUSB
|
|
MS_UINT8 bVerHighByte;
|
|
|
|
MS_UINT8 bDeviceClass; // bDeviceClass
|
|
MS_UINT8 bDeviceSubClass; // bDeviceSubClas;
|
|
MS_UINT8 bDeviceProtocol; // bDeviceProtocol
|
|
MS_UINT8 bEP0MAXPACKETSIZE; // bMaxPacketSize0
|
|
|
|
MS_UINT8 bVIDLowByte; // idVendor
|
|
MS_UINT8 bVIDHighByte;
|
|
MS_UINT8 bPIDLowByte; // idProduct
|
|
MS_UINT8 bPIDHighByte;
|
|
MS_UINT8 bRNumLowByte; // bcdDeviceReleaseNumber
|
|
MS_UINT8 bRNumHighByte;
|
|
|
|
MS_UINT8 bManufacturer; // iManufacturer
|
|
MS_UINT8 bProduct; // iProduct
|
|
MS_UINT8 bSerialNumber; // iSerialNumber
|
|
MS_UINT8 bCONFIGURATION_NUMBER; // bNumConfigurations
|
|
}OTGH_Descriptor_Device_Struct;
|
|
|
|
/* <3.6>.OTGHost Configuration Structure =>
|
|
Only Support 2 Configuration / 5 Interface / 1 Class / 5 Endpoint /1 OTG */
|
|
|
|
#define HOST20_CONFIGURATION_NUM_MAX 0X02
|
|
#define HOST20_INTERFACE_NUM_MAX 0X05
|
|
#define HOST20_ENDPOINT_NUM_MAX 0X05
|
|
#define HOST20_CLASS_NUM_MAX 0x01
|
|
|
|
#define HOST20_CONFIGURATION_LENGTH 0X09
|
|
#define HOST20_INTERFACE_LENGTH 0X09
|
|
#define HOST20_ENDPOINT_LENGTHX 0X07
|
|
#define HOST20_CLASS_LENGTHX 0X09
|
|
|
|
typedef struct
|
|
{
|
|
/* <3>.Define for ED-OTG */
|
|
MS_UINT8 bED_OTG_Length;
|
|
MS_UINT8 bED_OTG_bDescriptorType;
|
|
MS_UINT8 bED_OTG_bAttributes;
|
|
} OTGH_Descriptor_OTG_Struct;
|
|
|
|
typedef struct
|
|
{
|
|
/* <3>.Define for ED-1 */
|
|
MS_UINT8 bED_Length;
|
|
MS_UINT8 bED_bDescriptorType;
|
|
MS_UINT8 bED_EndpointAddress;
|
|
MS_UINT8 bED_bmAttributes;
|
|
MS_UINT8 bED_wMaxPacketSizeLowByte;
|
|
MS_UINT8 bED_wMaxPacketSizeHighByte;
|
|
MS_UINT8 bED_Interval;
|
|
|
|
} OTGH_Descriptor_EndPoint_Struct;
|
|
|
|
typedef struct
|
|
{
|
|
MS_UINT8 bClass_LENGTH;
|
|
MS_UINT8 bClaNumberss;
|
|
MS_UINT8 bClassVerLowByte;
|
|
MS_UINT8 bClassVerHighByte;
|
|
MS_UINT8 bCityNumber;
|
|
MS_UINT8 bFollowDescriptorNum;
|
|
MS_UINT8 bReport;
|
|
MS_UINT8 bLengthLowByte;
|
|
MS_UINT8 bLengthHighByte;
|
|
} OTGH_Descriptor_Class_Struct;
|
|
|
|
typedef struct
|
|
{
|
|
/* <2>.Define for Interface-1 */
|
|
MS_UINT8 bINTERFACE_LENGTH; // bLength
|
|
MS_UINT8 bDT_INTERFACE; // bDescriptorType INTERFACE
|
|
MS_UINT8 bInterfaceNumber; // bInterfaceNumber
|
|
MS_UINT8 bAlternateSetting; // bAlternateSetting
|
|
MS_UINT8 bEP_NUMBER; // bNumEndpoints(excluding endpoint zero)
|
|
MS_UINT8 bInterfaceClass; // bInterfaceClass
|
|
MS_UINT8 bInterfaceSubClass; // bInterfaceSubClass
|
|
MS_UINT8 bInterfaceProtocol; // bInterfaceProtocol
|
|
MS_UINT8 bInterface; // iInterface
|
|
|
|
OTGH_Descriptor_Class_Struct sClass[HOST20_CLASS_NUM_MAX];
|
|
OTGH_Descriptor_EndPoint_Struct sED[HOST20_ENDPOINT_NUM_MAX];
|
|
} OTGH_Descriptor_Interface_Struct;
|
|
|
|
typedef struct
|
|
{
|
|
MS_UINT8 bCONFIG_LENGTH; // bLength
|
|
MS_UINT8 bDT_CONFIGURATION; // bDescriptorType CONFIGURATION
|
|
MS_UINT8 bTotalLengthLowByte; // wTotalLength, include all descriptors
|
|
MS_UINT8 bTotalLengthHighByte;
|
|
MS_UINT8 bINTERFACE_NUMBER; // bNumInterface
|
|
MS_UINT8 bConfigurationValue; // bConfigurationValue
|
|
MS_UINT8 bConfiguration; // iConfiguration
|
|
MS_UINT8 bAttribute; // bmAttribute
|
|
MS_UINT8 bMaxPower; // iMaxPower (2mA units)
|
|
|
|
OTGH_Descriptor_Interface_Struct sInterface[HOST20_INTERFACE_NUM_MAX];
|
|
} OTGH_Descriptor_Configuration_Only_Struct;
|
|
|
|
/*****************************
|
|
* Support Configuration x2 *
|
|
* Interface x5 *
|
|
* EndPoint x5 *
|
|
* OTG X1 *
|
|
*****************************/
|
|
|
|
typedef struct
|
|
{
|
|
/* <2>.Descriptor Information */
|
|
OTGH_Descriptor_Device_Struct sDD;
|
|
OTGH_Descriptor_Configuration_Only_Struct saCD[HOST20_CONFIGURATION_NUM_MAX];
|
|
OTGH_Descriptor_OTG_Struct sOTG;
|
|
|
|
MS_UINT8 bAdd;
|
|
/* 0=>Low Speed / 1=>Full Speed / 2 => High Speed */
|
|
MS_UINT8 bSpeed;
|
|
MS_UINT8 bSendStatusError;
|
|
|
|
// MS_UINT8 bReportDescriptor[0x74];
|
|
// MS_UINT8 bStringLanguage[10];
|
|
// MS_UINT8 bStringManufacture[0xFF];
|
|
// MS_UINT8 bStringProduct[0xFF];
|
|
// MS_UINT8 bStringSerialN[0xFF];
|
|
|
|
/* <3>.For ISO Information */
|
|
// MS_UINT8 bISOTransferEnable;
|
|
// MS_UINT32 wISOiTDAddress[1024];
|
|
|
|
} Host20_Attach_Device_Structure;
|
|
|
|
#define HOST20_Attach_Device_Speed_Full 0x00
|
|
#define HOST20_Attach_Device_Speed_Low 0x01
|
|
#define HOST20_Attach_Device_Speed_High 0x02
|
|
|
|
/* <3.7>.Control Command Structure */
|
|
typedef struct {
|
|
/* (In/Out),(Standard...),(Device/Interface...) */
|
|
MS_UINT8 bmRequestType;
|
|
MS_UINT8 bRequest; // GetStatus .....
|
|
MS_UINT8 wValueLow; // Byte2
|
|
MS_UINT8 wValueHigh; // Byte3
|
|
MS_UINT8 wIndexLow; // Byte4
|
|
MS_UINT8 wIndexHigh; // Byte5
|
|
MS_UINT8 wLengthLow; // Byte6
|
|
MS_UINT8 wLengthHigh; // Byte7
|
|
} Host20_Control_Command_Structure;
|
|
|
|
#define HOST20_CONTROL_GetStatus 0x00
|
|
#define HOST20_CONTROL_ClearFeature 0x01
|
|
#define HOST20_CONTROL_SetFeature 0x03
|
|
#define HOST20_CONTROL_SetAddress 0x05
|
|
#define HOST20_CONTROL_GetDescriptor 0x06
|
|
#define HOST20_CONTROL_SetDescriptor 0x07
|
|
#define HOST20_CONTROL_GetConfiguration 0x08
|
|
#define HOST20_CONTROL_GetInterface 0x0A
|
|
#define HOST20_CONTROL_SetInterface 0x0B
|
|
#define HOST20_CONTROL_SyncFrame 0x0C
|
|
|
|
#define HOST20_HID_GetReport 0x01
|
|
#define HOST20_HID_GetIdle 0x02
|
|
#define HOST20_HID_GetProtocol 0x03
|
|
#define HOST20_HID_SetReport 0x09
|
|
#define HOST20_HID_SetIdle 0x0A
|
|
#define HOST20_HID_SetProtocol 0x0B
|
|
|
|
/* <3.8>.BufferPointerArray */
|
|
typedef struct {
|
|
MS_UINT32 BufferPointerArray[8];
|
|
} Host20_BufferPointerArray_Structure;
|
|
|
|
/* =================== 4.Extern Function Definition ======================================================= *
|
|
* ======================================================================================================== */
|
|
|
|
extern MS_UINT8 flib_Host20_Init(struct usb_hcd *hcd, MS_UINT8 wForDevice_B, MS_UINT16 wDelay);
|
|
extern MS_UINT8 flib_Host20_Close(struct usb_hcd *hcd, MS_UINT8 bForDeviceB);
|
|
|
|
// extern MS_UINT8 flib_Host20_ISR(void);
|
|
extern MS_UINT8 flib_Host20_PortBusReset(struct usb_hcd *hcd);
|
|
extern MS_UINT8 flib_Host20_Suspend(struct usb_hcd *hcd);
|
|
extern MS_UINT8 flib_Host20_Resume(void);
|
|
extern void flib_Host20_RemoteWakeUp(void);
|
|
extern MS_UINT8 flib_Host20_Waiting_Result(void);
|
|
extern MS_UINT8 flib_Host20_Issue_Control(struct usb_hcd *hcd, MS_UINT8 bEdNum, MS_UINT8* pbCmd, MS_UINT16 hwDataSize, MS_UINT8* pbData);
|
|
extern MS_UINT8 flib_Host20_Issue_Bulk(struct usb_hcd *hcd, MS_UINT32 hwSize, MS_UINT32 pwBufferArray, MS_UINT8 bDirection);
|
|
extern void flib_Host20_Issue_ISO (MS_UINT8 bCheckResult, MS_UINT32 wEndPt, MS_UINT32 wMaxPacketSize, MS_UINT32 wSize, MS_UINT32 *pwBufferArray, MS_UINT32 wOffset, MS_UINT8 bDirection, MS_UINT8 bMult);
|
|
|
|
extern MS_UINT8 flib_Host20_Issue_Interrupt(struct usb_hcd *hcd, MS_UINT32 pwBuffer, MS_UINT16 hwSize);
|
|
extern MS_UINT8 flib_Host20_Issue_Interrupt_NonBlock(struct usb_hcd *hcd, MS_UINT32 pwBuffer, MS_UINT16 hwSize, MS_U32 *actual_len);
|
|
extern MS_UINT8 flib_Host20_Enumerate(MS_UINT8 bNormalEnumerate, MS_UINT8 bAddress);
|
|
|
|
extern void flib_DumpDeviceDescriptor(OTGH_Descriptor_Device_Struct *sDevice);
|
|
//extern void flib_PrintDeviceInfo(void);
|
|
//extern void flib_PrintDeviceInfo_ByInput(Host20_Attach_Device_Structure *psAttachDevice);
|
|
//extern void flib_Host20_TimerISR(void);
|
|
// extern void flib_Host20_TimerEnable(MS_UINT32 wTime_ms);
|
|
extern void flib_Host20_InitStructure(struct usb_hcd *hcd);
|
|
extern qTD_Structure* flib_Host20_GetStructure(struct usb_hcd *hcd, MS_UINT8 Type);
|
|
extern void flib_Host20_ReleaseStructure(struct usb_hcd *hcd, MS_UINT8 Type, MS_UINT32 pwAddress);
|
|
extern void flib_Host20_QHD_Control_Init(struct usb_hcd *hcd);
|
|
//extern void flib_Host20_Allocate_QHD1(qHD_Structure *psQHTemp);
|
|
extern MS_UINT8 flib_Host20_Send_qTD_Intr(struct usb_hcd *hcd, qTD_Structure *spHeadqTD ,qHD_Structure *spTempqHD);
|
|
extern MS_UINT8 flib_Host20_Send_qTD2(struct usb_hcd *hcd, qTD_Structure *spHeadqTD ,qHD_Structure *spTempqHD, MS_UINT32 wTimeOutSec);
|
|
extern MS_UINT8 flib_Host20_Send_qTD(struct usb_hcd *hcd, qTD_Structure *spHeadqTD ,qHD_Structure *spTempqHD, MS_UINT32 wTimeOutSec);
|
|
extern void flib_Host20_Allocate_QHD(struct usb_hcd *hcd, qHD_Structure *psQHTemp, MS_UINT8 bNextType, MS_UINT8 bAddress, MS_UINT8 bHead, MS_UINT8 bEndPt, MS_UINT32 wMaxPacketSize);
|
|
|
|
//extern MS_UINT8 flib_Host20_Issue_Control_Turbo(MS_UINT8 bEdNum, MS_UINT8* pbCmd, MS_UINT32 wDataSize, MS_UINT32 *pwPageAddress, MS_UINT32 wCurrentOffset);
|
|
//extern void flib_Host20_Control_Command_Request(Host20_Control_Command_Structure *pbCMD, MS_UINT8 bmRequestType_Temp, MS_UINT8 bRequest_Temp, MS_UINT16 wValue_Temp, MS_UINT16 wIndex_Temp, MS_UINT16 wLength_Temp);
|
|
//extern void flib_DumpString(MS_UINT8 *pbTemp, MS_UINT8 bSize);
|
|
extern void flib_Host20_Interrupt_Init(struct usb_device *dev, struct usb_hcd *hcd);
|
|
|
|
//extern void flib_Host20_Asynchronous_Enable(void);
|
|
//extern void flib_Host20_Asynchronous_Disable(void);
|
|
|
|
//extern MS_UINT8 flib_OTGH_Checking_RemoteWakeUp(void);
|
|
//extern MS_UINT8 flib_OTGH_RemoteWakeEnable(void);
|
|
extern void flib_Host20_StopRun_Setting(struct usb_hcd *hcd, MS_UINT8 bOption);
|
|
extern void flib_Host20_Reset_HC(struct usb_hcd *hcd);
|
|
extern void flib_Host20_Asynchronous_Setting(struct usb_hcd *hcd, MS_UINT8 bOption);
|
|
extern void flib_Host20_Periodic_Setting(struct usb_hcd *hcd, MS_UINT8 bOption);
|
|
extern void flib_Host20_SetControl1MaxPacket(struct usb_hcd *hcd, MS_UINT8 max);
|
|
extern void flib_Host20_Fix_DataLength_ByteAlign(struct usb_hcd *hcd);
|
|
|
|
/* =================== 5.Call Extern Function Definition ================================================== *
|
|
* ======================================================================================================== */
|
|
extern MS_UINT8 flib_Host20_Send_Receive_Bulk_Data(struct usb_hcd *hcd, void *buffer, int len, int dir_out);
|
|
extern void flib_Host20_Bulk_Init(struct usb_device *dev, struct usb_hcd *hcd);
|
|
extern MS_UINT8 flib_Host20_Get_BulkIn_Data(struct usb_hcd *hcd, struct usb_device *dev, unsigned int pipe,
|
|
MS_U32 buf, MS_U32 length, MS_U32 *actual_len, int timeout);
|
|
|
|
/* =================== 6.Extern Variable Definition ======================================================= *
|
|
* ======================================================================================================== */
|
|
|
|
extern MS_UINT8 OTGH_GETDESCRIPTOR_DEVICE[];
|
|
extern MS_UINT8 OTGH_GETDESCRIPTOR_CONFIG[];
|
|
extern MS_UINT8 OTGH_SETADDRESS[];
|
|
extern MS_UINT8 OTGH_SETCONFIGURATION[];
|
|
extern MS_UINT8 OTGH_GETDESCRIPTOR_OTG[];
|
|
extern MS_UINT8 OTGH_SET_FEATURE_OTG[];
|
|
extern MS_UINT8 OTGH_SETDESCRIPTOR_DEVICE[];
|
|
//extern qHD_Structure Host20_qHD_List_Control0; // NUSED
|
|
//extern qHD_Structure Host20_qHD_List_Bulk0; // NUSED
|
|
//extern qHD_Structure Host20_qHD_List_Control1; // NUSED
|
|
//extern qHD_Structure Host20_qHD_List_Bulk1; // NUSED
|
|
|
|
//extern MS_UINT8 Host20_qTD_Manage[Host20_qTD_MAX]; /* 1=>Free 2=>used */ // NUSED
|
|
extern Host20_Init_Condition_Structure sInitCondition;
|
|
|
|
extern Host20_Attach_Device_Structure *psDevice_AP;
|
|
|
|
/* =================== EHCI structure refactoring ======================================================= *
|
|
* ======================================================================================================== */
|
|
struct ehci_hcd { /* one per controller */
|
|
/* per-HC memory pools (could be per-bus, but ...) */
|
|
qHD_Structure *qh_control0;
|
|
qHD_Structure *qh_control1;
|
|
qHD_Structure *qh_bulk0;
|
|
qHD_Structure *qh_bulk1;
|
|
qHD_Structure *qh_intr;
|
|
|
|
qTD_Structure *spBulkInqTD;
|
|
qTD_Structure *spIntInqTD;
|
|
u8 *pUsbDataBuf;
|
|
|
|
Periodic_Frame_List_Structure *framelist;
|
|
|
|
uchar *qtd_pool; /* one or more per qh */
|
|
uchar *qtd_manage;
|
|
|
|
uchar *ep0_buffer;
|
|
uchar bSendStatusError;
|
|
uchar ep_bulk0_dir;
|
|
|
|
/* async schedule support */
|
|
int async;
|
|
|
|
};
|
|
|
|
|
|
//------- xHCI --------
|
|
#define PORT_PE (1 << 1)
|
|
#define PORT_PLS_MASK (0xf << 5)
|
|
#define PORT_LINK_STROBE (1 << 16)
|
|
|
|
#define XHCI_PORT_RO ((1<<0) | (1<<3) | (0xf<<10) | (1<<30))
|
|
#define XHCI_PORT_RWS ((0xf<<5) | (1<<9) | (0x3<<14) | (0x7<<25))
|
|
|
|
#define USB_SS_PORT_LS_SS_DISABLED 0x0080
|
|
#define USB_SS_PORT_LS_RX_DETECT 0x00a0
|
|
|
|
extern void xhci_enable_clock(void);
|
|
extern void xhci_ssport_set_state(struct xhc_comp *xhci, int bOn);
|
|
//--------------------
|
|
|
|
|
|
#endif /* __DRVHOSTLIB_H__ */
|