#ifdef __AVR_XMEGA__

#ifdef USB
#define power_usb_enable()  (PR_PRGEN &= (uint8_t)~(PR_USB_bm))
#define power_usb_disable() (PR_PRGEN |= (uint8_t)PR_USB_bm)
#define __power_usb_mask ((uint8_t)PR_USB_bm)
#else
#define __power_usb_mask (0)
#endif

#ifdef AES
#define power_aes_enable()  (PR_PRGEN &= (uint8_t)~(PR_AES_bm))
#define power_aes_disable() (PR_PRGEN |= (uint8_t)PR_AES_bm)
#define __power_aes_mask ((uint8_t)PR_AES_bm)
#else
#define __power_aes_mask (0)
#endif

#ifdef EBI
#define power_ebi_enable()  (PR_PRGEN &= (uint8_t)~(PR_EBI_bm))
#define power_ebi_disable() (PR_PRGEN |= (uint8_t)PR_EBI_bm)
#define __power_ebi_mask ((uint8_t)PR_EBI_bm)
#else
#define __power_ebi_mask (0)
#endif

#ifdef RTC
#define power_rtc_enable()  (PR_PRGEN &= (uint8_t)~(PR_RTC_bm))
#define power_rtc_disable() (PR_PRGEN |= (uint8_t)PR_RTC_bm)
#define __power_rtc_mask ((uint8_t)PR_RTC_bm)
#else
#define __power_rtc_mask (0)
#endif

#ifdef EVSYS
#define power_evsys_enable()  (PR_PRGEN &= (uint8_t)~(PR_EVSYS_bm))
#define power_evsys_disable() (PR_PRGEN |= (uint8_t)PR_EVSYS_bm)
#define __power_evsys_mask ((uint8_t)PR_EVSYS_bm)
#else
#define __power_evsys_mask (0)
#endif

#ifdef DMA
#define power_dma_enable()  (PR_PRGEN &= (uint8_t)~(PR_DMA_bm))
#define power_dma_disable() (PR_PRGEN |= (uint8_t)PR_DMA_bm)
#define __power_dma_mask ((uint8_t)PR_DMA_bm)
#else
#define __power_dma_mask (0)
#endif

#ifdef DACA
#define power_daca_enable()  (PR_PRGEN &= (uint8_t)~(PR_DAC_bm))
#define power_daca_disable() (PR_PRGEN |= (uint8_t)PR_DAC_bm)
#define __power_daca_mask ((uint8_t)PR_DAC_bm)
#else
#define __power_daca_mask (0)
#endif

#ifdef ADCA
#define power_adca_enable()  (PR_PRGEN &= (uint8_t)~(PR_ADC_bm))
#define power_adca_disable() (PR_PRGEN |= (uint8_t)PR_ADC_bm)
#define __power_adca_mask ((uint8_t)PR_ADC_bm)
#else
#define __power_adca_mask (0)
#endif

#ifdef ACA
#define power_aca_enable()  (PR_PRGEN &= (uint8_t)~(PR_AC_bm))
#define power_aca_disable() (PR_PRGEN |= (uint8_t)PR_AC_bm)
#define __power_aca_mask ((uint8_t)PR_AC_bm)
#else
#define __power_aca_mask (0)
#endif

#ifdef DACB
#define power_dacb_enable()  (PR_PRGEN &= (uint8_t)~(PR_DAC_bm))
#define power_dacb_disable() (PR_PRGEN |= (uint8_t)PR_DAC_bm)
#define __power_dacb_mask ((uint8_t)PR_DAC_bm)
#else
#define __power_dacb_mask (0)
#endif

#ifdef ADCB
#define power_adcb_enable()  (PR_PRGEN &= (uint8_t)~(PR_ADC_bm))
#define power_adcb_disable() (PR_PRGEN |= (uint8_t)PR_ADC_bm)
#define __power_adcb_mask ((uint8_t)PR_ADC_bm)
#else
#define __power_adcb_mask (0)
#endif

#ifdef ACB
#define power_acb_enable()  (PR_PRGEN &= (uint8_t)~(PR_AC_bm))
#define power_acb_disable() (PR_PRGEN |= (uint8_t)PR_AC_bm)
#define __power_acb_mask ((uint8_t)PR_AC_bm)
#else
#define __power_acb_mask (0)
#endif

