/*
 * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef SMM_MPS3_H
#define SMM_MPS3_H

#include "peripheral_memmap.h"      /* Peripheral memory map definitions. */

#include "RTE_Components.h"

#if defined ( __CC_ARM   )
#pragma anon_unions
#endif

/******************************************************************************/
/*                          FPGA System Register declaration                  */
/******************************************************************************/

typedef struct
{
  __IO uint32_t LED;             /* Offset: 0x000 (R/W)  LED connections
                                  *                         [31:2] : Reserved
                                  *                          [1:0] : LEDs
                                  */
       uint32_t RESERVED1[1];
  __IO uint32_t BUTTON;          /* Offset: 0x008 (R/W)  Buttons
                                  *                         [31:2] : Reserved
                                  *                          [1:0] : Buttons
                                  */
       uint32_t RESERVED2[1];
  __IO uint32_t CLK1HZ;          /* Offset: 0x010 (R/W)  1Hz up counter    */
  __IO uint32_t CLK100HZ;        /* Offset: 0x014 (R/W)  100Hz up counter  */
  __IO uint32_t COUNTER;         /* Offset: 0x018 (R/W)  Cycle Up Counter
                                  *                         Increments when 32-bit prescale counter reach zero
                                  */
  __IO uint32_t PRESCALE;        /* Offset: 0x01C (R/W)  Prescaler
                                  *                         Bit[31:0] : reload value for prescale counter
                                  */
  __IO uint32_t PSCNTR;          /* Offset: 0x020 (R/W)  32-bit Prescale counter
                                  *                         current value of the pre-scaler counter
                                  *                         The Cycle Up Counter increment when the prescale down counter reach 0
                                  *                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
                                  */
       uint32_t RESERVED3[1];
  __IO uint32_t SWITCHES;        /* Offset: 0x028 (R/W)  Switches
                                  *                         [31:8] : Reserved
                                  *                          [7:0] : Switches
                                  */
       uint32_t RESERVED4[8];
  __IO uint32_t MISC;            /* Offset: 0x04C (R/W)  Misc control
                                  *                         [31:10] : Reserved
                                  *                            [9] :
                                  *                            [8] :
                                  *                            [7] : ADC_SPI_nCS
                                  *                            [6] : CLCD_BL_CTRL
                                  *                            [5] : CLCD_RD
                                  *                            [4] : CLCD_RS
                                  *                            [3] : CLCD_RESET
                                  *                            [2] : SHIELD_1_SPI_nCS
                                  *                            [1] : SHIELD_0_SPI_nCS
                                  *                            [0] : CLCD_CS
                                  */
} MPS3_FPGAIO_TypeDef;

/* MISC register bit definitions. */

#define CLCD_CS_Pos        0
#define CLCD_CS_Msk        (1UL<<CLCD_CS_Pos)
#define SHIELD_0_nCS_Pos   1
#define SHIELD_0_nCS_Msk   (1UL<<SHIELD_0_nCS_Pos)
#define SHIELD_1_nCS_Pos   2
#define SHIELD_1_nCS_Msk   (1UL<<SHIELD_1_nCS_Pos)
#define CLCD_RESET_Pos     3
#define CLCD_RESET_Msk     (1UL<<CLCD_RESET_Pos)
#define CLCD_RS_Pos        4
#define CLCD_RS_Msk        (1UL<<CLCD_RS_Pos)
#define CLCD_RD_Pos        5
#define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
#define CLCD_BL_Pos        6
#define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
#define ADC_nCS_Pos        7
#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)

/******************************************************************************/
/*                        SCC Register declaration                            */
/******************************************************************************/

