text: /*
   * arch/arm/plat-orion/include/plat/addr-map.h
   *
   * Marvell Orion SoC address map handling.
   *
   * This file is licensed under the terms of the GNU General Public
   * License version 2.  This program is licensed "as is" without any
   * warranty of any kind, whether express or implied.
   */
  
  #ifndef __PLAT_ADDR_MAP_H
  #define __PLAT_ADDR_MAP_H
  
  extern struct mbus_dram_target_info orion_mbus_dram_info;
  
  struct orion_addr_map_cfg {
  	const int num_wins;	/* Total number of windows */
  	const int remappable_wins;
  	void __iomem *bridge_virt_base;
  	int hw_io_coherency;
  
  	/* If NULL, the default cpu_win_can_remap will be used, using
  	   the value in remappable_wins */
  	int (*cpu_win_can_remap) (const struct orion_addr_map_cfg *cfg,
  				  const int win);
  	/* If NULL, the default win_cfg_base will be used, using the
  	   value in bridge_virt_base */
  	void __iomem *(*win_cfg_base) (const struct orion_addr_map_cfg *cfg,
  				 const int win);
  };
  
  /*
   * Information needed to setup one address mapping.
   */
  struct orion_addr_map_info {
  	const int win;
  	const u32 base;
  	const u32 size;
  	const u8 target;
  	const u8 attr;
  	const int remap;
  };
  
  void __init orion_config_wins(struct orion_addr_map_cfg *cfg,
  			      const struct orion_addr_map_info *info);
  
  void __init orion_setup_cpu_win(const struct orion_addr_map_cfg *cfg,
  				const int win, const u32 base,
  				const u32 size, const u8 target,
  				const u8 attr, const int remap);
  
  void __init orion_setup_cpu_mbus_target(const struct orion_addr_map_cfg *cfg,
  					const void __iomem *ddr_window_cpu_base);
  #endif
  