#ifdef TWIC
#define power_twic_enable()  (PR_PRGEN &= (uint8_t)~(PR_TWI_bm))
#define power_twic_disable() (PR_PRGEN |= (uint8_t)PR_TWI_bm)
#define __power_twic_mask ((uint8_t)PR_TWI_bm)
#else
#define __power_twic_mask (0)
#endif

#ifdef USART1C
#define power_usart1c_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART1_bm))
#define power_usart1c_disable() (PR_PRGEN |= (uint8_t)PR_USART1_bm)
#define __power_usart1c_mask ((uint8_t)PR_USART1_bm)
#else
#define __power_usart1c_mask (0)
#endif

#ifdef USART0C
#define power_usart0c_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART0_bm))
#define power_usart0c_disable() (PR_PRGEN |= (uint8_t)PR_USART0_bm)
#define __power_usart0c_mask ((uint8_t)PR_USART0_bm)
#else
#define __power_usart0c_mask (0)
#endif

#ifdef SPIC
#define power_spic_enable()  (PR_PRGEN &= (uint8_t)~(PR_SPI_bm))
#define power_spic_disable() (PR_PRGEN |= (uint8_t)PR_SPI_bm)
#define __power_spic_mask ((uint8_t)PR_SPI_bm)
#else
#define __power_spic_mask (0)
#endif

#ifdef HIRESC
#define power_hiresc_enable()  (PR_PRGEN &= (uint8_t)~(PR_HIRES_bm))
#define power_hiresc_disable() (PR_PRGEN |= (uint8_t)PR_HIRES_bm)
#define __power_hiresc_mask ((uint8_t)PR_HIRES_bm)
#else
#define __power_hiresc_mask (0)
#endif

#ifdef TC1C
#define power_tc1c_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC1_bm))
#define power_tc1c_disable() (PR_PRGEN |= (uint8_t)PR_TC1_bm)
#define __power_tc1c_mask ((uint8_t)PR_TC1_bm)
#else
#define __power_tc1c_mask (0)
#endif

#ifdef TC0C
#define power_tc0c_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC0_bm))
#define power_tc0c_disable() (PR_PRGEN |= (uint8_t)PR_TC0_bm)
#define __power_tc0c_mask ((uint8_t)PR_TC0_bm)
#else
#define __power_tc0c_mask (0)
#endif

#ifdef TWID
#define power_twid_enable()  (PR_PRGEN &= (uint8_t)~(PR_TWI_bm))
#define power_twid_disable() (PR_PRGEN |= (uint8_t)PR_TWI_bm)
#define __power_twid_mask ((uint8_t)PR_TWI_bm)
#else
#define __power_twid_mask (0)
#endif

#ifdef USART1D
#define power_usart1d_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART1_bm))
#define power_usart1d_disable() (PR_PRGEN |= (uint8_t)PR_USART1_bm)
#define __power_usart1d_mask ((uint8_t)PR_USART1_bm)
#else
#define __power_usart1d_mask (0)
#endif

#ifdef USART0D
#define power_usart0d_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART0_bm))
#define power_usart0d_disable() (PR_PRGEN |= (uint8_t)PR_USART0_bm)
#define __power_usart0d_mask ((uint8_t)PR_USART0_bm)
#else
#define __power_usart0d_mask (0)
#endif

#ifdef SPID
#define power_spid_enable()  (PR_PRGEN &= (uint8_t)~(PR_SPI_bm))
#define power_spid_disable() (PR_PRGEN |= (uint8_t)PR_SPI_bm)
#define __power_spid_mask ((uint8_t)PR_SPI_bm)
#else
#define __power_spid_mask (0)
#endif

#ifdef HIRESD
#define power_hiresd_enable()  (PR_PRGEN &= (uint8_t)~(PR_HIRES_bm))
#define power_hiresd_disable() (PR_PRGEN |= (uint8_t)PR_HIRES_bm)
#define __power_hiresd_mask ((uint8_t)PR_HIRES_bm)
#else
#define __power_hiresd_mask (0)
#endif

