text: /*
   * include/asm-arm/arch-ixp23xx/io.h
   *
   * Original Author: Naeem M Afzal <naeem.m.afzal@intel.com>
   * Maintainer: Deepak Saxena <dsaxena@plexity.net>
   *
   * Copyright (C) 2003-2005 Intel Corp.
   * Copyright (C) 2005 MontaVista Software, Inc
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  
  #ifndef __ASM_ARCH_IO_H
  #define __ASM_ARCH_IO_H
  
  #define IO_SPACE_LIMIT 0xffffffff
  
  #define __io(p)		((void __iomem*)((p) + IXP23XX_PCI_IO_VIRT))
  #define __mem_pci(a)	(a)
  
  #include <linux/kernel.h>	/* For BUG */
  
  static inline void __iomem *
  ixp23xx_ioremap(unsigned long addr, unsigned long size, unsigned int mtype)
  {
  	if (addr >= IXP23XX_PCI_MEM_START &&
  		addr <= IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE) {
  		if (addr + size > IXP23XX_PCI_MEM_START + IXP23XX_PCI_MEM_SIZE)
  			return NULL;
  
  		return (void __iomem *)
   			((addr - IXP23XX_PCI_MEM_START) + IXP23XX_PCI_MEM_VIRT);
  	}
  
  	return __arm_ioremap(addr, size, mtype);
  }
  
  static inline void
  ixp23xx_iounmap(void __iomem *addr)
  {
  	if ((((u32)addr) >= IXP23XX_PCI_MEM_VIRT) &&
  	    (((u32)addr) < IXP23XX_PCI_MEM_VIRT + IXP23XX_PCI_MEM_SIZE))
  		return;
  
  	__iounmap(addr);
  }
  
  #define __arch_ioremap(a,s,f)	ixp23xx_ioremap(a,s,f)
  #define __arch_iounmap(a)	ixp23xx_iounmap(a)
  
  
  #endif
  