1/****************************************************************** 2 * Copyright (c) 2000-2007 PMC-Sierra INC. 3 * 4 * This program is free software; you can redistribute it 5 * and/or modify it under the terms of the GNU General 6 * Public License as published by the Free Software 7 * Foundation; either version 2 of the License, or (at your 8 * option) any later version. 9 * 10 * This program is distributed in the hope that it will be 11 * useful, but WITHOUT ANY WARRANTY; without even the implied 12 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 13 * PURPOSE. See the GNU General Public License for more 14 * details. 15 * 16 * You should have received a copy of the GNU General Public 17 * License along with this program; if not, write to the Free 18 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 19 * 02139, USA. 20 * 21 * PMC-SIERRA INC. DISCLAIMS ANY LIABILITY OF ANY KIND 22 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS 23 * SOFTWARE. 24 */ 25#ifndef MSP_USB_H_ 26#define MSP_USB_H_ 27 28#ifdef CONFIG_MSP_HAS_DUAL_USB 29#define NUM_USB_DEVS 2 30#else 31#define NUM_USB_DEVS 1 32#endif 33 34/* Register spaces for USB host 0 */ 35#define MSP_USB0_MAB_START (MSP_USB0_BASE + 0x0) 36#define MSP_USB0_MAB_END (MSP_USB0_BASE + 0x17) 37#define MSP_USB0_ID_START (MSP_USB0_BASE + 0x40000) 38#define MSP_USB0_ID_END (MSP_USB0_BASE + 0x4008f) 39#define MSP_USB0_HS_START (MSP_USB0_BASE + 0x40100) 40#define MSP_USB0_HS_END (MSP_USB0_BASE + 0x401FF) 41 42/* Register spaces for USB host 1 */ 43#define MSP_USB1_MAB_START (MSP_USB1_BASE + 0x0) 44#define MSP_USB1_MAB_END (MSP_USB1_BASE + 0x17) 45#define MSP_USB1_ID_START (MSP_USB1_BASE + 0x40000) 46#define MSP_USB1_ID_END (MSP_USB1_BASE + 0x4008f) 47#define MSP_USB1_HS_START (MSP_USB1_BASE + 0x40100) 48#define MSP_USB1_HS_END (MSP_USB1_BASE + 0x401ff) 49 50/* USB Identification registers */ 51struct msp_usbid_regs { 52 u32 id; /* 0x0: Identification register */ 53 u32 hwgen; /* 0x4: General HW params */ 54 u32 hwhost; /* 0x8: Host HW params */ 55 u32 hwdev; /* 0xc: Device HW params */ 56 u32 hwtxbuf; /* 0x10: Tx buffer HW params */ 57 u32 hwrxbuf; /* 0x14: Rx buffer HW params */ 58 u32 reserved[26]; 59 u32 timer0_load; /* 0x80: General-purpose timer 0 load*/ 60 u32 timer0_ctrl; /* 0x84: General-purpose timer 0 control */ 61 u32 timer1_load; /* 0x88: General-purpose timer 1 load*/ 62 u32 timer1_ctrl; /* 0x8c: General-purpose timer 1 control */ 63}; 64 65/* MSBus to AMBA registers */ 66struct msp_mab_regs { 67 u32 isr; /* 0x0: Interrupt status */ 68 u32 imr; /* 0x4: Interrupt mask */ 69 u32 thcr0; /* 0x8: Transaction header capture 0 */ 70 u32 thcr1; /* 0xc: Transaction header capture 1 */ 71 u32 int_stat; /* 0x10: Interrupt status summary */ 72 u32 phy_cfg; /* 0x14: USB phy config */ 73}; 74 75/* EHCI registers */ 76struct msp_usbhs_regs { 77 u32 hciver; /* 0x0: Version and offset to operational regs */ 78 u32 hcsparams; /* 0x4: Host control structural parameters */ 79 u32 hccparams; /* 0x8: Host control capability parameters */ 80 u32 reserved0[5]; 81 u32 dciver; /* 0x20: Device interface version */ 82 u32 dccparams; /* 0x24: Device control capability parameters */ 83 u32 reserved1[6]; 84 u32 cmd; /* 0x40: USB command */ 85 u32 sts; /* 0x44: USB status */ 86 u32 int_ena; /* 0x48: USB interrupt enable */ 87 u32 frindex; /* 0x4c: Frame index */ 88 u32 reserved3; 89 union { 90 struct { 91 u32 flb_addr; /* 0x54: Frame list base address */ 92 u32 next_async_addr; /* 0x58: next asynchronous addr */ 93 u32 ttctrl; /* 0x5c: embedded transaction translator 94 async buffer status */ 95 u32 burst_size; /* 0x60: Controller burst size */ 96 u32 tx_fifo_ctrl; /* 0x64: Tx latency FIFO tuning */ 97 u32 reserved0[4]; 98 u32 endpt_nak; /* 0x78: Endpoint NAK */ 99 u32 endpt_nak_ena; /* 0x7c: Endpoint NAK enable */ 100 u32 cfg_flag; /* 0x80: Config flag */ 101 u32 port_sc1; /* 0x84: Port status & control 1 */ 102 u32 reserved1[7]; 103 u32 otgsc; /* 0xa4: OTG status & control */ 104 u32 mode; /* 0xa8: USB controller mode */ 105 } host; 106 107 struct { 108 u32 dev_addr; /* 0x54: Device address */ 109 u32 endpt_list_addr; /* 0x58: Endpoint list address */ 110 u32 reserved0[7]; 111 u32 endpt_nak; /* 0x74 */ 112 u32 endpt_nak_ctrl; /* 0x78 */ 113 u32 cfg_flag; /* 0x80 */ 114 u32 port_sc1; /* 0x84: Port status & control 1 */ 115 u32 reserved[7]; 116 u32 otgsc; /* 0xa4: OTG status & control */ 117 u32 mode; /* 0xa8: USB controller mode */ 118 u32 endpt_setup_stat; /* 0xac */ 119 u32 endpt_prime; /* 0xb0 */ 120 u32 endpt_flush; /* 0xb4 */ 121 u32 endpt_stat; /* 0xb8 */ 122 u32 endpt_complete; /* 0xbc */ 123 u32 endpt_ctrl0; /* 0xc0 */ 124 u32 endpt_ctrl1; /* 0xc4 */ 125 u32 endpt_ctrl2; /* 0xc8 */ 126 u32 endpt_ctrl3; /* 0xcc */ 127 } device; 128 } u; 129}; 130/* 131 * Container for the more-generic platform_device. 132 * This exists mainly as a way to map the non-standard register 133 * spaces and make them accessible to the USB ISR. 134 */ 135struct mspusb_device { 136 struct msp_mab_regs __iomem *mab_regs; 137 struct msp_usbid_regs __iomem *usbid_regs; 138 struct msp_usbhs_regs __iomem *usbhs_regs; 139 struct platform_device dev; 140}; 141 142#define to_mspusb_device(x) container_of((x), struct mspusb_device, dev) 143#define TO_HOST_ID(x) ((x) & 0x3) 144#endif /*MSP_USB_H_*/ 145