2011-01-25 11:22:05 +03:00
/******************************************************************
* Copyright ( c ) 2000 - 2007 PMC - Sierra INC .
*
* This program is free software ; you can redistribute it
* and / or modify it under the terms of the GNU General
* Public License as published by the Free Software
* Foundation ; either version 2 of the License , or ( at your
* option ) any later version .
*
* 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 .
*
* You should have received a copy of the GNU General Public
* License along with this program ; if not , write to the Free
* Software Foundation , Inc . , 675 Mass Ave , Cambridge , MA
* 0213 9 , USA .
*
* PMC - SIERRA INC . DISCLAIMS ANY LIABILITY OF ANY KIND
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS
* SOFTWARE .
*/
# ifndef MSP_USB_H_
# define MSP_USB_H_
# define NUM_USB_DEVS 1
/* Register spaces for USB host 0 */
# define MSP_USB0_MAB_START (MSP_USB0_BASE + 0x0)
# define MSP_USB0_MAB_END (MSP_USB0_BASE + 0x17)
# define MSP_USB0_ID_START (MSP_USB0_BASE + 0x40000)
# define MSP_USB0_ID_END (MSP_USB0_BASE + 0x4008f)
# define MSP_USB0_HS_START (MSP_USB0_BASE + 0x40100)
# define MSP_USB0_HS_END (MSP_USB0_BASE + 0x401FF)
/* Register spaces for USB host 1 */
2013-01-22 15:59:30 +04:00
# define MSP_USB1_MAB_START (MSP_USB1_BASE + 0x0)
2011-01-25 11:22:05 +03:00
# define MSP_USB1_MAB_END (MSP_USB1_BASE + 0x17)
# define MSP_USB1_ID_START (MSP_USB1_BASE + 0x40000)
# define MSP_USB1_ID_END (MSP_USB1_BASE + 0x4008f)
# define MSP_USB1_HS_START (MSP_USB1_BASE + 0x40100)
# define MSP_USB1_HS_END (MSP_USB1_BASE + 0x401ff)
/* USB Identification registers */
struct msp_usbid_regs {
u32 id ; /* 0x0: Identification register */
u32 hwgen ; /* 0x4: General HW params */
u32 hwhost ; /* 0x8: Host HW params */
u32 hwdev ; /* 0xc: Device HW params */
u32 hwtxbuf ; /* 0x10: Tx buffer HW params */
u32 hwrxbuf ; /* 0x14: Rx buffer HW params */
u32 reserved [ 26 ] ;
u32 timer0_load ; /* 0x80: General-purpose timer 0 load*/
u32 timer0_ctrl ; /* 0x84: General-purpose timer 0 control */
u32 timer1_load ; /* 0x88: General-purpose timer 1 load*/
u32 timer1_ctrl ; /* 0x8c: General-purpose timer 1 control */
} ;
/* MSBus to AMBA registers */
struct msp_mab_regs {
u32 isr ; /* 0x0: Interrupt status */
u32 imr ; /* 0x4: Interrupt mask */
u32 thcr0 ; /* 0x8: Transaction header capture 0 */
u32 thcr1 ; /* 0xc: Transaction header capture 1 */
u32 int_stat ; /* 0x10: Interrupt status summary */
u32 phy_cfg ; /* 0x14: USB phy config */
} ;
/* EHCI registers */
struct msp_usbhs_regs {
u32 hciver ; /* 0x0: Version and offset to operational regs */
u32 hcsparams ; /* 0x4: Host control structural parameters */
u32 hccparams ; /* 0x8: Host control capability parameters */
u32 reserved0 [ 5 ] ;
u32 dciver ; /* 0x20: Device interface version */
u32 dccparams ; /* 0x24: Device control capability parameters */
u32 reserved1 [ 6 ] ;
u32 cmd ; /* 0x40: USB command */
u32 sts ; /* 0x44: USB status */
u32 int_ena ; /* 0x48: USB interrupt enable */
u32 frindex ; /* 0x4c: Frame index */
u32 reserved3 ;
union {
struct {
u32 flb_addr ; /* 0x54: Frame list base address */
u32 next_async_addr ; /* 0x58: next asynchronous addr */
u32 ttctrl ; /* 0x5c: embedded transaction translator
async buffer status */
u32 burst_size ; /* 0x60: Controller burst size */
u32 tx_fifo_ctrl ; /* 0x64: Tx latency FIFO tuning */
u32 reserved0 [ 4 ] ;
u32 endpt_nak ; /* 0x78: Endpoint NAK */
u32 endpt_nak_ena ; /* 0x7c: Endpoint NAK enable */
u32 cfg_flag ; /* 0x80: Config flag */
u32 port_sc1 ; /* 0x84: Port status & control 1 */
u32 reserved1 [ 7 ] ;
u32 otgsc ; /* 0xa4: OTG status & control */
u32 mode ; /* 0xa8: USB controller mode */
} host ;
struct {
u32 dev_addr ; /* 0x54: Device address */
u32 endpt_list_addr ; /* 0x58: Endpoint list address */
u32 reserved0 [ 7 ] ;
u32 endpt_nak ; /* 0x74 */
u32 endpt_nak_ctrl ; /* 0x78 */
u32 cfg_flag ; /* 0x80 */
u32 port_sc1 ; /* 0x84: Port status & control 1 */
u32 reserved [ 7 ] ;
u32 otgsc ; /* 0xa4: OTG status & control */
u32 mode ; /* 0xa8: USB controller mode */
u32 endpt_setup_stat ; /* 0xac */
u32 endpt_prime ; /* 0xb0 */
u32 endpt_flush ; /* 0xb4 */
u32 endpt_stat ; /* 0xb8 */
u32 endpt_complete ; /* 0xbc */
u32 endpt_ctrl0 ; /* 0xc0 */
u32 endpt_ctrl1 ; /* 0xc4 */
u32 endpt_ctrl2 ; /* 0xc8 */
u32 endpt_ctrl3 ; /* 0xcc */
} device ;
} u ;
} ;
/*
* Container for the more - generic platform_device .
* This exists mainly as a way to map the non - standard register
* spaces and make them accessible to the USB ISR .
*/
struct mspusb_device {
struct msp_mab_regs __iomem * mab_regs ;
struct msp_usbid_regs __iomem * usbid_regs ;
struct msp_usbhs_regs __iomem * usbhs_regs ;
struct platform_device dev ;
} ;
# define to_mspusb_device(x) container_of((x), struct mspusb_device, dev)
# define TO_HOST_ID(x) ((x) & 0x3)
# endif /*MSP_USB_H_*/