typedef struct
{
  __IO uint32_t CFG_REG0;        /* Offset: 0x000 (R/W)  Remaps block RAM to ZBT
                                  *                         [31:1] : Reserved
                                  *                            [0] 1 : REMAP BlockRam to ZBT
                                  */
  __IO uint32_t LEDS;            /* Offset: 0x004 (R/W)  Controls the MCC user LEDs
                                  *                         [31:8] : Reserved
                                  *                          [7:0] : MCC LEDs
                                  */
       uint32_t RESERVED0[1];
  __I  uint32_t SWITCHES;        /* Offset: 0x00C (R/ )  Denotes the state of the MCC user switches
                                  *                         [31:8] : Reserved
                                  *                          [7:0] : These bits indicate state of the MCC switches
                                  */
  __I  uint32_t CFG_REG4;        /* Offset: 0x010 (R/ )  Denotes the board revision
                                  *                         [31:4] : Reserved
                                  *                          [3:0] : Used by the MCC to pass PCB revision. 0 = A 1 = B
                                  */
  __I  uint32_t CFG_ACLK;        /* Offset: 0x014 (R/ )  System Clock
                                  */
       uint32_t RESERVED1[34];
  __IO uint32_t SYS_CFGDATA_RTN; /* Offset: 0x0A0 (R/W)  User data register
                                  *                         [31:0] : Data
                                  */
  __IO uint32_t SYS_CFGDATA_OUT; /* Offset: 0x0A4 (R/W)  User data register
                                  *                         [31:0] : Data
                                  */
  __IO uint32_t SYS_CFGCTRL;     /* Offset: 0x0A8 (R/W)  Control register
                                  *                           [31] : Start (generates interrupt on write to this bit)
                                  *                           [30] : R/W access
                                  *                        [29:26] : Reserved
                                  *                        [25:20] : Function value
                                  *                        [19:12] : Reserved
                                  *                         [11:0] : Device (value of 0/1/2 for supported clocks)
                                  */
  __IO uint32_t SYS_CFGSTAT;     /* Offset: 0x0AC (R/W)  Contains status information
                                  *                         [31:2] : Reserved
                                  *                            [1] : Error
                                  *                            [0] : Complete
                                  */
  __IO uint32_t RESERVED2[20];
  __IO uint32_t SCC_DLL;         /* Offset: 0x100 (R/W)  DLL Lock Register
                                  *                        [31:24] : DLL LOCK MASK[7:0] - Indicate if the DLL locked is masked
                                  *                        [23:16] : DLL LOCK MASK[7:0] - Indicate if the DLLs are locked or unlocked
                                  *                         [15:1] : Reserved
                                  *                            [0] : This bit indicates if all enabled DLLs are locked
                                  */
       uint32_t RESERVED3[957];
  __I  uint32_t SCC_AID;         /* Offset: 0xFF8 (R/ )  SCC AID Register
                                  *                        [31:24] : FPGA build number
                                  *                        [23:20] : V2M-MPS3 target board revision (A = 0, B = 1)
                                  *                        [19:11] : Reserved
                                  *                           [10] : if “1” SCC_SW register has been implemented
                                  *                            [9] : if “1” SCC_LED register has been implemented
                                  *                            [8] : if “1” DLL lock register has been implemented
                                  *                          [7:0] : number of SCC configuration register
                                  */
  __I  uint32_t SCC_ID;          /* Offset: 0xFFC (R/ )  Contains information about the FPGA image
                                  *                        [31:24] : Implementer ID: 0x41 = ARM
                                  *                        [23:20] : Application note IP variant number
                                  *                        [19:16] : IP Architecture: 0x4 =AHB
                                  *                         [15:4] : Primary part number: 386 = AN386
                                  *                          [3:0] : Application note IP revision number
                                  */
} MPS3_SCC_TypeDef;


/******************************************************************************/
/*                        SSP Peripheral declaration                          */
/******************************************************************************/

