提交 4fde87cb 编写于 作者: G GuanXuetao

unicore32: replace unicore32-specific iomap functions with generic lib implementation

1. define and enable CONFIG_GENERIC_IOMAP
2. define unicore32-specific PCI_IOBASE for asm-generic/io.h
3. define HAVE_ARCH_PIO_SIZE and unicore32-specific PIO_* macros
4. remove all unicore32-specific iomap functions
Signed-off-by: NGuan Xuetao <gxt@mprc.pku.edu.cn>
Reviewed-and-Acked-by: NArnd Bergmann <arnd@arndb.de>
上级 ce443ab5
......@@ -30,6 +30,9 @@ config GENERIC_CLOCKEVENTS
config GENERIC_CSUM
def_bool y
config GENERIC_IOMAP
def_bool y
config NO_IOPORT
bool
......
......@@ -18,6 +18,7 @@
#include <asm/memory.h>
#include <asm/system.h>
#define PCI_IOBASE io_p2v(PKUNITY_PCILIO_BASE)
#include <asm-generic/io.h>
/*
......@@ -38,9 +39,6 @@ extern void __uc32_iounmap(volatile void __iomem *addr);
#define ioremap_cached(cookie, size) __uc32_ioremap_cached(cookie, size)
#define iounmap(cookie) __uc32_iounmap(cookie)
extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
extern void ioport_unmap(void __iomem *addr);
/*
* Convert a physical pointer to a virtual kernel pointer for /dev/mem
* access
......@@ -48,5 +46,10 @@ extern void ioport_unmap(void __iomem *addr);
#undef xlate_dev_mem_ptr
#define xlate_dev_mem_ptr(p) __va(p)
#define HAVE_ARCH_PIO_SIZE
#define PIO_OFFSET (unsigned int)(PCI_IOBASE)
#define PIO_MASK (unsigned int)(IO_SPACE_LIMIT)
#define PIO_RESERVED (PIO_OFFSET + PIO_MASK + 1)
#endif /* __KERNEL__ */
#endif /* __UNICORE_IO_H__ */
......@@ -3,7 +3,7 @@
#
obj-y := extable.o fault.o init.o pgd.o mmu.o
obj-y += iomap.o flush.o ioremap.o
obj-y += flush.o ioremap.o
obj-$(CONFIG_SWIOTLB) += dma-swiotlb.o
......
/*
* linux/arch/unicore32/mm/iomap.c
*
* Code specific to PKUnity SoC and UniCore ISA
*
* Copyright (C) 2001-2010 GUAN Xue-tao
*
* 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.
*
* Map IO port and PCI memory spaces so that {read,write}[bwl] can
* be used to access this memory.
*/
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/ioport.h>
#include <linux/io.h>
#ifdef __io
void __iomem *ioport_map(unsigned long port, unsigned int nr)
{
/* we map PC lagcy 64K IO port to PCI IO space 0x80030000 */
return (void __iomem *) (unsigned long)
io_p2v((port & 0xffff) + PKUNITY_PCILIO_BASE);
}
EXPORT_SYMBOL(ioport_map);
void ioport_unmap(void __iomem *addr)
{
}
EXPORT_SYMBOL(ioport_unmap);
#endif
#ifdef CONFIG_PCI
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
{
resource_size_t start = pci_resource_start(dev, bar);
resource_size_t len = pci_resource_len(dev, bar);
unsigned long flags = pci_resource_flags(dev, bar);
if (!len || !start)
return NULL;
if (maxlen && len > maxlen)
len = maxlen;
if (flags & IORESOURCE_IO)
return ioport_map(start, len);
if (flags & IORESOURCE_MEM) {
if (flags & IORESOURCE_CACHEABLE)
return ioremap(start, len);
return ioremap_nocache(start, len);
}
return NULL;
}
EXPORT_SYMBOL(pci_iomap);
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册