/******************************************************************************
*
* Copyright (C) 2016 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/
/****************************************************************************/
/**
*
* @file xusbpsu_hw.h
* @addtogroup usbpsu_v1_0
* @{
*
* <pre>
*
* MODIFICATION HISTORY:
*
* Ver   Who    Date     Changes
* ----- -----  -------- -----------------------------------------------------
* 1.0   sg    06/06/16 First release
*
* </pre>
*
*****************************************************************************/

#ifndef XUSBPSU_HW_H	/* Prevent circular inclusions */
#define XUSBPSU_HW_H	/* by using protection macros  */

#ifdef __cplusplus
extern "C" {
#endif

/***************************** Include Files ********************************/

/************************** Constant Definitions ****************************/

/**@name Register offsets
 *
 * The following constants provide access to each of the registers of the
 * USBPSU device.
 * @{
 */

/**/
#define XUSBPSU_PORTSC_30						0x430
#define XUSBPSU_PORTMSC_30						0x434

/* XUSBPSU registers memory space boundries */
#define XUSBPSU_GLOBALS_REGS_START              0xc100
#define XUSBPSU_GLOBALS_REGS_END                0xc6ff
#define XUSBPSU_DEVICE_REGS_START               0xc700
#define XUSBPSU_DEVICE_REGS_END                 0xcbff
#define XUSBPSU_OTG_REGS_START                  0xcc00
#define XUSBPSU_OTG_REGS_END                    0xccff

/* Global Registers */
#define XUSBPSU_GSBUSCFG0                       0xc100
#define XUSBPSU_GSBUSCFG1                       0xc104
#define XUSBPSU_GTXTHRCFG                       0xc108
#define XUSBPSU_GRXTHRCFG                       0xc10c
#define XUSBPSU_GCTL                            0xc110
#define XUSBPSU_GEVTEN                          0xc114
#define XUSBPSU_GSTS                            0xc118
#define XUSBPSU_GSNPSID                         0xc120
#define XUSBPSU_GGPIO                           0xc124
#define XUSBPSU_GUID                            0xc128
#define XUSBPSU_GUCTL                           0xc12c
#define XUSBPSU_GBUSERRADDR0                    0xc130
#define XUSBPSU_GBUSERRADDR1                    0xc134
#define XUSBPSU_GPRTBIMAP0                      0xc138
#define XUSBPSU_GPRTBIMAP1                      0xc13c
#define XUSBPSU_GHWPARAMS0_OFFSET               0xc140U
#define XUSBPSU_GHWPARAMS1_OFFSET               0xc144U
#define XUSBPSU_GHWPARAMS2_OFFSET               0xc148U
#define XUSBPSU_GHWPARAMS3_OFFSET               0xc14cU
#define XUSBPSU_GHWPARAMS4_OFFSET               0xc150U
#define XUSBPSU_GHWPARAMS5_OFFSET               0xc154U
#define XUSBPSU_GHWPARAMS6_OFFSET               0xc158U
#define XUSBPSU_GHWPARAMS7_OFFSET               0xc15cU
#define XUSBPSU_GDBGFIFOSPACE                   0xc160
#define XUSBPSU_GDBGLTSSM                       0xc164
#define XUSBPSU_GPRTBIMAP_HS0                   0xc180
#define XUSBPSU_GPRTBIMAP_HS1                   0xc184
#define XUSBPSU_GPRTBIMAP_FS0                   0xc188
#define XUSBPSU_GPRTBIMAP_FS1                   0xc18c

#define XUSBPSU_GUSB2PHYCFG(n)                  ((u32)0xc200 + ((u32)(n) * (u32)0x04))
#define XUSBPSU_GUSB2I2CCTL(n)                  ((u32)0xc240 + ((u32)(n) * (u32)0x04))

#define XUSBPSU_GUSB2PHYACC(n)                  ((u32)0xc280 + ((u32)(n) * (u32)0x04))

#define XUSBPSU_GUSB3PIPECTL(n)                 ((u32)0xc2c0 + ((u32)(n) * (u32)0x04))

#define XUSBPSU_GTXFIFOSIZ(n)                   ((u32)0xc300 + ((u32)(n) * (u32)0x04))
#define XUSBPSU_GRXFIFOSIZ(n)                   ((u32)0xc380 + ((u32)(n) * (u32)0x04))

#define XUSBPSU_GEVNTADRLO(n)                   ((u32)0xc400 + ((u32)(n) * (u32)0x10))
#define XUSBPSU_GEVNTADRHI(n)                   ((u32)0xc404 + ((u32)(n) * (u32)0x10))
#define XUSBPSU_GEVNTSIZ(n)                     ((u32)0xc408 + ((u32)(n) * (u32)0x10))
#define XUSBPSU_GEVNTCOUNT(n)                   ((u32)0xc40c + ((u32)(n) * (u32)0x10))

#define XUSBPSU_GHWPARAMS8                      0x0000c600U

/* Device Registers */
#define XUSBPSU_DCFG                            0x0000c700U
#define XUSBPSU_DCTL                            0x0000c704U
#define XUSBPSU_DEVTEN                          0x0000c708U
#define XUSBPSU_DSTS                            0x0000c70cU
#define XUSBPSU_DGCMDPAR                        0x0000c710U
#define XUSBPSU_DGCMD                           0x0000c714U
#define XUSBPSU_DALEPENA                        0x0000c720U
#define XUSBPSU_DEPCMDPAR2(n)                   ((u32)0xc800 + ((u32)n * (u32)0x10))
#define XUSBPSU_DEPCMDPAR1(n)                   ((u32)0xc804 + ((u32)n * (u32)0x10))
#define XUSBPSU_DEPCMDPAR0(n)                   ((u32)0xc808 + ((u32)n * (u32)0x10))
#define XUSBPSU_DEPCMD(n)                       ((u32)0xc80c + ((u32)n * (u32)0x10))

/* OTG Registers */
#define XUSBPSU_OCFG                            0x0000cc00U
#define XUSBPSU_OCTL                            0x0000cc04U
#define XUSBPSU_OEVT                            0xcc08U
#define XUSBPSU_OEVTEN                          0xcc0CU
#define XUSBPSU_OSTS                            0xcc10U

/* Bit fields */

/* Global Configuration Register */
#define XUSBPSU_GCTL_PWRDNSCALE(n)              ((n) << 19)
#define XUSBPSU_GCTL_U2RSTECN                   (1 << 16)
#define XUSBPSU_GCTL_RAMCLKSEL(x)       (((x) & XUSBPSU_GCTL_CLK_MASK) << 6)
#define XUSBPSU_GCTL_CLK_BUS                    (0U)
#define XUSBPSU_GCTL_CLK_PIPE                   (1U)
#define XUSBPSU_GCTL_CLK_PIPEHALF               (2U)
#define XUSBPSU_GCTL_CLK_MASK                   (3U)

#define XUSBPSU_GCTL_PRTCAP(n)                  (((n) & (3 << 12)) >> 12)
#define XUSBPSU_GCTL_PRTCAPDIR(n)               ((n) << 12)
#define XUSBPSU_GCTL_PRTCAP_HOST                1U
#define XUSBPSU_GCTL_PRTCAP_DEVICE              2U
#define XUSBPSU_GCTL_PRTCAP_OTG                 3U

#define XUSBPSU_GCTL_CORESOFTRESET              (0x00000001U << 11)
#define XUSBPSU_GCTL_SOFITPSYNC                 (0x00000001U << 10)
#define XUSBPSU_GCTL_SCALEDOWN(n)               ((u32)(n) << 4)
#define XUSBPSU_GCTL_SCALEDOWN_MASK             XUSBPSU_GCTL_SCALEDOWN(3)
#define XUSBPSU_GCTL_DISSCRAMBLE                (0x00000001U << 3)
#define XUSBPSU_GCTL_U2EXIT_LFPS                (0x00000001U << 2)
#define XUSBPSU_GCTL_GBLHIBERNATIONEN           (0x00000001U << 1)
#define XUSBPSU_GCTL_DSBLCLKGTNG                (0x00000001U << 0)

/* Global Status Register Device Interrupt Mask */
#define XUSBPSU_GSTS_DEVICE_IP_MASK 			0x00000040

/* Global USB2 PHY Configuration Register */
#define XUSBPSU_GUSB2PHYCFG_PHYSOFTRST          (0x00000001U << 31)
#define XUSBPSU_GUSB2PHYCFG_SUSPHY              (0x00000001U << 6)

/* Global USB3 PIPE Control Register */
#define XUSBPSU_GUSB3PIPECTL_PHYSOFTRST         (0x00000001U << 31)
#define XUSBPSU_GUSB3PIPECTL_SUSPHY             (0x00000001U << 17)

/* Global TX Fifo Size Register */
#define XUSBPSU_GTXFIFOSIZ_TXFDEF(n)            ((u32)(n) & (u32)0xffffU)
#define XUSBPSU_GTXFIFOSIZ_TXFSTADDR(n)         ((u32)(n) & 0xffff0000U)

/* Global Event Size Registers */
#define XUSBPSU_GEVNTSIZ_INTMASK                ((u32)0x00000001U << 31U)
#define XUSBPSU_GEVNTSIZ_SIZE(n)                ((u32)(n) & (u32)0xffffU)

/* Global HWPARAMS1 Register */
#define XUSBPSU_GHWPARAMS1_EN_PWROPT(n)         (((u32)(n) & ((u32)3 << 24)) >> 24)
#define XUSBPSU_GHWPARAMS1_EN_PWROPT_NO         0U
#define XUSBPSU_GHWPARAMS1_EN_PWROPT_CLK        1U
#define XUSBPSU_GHWPARAMS1_EN_PWROPT_HIB        2U
#define XUSBPSU_GHWPARAMS1_PWROPT(n)            ((u32)(n) << 24)
#define XUSBPSU_GHWPARAMS1_PWROPT_MASK          XUSBPSU_GHWPARAMS1_PWROPT(3)

/* Global HWPARAMS4 Register */
#define XUSBPSU_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((u32)(n) & ((u32)0x0f << 13)) >> 13)
#define XUSBPSU_MAX_HIBER_SCRATCHBUFS           15U

/* Device Configuration Register */
#define XUSBPSU_DCFG_DEVADDR(addr)              ((u32)(addr) << 3)
#define XUSBPSU_DCFG_DEVADDR_MASK               XUSBPSU_DCFG_DEVADDR(0x7f)

#define XUSBPSU_DCFG_SPEED_MASK					7U
#define XUSBPSU_DCFG_SUPERSPEED					4U
#define XUSBPSU_DCFG_HIGHSPEED					0U
#define XUSBPSU_DCFG_FULLSPEED2					1U
#define XUSBPSU_DCFG_LOWSPEED					2U
#define XUSBPSU_DCFG_FULLSPEED1					3U

#define XUSBPSU_DCFG_LPM_CAP                    (0x00000001U << 22U)

/* Device Control Register */
#define XUSBPSU_DCTL_RUN_STOP                   (0x00000001U << 31U)
#define XUSBPSU_DCTL_CSFTRST                    ((u32)0x00000001U << 30U)
#define XUSBPSU_DCTL_LSFTRST                    (0x00000001U << 29U)

#define XUSBPSU_DCTL_HIRD_THRES_MASK            (0x0000001fU << 24U)
#define XUSBPSU_DCTL_HIRD_THRES(n)              ((u32)(n) << 24)

#define XUSBPSU_DCTL_APPL1RES                   (0x00000001U << 23)

/* These apply for core versions 1.87a and earlier */
#define XUSBPSU_DCTL_TRGTULST_MASK              (0x0000000fU << 17)
#define XUSBPSU_DCTL_TRGTULST(n)                ((u32)(n) << 17)
#define XUSBPSU_DCTL_TRGTULST_U2                (XUSBPSU_DCTL_TRGTULST(2))
#define XUSBPSU_DCTL_TRGTULST_U3                (XUSBPSU_DCTL_TRGTULST(3))
#define XUSBPSU_DCTL_TRGTULST_SS_DIS            (XUSBPSU_DCTL_TRGTULST(4))
#define XUSBPSU_DCTL_TRGTULST_RX_DET            (XUSBPSU_DCTL_TRGTULST(5))
#define XUSBPSU_DCTL_TRGTULST_SS_INACT          (XUSBPSU_DCTL_TRGTULST(6))

/* These apply for core versions 1.94a and later */
#define XUSBPSU_DCTL_KEEP_CONNECT               (0x00000001U << 19)
#define XUSBPSU_DCTL_L1_HIBER_EN                (0x00000001U << 18)
#define XUSBPSU_DCTL_CRS                        (0x00000001U << 17)
#define XUSBPSU_DCTL_CSS                        (0x00000001U << 16)

#define XUSBPSU_DCTL_INITU2ENA                  (0x00000001U << 12)
#define XUSBPSU_DCTL_ACCEPTU2ENA                (0x00000001U << 11)
#define XUSBPSU_DCTL_INITU1ENA                  (0x00000001U << 10)
#define XUSBPSU_DCTL_ACCEPTU1ENA                (0x00000001U << 9)
#define XUSBPSU_DCTL_TSTCTRL_MASK               (0x0000000fU << 1)

#define XUSBPSU_DCTL_ULSTCHNGREQ_MASK           (0x0000000fU << 5)
#define XUSBPSU_DCTL_ULSTCHNGREQ(n) (((u32)(n) << 5) & XUSBPSU_DCTL_ULSTCHNGREQ_MASK)

#define XUSBPSU_DCTL_ULSTCHNG_NO_ACTION         (XUSBPSU_DCTL_ULSTCHNGREQ(0))
#define XUSBPSU_DCTL_ULSTCHNG_SS_DISABLED       (XUSBPSU_DCTL_ULSTCHNGREQ(4))
#define XUSBPSU_DCTL_ULSTCHNG_RX_DETECT         (XUSBPSU_DCTL_ULSTCHNGREQ(5))
#define XUSBPSU_DCTL_ULSTCHNG_SS_INACTIVE       (XUSBPSU_DCTL_ULSTCHNGREQ(6))
#define XUSBPSU_DCTL_ULSTCHNG_RECOVERY          (XUSBPSU_DCTL_ULSTCHNGREQ(8))
#define XUSBPSU_DCTL_ULSTCHNG_COMPLIANCE        (XUSBPSU_DCTL_ULSTCHNGREQ(10))
#define XUSBPSU_DCTL_ULSTCHNG_LOOPBACK          (XUSBPSU_DCTL_ULSTCHNGREQ(11))

/* Device Event Enable Register */
#define XUSBPSU_DEVTEN_VNDRDEVTSTRCVEDEN        ((u32)0x00000001 << 12)
#define XUSBPSU_DEVTEN_EVNTOVERFLOWEN           ((u32)0x00000001 << 11)
#define XUSBPSU_DEVTEN_CMDCMPLTEN               ((u32)0x00000001 << 10)
#define XUSBPSU_DEVTEN_ERRTICERREN              ((u32)0x00000001 << 9)
#define XUSBPSU_DEVTEN_SOFEN                    ((u32)0x00000001 << 7)
#define XUSBPSU_DEVTEN_EOPFEN                   ((u32)0x00000001 << 6)
#define XUSBPSU_DEVTEN_HIBERNATIONREQEVTEN      ((u32)0x00000001 << 5)
#define XUSBPSU_DEVTEN_WKUPEVTEN                ((u32)0x00000001 << 4)
#define XUSBPSU_DEVTEN_ULSTCNGEN                ((u32)0x00000001 << 3)
#define XUSBPSU_DEVTEN_CONNECTDONEEN            ((u32)0x00000001 << 2)
#define XUSBPSU_DEVTEN_USBRSTEN                 ((u32)0x00000001 << 1)
#define XUSBPSU_DEVTEN_DISCONNEVTEN             ((u32)0x00000001 << 0)

/* Device Status Register */
#define XUSBPSU_DSTS_DCNRD                      (0x00000001U << 29)

/* This applies for core versions 1.87a and earlier */
#define XUSBPSU_DSTS_PWRUPREQ                   (0x00000001U << 24)

/* These apply for core versions 1.94a and later */
#define XUSBPSU_DSTS_RSS                        (0x00000001U << 25)
#define XUSBPSU_DSTS_SSS                        (0x00000001U << 24)

#define XUSBPSU_DSTS_COREIDLE                   (0x00000001U << 23)
#define XUSBPSU_DSTS_DEVCTRLHLT                 (0x00000001U << 22)

#define XUSBPSU_DSTS_USBLNKST_MASK              (0x0000000fU << 18)
#define XUSBPSU_DSTS_USBLNKST(n) (((u32)(n) & XUSBPSU_DSTS_USBLNKST_MASK) >> 18)

#define XUSBPSU_DSTS_RXFIFOEMPTY                (0x00000001U << 17)

#define XUSBPSU_DSTS_SOFFN_MASK                 (0x00003fffU << 3)
#define XUSBPSU_DSTS_SOFFN(n)           (((u32)(n) & XUSBPSU_DSTS_SOFFN_MASK) >> 3)

#define XUSBPSU_DSTS_CONNECTSPD                 (0x00000007U << 0)

#define XUSBPSU_DSTS_SUPERSPEED                 (4U << 0)
#define XUSBPSU_DSTS_HIGHSPEED                  (0U << 0)
#define XUSBPSU_DSTS_FULLSPEED2                 (1U << 0)
#define XUSBPSU_DSTS_LOWSPEED                   (2U << 0)
#define XUSBPSU_DSTS_FULLSPEED1                 (3U << 0)

/*Portpmsc 3.0 bit field*/
#define XUSBPSU_PORTMSC_30_FLA_MASK				(1U << 16)
#define XUSBPSU_PORTMSC_30_U2_TIMEOUT_MASK		(0xffU << 8)
#define XUSBPSU_PORTMSC_30_U2_TIMEOUT_SHIFT		(8U)
#define XUSBPSU_PORTMSC_30_U1_TIMEOUT_MASK		(0xffU << 0)
#define XUSBPSU_PORTMSC_30_U1_TIMEOUT_SHIFT		(0U)


/*@}*/

/**************************** Type Definitions *******************************/

/***************** Macros (Inline Functions) Definitions *********************/

/*****************************************************************************/
/**
*
* Read a register of the USBPS8 device. This macro provides register
* access to all registers using the register offsets defined above.
*
* @param	InstancePtr is a pointer to the XUsbPsu instance.
* @param	Offset is the offset of the register to read.
*
* @return	The contents of the register.
*
* @note		C-style Signature:
*		u32 XUsbPsu_ReadReg(struct XUsbPsu *InstancePtr, u32 Offset);
*
******************************************************************************/
#define XUsbPsu_ReadReg(InstancePtr, Offset) \
	Xil_In32((InstancePtr)->ConfigPtr->BaseAddress + (u32)(Offset))

/*****************************************************************************/
/**
*
* Write a register of the USBPS8 device. This macro provides
* register access to all registers using the register offsets defined above.
*
* @param	InstancePtr is a pointer to the XUsbPsu instance.
* @param	RegOffset is the offset of the register to write.
* @param	Data is the value to write to the register.
*
* @return	None.
*
* @note 	C-style Signature:
*		void XUsbPsu_WriteReg(struct XUsbPsu *InstancePtr,
*								u32 Offset,u32 Data)
*
******************************************************************************/
#define XUsbPsu_WriteReg(InstancePtr, Offset, Data) \
	Xil_Out32((InstancePtr)->ConfigPtr->BaseAddress + (u32)(Offset), (u32)(Data))

/************************** Function Prototypes ******************************/

#ifdef __cplusplus
}
#endif

#endif  /* End of protection macro. */
/** @} */