#ifdef TC1D
#define power_tc1d_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC1_bm))
#define power_tc1d_disable() (PR_PRGEN |= (uint8_t)PR_TC1_bm)
#define __power_tc1d_mask ((uint8_t)PR_TC1_bm)
#else
#define __power_tc1d_mask (0)
#endif

#ifdef TC0D
#define power_tc0d_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC0_bm))
#define power_tc0d_disable() (PR_PRGEN |= (uint8_t)PR_TC0_bm)
#define __power_tc0d_mask ((uint8_t)PR_TC0_bm)
#else
#define __power_tc0d_mask (0)
#endif

#ifdef TWIE
#define power_twie_enable()  (PR_PRGEN &= (uint8_t)~(PR_TWI_bm))
#define power_twie_disable() (PR_PRGEN |= (uint8_t)PR_TWI_bm)
#define __power_twie_mask ((uint8_t)PR_TWI_bm)
#else
#define __power_twie_mask (0)
#endif

#ifdef USART1E
#define power_usart1e_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART1_bm))
#define power_usart1e_disable() (PR_PRGEN |= (uint8_t)PR_USART1_bm)
#define __power_usart1e_mask ((uint8_t)PR_USART1_bm)
#else
#define __power_usart1e_mask (0)
#endif

#ifdef USART0E
#define power_usart0e_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART0_bm))
#define power_usart0e_disable() (PR_PRGEN |= (uint8_t)PR_USART0_bm)
#define __power_usart0e_mask ((uint8_t)PR_USART0_bm)
#else
#define __power_usart0e_mask (0)
#endif

#ifdef SPIE
#define power_spie_enable()  (PR_PRGEN &= (uint8_t)~(PR_SPI_bm))
#define power_spie_disable() (PR_PRGEN |= (uint8_t)PR_SPI_bm)
#define __power_spie_mask ((uint8_t)PR_SPI_bm)
#else
#define __power_spie_mask (0)
#endif

#ifdef HIRESE
#define power_hirese_enable()  (PR_PRGEN &= (uint8_t)~(PR_HIRES_bm))
#define power_hirese_disable() (PR_PRGEN |= (uint8_t)PR_HIRES_bm)
#define __power_hirese_mask ((uint8_t)PR_HIRES_bm)
#else
#define __power_hirese_mask (0)
#endif

#ifdef TC1E
#define power_tc1e_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC1_bm))
#define power_tc1e_disable() (PR_PRGEN |= (uint8_t)PR_TC1_bm)
#define __power_tc1e_mask ((uint8_t)PR_TC1_bm)
#else
#define __power_tc1e_mask (0)
#endif

#ifdef TC0E
#define power_tc0e_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC0_bm))
#define power_tc0e_disable() (PR_PRGEN |= (uint8_t)PR_TC0_bm)
#define __power_tc0e_mask ((uint8_t)PR_TC0_bm)
#else
#define __power_tc0e_mask (0)
#endif

#ifdef TWIF
#define power_twif_enable()  (PR_PRGEN &= (uint8_t)~(PR_TWI_bm))
#define power_twif_disable() (PR_PRGEN |= (uint8_t)PR_TWI_bm)
#define __power_twif_mask ((uint8_t)PR_TWI_bm)
#else
#define __power_twif_mask (0)
#endif

#ifdef USART1F
#define power_usart1f_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART1_bm))
#define power_usart1f_disable() (PR_PRGEN |= (uint8_t)PR_USART1_bm)
#define __power_usart1f_mask ((uint8_t)PR_USART1_bm)
#else
#define __power_usart1f_mask (0)
#endif

#ifdef USART0F
#define power_usart0f_enable()  (PR_PRGEN &= (uint8_t)~(PR_USART0_bm))
#define power_usart0f_disable() (PR_PRGEN |= (uint8_t)PR_USART0_bm)
#define __power_usart0f_mask ((uint8_t)PR_USART0_bm)
#else
#define __power_usart0f_mask (0)
#endif

