/******************************************************************************/
/*  This file is part of the uVision/ARM development tools                    */
/*  Copyright KEIL ELEKTRONIK GmbH 2002-2005                                  */
/******************************************************************************/
/*                                                                            */
/*  S3C4510.H:  Header file for Samsung S3C4510B                               */
/*                                                                            */
/******************************************************************************/

#ifndef __S3C4510_H
#define __S3C4510_H

#define SFR_BASE 0x3FF8000

#define S3C4510
  /* System Manager Group */
  #define SYSCFG   (*((volatile unsigned long *) (SFR_BASE + 0x0000)))
  #define CLKCFG   (*((volatile unsigned long *) (SFR_BASE + 0x3000)))
  #define EXTACON0 (*((volatile unsigned long *) (SFR_BASE + 0x3008)))
  #define EXTACON1 (*((volatile unsigned long *) (SFR_BASE + 0x300C)))
  #define EXTDBWTH (*((volatile unsigned long *) (SFR_BASE + 0x3010)))
  #define ROMCON0  (*((volatile unsigned long *) (SFR_BASE + 0x3014)))
  #define ROMCON1  (*((volatile unsigned long *) (SFR_BASE + 0x3018)))
  #define ROMCON2  (*((volatile unsigned long *) (SFR_BASE + 0x301C)))
  #define ROMCON3  (*((volatile unsigned long *) (SFR_BASE + 0x3020)))
  #define ROMCON4  (*((volatile unsigned long *) (SFR_BASE + 0x3024)))
  #define ROMCON5  (*((volatile unsigned long *) (SFR_BASE + 0x3028)))  
  #define DRAMCON0 (*((volatile unsigned long *) (SFR_BASE + 0x302C)))
  #define DRAMCON1 (*((volatile unsigned long *) (SFR_BASE + 0x3030)))
  #define DRAMCON2 (*((volatile unsigned long *) (SFR_BASE + 0x3034)))
  #define DRAMCON3 (*((volatile unsigned long *) (SFR_BASE + 0x3038)))  
  #define REFEXTCON (*((volatile unsigned long *)(SFR_BASE + 0x303C)))
  #define REFEXTCON (*((volatile unsigned long *)(SFR_BASE + 0x303C)))

  /* Ethernet Group */
  #define BDMATXCON (*((volatile unsigned long *) (SFR_BASE + 0x9000)))
  #define BDMARXCON (*((volatile unsigned long *) (SFR_BASE + 0x9004)))
  #define BDMATXPTR (*((volatile unsigned long *) (SFR_BASE + 0x9008)))
  #define BDMARXPTR (*((volatile unsigned long *) (SFR_BASE + 0x900C)))
  #define BDMARXLSZ (*((volatile unsigned long *) (SFR_BASE + 0x9010)))
  #define BDMASTAT  (*((volatile unsigned long *) (SFR_BASE + 0x9014)))
  #define CAM       (*((volatile unsigned short *) (SFR_BASE + 0x9100)))
  #define BDMATXBUF (*((volatile unsigned short *) (SFR_BASE + 0x9200)))  
  #define BDMARXBUF (*((volatile unsigned long *) (SFR_BASE + 0x9800)))  
  #define MACON     (*((volatile unsigned long *) (SFR_BASE + 0xA000)))  
  #define CAMCON    (*((volatile unsigned long *) (SFR_BASE + 0xA004)))  
  #define MACTXCON  (*((volatile unsigned long *) (SFR_BASE + 0xA008)))  
  #define MACTXSTAT (*((volatile unsigned long *) (SFR_BASE + 0xA00C)))  
  #define MACRXCON  (*((volatile unsigned long *) (SFR_BASE + 0xA010)))  
  #define MACRXSTAT (*((volatile unsigned long *) (SFR_BASE + 0xA014)))  
  #define STADATA   (*((volatile unsigned long *) (SFR_BASE + 0xA018)))  
  #define STACON    (*((volatile unsigned long *) (SFR_BASE + 0xA01C)))  
  #define CAMEN     (*((volatile unsigned long *) (SFR_BASE + 0xA028)))  
  #define EMISSCNT  (*((volatile unsigned long *) (SFR_BASE + 0xA03C)))  
  #define EPZCNT    (*((volatile unsigned long *) (SFR_BASE + 0xA040)))  
  #define ERMPZCNT  (*((volatile unsigned long *) (SFR_BASE + 0xA044)))  
  #define ETXSTAT   (*((volatile unsigned long *) (SFR_BASE + 0x9040)))  

  /* HDLC Channel A */
  #define HMODE_A     (*((volatile unsigned long *) (SFR_BASE + 0x7000)))
  #define HCON_A      (*((volatile unsigned long *) (SFR_BASE + 0x7004)))
  #define HSTAT_A     (*((volatile unsigned long *) (SFR_BASE + 0x7008)))
  #define HINTEN_A    (*((volatile unsigned long *) (SFR_BASE + 0x700C)))
  #define HTXFIFOC_A  (*((volatile unsigned long *) (SFR_BASE + 0x7010)))
  #define HTXFIFOT_A  (*((volatile unsigned long *) (SFR_BASE + 0x7014)))
  #define HRXFIFO_A   (*((volatile unsigned long *) (SFR_BASE + 0x7018)))
  #define HBRGTC_A    (*((volatile unsigned long *) (SFR_BASE + 0x701C)))  
  #define HPRMB_A     (*((volatile unsigned long *) (SFR_BASE + 0x7020)))  
  #define HSAR0_A     (*((volatile unsigned long *) (SFR_BASE + 0x7024)))  
  #define HSAR1_A     (*((volatile unsigned long *) (SFR_BASE + 0x7028)))  
  #define HSAR2_A     (*((volatile unsigned long *) (SFR_BASE + 0x702C)))  
  #define HSAR3_A     (*((volatile unsigned long *) (SFR_BASE + 0x7030)))  
  #define HMASK_A     (*((volatile unsigned long *) (SFR_BASE + 0x7034)))  
  #define DMATxPTR_A  (*((volatile unsigned long *) (SFR_BASE + 0x7038)))  
  #define DMARxPTR_A  (*((volatile unsigned long *) (SFR_BASE + 0x703C)))  
  #define HMFLR_A     (*((volatile unsigned long *) (SFR_BASE + 0x7040)))  
  #define HRBSR_A     (*((volatile unsigned long *) (SFR_BASE + 0x7044)))  

  /* HDLC Channel B */
  #define HMODE_B     (*((volatile unsigned long *) (SFR_BASE + 0x8000)))
  #define HCON_B      (*((volatile unsigned long *) (SFR_BASE + 0x8004)))
  #define HSTAT_B     (*((volatile unsigned long *) (SFR_BASE + 0x8008)))
  #define HINTEN_B    (*((volatile unsigned long *) (SFR_BASE + 0x800C)))
  #define HTXFIFOC_B  (*((volatile unsigned long *) (SFR_BASE + 0x8010)))
  #define HTXFIFOT_B  (*((volatile unsigned long *) (SFR_BASE + 0x8014)))
  #define HRXFIFO_B   (*((volatile unsigned long *) (SFR_BASE + 0x8018)))
  #define HBRGTC_B    (*((volatile unsigned long *) (SFR_BASE + 0x801C)))  
  #define HPRMB_B     (*((volatile unsigned long *) (SFR_BASE + 0x8020)))  
  #define HSAR0_B     (*((volatile unsigned long *) (SFR_BASE + 0x8024)))  
  #define HSAR1_B     (*((volatile unsigned long *) (SFR_BASE + 0x8028)))  
  #define HSAR2_B     (*((volatile unsigned long *) (SFR_BASE + 0x802C)))  
  #define HSAR3_B     (*((volatile unsigned long *) (SFR_BASE + 0x8030)))  
  #define HMASK_B     (*((volatile unsigned long *) (SFR_BASE + 0x8034)))  
  #define DMATxPTR_B  (*((volatile unsigned long *) (SFR_BASE + 0x8038)))  
  #define DMARxPTR_B  (*((volatile unsigned long *) (SFR_BASE + 0x803C)))  
  #define HMFLR_B     (*((volatile unsigned long *) (SFR_BASE + 0x8040)))  
  #define HRBSR_B     (*((volatile unsigned long *) (SFR_BASE + 0x8044)))

  /* I/O Ports */
  #define IOPMOD      (*((volatile unsigned long *) (SFR_BASE + 0x5000)))
  #define IOPCON      (*((volatile unsigned long *) (SFR_BASE + 0x5004)))  
  #define IOPDATA     (*((volatile unsigned long *) (SFR_BASE + 0x5008)))

  /* Interrupt Controller */
  #define INTMOD      (*((volatile unsigned long *) (SFR_BASE + 0x4000)))
  #define INTPND      (*((volatile unsigned long *) (SFR_BASE + 0x4004)))  
  #define INTMSK      (*((volatile unsigned long *) (SFR_BASE + 0x4008)))
  #define INTPRI0     (*((volatile unsigned long *) (SFR_BASE + 0x400C)))
  #define INTPRI1     (*((volatile unsigned long *) (SFR_BASE + 0x4010)))
  #define INTPRI2     (*((volatile unsigned long *) (SFR_BASE + 0x4014)))
  #define INTPRI3     (*((volatile unsigned long *) (SFR_BASE + 0x4018)))
  #define INTPRI4     (*((volatile unsigned long *) (SFR_BASE + 0x401C)))
  #define INTPRI5     (*((volatile unsigned long *) (SFR_BASE + 0x4020)))
  #define INTOFFSET   (*((volatile unsigned long *) (SFR_BASE + 0x4024)))
  #define INTOSET_FIQ (*((volatile unsigned long *) (SFR_BASE + 0x4030)))
  #define INTOSET_IRQ (*((volatile unsigned long *) (SFR_BASE + 0x4034)))

  /* I2C Bus */
  #define IICON       (*((volatile unsigned long *) (SFR_BASE + 0xF000)))
  #define IICBUF      (*((volatile unsigned long *) (SFR_BASE + 0xF004)))
  #define IICPS       (*((volatile unsigned long *) (SFR_BASE + 0xF008)))
  #define IICCOUNT    (*((volatile unsigned long *) (SFR_BASE + 0xF00C)))

  /* GDMA */
  #define GDMACON0    (*((volatile unsigned long *) (SFR_BASE + 0xB000)))
  #define GDMACON1    (*((volatile unsigned long *) (SFR_BASE + 0xC000)))
  #define GDMASRC0    (*((volatile unsigned long *) (SFR_BASE + 0xB004)))
  #define GDMADST0    (*((volatile unsigned long *) (SFR_BASE + 0xB008)))
  #define GDMASRC1    (*((volatile unsigned long *) (SFR_BASE + 0xC004)))
  #define GDMADST1    (*((volatile unsigned long *) (SFR_BASE + 0xC008)))
  #define GDMACNT0    (*((volatile unsigned long *) (SFR_BASE + 0xB00C)))
  #define GDMACNT1    (*((volatile unsigned long *) (SFR_BASE + 0xC00C)))

  /* I2C Bus */
  #define ULCON0      (*((volatile unsigned long *) (SFR_BASE + 0xD000)))
  #define ULCON1      (*((volatile unsigned long *) (SFR_BASE + 0xE000)))
  #define UCON0       (*((volatile unsigned long *) (SFR_BASE + 0xD004)))
  #define UCON1       (*((volatile unsigned long *) (SFR_BASE + 0xE004)))
  #define USTAT0      (*((volatile unsigned long *) (SFR_BASE + 0xD008)))
  #define USTAT1      (*((volatile unsigned long *) (SFR_BASE + 0xE008)))
  #define UTXBUF0     (*((volatile unsigned long *) (SFR_BASE + 0xD00C)))
  #define UTXBUF1     (*((volatile unsigned long *) (SFR_BASE + 0xE00C)))
  #define URXBUF0     (*((volatile unsigned long *) (SFR_BASE + 0xD00C)))
  #define URXBUF1     (*((volatile unsigned long *) (SFR_BASE + 0xD010)))
  #define UBRDIV0     (*((volatile unsigned long *) (SFR_BASE + 0xD014)))
  #define UBRDIV1     (*((volatile unsigned long *) (SFR_BASE + 0xE014)))

  /* Timers */
  #define TMOD        (*((volatile unsigned long *) (SFR_BASE + 0x6000)))
  #define TDATA0      (*((volatile unsigned long *) (SFR_BASE + 0x6004)))
  #define TDATA1      (*((volatile unsigned long *) (SFR_BASE + 0x6008)))
  #define TCNT0       (*((volatile unsigned long *) (SFR_BASE + 0x600C)))
  #define TCNT1       (*((volatile unsigned long *) (SFR_BASE + 0x6010)))

#endif /* __S3C4510_H */