typedef struct
{
  __IO uint32_t CR0;             /* Offset: 0x000 (R/W)  Control register 0
                                  *                        [31:16] : Reserved
                                  *                         [15:8] : Serial clock rate
                                  *                            [7] : SSPCLKOUT phase,    applicable to Motorola SPI frame format only
                                  *                            [6] : SSPCLKOUT polarity, applicable to Motorola SPI frame format only
                                  *                          [5:4] : Frame format
                                  *                          [3:0] : Data Size Select
                                  */
  __IO uint32_t CR1;             /* Offset: 0x004 (R/W)  Control register 1
                                  *                         [31:4] : Reserved
                                  *                            [3] : Slave-mode output disable
                                  *                            [2] : Master or slave mode select
                                  *                            [1] : Synchronous serial port enable
                                  *                            [0] : Loop back mode
                                  */
  __IO uint32_t DR;              /* Offset: 0x008 (R/W)  Data register
                                  *                        [31:16] : Reserved
                                  *                         [15:0] : Transmit/Receive FIFO
                                  */
  __I  uint32_t SR;              /* Offset: 0x00C (R/ )  Status register
                                  *                         [31:5] : Reserved
                                  *                            [4] : PrimeCell SSP busy flag
                                  *                            [3] : Receive FIFO full
                                  *                            [2] : Receive FIFO not empty
                                  *                            [1] : Transmit FIFO not full
                                  *                            [0] : Transmit FIFO empty
                                  */
  __IO uint32_t CPSR;            /* Offset: 0x010 (R/W)  Clock prescale register
                                  *                         [31:8] : Reserved
                                  *                          [8:0] : Clock prescale divisor
                                  */
  __IO uint32_t IMSC;            /* Offset: 0x014 (R/W)  Interrupt mask set or clear register
                                  *                         [31:4] : Reserved
                                  *                            [3] : Transmit FIFO interrupt mask
                                  *                            [2] : Receive FIFO interrupt mask
                                  *                            [1] : Receive timeout interrupt mask
                                  *                            [0] : Receive overrun interrupt mask
                                  */
  __I  uint32_t RIS;             /* Offset: 0x018 (R/ )  Raw interrupt status register
                                  *                         [31:4] : Reserved
                                  *                            [3] : raw interrupt state, prior to masking, of the SSPTXINTR interrupt
                                  *                            [2] : raw interrupt state, prior to masking, of the SSPRXINTR interrupt
                                  *                            [1] : raw interrupt state, prior to masking, of the SSPRTINTR interrupt
                                  *                            [0] : raw interrupt state, prior to masking, of the SSPRORINTR interrupt
                                  */
  __I  uint32_t MIS;             /* Offset: 0x01C (R/ )  Masked interrupt status register
                                  *                         [31:4] : Reserved
                                  *                            [3] : transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt
                                  *                            [2] : receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt
                                  *                            [1] : receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt
                                  *                            [0] : receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt
                                  */
  __O  uint32_t ICR;             /* Offset: 0x020 ( /W)  Interrupt clear register
                                  *                         [31:2] : Reserved
                                  *                            [1] : Clears the SSPRTINTR interrupt
                                  *                            [0] : Clears the SSPRORINTR interrupt
                                  */
  __IO uint32_t DMACR;           /* Offset: 0x024 (R/W)  DMA control register
                                  *                         [31:2] : Reserved
                                  *                            [1] : Transmit DMA Enable
                                  *                            [0] : Receive DMA Enable
                                  */
} MPS3_SSP_TypeDef;


/* SSP_CR0 Control register 0. */
#define SSP_CR0_DSS_Pos         0           /* Data Size Select.    */
#define SSP_CR0_DSS_Msk         (0xF<<SSP_CR0_DSS_Pos)
#define SSP_CR0_FRF_Pos         4           /* Frame Format Select. */
#define SSP_CR0_FRF_Msk         (3UL<<SSP_CR0_FRM_Pos)
#define SSP_CR0_SPO_Pos         6           /* SSPCLKOUT polarity.  */
#define SSP_CR0_SPO_Msk         (1UL<<SSP_CR0_SPO_Pos)
#define SSP_CR0_SPH_Pos         7           /* SSPCLKOUT phase.     */
#define SSP_CR0_SPH_Msk         (1UL<<SSP_CR0_SPH_Pos)
#define SSP_CR0_SCR_Pos         8           /* Serial Clock Rate (divide). */
#define SSP_CR0_SCR_Msk         (0xFF<<SSP_CR0_SCR_Pos)

#define SSP_CR0_SCR_DFLT        0x0300      /* Serial Clock Rate (divide), default set at 3. */
#define SSP_CR0_FRF_MOT         0x0000      /* Frame format.                                 */
#define SSP_CR0_DSS_8           0x0007      /* Data packet size, 8bits.                      */
#define SSP_CR0_DSS_16          0x000F      /* Data packet size, 16bits.                     */

/* SSP_CR1 Control register 1. */
#define SSP_CR1_LBM_Pos         0           /* Loop Back Mode. */
#define SSP_CR1_LBM_Msk         (1UL<<SSP_CR1_LBM_Pos)
#define SSP_CR1_SSE_Pos         1           /* Serial port enable. */
#define SSP_CR1_SSE_Msk         (1UL<<SSP_CR1_SSE_Pos)
#define SSP_CR1_MS_Pos          2           /* Master or Slave mode. */
#define SSP_CR1_MS_Msk          (1UL<<SSP_CR1_MS_Pos)
#define SSP_CR1_SOD_Pos         3           /* Slave Output mode Disable. */
#define SSP_CR1_SOD_Msk         (1UL<<SSP_CR1_SOD_Pos)

