/*
 * These files are taken from the MCF523X source code example package
 * which is available on the Freescale website. Freescale explicitly 
 * grants the redistribution and modification of these source files.
 * The complete licensing information is available in the file 
 * LICENSE_FREESCALE.TXT.
 *
 * File:	mcf523x_scm.h
 * Purpose:	Register and bit definitions for the MCF523X
 *
 * Notes:	
 *	
 */

#ifndef __MCF523X_SCM_H__
#define __MCF523X_SCM_H__

/*********************************************************************
*
* System Control Module (SCM)
*
*********************************************************************/

/* Register read/write macros */
#define MCF_SCM_IPSBAR     (*(vuint32*)(void*)(&__IPSBAR[0x000000]))
#define MCF_SCM_RAMBAR     (*(vuint32*)(void*)(&__IPSBAR[0x000008]))
#define MCF_SCM_CRSR       (*(vuint8 *)(void*)(&__IPSBAR[0x000010]))
#define MCF_SCM_CWCR       (*(vuint8 *)(void*)(&__IPSBAR[0x000011]))
#define MCF_SCM_LPICR      (*(vuint8 *)(void*)(&__IPSBAR[0x000012]))
#define MCF_SCM_CWSR       (*(vuint8 *)(void*)(&__IPSBAR[0x000013]))
#define MCF_SCM_DMAREQC    (*(vuint32*)(void*)(&__IPSBAR[0x000014]))
#define MCF_SCM_MPARK      (*(vuint32*)(void*)(&__IPSBAR[0x00001C]))
#define MCF_SCM_MPR        (*(vuint8 *)(void*)(&__IPSBAR[0x000020]))
#define MCF_SCM_PACR0      (*(vuint8 *)(void*)(&__IPSBAR[0x000024]))
#define MCF_SCM_PACR1      (*(vuint8 *)(void*)(&__IPSBAR[0x000025]))
#define MCF_SCM_PACR2      (*(vuint8 *)(void*)(&__IPSBAR[0x000026]))
#define MCF_SCM_PACR3      (*(vuint8 *)(void*)(&__IPSBAR[0x000027]))
#define MCF_SCM_PACR4      (*(vuint8 *)(void*)(&__IPSBAR[0x000028]))
#define MCF_SCM_PACR5      (*(vuint8 *)(void*)(&__IPSBAR[0x00002A]))
#define MCF_SCM_PACR6      (*(vuint8 *)(void*)(&__IPSBAR[0x00002B]))
#define MCF_SCM_PACR7      (*(vuint8 *)(void*)(&__IPSBAR[0x00002C]))
#define MCF_SCM_PACR8      (*(vuint8 *)(void*)(&__IPSBAR[0x00002E]))
#define MCF_SCM_GPACR0     (*(vuint8 *)(void*)(&__IPSBAR[0x000030]))

/* Bit definitions and macros for MCF_SCM_IPSBAR */
#define MCF_SCM_IPSBAR_V                 (0x00000001)
#define MCF_SCM_IPSBAR_BA(x)             (((x)&0x00000003)<<30)

/* Bit definitions and macros for MCF_SCM_RAMBAR */
#define MCF_SCM_RAMBAR_BDE               (0x00000200)
#define MCF_SCM_RAMBAR_BA(x)             (((x)&0x0000FFFF)<<16)

/* Bit definitions and macros for MCF_SCM_CRSR */
#define MCF_SCM_CRSR_CWDR                (0x20)
#define MCF_SCM_CRSR_EXT                 (0x80)

/* Bit definitions and macros for MCF_SCM_CWCR */
#define MCF_SCM_CWCR_CWTIC               (0x01)
#define MCF_SCM_CWCR_CWTAVAL             (0x02)
#define MCF_SCM_CWCR_CWTA                (0x04)
#define MCF_SCM_CWCR_CWT(x)              (((x)&0x07)<<3)
#define MCF_SCM_CWCR_CWRI                (0x40)
#define MCF_SCM_CWCR_CWE                 (0x80)

