From e835af58406c0aad7a6fc24a7df59a33c35ee759 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 20 Mar 2015 14:08:33 -0600 Subject: [PATCH] SAMV7: Add USBHS register defintiion header file --- arch/arm/src/samv7/chip/sam_usbhs.h | 793 ++++++++++++++++++++++++++++ 1 file changed, 793 insertions(+) create mode 100644 arch/arm/src/samv7/chip/sam_usbhs.h diff --git a/arch/arm/src/samv7/chip/sam_usbhs.h b/arch/arm/src/samv7/chip/sam_usbhs.h new file mode 100644 index 0000000000..697e862457 --- /dev/null +++ b/arch/arm/src/samv7/chip/sam_usbhs.h @@ -0,0 +1,793 @@ +/************************************************************************************************************ + * arch/arm/src/samv7/chip/sam_usbhs.h + * + * Copyright (C) 2013 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * References: + * SAMV7D3 Series Data Sheet + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************************************/ + +#ifndef __ARCH_ARM_SRC_SAMV7_CHIP_SAM_USBHS_H +#define __ARCH_ARM_SRC_SAMV7_CHIP_SAM_USBHS_H + +/************************************************************************************************************ + * Included Files + ************************************************************************************************************/ + +#include +#include + +#include "chip/sam_memorymap.h" + +/************************************************************************************************************ + * Pre-processor Definitions + ************************************************************************************************************/ +/* General Definitions **************************************************************************************/ +/* Number of endpoints and DMA channels */ + +#define SAM_USBHS_NENDPOINTS 10 /* EP0-9 */ +#define SAM_USBHS_NDMACHANNELS 7 /* For DMA1-7 */ + +/* Capabilities and characteristics of endpoints */ + +=== REVISIT +#define SAM_USBHS_MAXPACKETSIZE(ep) (((unsigned)(ep) < 1) ? 64 : 1024) +#define SAM_USBHS_NBANKS(ep) (((unsigned)(ep) < 1) ? 1 : (((unsigned)(ep) < 3) ? 3 : 2)) +#define SAM_USBHS_DMA(ep) (((unsigned)(ep) < 1) ? false : (((unsigned)(ep) < 8) ? true : false)) + +/* Register offsets *****************************************************************************************/ +/* USBHS Device Controller Register Offsets */ + +#define SAM_USBHS_DEVCTRL_OFFSET 0x0000 /* Device General Control Register */ +#define SAM_USBHS_DEVISR_OFFSET 0x0004 /* Device Global Interrupt Status Register */ +#define SAM_USBHS_DEVICR_OFFSET 0x0008 /* Device Global Interrupt Clear Register */ +#define SAM_USBHS_DEVIFR_OFFSET 0x000c /* Device Global Interrupt Set Register */ +#define SAM_USBHS_DEVIMR_OFFSET 0x0010 /* Device Global Interrupt Mask Register */ +#define SAM_USBHS_DEVIDR_OFFSET 0x0014 /* Device Global Interrupt Disable Register */ +#define SAM_USBHS_DEVIER_OFFSET 0x0018 /* Device Global Interrupt Enable Register */ +#define SAM_USBHS_DEVEPT_OFFSET 0x001c /* Device Endpoint Register */ +#define SAM_USBHS_DEVFNUM_OFFSET 0x0020 /* Device Frame Number Register */ + +#define SAM_USBHS_DEVEPTCFG_OFFSET(n) (0x0100+((n)<<2)) /* Device Endpoint Configuration Register */ +#define SAM_USBHS_DEVEPTISR_OFFSET(n) (0x0130+((n)<<2)) /* Device Endpoint Status Register */ +#define SAM_USBHS_DEVEPTICR_OFFSET(n) (0x0160+((n)<<2)) /* Device Endpoint Clear Register */ +#define SAM_USBHS_DEVEPTIFR_OFFSET(n) (0x0190+((n)<<2)) /* Device Endpoint Set Register */ +#define SAM_USBHS_DEVEPTIMR_OFFSET(n) (0x01c0+((n)<<2)) /* Device Endpoint Mask Register */ +#define SAM_USBHS_DEVEPTIER_OFFSET(n) (0x01f0+((n)<<2)) /* Device Endpoint Enable Register */ +#define SAM_USBHS_DEVEPTIDR_OFFSET(n) (0x0220+((n)<<2)) /* Device Endpoint Disable Register */ + +#define SAM_USBHS_DEVDMANXTDSC_OFFSET(n) (0x0300+((n)<<4)) /* Device DMA Channel Next Descriptor Address Register */ +#define SAM_USBHS_DEVDMAADDR_OFFSET(n) (0x0304+((n)<<4)) /* Device DMA Channel Address Register */ +#define SAM_USBHS_DEVDMACTRL_OFFSET(n) (0x0308+((n)<<4)) /* Device DMA Channel Control Register */ +#define SAM_USBHS_DEVDMASTA_OFFSET(n) (0x030c+((n)<<4)) /* Device DMA Channel Status Register */ + +/* USBHS Mini-Host Controller Register Offsets */ + +#define SAM_USBHS_HSTCTRL_OFFSET 0x0400 /* Host General Control Register */ +#define SAM_USBHS_HSTISR_OFFSET 0x0404 /* Host Global Interrupt Status Register */ +#define SAM_USBHS_HSTICR_OFFSET 0x0408 /* Host Global Interrupt Clear Register */ +#define SAM_USBHS_HSTIFR_OFFSET 0x040c /* Host Global Interrupt Set Register */ +#define SAM_USBHS_HSTIMR_OFFSET 0x0410 /* Host Global Interrupt Mask Register */ +#define SAM_USBHS_HSTIDR_OFFSET 0x0414 /* Host Global Interrupt Disable Register */ +#define SAM_USBHS_HSTIER_OFFSET 0x0418 /* Host Global Interrupt Enable Register */ +#define SAM_USBHS_HSTPIP_OFFSET 0x041c /* Host Pipe Register */ +#define SAM_USBHS_HSTFNUM_OFFSET 0x0420 /* Host Frame Number Register */ +#define SAM_USBHS_HSTADDR1_OFFSET 0x0424 /* Host Address 1 Register */ +#define SAM_USBHS_HSTADDR2_OFFSET 0x0428 /* Host Address 2 Register */ +#define SAM_USBHS_HSTADDR3_OFFSET 0x042c /* Host Address 3 Register */ + +#define SAM_USBHS_HSTPIPCFG_OFFSET(n) (0x0500+((n)<<2)) /* Host Pipe Configuration Register */ +#define SAM_USBHS_HSTPIPISR_OFFSET(n) (0x0530+((n)<<2)) /* Host Pipe Status Register */ +#define SAM_USBHS_HSTPIPICR_OFFSET(n) (0x0560+((n)<<2)) /* Host Pipe Clear Register */ +#define SAM_USBHS_HSTPIPIFR_OFFSET(n) (0x0590+((n)<<2)) /* Host Pipe Set Register */ +#define SAM_USBHS_HSTPIPIMR_OFFSET(n) (0x05c0+((n)<<2)) /* Host Pipe Mask Register */ +#define SAM_USBHS_HSTPIPIER_OFFSET(n) (0x05f0+((n)<<2)) /* Host Pipe Enable Register */ +#define SAM_USBHS_HSTPIPIDR_OFFSET(n) (0x0620+((n)<<2)) /* Host Pipe Disable Register */ +#define SAM_USBHS_HSTPIPINRQ_OFFSET(n) (0x0650+((n)<<2)) /* Host Pipe IN Request Register */ +#define SAM_USBHS_HSTPIPERR_OFFSET(n) (0x0680+((n)<<2)) /* Host Pipe Error Register */ + +#define SAM_USBHS_HSTDMANXTDSC_OFFSET(n) (0x0700+((n)<<4)) /* Host DMA Channel Next Descriptor Address Register */ +#define SAM_USBHS_HSTDMAADDR_OFFSET(n) (0x0704+((n)<<4)) /* Host DMA Channel Address Register */ +#define SAM_USBHS_HSTDMACTRL_OFFSET(n) (0x0708+((n)<<4)) /* Host DMA Channel Control Register */ +#define SAM_USBHS_HSTDMASTA_OFFSET(n) (0x070c+((n)<<4)) /* Host DMA Channel Status Register */ + +/* USBHS General Register Offsets */ + +#define SAM_USBHS_CTRL_OFFSET 0x0800 /* General Control Register */ +#define SAM_USBHS_SR_OFFSET 0x0804 /* General Status Register */ +#define SAM_USBHS_SCR_OFFSET 0x0808 /* General Status Clear Register */ +#define SAM_USBHS_SFR_OFFSET 0x080c /* General Status Set Register */ + /* 0x0810-0x082c: Reserved */ + +/* Register addresses ***************************************************************************************/ + +/* USBHS Device Controller Register Addresses */ + +#define SAM_USBHS_DEVCTRL (SAM_USBHS_BASE+SAM_USBHS_DEVCTRL_OFFSET) +#define SAM_USBHS_DEVISR (SAM_USBHS_BASE+SAM_USBHS_DEVISR_OFFSET) +#define SAM_USBHS_DEVICR (SAM_USBHS_BASE+SAM_USBHS_DEVICR_OFFSET) +#define SAM_USBHS_DEVIFR (SAM_USBHS_BASE+SAM_USBHS_DEVIFR_OFFSET) +#define SAM_USBHS_DEVIMR (SAM_USBHS_BASE+SAM_USBHS_DEVIMR_OFFSET) +#define SAM_USBHS_DEVIDR (SAM_USBHS_BASE+SAM_USBHS_DEVIDR_OFFSET) +#define SAM_USBHS_DEVIER (SAM_USBHS_BASE+SAM_USBHS_DEVIER_OFFSET) +#define SAM_USBHS_DEVEPT (SAM_USBHS_BASE+SAM_USBHS_DEVEPT_OFFSET) +#define SAM_USBHS_DEVFNUM (SAM_USBHS_BASE+SAM_USBHS_DEVFNUM_OFFSET) + +#define SAM_USBHS_DEVEPTCFG(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTCFG_OFFSET(n)) +#define SAM_USBHS_DEVEPTISR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTISR_OFFSET(n)) +#define SAM_USBHS_DEVEPTICR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTICR_OFFSET(n)) +#define SAM_USBHS_DEVEPTIFR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTIFR_OFFSET(n)) +#define SAM_USBHS_DEVEPTIMR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTIMR_OFFSET(n)) +#define SAM_USBHS_DEVEPTIER(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTIER_OFFSET(n)) +#define SAM_USBHS_DEVEPTIDR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVEPTIDR_OFFSET(n)) + +#define SAM_USBHS_DEVDMANXTDSC(n) (SAM_USBHS_BASE+SAM_USBHS_DEVDMANXTDSC_OFFSET(n)) +#define SAM_USBHS_DEVDMAADDR(n) (SAM_USBHS_BASE+SAM_USBHS_DEVDMAADDR_OFFSET(n)) +#define SAM_USBHS_DEVDMACTRL(n) (SAM_USBHS_BASE+SAM_USBHS_DEVDMACTRL_OFFSET(n)) +#define SAM_USBHS_DEVDMASTA(n) (SAM_USBHS_BASE+SAM_USBHS_DEVDMASTA_OFFSET(n)) + +/* USBHS Mini-Host Controller Register Addresses */ + +#define SAM_USBHS_HSTCTRL (SAM_USBHS_BASE+SAM_USBHS_HSTCTRL_OFFSET) +#define SAM_USBHS_HSTISR (SAM_USBHS_BASE+SAM_USBHS_HSTISR_OFFSET) +#define SAM_USBHS_HSTICR (SAM_USBHS_BASE+SAM_USBHS_HSTICR_OFFSET) +#define SAM_USBHS_HSTIFR (SAM_USBHS_BASE+SAM_USBHS_HSTIFR_OFFSET) +#define SAM_USBHS_HSTIMR (SAM_USBHS_BASE+SAM_USBHS_HSTIMR_OFFSET) +#define SAM_USBHS_HSTIDR (SAM_USBHS_BASE+SAM_USBHS_HSTIDR_OFFSET) +#define SAM_USBHS_HSTIER (SAM_USBHS_BASE+SAM_USBHS_HSTIER_OFFSET) +#define SAM_USBHS_HSTPIP (SAM_USBHS_BASE+SAM_USBHS_HSTPIP_OFFSET) +#define SAM_USBHS_HSTFNUM (SAM_USBHS_BASE+SAM_USBHS_HSTFNUM_OFFSET) +#define SAM_USBHS_HSTADDR1 (SAM_USBHS_BASE+SAM_USBHS_HSTADDR1_OFFSET) +#define SAM_USBHS_HSTADDR2 (SAM_USBHS_BASE+SAM_USBHS_HSTADDR2_OFFSET) +#define SAM_USBHS_HSTADDR3 (SAM_USBHS_BASE+SAM_USBHS_HSTADDR3_OFFSET) + +#define SAM_USBHS_HSTPIPCFG(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPCFG_OFFSET(n)) +#define SAM_USBHS_HSTPIPISR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPISR_OFFSET(n)) +#define SAM_USBHS_HSTPIPICR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPICR_OFFSET(n)) +#define SAM_USBHS_HSTPIPIFR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPIFR_OFFSET(n)) +#define SAM_USBHS_HSTPIPIMR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPIMR_OFFSET(n)) +#define SAM_USBHS_HSTPIPIER(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPIER_OFFSET(n)) +#define SAM_USBHS_HSTPIPIDR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPIDR_OFFSET(n)) +#define SAM_USBHS_HSTPIPINRQ(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPINRQ_OFFSET(n)) +#define SAM_USBHS_HSTPIPERR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTPIPERR_OFFSET(n)) + +#define SAM_USBHS_HSTDMANXTDSC(n) (SAM_USBHS_BASE+SAM_USBHS_HSTDMANXTDSC_OFFSET(n)) +#define SAM_USBHS_HSTDMAADDR(n) (SAM_USBHS_BASE+SAM_USBHS_HSTDMAADDR_OFFSET(n)) +#define SAM_USBHS_HSTDMACTRL(n) (SAM_USBHS_BASE+SAM_USBHS_HSTDMACTRL_OFFSET(n)) +#define SAM_USBHS_HSTDMASTA(n) (SAM_USBHS_BASE+SAM_USBHS_HSTDMASTA_OFFSET(n) + +/* USBHS General Register Addresses */ + +#define SAM_USBHS_CTRL (SAM_USBHS_BASE+SAM_USBHS_CTRL_OFFSET) +#define SAM_USBHS_SR (SAM_USBHS_BASE+SAM_USBHS_SR_OFFSET) +#define SAM_USBHS_SCR (SAM_USBHS_BASE+SAM_USBHS_SCR_OFFSET) +#define SAM_USBHS_SFR (SAM_USBHS_BASE+SAM_USBHS_SFR_OFFSET) + +/* Register bit-field definitions ***************************************************************************/ + +/* USBHS Device Controller Register Bit Field Definitions */ +/* Device General Control Register */ + +#define USBHS_DEVCTRL_UADD_SHIFT (0) /* Bits 0-6: USBHS Address */ +#define USBHS_DEVCTRL_UADD_MASK (0x7f << USBHS_DEVCTRL_UADD_SHIFT) +# define USBHS_DEVCTRL_UADD(n) ((n) << USBHS_DEVCTRL_UADD_SHIFT) +#define USBHS_DEVCTRL_ADDEN (1 << 7) /* Bit 7: Function Address Enable */ +#define USBHS_DEVCTRL_DETACH (1 << 8) /* Bit 8: Detach Command */ +#define USBHS_DEVCTRL_RMWKUP (1 << 9) /* Bit 9: Send Remote Wake Up */ +#define USBHS_DEVCTRL_SPDCONF_SHIFT (10) /* Bits 10-11: Mode Configuration */ +#define USBHS_DEVCTRL_SPDCONF_MASK (3 << USBHS_DEVCTRL_SPDCONF_SHIFT) +# define USBHS_DEVCTRL_SPDCONF_NORMAL 0 << USBHS_DEVCTRL_SPDCONF_SHIFT) +# define USBHS_DEVCTRL_SPDCONF_LOWPOWER (1 << USBHS_DEVCTRL_SPDCONF_SHIFT) +#define USBHS_DEVCTRL_LS (1 << 12) /* Bit 12: Low-Speed Mode Force */ +#define USBHS_DEVCTRL_TSTJ (1 << 13) /* Bit 13: Test mode J */ +#define USBHS_DEVCTRL_TSTK (1 << 14) /* Bit 14: Test mode K */ +#define USBHS_DEVCTRL_TSTPCKT (1 << 15) /* Bit 15: Test packet mode */ +#define USBHS_DEVCTRL_OPMODE2 (1 << 16) /* Bit 16: Specific Operational mode */ + +/* Device Global Interrupt Status Register + * Device Global Interrupt Clear Register + * Device Global Interrupt Set Register + * Device Global Interrupt Mask Register + * Device Global Interrupt Disable Register + * Device Global Interrupt Enable Register + * + * (1) Not clear or set registers + * (2) Not clear register + */ + +#define USBHS_DEVINT_SUSPD (1 << 0) /* Bit 0: Suspend Interrupt */ +#define USBHS_DEVINT_MSOF (1 << 1) /* Bit 1: Micro Start Of Frame Interrupt */ +#define USBHS_DEVINT_SOF (1 << 2) /* Bit 2: Start Of Frame Interrupt */ +#define USBHS_DEVINT_EORST (1 << 3) /* Bit 3: End Of Reset Interrupt */ +#define USBHS_DEVINT_WAKEUP (1 << 4) /* Bit 4: Wake Up CPU Interrupt */ +#define USBHS_DEVINT_EORSM (1 << 5) /* Bit 5: End Of Resume Interrupt */ +#define USBHS_DEVINT_UPRSM (1 << 6) /* Bit 6: Upstream Resume Interrupt */ +#define USBHS_DEVINT_PEP_SHIFT (12) /* Bits 12-23: Endpoint interrupts (1) */ +#define USBHS_DEVINT_PEP_MASK (0xfff << USBHS_DEVINT_PEP_SHIFT) +# define USBHS_DEVINT_PEP(n) (1 << +((n)+12)) /* Endpoint n Interrupt, n=0-11 (1) */ +# define USBHS_DEVINT_PEP0 (1 << 12) /* Bit 12: Endpoint 0 Interrupt (1) */ +# define USBHS_DEVINT_PEP1 (1 << 13) /* Bit 13: Endpoint 1 Interrupt (1) */ +# define USBHS_DEVINT_PEP2 (1 << 14) /* Bit 14: Endpoint 2 Interrupt (1) */ +# define USBHS_DEVINT_PEP3 (1 << 15) /* Bit 15: Endpoint 3 Interrupt (1) */ +# define USBHS_DEVINT_PEP4 (1 << 16) /* Bit 16: Endpoint 4 Interrupt (1) */ +# define USBHS_DEVINT_PEP5 (1 << 17) /* Bit 17: Endpoint 5 Interrupt (1) */ +# define USBHS_DEVINT_PEP6 (1 << 18) /* Bit 18: Endpoint 6 Interrupt (1) */ +# define USBHS_DEVINT_PEP7 (1 << 19) /* Bit 19: Endpoint 7 Interrupt (1) */ +# define USBHS_DEVINT_PEP8 (1 << 20) /* Bit 20: Endpoint 8 Interrupt (1) */ +# define USBHS_DEVINT_PEP9 (1 << 21) /* Bit 21: Endpoint 9 Interrupt (1) */ +# define USBHS_DEVINT_PEP10 (1 << 22) /* Bit 22: Endpoint 10 Interrupt (1) */ +# define USBHS_DEVINT_PEP11 (1 << 23) /* Bit 23: Endpoint 11 Interrupt (1) */ +#define USBHS_DEVINT_DMA_SHIFT (25) /* Bits 25-31: DMA channel interrupts (2) */ +#define USBHS_DEVINT_DMA_MASK (0x7f << USBHS_DEVINT_DMA_SHIFT) +#define USBHS_DEVINT_DMA(n) (1 << ((n)+24)) /* DMA Channel n Interrupt, n=1-7 (2) */ +# define USBHS_DEVINT_DMA1 (1 << 25) /* Bit 25: DMA Channel 1 Interrupt (2) */ +# define USBHS_DEVINT_DMA2 (1 << 26) /* Bit 26: DMA Channel 2 Interrupt (2) */ +# define USBHS_DEVINT_DMA3 (1 << 27) /* Bit 27: DMA Channel 3 Interrupt (2) */ +# define USBHS_DEVINT_DMA4 (1 << 28) /* Bit 28: DMA Channel 4 Interrupt (2) */ +# define USBHS_DEVINT_DMA5 (1 << 29) /* Bit 29: DMA Channel 5 Interrupt (2) */ +# define USBHS_DEVINT_DMA6 (1 << 30) /* Bit 30: DMA Channel 6 Interrupt (2) */ +# define USBHS_DEVINT_DMA7 (1 << 31) /* Bit 31: DMA Channel 7 Interrupt (2) */ + +#define USBHS_DEVINT_ALL 0xfefff07f + +/* Device Endpoint Register */ + +#define USBHS_DEVEPT_EPEN(n) (1 << ((n))) /* Endpoint n Enable */ +# define USBHS_DEVEPT_EPEN0 (1 << 0) /* Bit 0: Endpoint 0 Enable */ +# define USBHS_DEVEPT_EPEN1 (1 << 1) /* Bit 1: Endpoint 1 Enable */ +# define USBHS_DEVEPT_EPEN2 (1 << 2) /* Bit 2: Endpoint 2 Enable */ +# define USBHS_DEVEPT_EPEN3 (1 << 3) /* Bit 3: Endpoint 3 Enable */ +# define USBHS_DEVEPT_EPEN4 (1 << 4) /* Bit 4: Endpoint 4 Enable */ +# define USBHS_DEVEPT_EPEN5 (1 << 5) /* Bit 5: Endpoint 5 Enable */ +# define USBHS_DEVEPT_EPEN6 (1 << 6) /* Bit 6: Endpoint 6 Enable */ +# define USBHS_DEVEPT_EPEN7 (1 << 7) /* Bit 7: Endpoint 7 Enable */ +# define USBHS_DEVEPT_EPEN8 (1 << 8) /* Bit 8: Endpoint 8 Enable */ +# define USBHS_DEVEPT_EPEN9 (1 << 9) /* Bit 9: Endpoint 9 Enable */ +#define USBHS_DEVEPT_EPRST(n) (1 << ((n)+16)) /* Endpoint n Reset */ +# define USBHS_DEVEPT_EPRST0 (1 << 16) /* Bit 16: Endpoint 0 Reset */ +# define USBHS_DEVEPT_EPRST1 (1 << 17) /* Bit 17: Endpoint 1 Reset */ +# define USBHS_DEVEPT_EPRST2 (1 << 18) /* Bit 18: Endpoint 2 Reset */ +# define USBHS_DEVEPT_EPRST3 (1 << 19) /* Bit 19: Endpoint 3 Reset */ +# define USBHS_DEVEPT_EPRST4 (1 << 20) /* Bit 20: Endpoint 4 Reset */ +# define USBHS_DEVEPT_EPRST5 (1 << 21) /* Bit 21: Endpoint 5 Reset */ +# define USBHS_DEVEPT_EPRST6 (1 << 22) /* Bit 22: Endpoint 6 Reset */ +# define USBHS_DEVEPT_EPRST7 (1 << 23) /* Bit 23: Endpoint 7 Reset */ +# define USBHS_DEVEPT_EPRST8 (1 << 24) /* Bit 24: Endpoint 8 Reset */ +# define USBHS_DEVEPT_EPRST9 (1 << 25) /* Bit 25: Endpoint 9 Reset */ + +/* Device Frame Number Register */ + +#define USBHS_DEVFNUM_MFNUM_SHIFT (0) /* Bits 0-2: Microframe Number */ +#define USBHS_DEVFNUM_MFNUM_MASK (7 << USBHS_DEVFNUM_MFNUM_SHIFT) +#define USBHS_DEVFNUM_FNUM_SHIFT (3) /* Bits 3-13: Frame Number */ +#define USBHS_DEVFNUM_FNUM_MASK (0x7ff << USBHS_DEVFNUM_FNUM_SHIFT) +#define USBHS_DEVFNUM_FNCERR (1 << 15) /* Bit 15: Frame Number CRC Error */ + +/* Device Endpoint Configuration Register */ + +#define USBHS_DEVEPTCFG_ALLOC (1 << 0) /* Bit 0: Endpoint Memory Allocate */ +#define USBHS_DEVEPTCFG_EPBK_SHIFT (2) /* Bits 2-3: Endpoint Banks */ +#define USBHS_DEVEPTCFG_EPBK_MASK (3 << USBHS_DEVEPTCFG_EPBK_SHIFT) +# define USBHS_DEVEPTCFG_EPBK_1BANK (0 << USBHS_DEVEPTCFG_EPBK_SHIFT) /* Single-bank endpoint */ +# define USBHS_DEVEPTCFG_EPBK_2BANK (1 << USBHS_DEVEPTCFG_EPBK_SHIFT) /* Double-bank endpoint */ +# define USBHS_DEVEPTCFG_EPBK_3BANK (2 << USBHS_DEVEPTCFG_EPBK_SHIFT) /* Triple-bank endpoint */ +#define USBHS_DEVEPTCFG_EPSIZE_SHIFT (4) /* Bits 4-6: Endpoint Size */ +#define USBHS_DEVEPTCFG_EPSIZE_MASK (7 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) +# define USBHS_DEVEPTCFG_EPSIZE_8 (0 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 8 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_16 (1 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 16 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_32 (2 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 32 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_64 (3 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 64 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_128 (4 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 128 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_256 (5 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 256 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_512 (6 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 512 bytes */ +# define USBHS_DEVEPTCFG_EPSIZE_1024 (7 << USBHS_DEVEPTCFG_EPSIZE_SHIFT) /* 1024 bytes */ +#define USBHS_DEVEPTCFG_EPDIR_SHIFT (8) /* Bit 8: Endpoint Direction */ +#define USBHS_DEVEPTCFG_EPDIR (1 << 8) /* Bit 8: Endpoint Direction */ +#define USBHS_DEVEPTCFG_AUTOSW (1 << 9) /* Bit 9: Automatic Switch */ +#define USBHS_DEVEPTCFG_EPTYPE_SHIFT (11) /* Bits 11-12: Endpoint Type */ +#define USBHS_DEVEPTCFG_EPTYPE_MASK (3 << USBHS_DEVEPTCFG_EPTYPE_SHIFT) +# define USBHS_DEVEPTCFG_EPTYPE_CTRL (0 << USBHS_DEVEPTCFG_EPTYPE_SHIFT) /* Control endpoint */ +# define USBHS_DEVEPTCFG_EPTYPE_ISO (1 << USBHS_DEVEPTCFG_EPTYPE_SHIFT) /* Isochronous endpoint */ +# define USBHS_DEVEPTCFG_EPTYPE_BLK (2 << USBHS_DEVEPTCFG_EPTYPE_SHIFT) /* Bulk endpoint */ +# define USBHS_DEVEPTCFG_EPTYPE_INTRPT (3 << USBHS_DEVEPTCFG_EPTYPE_SHIFT) /* Interrupt endpoint */ +#define USBHS_DEVEPTCFG_NBTRANS_SHIFT (13) /* Bits 13-14: Number Transaction per uframe */ +#define USBHS_DEVEPTCFG_NBTRANS_MASK (3 << USBHS_DEVEPTCFG_NBTRANS_SHIFT) + +/* Device Endpoint Status Register + * + * (1) Control, Bulk, Interrupt endpoints only + * (2) Isochronous endpoints only + */ + +/* Common Endpoint Interrupt Bit Definitions + * + * Device Endpoint Status Register + * Device Endpoint Clear Register + * Device Endpoint Set Register + * Device Endpoint Mask Register + * Device Endpoint Enable Register + * + * (1) Control, Bulk, Interrupt endpoints + * (2) Isochronous endpoints only + */ + +#define USBHS_DEVEPTINT_TXINI (1 << 0) /* Bit 0: Transmitted IN Data Interrupt */ +#define USBHS_DEVEPTINT_RXOUTI (1 << 1) /* Bit 1: Received OUT Data Interrupt */ +#define USBHS_DEVEPTINT_RXSTPI (1 << 2) /* Bit 2: Received SETUP Interrupt (2) */ +#define USBHS_DEVEPTINT_UNDERFI (1 << 2) /* Bit 2: Underflow Interrupt (3) */ +#define USBHS_DEVEPTINT_NAKOUTI (1 << 3) /* Bit 3: NAKed OUT Interrupt (2) */ +#define USBHS_DEVEPTINT_HBISOINERRI (1 << 3) /* Bit 3: High Bandwidth Isochronous IN Underflow Error Interrupt (3) */ +#define USBHS_DEVEPTINT_NAKINI (1 << 4) /* Bit 4: NAKed IN Interrupt (2) */ +#define USBHS_DEVEPTINT_HBISOFLUSHI (1 << 4) /* Bit 4: High Bandwidth Isochronous IN Flush Interrupt (3) */ +#define USBHS_DEVEPTINT_OVERFI (1 << 5) /* Bit 5: Overflow Interrupt */ +#define USBHS_DEVEPTINT_STALLEDI (1 << 6) /* Bit 6: STALLed Interrupt (2) */ +#define USBHS_DEVEPTINT_CRCERRI (1 << 6) /* Bit 6: CRC Error Interrupt (3) */ +#define USBHS_DEVEPTINT_SHORTPACKETI (1 << 7) /* Bit 7: Short Packet Interrupt */ + +/* Device Endpoint Mask, Device Endpoint Disable, and Device Endpoint Enable Registers only */ + +#define USBHS_DEVEPTINT_MDATAI (1 << 8) /* Bit 8: MData Interrupt (2) */ +#define USBHS_DEVEPTINT_DATAXI (1 << 9) /* Bit 9: DataX Interrupt (2) */ +#define USBHS_DEVEPTINT_ERRORTRANSI (1 << 10) /* Bit 10: Transaction Error Interrupt (2) */ + +/* Device Endpoint Set, Device Endpoint Mask, Device Endpoint Disable, and Device Endpoint Enable Registers only */ + +#define USBHS_DEVEPTINT_NBUSYBKI (1 << 12) /* Bit 12: Number of Busy Banks Interrupt */ + +/* Device Endpoint Mask and Device Endpoint Enable Registers only */ + +#define USBHS_DEVEPTINT_KILLBKI (1 << 13) /* Bit 13: Kill IN Bank */ + +/* Device Endpoint Mask, Device Endpoint Disable, and Device Endpoint Enable Registers only */ + +#define USBHS_DEVEPTINT_FIFOCONI (1 << 14) /* Bit 14: FIFO Control */ +#define USBHS_DEVEPTINT_EPDISHDMAI (1 << 16) /* Bit 16: Endpoint Interrupts Disable HDMA Request */ +#define USBHS_DEVEPTINT_NYETDISI (1 << 17) /* Bit 17: NYET Token Disable (1) */ +#define USBHS_DEVEPTINT_RSTDTI (1 << 18) /* Bit 18: Reset Data Toggle */ +#define USBHS_DEVEPTINT_STALLRQI (1 << 19) /* Bit 19: STALL Request (1) */ + +/* Device Endpoint Status Register only */ + +#define USBHS_DEVEPTISR_DTSEQ_SHIFT (8) /* Bits 8-9: Data Toggle Sequence */ +#define USBHS_DEVEPTISR_DTSEQ_MASK (3 << USBHS_DEVEPTISR_DTSEQ_SHIFT) +# define USBHS_DEVEPTISR_DTSEQ_DATA0 (0 << USBHS_DEVEPTISR_DTSEQ_SHIFT) /* Data0 toggle sequence */ +# define USBHS_DEVEPTISR_DTSEQ_DATA1 (1 << USBHS_DEVEPTISR_DTSEQ_SHIFT) /* Data1 toggle sequence */ +# define USBHS_DEVEPTISR_DTSEQ_DATA2 (2 << USBHS_DEVEPTISR_DTSEQ_SHIFT) /* Data1 toggle sequence (2) */ +# define USBHS_DEVEPTISR_DTSEQ_MDATA (3 << USBHS_DEVEPTISR_DTSEQ_SHIFT) /* MData toggle sequence (2) */ +#define USBHS_DEVEPTISR_ERRORTRANS (1 << 10) /* Bit 10: High-bandwidth Isochronous OUT Endpoint Transaction Error Interrupt (2) */ +#define USBHS_DEVEPTISR_NBUSYBK_SHIFT (12) /* Bits 12-13: Number of Busy Banks */ +#define USBHS_DEVEPTISR_NBUSYBK_MASK (3 << USBHS_DEVEPTISR_NBUSYBK_SHIFT) +# define USBHS_DEVEPTISR_NBUSYBK_0BUSY (0 << USBHS_DEVEPTISR_NBUSYBK_SHIFT) /* 0 busy bank (all banks free) */ +# define USBHS_DEVEPTISR_NBUSYBK_1BUSY (1 << USBHS_DEVEPTISR_NBUSYBK_SHIFT) /* 1 busy bank */ +# define USBHS_DEVEPTISR_NBUSYBK_2BUSY (2 << USBHS_DEVEPTISR_NBUSYBK_SHIFT) /* 2 busy banks */ +# define USBHS_DEVEPTISR_NBUSYBK_3BUSY (3 << USBHS_DEVEPTISR_NBUSYBK_SHIFT) /* 3 busy banks */ +#define USBHS_DEVEPTISR_CURRBK_SHIFT (14) /* Bits 14-15: Current Bank */ +#define USBHS_DEVEPTISR_CURRBK_MASK (3 << USBHS_DEVEPTISR_CURRBK_SHIFT) +# define USBHS_DEVEPTISR_CURRBK_BANK0 (0 << USBHS_DEVEPTISR_CURRBK_SHIFT) /* Current bank is bank0 */ +# define USBHS_DEVEPTISR_CURRBK_BANK1 (1 << USBHS_DEVEPTISR_CURRBK_SHIFT) /* Current bank is bank1 */ +# define USBHS_DEVEPTISR_CURRBK_BANK2 (2 << USBHS_DEVEPTISR_CURRBK_SHIFT) /* Current bank is bank2 */ +#define USBHS_DEVEPTISR_RWALL (1 << 16) /* Bit 16: Read/Write Allowed */ +#define USBHS_DEVEPTISR_CTRLDIR (1 << 17) /* Bit 17: Control Direction (1) */ +# define USBHS_DEVEPTISR_CTRLDIR_OUT (0 << 17) /* 0=Following packet is an OUT packet */ +# define USBHS_DEVEPTISR_CTRLDIR_IN (1 << 17) /* 1=Following packet is an IN packet */ +#define USBHS_DEVEPTISR_CFGOK (1 << 18) /* Bit 18: Configuration OK Status */ +#define USBHS_DEVEPTISR_BYCT_SHIFT (20) /* Bits 20-30: USBHS Byte Count */ +#define USBHS_DEVEPTISR_BYCT_MASK (0x7ff << USBHS_DEVEPTISR_BYCT_SHIFT) + +/* Device DMA Channel Next Descriptor Address Register (32-bit, 16 byte aligned address) */ +/* Device DMA Channel Address Register (32-bit address) */ + +/* Device DMA Channel Control Register */ + +#define USBHS_DEVDMACTRL_CMD_SHIFT (0) /* Bits 0-1: Command */ +#define USBHS_DEVDMACTRL_CMD_MASK (3 << USBHS_DEVDMACTRL_CMD_SHIFT) +# define USBHS_DEVDMACTRL_CHANNENB (1 << 0) /* Bit 0: Channel Enable Command */ +# define USBHS_DEVDMACTRL_LDNXTDSC (1 << 1) /* Bit 1: Load Next Channel Transfer Descriptor Enable Command */ +# define USBHS_DEVDMACTRL_STOPNOW (0 << USBHS_DEVDMACTRL_CMD_SHIFT) /* Stop now */ +# define USBHS_DEVDMACTRL_RUNSTOP (1 << USBHS_DEVDMACTRL_CMD_SHIFT) /* Run and stop at end of buffer */ +# define USBHS_DEVDMACTRL_LOADNEXT (2 << USBHS_DEVDMACTRL_CMD_SHIFT) /* Load next descriptor now */ +# define USBHS_DEVDMACTRL_RUNLINK (3 << USBHS_DEVDMACTRL_CMD_SHIFT) /* Run and link at end of buffer */ +#define USBHS_DEVDMACTRL_ENDTREN (1 << 2) /* Bit 2: End of Transfer Enable Control */ +#define USBHS_DEVDMACTRL_ENDBEN (1 << 3) /* Bit 3: End of Buffer Enable Control */ +#define USBHS_DEVDMACTRL_ENDTRIT (1 << 4) /* Bit 4: End of Transfer Interrupt Enable */ +#define USBHS_DEVDMACTRL_ENDBUFFIT (1 << 5) /* Bit 5: End of Buffer Interrupt Enable */ +#define USBHS_DEVDMACTRL_DESCLDIT (1 << 6) /* Bit 6: Descriptor Loaded Interrupt Enable */ +#define USBHS_DEVDMACTRL_BURSTLCK (1 << 7) /* Bit 7: Burst Lock Enable */ +#define USBHS_DEVDMACTRL_BUFLEN_SHIFT (16) /* Bits 16-31: Buffer Byte Length */ +#define USBHS_DEVDMACTRL_BUFLEN_MASK (0xffff << USBHS_DEVDMACTRL_BUFLEN_SHIFT) +# define USBHS_DEVDMACTRL_BUFLEN(n) ((uint32_t)(n) << USBHS_DEVDMACTRL_BUFLEN_SHIFT) + +/* Device DMA Channel Status Register */ + +#define USBHS_DEVDMASTA_CHANNENB (1 << 0) /* Bit 0: Channel Enable Status */ +#define USBHS_DEVDMASTA_CHANNACT (1 << 1) /* Bit 1: Channel Active Status */ +#define USBHS_DEVDMASTA_ENDTRST (1 << 4) /* Bit 4: End of Transfer Status */ +#define USBHS_DEVDMASTA_ENDBUFFST (1 << 5) /* Bit 5: End of Buffer Status */ +#define USBHS_DEVDMASTA_DESCLDST (1 << 6) /* Bit 6: Descriptor Loaded Status */ +#define USBHS_DEVDMASTA_BUFCNT_SHIFT (16) /* Bits 16-31: Buffer Byte Count */ +#define USBHS_DEVDMASTA_BUFCNT_MASK (0xffff << USBHS_DEVDMASTA_BUFCNT_SHIFT) +# define USBHS_DEVDMASTA_BUFCNT(n) ((uint32_t)(n) << USBHS_DEVDMASTA_BUFCNT_SHIFT) + +/* USBHS Mini-Host Controller Register Bit Field Definitions */ +/* Host General Control Register */ + +#define USBHS_HSTCTRL_SOFE (1 << 8) /* Bit 8: Start of Frame Generation Enable */ +#define USBHS_HSTCTRL_RESET (1 << 9) /* Bit 9: Send USB Reset */ +#define USBHS_HSTCTRL_RESUME (1 << 10) /* Bit 10: Send USB Resume */ +#define USBHS_HSTCTRL_SPDCONF (12) /* Bits 12-13: Mode Configuration */ +#define USBHS_HSTCTRL_MASK (3 << USBHS_HSTCTRL_SPDCONF) +# define USBHS_HSTCTRL_NORMAL (0 << USBHS_HSTCTRL_SPDCONF) +# define USBHS_HSTCTRL_LOWPOWER (1 << USBHS_HSTCTRL_SPDCONF) + +/* Host Global Interrupt Status Register + * Host Global Interrupt Clear Register + * Host Global Interrupt Set Register + * Host Global Interrupt Mask Register + * Host Global Interrupt Disable Register + * Host Global Interrupt Enable Register + * + * (1) Not clear or set registers + * (2) Not clear register + */ + +#define USBHS_HSTINT_DCONNI (1 << 0) /* Bit 0: Device Connection Interrupt */ +#define USBHS_HSTINT_DDISCI (1 << 1) /* Bit 1: Device Disconnection Interrupt */ +#define USBHS_HSTINT_RSTI (1 << 2) /* Bit 2: USB Reset Sent Interrupt */ +#define USBHS_HSTINT_RSMEDI (1 << 3) /* Bit 3: Downstream Resume Sent Interrupt */ +#define USBHS_HSTINT_RXRSMI (1 << 4) /* Bit 4: Upstream Resume Received Interrupt */ +#define USBHS_HSTINT_HSOFI (1 << 5) /* Bit 5: Host Start of Frame Interrupt */ +#define USBHS_HSTINT_HWUPI (1 << 6) /* Bit 6: Host Wake-Up Interrupt */ +#define USBHS_HSTINT_PEP_SHIFT (12) /* Bits 12-23: Pipe interrupts (1) */ +#define USBHS_HSTINT_PEP_MASK (0xfff << USBHS_HSTINT_PEP_SHIFT) +# define USBHS_HSTINT_PEP(n) (1 << +((n)+12)) /* Pipe n Interrupt, n=0-11 (1) */ +# define USBHS_HSTINT_PEP0 (1 << 12) /* Bit 12: Pipe 0 Interrupt (1) */ +# define USBHS_HSTINT_PEP1 (1 << 13) /* Bit 13: Pipe 1 Interrupt (1) */ +# define USBHS_HSTINT_PEP2 (1 << 14) /* Bit 14: Pipe 2 Interrupt (1) */ +# define USBHS_HSTINT_PEP3 (1 << 15) /* Bit 15: Pipe 3 Interrupt (1) */ +# define USBHS_HSTINT_PEP4 (1 << 16) /* Bit 16: Pipe 4 Interrupt (1) */ +# define USBHS_HSTINT_PEP5 (1 << 17) /* Bit 17: Pipe 5 Interrupt (1) */ +# define USBHS_HSTINT_PEP6 (1 << 18) /* Bit 18: Pipe 6 Interrupt (1) */ +# define USBHS_HSTINT_PEP7 (1 << 19) /* Bit 19: Pipe 7 Interrupt (1) */ +# define USBHS_HSTINT_PEP8 (1 << 20) /* Bit 20: Pipe 8 Interrupt (1) */ +# define USBHS_HSTINT_PEP9 (1 << 21) /* Bit 21: Pipe 9 Interrupt (1) */ +# define USBHS_HSTINT_PEP10 (1 << 22) /* Bit 22: Pipe 10 Interrupt (1) */ +# define USBHS_HSTINT_PEP11 (1 << 23) /* Bit 23: Pipe 11 Interrupt (1) */ +#define USBHS_HSTINT_DMA_SHIFT (25) /* Bits 25-31: DMA channel interrupts (2) */ +#define USBHS_HSTINT_DMA_MASK (0x7f << USBHS_HSTINT_DMA_SHIFT) +#define USBHS_HSTINT_DMA(n) (1 << ((n)+24)) /* DMA Channel n Interrupt, n=1-7 (2) */ +# define USBHS_HSTINT_DMA1 (1 << 25) /* Bit 25: DMA Channel 1 Interrupt (2) */ +# define USBHS_HSTINT_DMA2 (1 << 26) /* Bit 26: DMA Channel 2 Interrupt (2) */ +# define USBHS_HSTINT_DMA3 (1 << 27) /* Bit 27: DMA Channel 3 Interrupt (2) */ +# define USBHS_HSTINT_DMA4 (1 << 28) /* Bit 28: DMA Channel 4 Interrupt (2) */ +# define USBHS_HSTINT_DMA5 (1 << 29) /* Bit 29: DMA Channel 5 Interrupt (2) */ +# define USBHS_HSTINT_DMA6 (1 << 30) /* Bit 30: DMA Channel 6 Interrupt (2) */ +# define USBHS_HSTINT_DMA7 (1 << 31) /* Bit 31: DMA Channel 7 Interrupt (2) */ + +/* Host Pipe Register */ + +#define USBHS_HSTPIP_PEN(n) (1 << ((n))) /* Pipe n Enable */ +# define USBHS_HSTPIP_PEN0 (1 << 0) /* Bit 0: Pipe 0 Enable */ +# define USBHS_HSTPIP_PEN1 (1 << 1) /* Bit 1: Pipe 1 Enable */ +# define USBHS_HSTPIP_PEN2 (1 << 2) /* Bit 2: Pipe 2 Enable */ +# define USBHS_HSTPIP_PEN3 (1 << 3) /* Bit 3: Pipe 3 Enable */ +# define USBHS_HSTPIP_PEN4 (1 << 4) /* Bit 4: Pipe 4 Enable */ +# define USBHS_HSTPIP_PEN5 (1 << 5) /* Bit 5: Pipe 5 Enable */ +# define USBHS_HSTPIP_PEN6 (1 << 6) /* Bit 6: Pipe 6 Enable */ +# define USBHS_HSTPIP_PEN7 (1 << 7) /* Bit 7: Pipe 7 Enable */ +# define USBHS_HSTPIP_PEN8 (1 << 8) /* Bit 8: Pipe 8 Enable */ +# define USBHS_HSTPIP_PEN9 (1 << 9) /* Bit 9: Pipe 9 Enable */ +#define USBHS_HSTPIP_PRST(n) (1 << ((n)+16)) /* Pipe n Reset */ +# define USBHS_HSTPIP_PRST0 (1 << 16) /* Bit 16: Pipe 0 Reset */ +# define USBHS_HSTPIP_PRST1 (1 << 17) /* Bit 17: Pipe 1 Reset */ +# define USBHS_HSTPIP_PRST2 (1 << 18) /* Bit 18: Pipe 2 Reset */ +# define USBHS_HSTPIP_PRST3 (1 << 19) /* Bit 19: Pipe 3 Reset */ +# define USBHS_HSTPIP_PRST4 (1 << 20) /* Bit 20: Pipe 4 Reset */ +# define USBHS_HSTPIP_PRST5 (1 << 21) /* Bit 21: Pipe 5 Reset */ +# define USBHS_HSTPIP_PRST6 (1 << 22) /* Bit 22: Pipe 6 Reset */ +# define USBHS_HSTPIP_PRST7 (1 << 23) /* Bit 23: Pipe 7 Reset */ +# define USBHS_HSTPIP_PRST8 (1 << 24) /* Bit 24: Pipe 8 Reset */ +# define USBHS_HSTPIP_PRST9 (1 << 25) /* Bit 25: Pipe 9 Reset */ + +/* Host Frame Number Register */ + +#define USBHS_HSTFNUM_MFNUM_SHIFT (0) /* Bits 0-2: Microframe Number */ +#define USBHS_HSTFNUM_MFNUM_MASK (7 << USBHS_HSTFNUM_MFNUM_SHIFT) +#define USBHS_HSTFNUM_FNUM_SHIFT (3) /* Bits 3-13: Frame Number */ +#define USBHS_HSTFNUM_FNUM_MASK (0x7ff << USBHS_HSTFNUM_FNUM_SHIFT) +#define USBHS_HSTFNUM_FLENHIGH_SHIFT (16) /* Bits 16-23: Frame Length */ +#define USBHS_HSTFNUM_FLENHIGH_MASK (0xff << USBHS_HSTFNUM_FLENHIGH_SHIFT) +# define USBHS_HSTFNUM_FLENHIGH(n) ((uint32_t)(n) << USBHS_HSTFNUM_FLENHIGH_SHIFT) + +/* Host Address 1 Register */ + +#define USBHS_HSTADDR1_HSTADDRP_SHIFT(n) ((n) << 3) /* USB Host Address */ +#define USBHS_HSTADDR1_HSTADDRP_MASK(n) (0x7f << USBHS_HSTADDR1_HSTADDRP_SHIFT(n)) +# define USBHS_HSTADDR1_HSTADDRP0(n,v) ((uint32_t)(v) << USBHS_HSTADDR1_HSTADDRP_SHIFT(n)) + +#define USBHS_HSTADDR1_HSTADDRP0_SHIFT (0) /* Bits 0-6: USB Host Address */ +#define USBHS_HSTADDR1_HSTADDRP0_MASK (0x7f << USBHS_HSTADDR1_HSTADDRP0_SHIFT) +# define USBHS_HSTADDR1_HSTADDRP0(n) (0x7f << USBHS_HSTADDR1_HSTADDRP0_SHIFT) +#define USBHS_HSTADDR1_HSTADDRP1_SHIFT (8) /* Bits 8-14: USB Host Address */ +#define USBHS_HSTADDR1_HSTADDRP1_MASK (0x7f << USBHS_HSTADDR1_HSTADDRP1_SHIFT) +# define USBHS_HSTADDR1_HSTADDRP1(n) ((uint32_t)(n) << USBHS_HSTADDR1_HSTADDRP1_SHIFT) +#define USBHS_HSTADDR1_HSTADDRP2_SHIFT (16) /* Bits 16-22: USB Host Address */ +#define USBHS_HSTADDR1_HSTADDRP2_MASK (0x7f << USBHS_HSTADDR1_HSTADDRP2_SHIFT) +# define USBHS_HSTADDR1_HSTADDRP2(n) ((uint32_t)(n) << USBHS_HSTADDR1_HSTADDRP2_SHIFT) +#define USBHS_HSTADDR1_HSTADDRP3_SHIFT (24) /* Bits 24-30: USB Host Address */ +#define USBHS_HSTADDR1_HSTADDRP3_MASK (0x7f << USBHS_HSTADDR1_HSTADDRP3_SHIFT) +# define USBHS_HSTADDR1_HSTADDRP3(n) ((uint32_t)(n) << USBHS_HSTADDR1_HSTADDRP3_SHIFT) + +/* Host Address 2 Register */ + +#define USBHS_HSTADDR2_HSTADDRP_SHIFT(n) (((n)-4) << 3) /* USB Host Address */ +#define USBHS_HSTADDR2_HSTADDRP_MASK(n) (0x7f << USBHS_HSTADDR2_HSTADDRP_SHIFT(n)) +# define USBHS_HSTADDR2_HSTADDRP0(n,v) ((uint32_t)(v) << USBHS_HSTADDR2_HSTADDRP_SHIFT(n)) + +#define USBHS_HSTADDR2_HSTADDRP4_SHIFT (0) /* Bits 0-6: USB Host Address */ +#define USBHS_HSTADDR2_HSTADDRP4_MASK (0x7f << USBHS_HSTADDR2_HSTADDRP4_SHIFT) +# define USBHS_HSTADDR2_HSTADDRP4(n) (0x7f << USBHS_HSTADDR2_HSTADDRP4_SHIFT) +#define USBHS_HSTADDR2_HSTADDRP5_SHIFT (8) /* Bits 8-14: USB Host Address */ +#define USBHS_HSTADDR2_HSTADDRP5_MASK (0x7f << USBHS_HSTADDR2_HSTADDRP5_SHIFT) +# define USBHS_HSTADDR2_HSTADDRP5(n) ((uint32_t)(n) << USBHS_HSTADDR2_HSTADDRP5_SHIFT) +#define USBHS_HSTADDR2_HSTADDRP6_SHIFT (16) /* Bits 16-22: USB Host Address */ +#define USBHS_HSTADDR2_HSTADDRP6_MASK (0x7f << USBHS_HSTADDR2_HSTADDRP6_SHIFT) +# define USBHS_HSTADDR2_HSTADDRP6(n) ((uint32_t)(n) << USBHS_HSTADDR2_HSTADDRP6_SHIFT) +#define USBHS_HSTADDR2_HSTADDRP7_SHIFT (24) /* Bits 24-30: USB Host Address */ +#define USBHS_HSTADDR2_HSTADDRP7_MASK (0x7f << USBHS_HSTADDR2_HSTADDRP7_SHIFT) +# define USBHS_HSTADDR2_HSTADDRP7(n) ((uint32_t)(n) << USBHS_HSTADDR2_HSTADDRP7_SHIFT) + +/* Host Address 3 Register */ + +#define USBHS_HSTADDR3_HSTADDRP_SHIFT(n) (((n)-8) << 3) /* USB Host Address */ +#define USBHS_HSTADDR3_HSTADDRP_MASK(n) (0x7f << USBHS_HSTADDR3_HSTADDRP_SHIFT(n)) +# define USBHS_HSTADDR3_HSTADDRP0(n,v) ((uint32_t)(v) << USBHS_HSTADDR3_HSTADDRP_SHIFT(n)) + +#define USBHS_HSTADDR3_HSTADDRP8_SHIFT (0) /* Bits 0-6: USB Host Address */ +#define USBHS_HSTADDR3_HSTADDRP8_MASK (0x7f << USBHS_HSTADDR3_HSTADDRP8_SHIFT) +# define USBHS_HSTADDR3_HSTADDRP8(n) (0x7f << USBHS_HSTADDR3_HSTADDRP8_SHIFT) +#define USBHS_HSTADDR3_HSTADDRP9_SHIFT (8) /* Bits 8-14: USB Host Address */ +#define USBHS_HSTADDR3_HSTADDRP9_MASK (0x7f << USBHS_HSTADDR3_HSTADDRP9_SHIFT) +# define USBHS_HSTADDR3_HSTADDRP9(n) ((uint32_t)(n) << USBHS_HSTADDR3_HSTADDRP9_SHIFT) + +/* Host Pipe Configuration Register + * + * (1) Not for High-Speed Bulk OUT + * (2) For High-Speed Bulk Out + */ + +#define USBHS_HSTPIPCFG_ALLOC (1 << 0) /* Bit 0: Pipe Memory Allocate */ +#define USBHS_HSTPIPCFG_PBK_SHIFT (2) /* Bits 2-3: Pipe Banks */ +#define USBHS_HSTPIPCFG_PBK_MASK (3 << USBHS_HSTPIPCFG_PBK_SHIFT) +# define USBHS_HSTPIPCFG_PBK_1BANK (0 << USBHS_HSTPIPCFG_PBK_SHIFT) /* Single-bank pipe */ +# define USBHS_HSTPIPCFG_PBK_2BANK (1 << USBHS_HSTPIPCFG_PBK_SHIFT) /* Double-bank pipe */ +# define USBHS_HSTPIPCFG_PBK_3BANK (2 << USBHS_HSTPIPCFG_PBK_SHIFT) /* Triple-bank pipe */ +#define USBHS_HSTPIPCFG_PSIZE_SHIFT (4) /* Bits 4-6: Pipe Size */ +#define USBHS_HSTPIPCFG_PSIZE_MASK (7 << USBHS_HSTPIPCFG_PSIZE_SHIFT) +# define USBHS_HSTPIPCFG_PSIZE_8 (0 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 8 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_16 (1 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 16 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_32 (2 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 32 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_64 (3 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 64 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_128 (4 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 128 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_256 (5 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 256 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_512 (6 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 512 bytes */ +# define USBHS_HSTPIPCFG_PSIZE_1024 (7 << USBHS_HSTPIPCFG_PSIZE_SHIFT) /* 1024 bytes */ +#define USBHS_HSTPIPCFG_PTOKEN_SHIFT (8) /* Bits 8-9: Pipe Token */ +#define USBHS_HSTPIPCFG_PTOKEN_MASK (3 << USBHS_HSTPIPCFG_PTOKEN_SHIFT) +# define USBHS_HSTPIPCFG_PTOKEN_SETUP (0 << USBHS_HSTPIPCFG_PTOKEN_SHIFT) +# define USBHS_HSTPIPCFG_PTOKEN_IN (1 << USBHS_HSTPIPCFG_PTOKEN_SHIFT) +# define USBHS_HSTPIPCFG_PTOKEN_OUT (2 << USBHS_HSTPIPCFG_PTOKEN_SHIFT) +#define USBHS_HSTPIPCFG_AUTOSW (1 << 10) /* Bit 10: Automatic Switch */ +#define USBHS_HSTPIPCFG_PTYPE_SHIFT (12) /* Bits 12-13: Pipe Type */ +#define USBHS_HSTPIPCFG_PTYPE_MASK (3 << USBHS_HSTPIPCFG_PTYPE_SHIFT) +# define USBHS_HSTPIPCFG_PTYPE_CTRL (0 << USBHS_HSTPIPCFG_PTYPE_SHIFT) /* Control pipe */ +# define USBHS_HSTPIPCFG_PTYPE_ISO (1 << USBHS_HSTPIPCFG_PTYPE_SHIFT) /* Isochronous pipe */ +# define USBHS_HSTPIPCFG_PTYPE_BLK (2 << USBHS_HSTPIPCFG_PTYPE_SHIFT) /* Bulk pipe */ +# define USBHS_HSTPIPCFG_PTYPE_INTRPT (3 << USBHS_HSTPIPCFG_PTYPE_SHIFT) /* Interrupt pipe */ +#define USBHS_HSTPIPCFG_PEPNUM_SHIFT (16) /* Bits 16-19: Pipe Endpoint Number */ +#define USBHS_HSTPIPCFG_PEPNUM_MASK (15 << USBHS_HSTPIPCFG_PEPNUM_SHIFT) +# define USBHS_HSTPIPCFG_PEPNUM(n) ((uint32_t)(n) << USBHS_HSTPIPCFG_PEPNUM_SHIFT) +#define USBHS_HSTPIPCFG_PINGEN (1 << 20) /* Bit 20: Ping Enable (2) */ +#define USBHS_HSTPIPCFG_INTFRQ_SHIFT (24) /* Bits 24-31: Pipe Interrupt Request Frequency (1) */ +#define USBHS_HSTPIPCFG_INTFRQ_MASK (0xff << USBHS_HSTPIPCFG_INTFRQ_SHIFT) +# define USBHS_HSTPIPCFG_INTFRQ(n) ((uint32_t)(n) << USBHS_HSTPIPCFG_INTFRQ_SHIFT) +#define USBHS_HSTPIPCFG_BINTERVAL_SHIFT (24) /* Bits 24-31: Binterval Parameter for the Bulk-Out/Ping Transaction (2) */ +#define USBHS_HSTPIPCFG_BINTERVAL_MASK (0xff << USBHS_HSTPIPCFG_BINTERVAL_SHIFT) +# define USBHS_HSTPIPCFG_BINTERVAL(n) ((uint32_t)(n) << USBHS_HSTPIPCFG_BINTERVAL_SHIFT) + +/* Common Pipe Interrupt Bit Definitions: + * + * Host Pipe Status Register + * Host Pipe Clear Register + * Host Pipe Set Register + * Host Pipe Mask Register + * Host Pipe Enable Register + * Host Pipe Disable Register + * + * (1) Control and bulk pipes + * (2) Interrupt pipes + * (3) Isochronous pipes + */ + + /* All registers */ + +#define USBHS_HSTPIPINT_RXINI (1 << 0) /* Bit 0: Received IN Data Interrupt */ +#define USBHS_HSTPIPINT_TXOUTI (1 << 1) /* Bit 1: Transmitted OUT Data Interrupt */ +#define USBHS_HSTPIPINT_TXSTPI (1 << 2) /* Bit 2: Transmitted SETUP Interrupt (1) */ +#define USBHS_HSTPIPINT_UNDERFI (1 << 2) /* Bit 2: Underflow Interrupt (2,3) */ +#define USBHS_HSTPIPINT_PERRI (1 << 3) /* Bit 3: Pipe Error Interrupt */ +#define USBHS_HSTPIPINT_NAKEDI (1 << 4) /* Bit 4: NAKed Interrupt */ +#define USBHS_HSTPIPINT_OVERFI (1 << 5) /* Bit 5: Overflow Interrupt */ +#define USBHS_HSTPIPINT_RXSTALLDI (1 << 6) /* Bit 6: Received STALLed Interrupt (1,2) */ +#define USBHS_HSTPIPINT_CRCERRI (1 << 6) /* Bit 6: CRC Error Interrupt (3) */ +#define USBHS_HSTPIPINT_SHORTPACKETI (1 << 7) /* Bit 7: Short Packet Interrupt */ + +/* Host Pipe Set, Host Pipe Mask and Host Pipe Disable Registers only */ + +#define USBHS_HSTPIPINT_NBUSYBKI (1 << 12) /* Bit 12: Number of Busy Banks Interrupt Enable */ + +/* Host Pipe Mask and Host Pipe Disable Registers only */ + +#define USBHS_HSTPIPINT_FIFOCONI (1 << 14) /* Bit 14: FIFO Control */ +#define USBHS_HSTPIPINT_PDISHDMAI (1 << 16) /* Bit 16: Pipe Interrupts Disable HDMA Request Enable */ +#define USBHS_HSTPIPINT_PFREEZEI (1 << 17) /* Bit 17: Pipe Freeze */ +#define USBHS_HSTPIPINT_RSTDTI (1 << 18) /* Bit 18: Reset Data Toggle */ + +/* Host Pipe Status Register only */ + +#define USBHS_HSTPIPISR_DTSEQ_SHIFT (8) /* Bits 8-9: Data Toggle Sequence */ +#define USBHS_HSTPIPISR_DTSEQ_MASK (3 << USBHS_HSTPIPISR_DTSEQ_SHIFT) +# define USBHS_HSTPIPISR_DTSEQ_DATA0 (0 << USBHS_HSTPIPISR_DTSEQ_SHIFT) /* Data0 toggle sequence */ +# define USBHS_HSTPIPISR_DTSEQ_DATA1 (1 << USBHS_HSTPIPISR_DTSEQ_SHIFT) /* Data1 toggle sequence */ +#define USBHS_HSTPIPISR_NBUSYBK_SHIFT (12) /* Bits 12-13: Number of Busy Banks */ +#define USBHS_HSTPIPISR_NBUSYBK_MASK (3 << USBHS_HSTPIPISR_NBUSYBK_SHIFT) +# define USBHS_HSTPIPISR_NBUSYBK_0BUSY (0 << USBHS_HSTPIPISR_NBUSYBK_SHIFT) /* 0 busy bank (all banks free) */ +# define USBHS_HSTPIPISR_NBUSYBK_1BUSY (1 << USBHS_HSTPIPISR_NBUSYBK_SHIFT) /* 1 busy bank */ +# define USBHS_HSTPIPISR_NBUSYBK_2BUSY (2 << USBHS_HSTPIPISR_NBUSYBK_SHIFT) /* 2 busy banks */ +# define USBHS_HSTPIPISR_NBUSYBK_3BUSY (3 << USBHS_HSTPIPISR_NBUSYBK_SHIFT) /* 3 busy banks */ +#define USBHS_HSTPIPISR_CURRBK_SHIFT (14) /* Bits 14-15: Current Bank */ +#define USBHS_HSTPIPISR_CURRBK_MASK (3 << USBHS_HSTPIPISR_CURRBK_SHIFT) +# define USBHS_HSTPIPISR_CURRBK_BANK0 (0 << USBHS_HSTPIPISR_CURRBK_SHIFT) /* Current bank is bank0 */ +# define USBHS_HSTPIPISR_CURRBK_BANK1 (1 << USBHS_HSTPIPISR_CURRBK_SHIFT) /* Current bank is bank1 */ +# define USBHS_HSTPIPISR_CURRBK_BANK2 (2 << USBHS_HSTPIPISR_CURRBK_SHIFT) /* Current bank is bank2 */ +#define USBHS_HSTPIPISR_RWALL (1 << 16) /* Bit 16: Read/Write Allowed */ +#define USBHS_HSTPIPISR_CFGOK (1 << 18) /* Bit 18: Configuration OK Status */ +#define USBHS_HSTPIPISR_PBYCT_SHIFT (20) /* Bits 20-30: Pipe Byte Count */ +#define USBHS_HSTPIPISR_PBYCT_MASK (0x7ff << USBHS_HSTPIPISR_PBYCT_SHIFT) + +/* Host Pipe IN Request Register */ + +#define USBHS_HSTPIPINRQ_INRQ_SHIFT (0) /* Bits 0-7: IN Request Number before Freeze */ +#define USBHS_HSTPIPINRQ_INRQ_MASK (0xff << USBHS_HSTPIPINRQ_INRQ_SHIFT) +# define USBHS_HSTPIPINRQ_INRQ(n) ((uint32_t)(n) << USBHS_HSTPIPINRQ_INRQ_SHIFT) +#define USBHS_HSTPIPINRQ_INMODE (1 << 8) /* Bit 8: IN Request Mode */ + +/* Host Pipe Error Register */ + +#define USBHS_HSTPIPERR_DATATGL (1 << 0) /* Bit 0: Data Toggle Error */ +#define USBHS_HSTPIPERR_DATAPID (1 << 1) /* Bit 1: Data PID Error */ +#define USBHS_HSTPIPERR_PID (1 << 2) /* Bit 2: PID Error */ +#define USBHS_HSTPIPERR_TIMEOUT (1 << 3) /* Bit 3: Time-Out Error */ +#define USBHS_HSTPIPERR_CRC16 (1 << 4) /* Bit 4: CRC16 Error */ +#define USBHS_HSTPIPERR_COUNTER_SHIFT (5) /* Bits 5-6: Error Counter */ +#define USBHS_HSTPIPERR_COUNTER_MASK (3 << USBHS_HSTPIPERR_COUNTER_SHIFT) +# define USBHS_HSTPIPERR_COUNTER(n) ((uint32_t)(n) << USBHS_HSTPIPERR_COUNTER_SHIFT) + +/* Host DMA Channel Next Descriptor Address Register (32-bit address) */ +/* Host DMA Channel Address Register (32-bit address) */ + +/* Host DMA Channel Control Register */ +#define USBHS_HSTDMACTRL_ + +#define USBHS_HSTDMACTRL_CMD_SHIFT (0) /* Bits 0-1: Command */ +#define USBHS_HSTDMACTRL_CMD_MASK (3 << USBHS_HSTDMACTRL_CMD_SHIFT) +# define USBHS_HSTDMACTRL_CHANNENB (1 << 0) /* Bit 0: Channel Enable Command */ +# define USBHS_HSTDMACTRL_LDNXTDSC (1 << 1) /* Bit 1: Load Next Channel Transfer Descriptor Enable Command */ +# define USBHS_HSTDMACTRL_STOPNOW (0 << USBHS_HSTDMACTRL_CMD_SHIFT) /* Stop now */ +# define USBHS_HSTDMACTRL_RUNSTOP (1 << USBHS_HSTDMACTRL_CMD_SHIFT) /* Run and stop at end of buffer */ +# define USBHS_HSTDMACTRL_LOADNEXT (2 << USBHS_HSTDMACTRL_CMD_SHIFT) /* Load next descriptor now */ +# define USBHS_HSTDMACTRL_RUNLINK (3 << USBHS_HSTDMACTRL_CMD_SHIFT) /* Run and link at end of buffer */ +#define USBHS_HSTDMACTRL_ENDTREN (1 << 2) /* Bit 2: End of Transfer Enable Control */ +#define USBHS_HSTDMACTRL_ENDBEN (1 << 3) /* Bit 3: End of Buffer Enable Control */ +#define USBHS_HSTDMACTRL_ENDTRIT (1 << 4) /* Bit 4: End of Transfer Interrupt Enable */ +#define USBHS_HSTDMACTRL_ENDBUFFIT (1 << 5) /* Bit 5: End of Buffer Interrupt Enable */ +#define USBHS_HSTDMACTRL_DESCLDIT (1 << 6) /* Bit 6: Descriptor Loaded Interrupt Enable */ +#define USBHS_HSTDMACTRL_BURSTLCK (1 << 7) /* Bit 7: Burst Lock Enable */ +#define USBHS_HSTDMACTRL_BUFLEN_SHIFT (16) /* Bits 16-31: Buffer Byte Length */ +#define USBHS_HSTDMACTRL_BUFLEN_MASK (0xffff << USBHS_HSTDMACTRL_BUFLEN_SHIFT) +# define USBHS_HSTDMACTRL_BUFLEN(n) ((uint32_t)(n) << USBHS_HSTDMACTRL_BUFLEN_SHIFT) + +/* Host DMA Channel Status Register */ + +#define USBHS_HSTDMASTA_CHANNENB (1 << 0) /* Bit 0: Channel Enable Status */ +#define USBHS_HSTDMASTA_CHANNACT (1 << 1) /* Bit 1: Channel Active Status */ +#define USBHS_HSTDMASTA_ENDTRST (1 << 4) /* Bit 4: End of Transfer Status */ +#define USBHS_HSTDMASTA_ENDBUFFST (1 << 5) /* Bit 5: End of Buffer Status */ +#define USBHS_HSTDMASTA_DESCLDST (1 << 6) /* Bit 6: Descriptor Loaded Status */ +#define USBHS_HSTDMASTA_BUFCNT_SHIFT (16) /* Bits 16-31: Buffer Byte Count */ +# define USBHS_HSTDMASTA_BUFCNT(n) ((uint32_t)(n) << USBHS_HSTDMASTA_BUFCNT_SHIFT) + +/* USBHS General Register Bit Field Definitions */ +/* General Control Register */ + +#define USBHS_CTRL_RDERRE (1 << 4) /* Bit 4: Remote Device Connection Error Interrupt Enable */ +#define USBHS_CTRL_FRZCLK (1 << 14) /* Bit 14: Freeze USB Clock */ +#define USBHS_CTRL_USBE (1 << 15) /* Bit 15: USBHS Enable */ +#define USBHS_CTRL_UIMOD (1 << 25) /* Bit 25: USBHS Mode */ + +/* General Status Register */ + +#define USBHS_SR_RDERRI (1 << 4) /* Bit 4: Remote Device Connection Error Interrupt (host mode) */ +#define USBHS_SR_SPEED_SHIFT (12) /* Bits 12-13: Speed Status (device mode) */ +#define USBHS_SR_SPEED_MASK (3 << USBHS_SR_SPEED_SHIFT) + +#define USBHS_SR_SPEED_FULL (0 << USBHS_SR_SPEED_SHIFT) /* Full-Speed mode */ +#define USBHS_SR_SPEED_HIGH (1 << USBHS_SR_SPEED_SHIFT) /* High-Speed mode */ +#define USBHS_SR_SPEED_LOW (2 << USBHS_SR_SPEED_SHIFT) /* Low-Speed mode */ +#define USBHS_SR_CLKUSABLE (1 << 14) /* Bit 14: UTMI Clock Usable */ + +/* General Status Clear Register */ + +#define USBHS_SCR_RDERRIC (1 << 4) /* Bit 4: Remote Device Connection Error Interrupt Clear */ + +/* General Status Set Register */ + +#define USBHS_SFR_RDERRIS (1 << 4) /* Bit 4: Remote Device Connection Error Interrupt Set */ + +/************************************************************************************************************ + * Public Types + ************************************************************************************************************/ + +/* This structure defines the USBHS DMA Transfer Descriptor. Instances of DMA transfer + * descriptors must by aligned to 16-byte address boundaries. + * + * Each value contains the next value of each of three USBHS DMA registers. The first + * register value (USBHS_xxxDMANXTDSCx) is a link that can be used to chain sequences of + * DMA transfers. + */ + +struct usbhs_dtd_s +{ + uint32_t nxtd; /* Next Descriptor Address Register: USBHS_xxxDMANXTDSCx */ + uint32_t addr; /* DMA Channelx Address Register: USBHS_xxxDMAADDRESSx */ + uint32_t ctrl; /* DMA Channelx Control Register: USBHS_xxxDMACONTROLx */ +}; +#define SIZEOF_USPHS_DTD_S 12 + +/************************************************************************************************************ + * Public Data + ************************************************************************************************************/ + +/************************************************************************************************************ + * Public Functions + ************************************************************************************************************/ + +#endif /* __ARCH_ARM_SRC_SAMV7_CHIP_SAM_USBHS_H */