/* SSP_SR Status register. */
#define SSP_SR_TFE_Pos          0           /* Transmit FIFO empty. */
#define SSP_SR_TFE_Msk          (1UL<<SSP_SR_TFE_Pos)
#define SSP_SR_TNF_Pos          1           /* Transmit FIFO not full. */
#define SSP_SR_TNF_Msk          (1UL<<SSP_SR_TNF_Pos)
#define SSP_SR_RNE_Pos          2           /* Receive  FIFO not empty. */
#define SSP_SR_RNE_Msk          (1UL<<SSP_SR_RNE_Pos)
#define SSP_SR_RFF_Pos          3           /* Receive  FIFO full. */
#define SSP_SR_RFF_Msk          (1UL<<SSP_SR_RFF_Pos)
#define SSP_SR_BSY_Pos          4           /* Busy. */
#define SSP_SR_BSY_Msk          (1UL<<SSP_SR_BSY_Pos)

/* SSP_CPSR Clock prescale register. */
#define SSP_CPSR_CPD_Pos        0           /* Clock prescale divisor. */
#define SSP_CPSR_CPD_Msk        (0xFF<<SSP_CPSR_CDP_Pos)

#define SSP_CPSR_DFLT        0x0008      /* Clock prescale (use with SCR), default set at 8. */

/* SSPIMSC Interrupt mask set and clear register. */
#define SSP_IMSC_RORIM_Pos         0           /* Receive overrun not Masked. */
#define SSP_IMSC_RORIM_Msk         (1UL<<SSP_IMSC_RORIM_Pos)
#define SSP_IMSC_RTIM_Pos          1           /* Receive timeout not Masked. */
#define SSP_IMSC_RTIM_Msk          (1UL<<SSP_IMSC_RTIM_Pos)
#define SSP_IMSC_RXIM_Pos          2           /* Receive  FIFO not Masked.   */
#define SSP_IMSC_RXIM_Msk          (1UL<<SSP_IMSC_RXIM_Pos)
#define SSP_IMSC_TXIM_Pos          3           /* Transmit FIFO not Masked.   */
#define SSP_IMSC_TXIM_Msk          (1UL<<SSP_IMSC_TXIM_Pos)

/* SSPRIS Raw interrupt status register. */
#define SSP_RIS_RORRIS_Pos         0           /* Raw Overrun  interrupt flag. */
#define SSP_RIS_RORRIS_Msk         (1UL<<SSP_RIS_RORRIS_Pos)
#define SSP_RIS_RTRIS_Pos          1           /* Raw Timemout interrupt flag. */
#define SSP_RIS_RTRIS_Msk          (1UL<<SSP_RIS_RTRIS_Pos)
#define SSP_RIS_RXRIS_Pos          2           /* Raw Receive  interrupt flag. */
#define SSP_RIS_RXRIS_Msk          (1UL<<SSP_RIS_RXRIS_Pos)
#define SSP_RIS_TXRIS_Pos          3           /* Raw Transmit interrupt flag. */
#define SSP_RIS_TXRIS_Msk          (1UL<<SSP_RIS_TXRIS_Pos)

/* SSPMIS Masked interrupt status register. */
#define SSP_MIS_RORMIS_Pos         0           /* Masked Overrun  interrupt flag. */
#define SSP_MIS_RORMIS_Msk         (1UL<<SSP_MIS_RORMIS_Pos)
#define SSP_MIS_RTMIS_Pos          1           /* Masked Timemout interrupt flag. */
#define SSP_MIS_RTMIS_Msk          (1UL<<SSP_MIS_RTMIS_Pos)
#define SSP_MIS_RXMIS_Pos          2           /* Masked Receive  interrupt flag. */
#define SSP_MIS_RXMIS_Msk          (1UL<<SSP_MIS_RXMIS_Pos)
#define SSP_MIS_TXMIS_Pos          3           /* Masked Transmit interrupt flag. */
#define SSP_MIS_TXMIS_Msk          (1UL<<SSP_MIS_TXMIS_Pos)

/* SSPICR Interrupt clear register. */
#define SSP_ICR_RORIC_Pos           0           /* Clears Overrun  interrupt flag. */
#define SSP_ICR_RORIC_Msk           (1UL<<SSP_ICR_RORIC_Pos)
#define SSP_ICR_RTIC_Pos            1           /* Clears Timemout interrupt flag. */
#define SSP_ICR_RTIC_Msk            (1UL<<SSP_ICR_RTIC_Pos)