/* Bit definitions and macros for MCF_SCM_LPICR */
#define MCF_SCM_LPICR_XLPM_IPL(x)        (((x)&0x07)<<4)
#define MCF_SCM_LPICR_ENBSTOP            (0x80)

/* Bit definitions and macros for MCF_SCM_DMAREQC */
#define MCF_SCM_DMAREQC_DMAC0(x)         (((x)&0x0000000F)<<0)
#define MCF_SCM_DMAREQC_DMAC1(x)         (((x)&0x0000000F)<<4)
#define MCF_SCM_DMAREQC_DMAC2(x)         (((x)&0x0000000F)<<8)
#define MCF_SCM_DMAREQC_DMAC3(x)         (((x)&0x0000000F)<<12)

/* Bit definitions and macros for MCF_SCM_MPARK */
#define MCF_SCM_MPARK_LCKOUT_TIME(x)     (((x)&0x0000000F)<<8)
#define MCF_SCM_MPARK_PRKLAST            (0x00001000)
#define MCF_SCM_MPARK_TIMEOUT            (0x00002000)
#define MCF_SCM_MPARK_FIXED              (0x00004000)
#define MCF_SCM_MPARK_M1_PRTY(x)         (((x)&0x00000003)<<16)
#define MCF_SCM_MPARK_M0_PRTY(x)         (((x)&0x00000003)<<18)
#define MCF_SCM_MPARK_M2_PRTY(x)         (((x)&0x00000003)<<20)
#define MCF_SCM_MPARK_M3_PRTY(x)         (((x)&0x00000003)<<22)
#define MCF_SCM_MPARK_BCR24BIT           (0x01000000)
#define MCF_SCM_MPARK_M2_P_EN            (0x02000000)

/* Bit definitions and macros for MCF_SCM_MPR */
#define MCF_SCM_MPR_MPR(x)               (((x)&0x0F)<<0)

/* Bit definitions and macros for MCF_SCM_PACR0 */
#define MCF_SCM_PACR0_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR0_LOCK0              (0x08)
#define MCF_SCM_PACR0_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR0_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR1 */
#define MCF_SCM_PACR1_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR1_LOCK0              (0x08)
#define MCF_SCM_PACR1_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR1_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR2 */
#define MCF_SCM_PACR2_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR2_LOCK0              (0x08)
#define MCF_SCM_PACR2_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR2_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR3 */
#define MCF_SCM_PACR3_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR3_LOCK0              (0x08)
#define MCF_SCM_PACR3_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR3_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR4 */
#define MCF_SCM_PACR4_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR4_LOCK0              (0x08)
#define MCF_SCM_PACR4_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR4_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR5 */
#define MCF_SCM_PACR5_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR5_LOCK0              (0x08)
#define MCF_SCM_PACR5_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR5_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR6 */
#define MCF_SCM_PACR6_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR6_LOCK0              (0x08)
#define MCF_SCM_PACR6_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR6_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR7 */
#define MCF_SCM_PACR7_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR7_LOCK0              (0x08)
#define MCF_SCM_PACR7_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR7_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_PACR8 */
#define MCF_SCM_PACR8_ACCESS_CTRL0(x)    (((x)&0x07)<<0)
#define MCF_SCM_PACR8_LOCK0              (0x08)
#define MCF_SCM_PACR8_ACCESS_CTRL1(x)    (((x)&0x07)<<4)
#define MCF_SCM_PACR8_LOCK1              (0x80)

/* Bit definitions and macros for MCF_SCM_GPACR0 */
#define MCF_SCM_GPACR0_ACCESS_CTRL(x)    (((x)&0x0F)<<0)
#define MCF_SCM_GPACR0_LOCK              (0x80)

/********************************************************************/

#endif /* __MCF523X_SCM_H__ */