#ifdef SPIF
#define power_spif_enable()  (PR_PRGEN &= (uint8_t)~(PR_SPI_bm))
#define power_spif_disable() (PR_PRGEN |= (uint8_t)PR_SPI_bm)
#define __power_spif_mask ((uint8_t)PR_SPI_bm)
#else
#define __power_spif_mask (0)
#endif

#ifdef HIRESF
#define power_hiresf_enable()  (PR_PRGEN &= (uint8_t)~(PR_HIRES_bm))
#define power_hiresf_disable() (PR_PRGEN |= (uint8_t)PR_HIRES_bm)
#define __power_hiresf_mask ((uint8_t)PR_HIRES_bm)
#else
#define __power_hiresf_mask (0)
#endif

#ifdef TC1F
#define power_tc1f_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC1_bm))
#define power_tc1f_disable() (PR_PRGEN |= (uint8_t)PR_TC1_bm)
#define __power_tc1f_mask ((uint8_t)PR_TC1_bm)
#else
#define __power_tc1f_mask (0)
#endif

#ifdef TC0F
#define power_tc0f_enable()  (PR_PRGEN &= (uint8_t)~(PR_TC0_bm))
#define power_tc0f_disable() (PR_PRGEN |= (uint8_t)PR_TC0_bm)
#define __power_tc0f_mask ((uint8_t)PR_TC0_bm)
#else
#define __power_tc0f_mask (0)
#endif

#define power_all_enable() \
do { \
    PR_PRGEN &= (uint8_t)~(__power_usb_mask|__power_aes_mask|__power_ebi_mask|__power_rtc_mask|__power_evsys_mask|__power_dma_mask); \
    PR_PRPA &= (uint8_t)~(__power_daca_mask|__power_adca_mask|__power_aca_mask); \
    PR_PRPB &= (uint8_t)~(__power_dacb_mask|__power_adcb_mask|__power_acb_mask); \
    PR_PRPC &= (uint8_t)~(__power_twic_mask|__power_usart1c_mask|__power_usart0c_mask|__power_spic_mask|__power_hiresc_mask|__power_tc1c_mask|__power_tc0c_mask); \
    PR_PRPD &= (uint8_t)~(__power_twid_mask|__power_usart1d_mask|__power_usart0d_mask|__power_spid_mask|__power_hiresd_mask|__power_tc1d_mask|__power_tc0d_mask); \
    PR_PRPE &= (uint8_t)~(__power_twie_mask|__power_usart1e_mask|__power_usart0e_mask|__power_spie_mask|__power_hirese_mask|__power_tc1e_mask|__power_tc0e_mask); \
    PR_PRPF &= (uint8_t)~(__power_twif_mask|__power_usart1f_mask|__power_usart0f_mask|__power_spif_mask|__power_hiresf_mask|__power_tc1f_mask|__power_tc0f_mask); \
} while(0)

#define power_all_disable() \
do { \
    PR_PRGEN |= (uint8_t)(__power_usb_mask|__power_aes_mask|__power_ebi_mask|__power_rtc_mask|__power_evsys_mask|__power_dma_mask); \
    PR_PRPA |= (uint8_t)(__power_daca_mask|__power_adca_mask|__power_aca_mask); \
    PR_PRPB |= (uint8_t)(__power_dacb_mask|__power_adcb_mask|__power_acb_mask); \
    PR_PRPC |= (uint8_t)(__power_twic_mask|__power_usart1c_mask|__power_usart0c_mask|__power_spic_mask|__power_hiresc_mask|__power_tc1c_mask|__power_tc0c_mask); \
    PR_PRPD |= (uint8_t)(__power_twid_mask|__power_usart1d_mask|__power_usart0d_mask|__power_spid_mask|__power_hiresd_mask|__power_tc1d_mask|__power_tc0d_mask); \
    PR_PRPE |= (uint8_t)(__power_twie_mask|__power_usart1e_mask|__power_usart0e_mask|__power_spie_mask|__power_hirese_mask|__power_tc1e_mask|__power_tc0e_mask); \
    PR_PRPF |= (uint8_t)(__power_twif_mask|__power_usart1f_mask|__power_usart0f_mask|__power_spif_mask|__power_hiresf_mask|__power_tc1f_mask|__power_tc0f_mask); \
} while(0)

#endif /* __AVR_XMEGA__ */