/* SSPDMACR DMA control register. */
#define SSP_DMACR_RXDMAE_Pos        0           /* Enable Receive  FIFO DMA. */
#define SSP_DMACR_RXDMAE_Msk        (1UL<<SSP_DMACR_RXDMAE_Pos)
#define SSP_DMACR_TXDMAE_Pos        1           /* Enable Transmit FIFO DMA. */
#define SSP_DMACR_TXDMAE_Msk        (1UL<<SSP_DMACR_TXDMAE_Pos)

/******************************************************************************/
/*               Audio and Touch Screen (I2C) Peripheral declaration          */
/******************************************************************************/

typedef struct
{
  union {
  __O   uint32_t  CONTROLS;     /* Offset: 0x000 CONTROL Set Register     ( /W). */
  __I   uint32_t  CONTROL;      /* Offset: 0x000 CONTROL Status Register  (R/ ). */
  };
  __O    uint32_t  CONTROLC;     /* Offset: 0x004 CONTROL Clear Register  ( /W). */
} MPS3_I2C_TypeDef;

#define SDA                1 << 1
#define SCL                1 << 0


/******************************************************************************/
/*               Audio I2S Peripheral declaration                             */
/******************************************************************************/

typedef struct
{
  /*!< Offset: 0x000 CONTROL Register    (R/W) */
  __IO   uint32_t  CONTROL;  /* <h> CONTROL </h>
                              *   <o.0> TX Enable
                              *     <0=> TX disabled
                              *     <1=> TX enabled
                              *   <o.1> TX IRQ Enable
                              *     <0=> TX IRQ disabled
                              *     <1=> TX IRQ enabled
                              *   <o.2> RX Enable
                              *     <0=> RX disabled
                              *     <1=> RX enabled
                              *   <o.3> RX IRQ Enable
                              *     <0=> RX IRQ disabled
                              *     <1=> RX IRQ enabled
                              *   <o.10..8> TX Buffer Water Level
                              *     <0=> / IRQ triggers when any space available
                              *     <1=> / IRQ triggers when more than 1 space available
                              *     <2=> / IRQ triggers when more than 2 space available
                              *     <3=> / IRQ triggers when more than 3 space available
                              *     <4=> Undefined!
                              *     <5=> Undefined!
                              *     <6=> Undefined!
                              *     <7=> Undefined!
                              *   <o.14..12> RX Buffer Water Level
                              *     <0=> Undefined!
                              *     <1=> / IRQ triggers when less than 1 space available
                              *     <2=> / IRQ triggers when less than 2 space available
                              *     <3=> / IRQ triggers when less than 3 space available
                              *     <4=> / IRQ triggers when less than 4 space available
                              *     <5=> Undefined!
                              *     <6=> Undefined!
                              *     <7=> Undefined!
                              *   <o.16> FIFO reset
                              *     <0=> Normal operation
                              *     <1=> FIFO reset
                              *   <o.17> Audio Codec reset
                              *     <0=> Normal operation
                              *     <1=> Assert audio Codec reset
                              */
  /*!< Offset: 0x004 STATUS Register     (R/ ) */
  __I    uint32_t  STATUS;   /* <h> STATUS </h>
                              *   <o.0> TX Buffer alert
                              *     <0=> TX buffer don't need service yet
                              *     <1=> TX buffer need service
                              *   <o.1> RX Buffer alert
                              *     <0=> RX buffer don't need service yet
                              *     <1=> RX buffer need service
                              *   <o.2> TX Buffer Empty
                              *     <0=> TX buffer have data
                              *     <1=> TX buffer empty
                              *   <o.3> TX Buffer Full
                              *     <0=> TX buffer not full
                              *     <1=> TX buffer full
                              *   <o.4> RX Buffer Empty
                              *     <0=> RX buffer have data
                              *     <1=> RX buffer empty
                              *   <o.5> RX Buffer Full
                              *     <0=> RX buffer not full
                              *     <1=> RX buffer full
                              */
  union {
   /*!< Offset: 0x008 Error Status Register (R/ ) */
    __I    uint32_t  ERROR;  /* <h> ERROR </h>
                              *   <o.0> TX error
                              *     <0=> Okay
                              *     <1=> TX overrun/underrun
                              *   <o.1> RX error
                              *     <0=> Okay
                              *     <1=> RX overrun/underrun
                              */
   /*!< Offset: 0x008 Error Clear Register  ( /W) */
    __O    uint32_t  ERRORCLR; /* <h> ERRORCLR </h>
                                *   <o.0> TX error
                                *     <0=> Okay
                                *     <1=> Clear TX error
                                *   <o.1> RX error
                                *     <0=> Okay
                                *     <1=> Clear RX error
                                */
    };
   /*!< Offset: 0x00C Divide ratio Register (R/W) */
  __IO   uint32_t  DIVIDE;  /* <h> Divide ratio for Left/Right clock </h>
                             *   <o.9..0> TX error (default 0x80)
                             */
   /*!< Offset: 0x010 Transmit Buffer       ( /W) */
  __O    uint32_t  TXBUF;  /* <h> Transmit buffer </h>
                            *   <o.15..0> Right channel
                            *   <o.31..16> Left channel
                            */

   /*!< Offset: 0x014 Receive Buffer        (R/ ) */
  __I    uint32_t  RXBUF;  /* <h> Receive buffer </h>
                            *   <o.15..0> Right channel
                            *   <o.31..16> Left channel
                            */
         uint32_t  RESERVED1[186];
  __IO uint32_t ITCR;        /* <h> Integration Test Control Register </h>
                              *   <o.0> ITEN
                              *     <0=> Normal operation
                              *     <1=> Integration Test mode enable
                              */
  __O  uint32_t ITIP1;       /* <h> Integration Test Input Register 1</h>
                              *   <o.0> SDIN
                              */
  __O  uint32_t ITOP1;       /* <h> Integration Test Output Register 1</h>
                              *   <o.0> SDOUT
                              *   <o.1> SCLK
                              *   <o.2> LRCK
                              *   <o.3> IRQOUT
                              */
} MPS3_I2S_TypeDef;

