hardware.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/include/asm-arm/arch-pxa/hardware.h
  3.  *
  4.  *  Author: Nicolas Pitre
  5.  *  Created: Jun 15, 2001
  6.  *  Copyright: MontaVista Software Inc.
  7.  *  
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License version 2 as
  10.  * published by the Free Software Foundation.
  11.  */
  12. #ifndef __ASM_ARCH_HARDWARE_H
  13. #define __ASM_ARCH_HARDWARE_H
  14. #include <linux/config.h>
  15. #include <asm/mach-types.h>
  16. /*
  17.  * These are statically mapped PCMCIA IO space for designs using it as a
  18.  * generic IO bus, typically with ISA parts, hardwired IDE interfaces, etc.
  19.  * The actual PCMCIA code is mapping required IO region at run time.
  20.  */
  21. #define PCMCIA_IO_0_BASE 0xf6000000
  22. #define PCMCIA_IO_1_BASE 0xf7000000
  23. /*
  24.  * We requires absolute addresses.
  25.  */
  26. #define PCIO_BASE 0
  27. /*
  28.  * Workarounds for at least 2 errata so far require this.
  29.  * The mapping is set in mach-pxa/generic.c.
  30.  */
  31. #define UNCACHED_PHYS_0 0xff000000
  32. #define UNCACHED_ADDR UNCACHED_PHYS_0
  33. /*
  34.  * Intel PXA internal I/O mappings:
  35.  *
  36.  * 0x40000000 - 0x41ffffff <--> 0xf8000000 - 0xf9ffffff
  37.  * 0x44000000 - 0x45ffffff <--> 0xfa000000 - 0xfbffffff
  38.  * 0x48000000 - 0x49ffffff <--> 0xfc000000 - 0xfdffffff
  39.  */
  40. #define io_p2v(x) ( ((x) | 0xbe000000) ^ (~((x) >> 1) & 0x06000000) )
  41. #define io_v2p( x ) ( ((x) & 0x41ffffff) ^ ( ((x) & 0x06000000) << 1) )
  42. #ifndef __ASSEMBLY__
  43. #if 0
  44. # define __REG(x) (*((volatile u32 *)io_p2v(x)))
  45. #else
  46. /*
  47.  * This __REG() version gives the same results as the one above,  except
  48.  * that we are fooling gcc somehow so it generates far better and smaller
  49.  * assembly code for access to contigous registers.  It's a shame that gcc
  50.  * doesn't guess this by itself.
  51.  */
  52. #include <asm/types.h>
  53. typedef struct { volatile u32 offset[4096]; } __regbase;
  54. # define __REGP(x) ((__regbase *)((x)&~4095))->offset[((x)&4095)>>2]
  55. # define __REG(x) __REGP(io_p2v(x))
  56. #endif
  57. /* Let's kick gcc's ass again... */
  58. # define __REG2(x,y)
  59. ( __builtin_constant_p(y) ? (__REG((x) + (y))) 
  60.   : (*(volatile u32 *)((u32)&__REG(x) + (y))) )
  61. # define __PREG(x) (io_v2p((u32)&(x)))
  62. #else
  63. # define __REG(x) io_p2v(x)
  64. # define __PREG(x) io_v2p(x)
  65. #endif
  66. #include "pxa-regs.h"
  67. #ifndef __ASSEMBLY__
  68. /*
  69.  * GPIO edge detection for IRQs:
  70.  * IRQs are generated on Falling-Edge, Rising-Edge, or both.
  71.  * This must be called *before* the corresponding IRQ is registered.
  72.  * Use this instead of directly setting GRER/GFER.
  73.  */
  74. #define GPIO_FALLING_EDGE       1
  75. #define GPIO_RISING_EDGE        2
  76. #define GPIO_BOTH_EDGES         3
  77. extern void set_GPIO_IRQ_edge( int gpio_nr, int edge_mask );
  78. /*
  79.  * Handy routine to set GPIO alternate functions
  80.  */
  81. extern void set_GPIO_mode( int gpio_mode );
  82. /*
  83.  * return current lclk frequency in units of 10kHz
  84.  */
  85. extern unsigned int get_lclk_frequency_10khz(void);
  86. #endif
  87. /*
  88.  * Implementation specifics
  89.  */
  90. //#ifdef CONFIG_ARCH_LUBBOCK
  91. #include "lubbock.h"
  92. //#endif
  93. //#ifdef CONFIG_ARCH_PXA_IDP
  94. #include "idp.h"
  95. //#endif
  96. //#ifdef CONFIG_ARCH_PXA_CERF
  97. #include "cerf.h"
  98. //#endif
  99. #endif  /* _ASM_ARCH_HARDWARE_H */