text: /************************************************************************************
   * arch/arm/src/tiva/tiva_periphrdy.h
   *
   *   Copyright (C) 2015 Gregory Nutt. All rights reserved.
   *   Author: Gregory Nutt <gnutt@nuttx.org>
   *
   * 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_TIVA_TIVAPERIPHRDY_H
  #define __ARCH_ARM_SRC_TIVA_TIVAPERIPHRDY_H
  
  /************************************************************************************
   * Included Files
   ************************************************************************************/
  
  #include <nuttx/config.h>
  
  #include "up_arch.h"
  #include "chip.h"
  #include "chip/tiva_syscontrol.h"
  
  /************************************************************************************
   * Pre-processor Definitions
   ************************************************************************************/
  /* We determine if a peripheral is ready by testing a bit (b) in system control
   * register (a).
   */
  
  #define tiva_periphrdy(a,b)        ((getreg32(a) & (b)) != 0)
  
  /* Watchdog Timer Power Control */
  
  #ifdef TIVA_SYSCON_PRWD
  #  define tiva_wdt_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRWD,SYSCON_PRWD(p))
  #else
  #  define tiva_wdt_periphrdy(p)    (true)
  #endif
  
  #define tiva_wdt0_periphrdy()      tiva_wdt_periphrdy(0)
  #define tiva_wdt1_periphrdy()      tiva_wdt_periphrdy(1)
  
  /* 16/32-Bit Timer Power Control */
  
  #ifdef TIVA_SYSCON_PRTIMER
  #  define tiva_gptm_periphrdy(p)   tiva_periphrdy(TIVA_SYSCON_PRTIMER,SYSCON_PRTIMER(p))
  #else
  #  define tiva_gptm_periphrdy(p)   (true)
  #endif
  
  #define tiva_gptm0_periphrdy()     tiva_gptm_periphrdy(0)
  #define tiva_gptm1_periphrdy()     tiva_gptm_periphrdy(1)
  #define tiva_gptm2_periphrdy()     tiva_gptm_periphrdy(2)
  #define tiva_gptm3_periphrdy()     tiva_gptm_periphrdy(3)
  #define tiva_gptm4_periphrdy()     tiva_gptm_periphrdy(4)
  #define tiva_gptm5_periphrdy()     tiva_gptm_periphrdy(5)
  #define tiva_gptm6_periphrdy()     tiva_gptm_periphrdy(6)
  #define tiva_gptm7_periphrdy()     tiva_gptm_periphrdy(7)
  
  /* GPIO Power Control */
  
  #ifdef TIVA_SYSCON_PRGPIO
  #  define tiva_gpio_periphrdy(p)   tiva_periphrdy(TIVA_SYSCON_PRGPIO,SYSCON_PRGPIO(p))
  #else
  #  define tiva_gpio_periphrdy(p)   (true)
  #endif
  
  #define tiva_gpioa_periphrdy()     tiva_gpio_periphrdy(0)
  #define tiva_gpiob_periphrdy()     tiva_gpio_periphrdy(1)
  #define tiva_gpioc_periphrdy()     tiva_gpio_periphrdy(2)
  #define tiva_gpiod_periphrdy()     tiva_gpio_periphrdy(3)
  #define tiva_gpioe_periphrdy()     tiva_gpio_periphrdy(4)
  #define tiva_gpiof_periphrdy()     tiva_gpio_periphrdy(5)
  #define tiva_gpiog_periphrdy()     tiva_gpio_periphrdy(6)
  #define tiva_gpioh_periphrdy()     tiva_gpio_periphrdy(7)
  #define tiva_gpioj_periphrdy()     tiva_gpio_periphrdy(8)
  #define tiva_gpiok_periphrdy()     tiva_gpio_periphrdy(9)
  #define tiva_gpiol_periphrdy()     tiva_gpio_periphrdy(10)
  #define tiva_gpiom_periphrdy()     tiva_gpio_periphrdy(11)
  #define tiva_gpion_periphrdy()     tiva_gpio_periphrdy(12)
  #define tiva_gpiop_periphrdy()     tiva_gpio_periphrdy(13)
  #define tiva_gpioq_periphrdy()     tiva_gpio_periphrdy(14)
  #define tiva_gpior_periphrdy()     tiva_gpio_periphrdy(15)
  #define tiva_gpios_periphrdy()     tiva_gpio_periphrdy(16)
  #define tiva_gpiot_periphrdy()     tiva_gpio_periphrdy(17)
  
  /* μDMA Power Control */
  
  #ifdef TIVA_SYSCON_PRDMA
  #  define tiva_udma_periphrdy()    tiva_periphrdy(TIVA_SYSCON_PRDMA,SYSCON_PRDMA_R0)
  #else
  #  define tiva_udma_periphrdy()    (true)
  #endif
  
  /* EPI Power Control */
  
  #ifdef TIVA_SYSCON_PREPI
  #  define tiva_epi_periphrdy()     tiva_periphrdy(TIVA_SYSCON_PREPI,SYSCON_PREPI_R0)
  #else
  #  define tiva_epi_periphrdy()     (true)
  #endif
  
  /* Hibernation Power Control */
  
  #ifdef TIVA_SYSCON_PRHIB
  #  define tiva_hib_periphrdy()     tiva_periphrdy(TIVA_SYSCON_PRHIB,SYSCON_PRHIB_R0)
  #else
  #  define tiva_hib_periphrdy()     (true)
  #endif
  
  /* UART Power Control */
  
  #ifdef TIVA_SYSCON_PRUART
  #  define tiva_uart_periphrdy(p)   tiva_periphrdy(TIVA_SYSCON_PRUART,SYSCON_PRUART(p))
  #else
  #  define tiva_uart_periphrdy(p)   (true)
  #endif
  
  #define tiva_uart0_periphrdy()     tiva_uart_periphrdy(0)
  #define tiva_uart1_periphrdy()     tiva_uart_periphrdy(1)
  #define tiva_uart2_periphrdy()     tiva_uart_periphrdy(2)
  #define tiva_uart3_periphrdy()     tiva_uart_periphrdy(3)
  #define tiva_uart4_periphrdy()     tiva_uart_periphrdy(4)
  #define tiva_uart5_periphrdy()     tiva_uart_periphrdy(5)
  #define tiva_uart6_periphrdy()     tiva_uart_periphrdy(6)
  #define tiva_uart7_periphrdy()     tiva_uart_periphrdy(7)
  
  /* SSI Power Control */
  
  #ifdef TIVA_SYSCON_PRSSI
  #  define tiva_ssi_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRSSI,SYSCON_PRSSI(p))
  #else
  #  define tiva_ssi_periphrdy(p)    (true)
  #endif
  
  #define tiva_ssi0_periphrdy()      tiva_ssi_periphrdy(0)
  #define tiva_ssi1_periphrdy()      tiva_ssi_periphrdy(1)
  #define tiva_ssi2_periphrdy()      tiva_ssi_periphrdy(2)
  #define tiva_ssi3_periphrdy()      tiva_ssi_periphrdy(3)
  
  /* I2C Power Control */
  
  #ifdef TIVA_SYSCON_PRI2C
  #  define tiva_i2c_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRI2C,SYSCON_PRI2C(p))
  #else
  #  define tiva_i2c_periphrdy(p)    (true)
  #endif
  
  #define tiva_i2c0_periphrdy()      tiva_i2c_periphrdy(0)
  #define tiva_i2c1_periphrdy()      tiva_i2c_periphrdy(1)
  #define tiva_i2c2_periphrdy()      tiva_i2c_periphrdy(2)
  #define tiva_i2c3_periphrdy()      tiva_i2c_periphrdy(3)
  #define tiva_i2c4_periphrdy()      tiva_i2c_periphrdy(4)
  #define tiva_i2c5_periphrdy()      tiva_i2c_periphrdy(5)
  #define tiva_i2c6_periphrdy()      tiva_i2c_periphrdy(6)
  #define tiva_i2c7_periphrdy()      tiva_i2c_periphrdy(7)
  #define tiva_i2c8_periphrdy()      tiva_i2c_periphrdy(8)
  #define tiva_i2c9_periphrdy()      tiva_i2c_periphrdy(9)
  
  /* USB Power Control */
  
  #ifdef TIVA_SYSCON_PRUSB
  #  define tiva_usb_periphrdy()     tiva_periphrdy(TIVA_SYSCON_PRUSB,SYSCON_PRUSB_R0)
  #else
  #  define tiva_usb_periphrdy()     (true)
  #endif
  
  /* Ethernet PHY Power Control */
  
  #ifdef TIVA_SYSCON_PREPHY
  #  define tiva_ephy_periphrdy()    tiva_periphrdy(TIVA_SYSCON_PREPHY,SYSCON_PREPHY_R0)
  #else
  #  define tiva_ephy_periphrdy()    (true)
  #endif
  
  /* CAN RunMode Clock Gating Control */
  
  #ifdef TIVA_SYSCON_PRCAN
  #  define tiva_can_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRCAN,SYSCON_PRCAN(p))
  #else
  #  define tiva_can_periphrdy(p)    (true)
  #endif
  
  #define tiva_can0_periphrdy()      tiva_can_periphrdy(0)
  #define tiva_can1_periphrdy()      tiva_can_periphrdy(1)
  
  /* ADC Power Control */
  
  #ifdef TIVA_SYSCON_PRADC
  #  define tiva_adc_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRADC,SYSCON_PRADC(p))
  #else
  #  define tiva_adc_periphrdy(p)    (true)
  #endif
  
  #define tiva_adc0_periphrdy()      tiva_adc_periphrdy(0)
  #define tiva_adc1_periphrdy()      tiva_adc_periphrdy(1)
  
  /* ACMP Power Control */
  
  #ifdef TIVA_SYSCON_PRACMP
  #  define tiva_acmp_periphrdy()    tiva_periphrdy(TIVA_SYSCON_PRACMP,SYSCON_PRACMP_R0)
  #else
  #  define tiva_acmp_periphrdy()    (true)
  #endif
  
  /* PWM Power Control */
  
  #ifdef TIVA_SYSCON_PRPWM
  #  define tiva_pwm_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRPWM,SYSCON_PRPWM(p))
  #else
  #  define tiva_pwm_periphrdy(p)    (true)
  #endif
  
  #define tiva_pwm0_periphrdy()      tiva_pwm_periphrdy(0)
  #define tiva_pwm1_periphrdy()      tiva_pwm_periphrdy(1)
  
  /* QE Interface Power Control */
  
  #ifdef TIVA_SYSCON_PRQEI
  #  define tiva_qei_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRQEI,SYSCON_PRQEI(p))
  #else
  #  define tiva_qei_periphrdy(p)    (true)
  #endif
  
  #define tiva_qei0_periphrdy()      tiva_qei_periphrdy(0)
  #define tiva_qei1_periphrdy()      tiva_qei_periphrdy(1)
  
  /* EEPROM Power Control */
  
  #ifdef TIVA_SYSCON_PREEPROM
  #  define tiva_eeprom_periphrdy()   tiva_periphrdy(TIVA_SYSCON_PREEPROM,SYSCON_PREEPROM_R0)
  #else
  #  define tiva_eeprom_periphrdy()   (true)
  #endif
  
  /* 32/64-Bit Wide Timer Power Control */
  
  #ifdef TIVA_SYSCON_PRWTIMER
  #  define tiva_wtm_periphrdy(p)    tiva_periphrdy(TIVA_SYSCON_PRWTIMER,SYSCON_PRWTIMER(p))
  #else
  #  define tiva_wtm_periphrdy(p)    (true)
  #endif
  
  #define tiva_wtm0_periphrdy()      tiva_wtm_periphrdy(0)
  #define tiva_wtm1_periphrdy()      tiva_wtm_periphrdy(1)
  #define tiva_wtm2_periphrdy()      tiva_wtm_periphrdy(2)
  #define tiva_wtm3_periphrdy()      tiva_wtm_periphrdy(3)
  #define tiva_wtm4_periphrdy()      tiva_wtm_periphrdy(4)
  #define tiva_wtm5_periphrdy()      tiva_wtm_periphrdy(5)
  
  /* CRC/Crypto Modules RunMode ClockGating Control */
  
  #ifdef TIVA_SYSCON_PRCCM
  #  define tiva_ccm_periphrdy()     tiva_periphrdy(TIVA_SYSCON_PRCCM,SYSCON_PRCCM_R0)
  #else
  #  define tiva_ccm_periphrdy()     (true)
  #endif
  
  /* LCD Controller Power Control */
  
  #ifdef TIVA_SYSCON_PRLCD
  #  define tiva_lcd_periphrdy()     tiva_periphrdy(TIVA_SYSCON_PRLCD,SYSCON_PRLCD_R0)
  #else
  #  define tiva_lcd_periphrdy()    (true)
  #endif
  
  /* 1-Wire Power Control */
  
  #ifdef TIVA_SYSCON_PROWIRE
  #  define tiva_owire_periphrdy()   tiva_periphrdy(TIVA_SYSCON_PROWIRE,SYSCON_PROWIRE_R0)
  #else
  #  define tiva_owire_periphrdy()   (true)
  #endif
  
  /* Ethernet MAC Power Control */
  
  #ifdef TIVA_SYSCON_PREMAC
  #  define tiva_emac_periphrdy()    tiva_periphrdy(TIVA_SYSCON_PREMAC,SYSCON_PREMAC_R0)
  #else
  #  define tiva_emac_periphrdy()    (true)
  #endif
  
  #endif /* __ARCH_ARM_SRC_TIVA_TIVAPERIPHRDY_H */
  