#define I2S_CONTROL_TXEN_Pos        0
#define I2S_CONTROL_TXEN_Msk        (1UL<<I2S_CONTROL_TXEN_Pos)

#define I2S_CONTROL_TXIRQEN_Pos     1
#define I2S_CONTROL_TXIRQEN_Msk     (1UL<<I2S_CONTROL_TXIRQEN_Pos)

#define I2S_CONTROL_RXEN_Pos        2
#define I2S_CONTROL_RXEN_Msk        (1UL<<I2S_CONTROL_RXEN_Pos)

#define I2S_CONTROL_RXIRQEN_Pos     3
#define I2S_CONTROL_RXIRQEN_Msk     (1UL<<I2S_CONTROL_RXIRQEN_Pos)

#define I2S_CONTROL_TXWLVL_Pos      8
#define I2S_CONTROL_TXWLVL_Msk      (7UL<<I2S_CONTROL_TXWLVL_Pos)

#define I2S_CONTROL_RXWLVL_Pos      12
#define I2S_CONTROL_RXWLVL_Msk      (7UL<<I2S_CONTROL_RXWLVL_Pos)
/* FIFO reset. */
#define I2S_CONTROL_FIFORST_Pos     16
#define I2S_CONTROL_FIFORST_Msk     (1UL<<I2S_CONTROL_FIFORST_Pos)
/* Codec reset. */
#define I2S_CONTROL_CODECRST_Pos    17
#define I2S_CONTROL_CODECRST_Msk    (1UL<<I2S_CONTROL_CODECRST_Pos)

#define I2S_STATUS_TXIRQ_Pos        0
#define I2S_STATUS_TXIRQ_Msk        (1UL<<I2S_STATUS_TXIRQ_Pos)

#define I2S_STATUS_RXIRQ_Pos        1
#define I2S_STATUS_RXIRQ_Msk        (1UL<<I2S_STATUS_RXIRQ_Pos)

#define I2S_STATUS_TXEmpty_Pos      2
#define I2S_STATUS_TXEmpty_Msk      (1UL<<I2S_STATUS_TXEmpty_Pos)

#define I2S_STATUS_TXFull_Pos       3
#define I2S_STATUS_TXFull_Msk       (1UL<<I2S_STATUS_TXFull_Pos)

#define I2S_STATUS_RXEmpty_Pos      4
#define I2S_STATUS_RXEmpty_Msk      (1UL<<I2S_STATUS_RXEmpty_Pos)

#define I2S_STATUS_RXFull_Pos       5
#define I2S_STATUS_RXFull_Msk       (1UL<<I2S_STATUS_RXFull_Pos)

#define I2S_ERROR_TXERR_Pos         0
#define I2S_ERROR_TXERR_Msk         (1UL<<I2S_ERROR_TXERR_Pos)

#define I2S_ERROR_RXERR_Pos         1
#define I2S_ERROR_RXERR_Msk         (1UL<<I2S_ERROR_RXERR_Pos)

/******************************************************************************/
/*                       SMSC9220 Register Definitions                        */
/******************************************************************************/

typedef struct                         /*   SMSC LAN9220                                  */
{
__I   uint32_t  RX_DATA_PORT;          /*   Receive FIFO Ports (offset 0x0).              */
      uint32_t  RESERVED1[0x7];
__O   uint32_t  TX_DATA_PORT;          /*   Transmit FIFO Ports (offset 0x20).            */
      uint32_t  RESERVED2[0x7];

__I   uint32_t  RX_STAT_PORT;          /*   Receive FIFO status port (offset 0x40).       */
__I   uint32_t  RX_STAT_PEEK;          /*   Receive FIFO status peek (offset 0x44).       */
__I   uint32_t  TX_STAT_PORT;          /*   Transmit FIFO status port (offset 0x48).      */
__I   uint32_t  TX_STAT_PEEK;          /*   Transmit FIFO status peek (offset 0x4C).      */

__I   uint32_t  ID_REV;                /*   Chip ID and Revision (offset 0x50).           */
__IO  uint32_t  IRQ_CFG;               /*   Main Interrupt Configuration (offset 0x54).   */
__IO  uint32_t  INT_STS;               /*   Interrupt Status (offset 0x58).               */
__IO  uint32_t  INT_EN;                /*   Interrupt Enable Register (offset 0x5C).      */
      uint32_t  RESERVED3;             /*   Reserved for future use (offset 0x60).        */
__I   uint32_t  BYTE_TEST;             /*   Read-only byte order testing register 87654321h (offset 0x64). */
__IO  uint32_t  FIFO_INT;              /*   FIFO Level Interrupts (offset 0x68).          */
__IO  uint32_t  RX_CFG;                /*   Receive Configuration (offset 0x6C).          */
__IO  uint32_t  TX_CFG;                /*   Transmit Configuration (offset 0x70).         */
__IO  uint32_t  HW_CFG;                /*   Hardware Configuration (offset 0x74).         */
__IO  uint32_t  RX_DP_CTL;             /*   RX Datapath Control (offset 0x78).            */
__I   uint32_t  RX_FIFO_INF;           /*   Receive FIFO Information (offset 0x7C).       */
__I   uint32_t  TX_FIFO_INF;           /*   Transmit FIFO Information (offset 0x80).      */
__IO  uint32_t  PMT_CTRL;              /*   Power Management Control (offset 0x84).       */
__IO  uint32_t  GPIO_CFG;              /*   General Purpose IO Configuration (offset 0x88). */
__IO  uint32_t  GPT_CFG;               /*   General Purpose Timer Configuration (offset 0x8C). */
__I   uint32_t  GPT_CNT;               /*   General Purpose Timer Count (offset 0x90).    */
      uint32_t  RESERVED4;             /*   Reserved for future use (offset 0x94).        */
__IO  uint32_t  ENDIAN;                /*   WORD SWAP Register (offset 0x98).             */
__I   uint32_t  FREE_RUN;              /*   Free Run Counter (offset 0x9C).               */
__I   uint32_t  RX_DROP;               /*   RX Dropped Frames Counter (offset 0xA0).      */
__IO  uint32_t  MAC_CSR_CMD;           /*   MAC CSR Synchronizer Command (offset 0xA4).   */
__IO  uint32_t  MAC_CSR_DATA;          /*   MAC CSR Synchronizer Data (offset 0xA8).      */
__IO  uint32_t  AFC_CFG;               /*   Automatic Flow Control Configuration (offset 0xAC). */
__IO  uint32_t  E2P_CMD;               /*   EEPROM Command (offset 0xB0).                 */
__IO  uint32_t  E2P_DATA;              /*   EEPROM Data (offset 0xB4).                    */

} SMSC9220_TypeDef;

/* SMSC9220 MAC Registers       Indices. */
#define SMSC9220_MAC_CR         0x1
#define SMSC9220_MAC_ADDRH      0x2
#define SMSC9220_MAC_ADDRL      0x3
#define SMSC9220_MAC_HASHH      0x4
#define SMSC9220_MAC_HASHL      0x5
#define SMSC9220_MAC_MII_ACC    0x6
#define SMSC9220_MAC_MII_DATA   0x7
#define SMSC9220_MAC_FLOW       0x8
#define SMSC9220_MAC_VLAN1      0x9
#define SMSC9220_MAC_VLAN2      0xA
#define SMSC9220_MAC_WUFF       0xB
#define SMSC9220_MAC_WUCSR      0xC

/* SMSC9220 PHY Registers       Indices. */
#define SMSC9220_PHY_BCONTROL   0x0
#define SMSC9220_PHY_BSTATUS    0x1
#define SMSC9220_PHY_ID1        0x2
#define SMSC9220_PHY_ID2        0x3
#define SMSC9220_PHY_ANEG_ADV   0x4
#define SMSC9220_PHY_ANEG_LPA   0x5
#define SMSC9220_PHY_ANEG_EXP   0x6
#define SMSC9220_PHY_MCONTROL   0x17
#define SMSC9220_PHY_MSTATUS    0x18
#define SMSC9220_PHY_CSINDICATE 0x27
#define SMSC9220_PHY_INTSRC     0x29
#define SMSC9220_PHY_INTMASK    0x30
#define SMSC9220_PHY_CS         0x31

/******************************************************************************/
/*                         Peripheral declaration                             */
/******************************************************************************/

#define MPS3_TS_I2C             ((MPS3_I2C_TypeDef      *) MPS3_I2C0_BASE )
#define MPS3_AAIC_I2C           ((MPS3_I2C_TypeDef      *) MPS3_I2C1_BASE )
#define MPS3_CAM_I2C2           ((MPS3_I2C_TypeDef      *) MPS3_I2C2_BASE )
#define MPS3_CAM_I2C3           ((MPS3_I2C_TypeDef      *) MPS3_I2C3_BASE )
#define MPS3_AAIC_I2S           ((MPS3_I2S_TypeDef      *) MPS3_AAIC_I2S_BASE )
#define MPS3_FPGAIO             ((MPS3_FPGAIO_TypeDef   *) MPS3_FPGAIO_BASE )
#define MPS3_SCC                ((MPS3_SCC_TypeDef      *) MPS3_SCC_BASE )
#define MPS3_SSP0               ((MPS3_SSP_TypeDef      *) MPS3_SSP0_BASE )
#define MPS3_SSP1               ((MPS3_SSP_TypeDef      *) MPS3_SSP1_BASE )
#define MPS3_SSP2               ((MPS3_SSP_TypeDef      *) MPS3_SSP2_BASE )
#define MPS3_SSP3               ((MPS3_SSP_TypeDef      *) MPS3_SSP3_BASE )
#define MPS3_SSP4               ((MPS3_SSP_TypeDef      *) MPS3_SSP4_BASE )
#define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE)

/******************************************************************************/
/*                      Secure Peripheral declaration                         */
/******************************************************************************/

#define SEC_TS_I2C             ((MPS3_I2C_TypeDef      *) SEC_MPS3_I2C0_BASE )
#define SEC_AAIC_I2C           ((MPS3_I2C_TypeDef      *) SEC_MPS3_I2C1_BASE )
#define SEC_AAIC_I2S           ((MPS3_I2S_TypeDef      *) SEC_MPS3_AAIC_I2S_BASE )
#define SEC_FPGAIO             ((MPS3_FPGAIO_TypeDef   *) SEC_MPS3_FPGAIO_BASE )
#define SEC_SCC                ((MPS3_SCC_TypeDef      *) SEC_MPS3_SCC_BASE )
#define SEC_SSP0               ((MPS3_SSP_TypeDef      *) SEC_SSP0_BASE )
#define SEC_SSP1               ((MPS3_SSP_TypeDef      *) SEC_SSP1_BASE )
#define SEC_SSP2               ((MPS3_SSP_TypeDef      *) SEC_MPS3_SSP2_BASE )
#define SEC_SMSC9220           ((SMSC9220_TypeDef      *) SEC_SMSC9220_BASE)

#endif /* SMM_MPS3_H */
