Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20a1080d authored by Russell King's avatar Russell King
Browse files

ARM: io: convert ioremap*() to functions



Convert the ioremap*() preprocessor macros to real functions, moving
them out of line.  This allows us to kill off __arm_ioremap(), and
__arm_iounmap() helpers, and remove __arm_ioremap_pfn_caller() from
global view.

Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 1e2c727f
Loading
Loading
Loading
Loading
+13 −11
Original line number Original line Diff line number Diff line
@@ -140,16 +140,11 @@ static inline u32 __raw_readl(const volatile void __iomem *addr)
 * The _caller variety takes a __builtin_return_address(0) value for
 * The _caller variety takes a __builtin_return_address(0) value for
 * /proc/vmalloc to use - and should only be used in non-inline functions.
 * /proc/vmalloc to use - and should only be used in non-inline functions.
 */
 */
extern void __iomem *__arm_ioremap_pfn_caller(unsigned long, unsigned long,
	size_t, unsigned int, void *);
extern void __iomem *__arm_ioremap_caller(phys_addr_t, size_t, unsigned int,
extern void __iomem *__arm_ioremap_caller(phys_addr_t, size_t, unsigned int,
	void *);
	void *);

extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int);
extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int);
extern void __iomem *__arm_ioremap(phys_addr_t, size_t, unsigned int);
extern void __iomem *__arm_ioremap_exec(phys_addr_t, size_t, bool cached);
extern void __iomem *__arm_ioremap_exec(phys_addr_t, size_t, bool cached);
extern void __iounmap(volatile void __iomem *addr);
extern void __iounmap(volatile void __iomem *addr);
extern void __arm_iounmap(volatile void __iomem *addr);


extern void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t,
extern void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t,
	unsigned int, void *);
	unsigned int, void *);
@@ -390,12 +385,19 @@ static inline void memcpy_toio(volatile void __iomem *to, const void *from,
 * Eg, a CPU not implementing read allocate but implementing write allocate
 * Eg, a CPU not implementing read allocate but implementing write allocate
 * will provide a write allocate mapping instead.
 * will provide a write allocate mapping instead.
 */
 */
#define ioremap(cookie,size)		__arm_ioremap((cookie), (size), MT_DEVICE)
void __iomem *ioremap(resource_size_t res_cookie, size_t size);
#define ioremap_nocache(cookie,size)	__arm_ioremap((cookie), (size), MT_DEVICE)
#define ioremap ioremap
#define ioremap_cache(cookie,size)	__arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
#define ioremap_nocache ioremap
#define ioremap_wc(cookie,size)		__arm_ioremap((cookie), (size), MT_DEVICE_WC)

#define ioremap_wt(cookie,size)		__arm_ioremap((cookie), (size), MT_DEVICE_WC)
void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size);
#define iounmap				__arm_iounmap
#define ioremap_cache ioremap_cache

void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size);
#define ioremap_wc ioremap_wc
#define ioremap_wt ioremap_wc

void iounmap(volatile void __iomem *iomem_cookie);
#define iounmap iounmap


/*
/*
 * io{read,write}{16,32}be() macros
 * io{read,write}{16,32}be() macros
+23 −10
Original line number Original line Diff line number Diff line
@@ -255,7 +255,7 @@ remap_area_supersections(unsigned long virt, unsigned long pfn,
}
}
#endif
#endif


void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn,
static void __iomem * __arm_ioremap_pfn_caller(unsigned long pfn,
	unsigned long offset, size_t size, unsigned int mtype, void *caller)
	unsigned long offset, size_t size, unsigned int mtype, void *caller)
{
{
	const struct mem_type *type;
	const struct mem_type *type;
@@ -371,13 +371,26 @@ void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t,
				      unsigned int, void *) =
				      unsigned int, void *) =
	__arm_ioremap_caller;
	__arm_ioremap_caller;


void __iomem *
void __iomem *ioremap(resource_size_t res_cookie, size_t size)
__arm_ioremap(phys_addr_t phys_addr, size_t size, unsigned int mtype)
{
	return arch_ioremap_caller(res_cookie, size, MT_DEVICE,
				   __builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap);

void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size)
{
	return arch_ioremap_caller(res_cookie, size, MT_DEVICE_CACHED,
				   __builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap_cache);

void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size)
{
{
	return arch_ioremap_caller(phys_addr, size, mtype,
	return arch_ioremap_caller(res_cookie, size, MT_DEVICE_WC,
				   __builtin_return_address(0));
				   __builtin_return_address(0));
}
}
EXPORT_SYMBOL(__arm_ioremap);
EXPORT_SYMBOL(ioremap_wc);


/*
/*
 * Remap an arbitrary physical address space into the kernel virtual
 * Remap an arbitrary physical address space into the kernel virtual
@@ -431,11 +444,11 @@ void __iounmap(volatile void __iomem *io_addr)


void (*arch_iounmap)(volatile void __iomem *) = __iounmap;
void (*arch_iounmap)(volatile void __iomem *) = __iounmap;


void __arm_iounmap(volatile void __iomem *io_addr)
void iounmap(volatile void __iomem *cookie)
{
{
	arch_iounmap(io_addr);
	arch_iounmap(cookie);
}
}
EXPORT_SYMBOL(__arm_iounmap);
EXPORT_SYMBOL(iounmap);


#ifdef CONFIG_PCI
#ifdef CONFIG_PCI
static int pci_ioremap_mem_type = MT_DEVICE;
static int pci_ioremap_mem_type = MT_DEVICE;
+26 −13
Original line number Original line Diff line number Diff line
@@ -351,30 +351,43 @@ void __iomem *__arm_ioremap_pfn(unsigned long pfn, unsigned long offset,
}
}
EXPORT_SYMBOL(__arm_ioremap_pfn);
EXPORT_SYMBOL(__arm_ioremap_pfn);


void __iomem *__arm_ioremap_pfn_caller(unsigned long pfn, unsigned long offset,
void __iomem *__arm_ioremap_caller(phys_addr_t phys_addr, size_t size,
			   size_t size, unsigned int mtype, void *caller)
				   unsigned int mtype, void *caller)
{
{
	return __arm_ioremap_pfn(pfn, offset, size, mtype);
	return (void __iomem *)phys_addr;
}
}


void __iomem *__arm_ioremap(phys_addr_t phys_addr, size_t size,
void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t, unsigned int, void *);
			    unsigned int mtype)

void __iomem *ioremap(resource_size_t res_cookie, size_t size)
{
{
	return (void __iomem *)phys_addr;
	return __arm_ioremap_caller(res_cookie, size, MT_DEVICE,
				    __builtin_return_address(0));
}
}
EXPORT_SYMBOL(__arm_ioremap);
EXPORT_SYMBOL(ioremap);


void __iomem * (*arch_ioremap_caller)(phys_addr_t, size_t, unsigned int, void *);
void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size)
{
	return __arm_ioremap_caller(res_cookie, size, MT_DEVICE_CACHED,
				    __builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap_cache);


void __iomem *__arm_ioremap_caller(phys_addr_t phys_addr, size_t size,
void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size)
				   unsigned int mtype, void *caller)
{
	return __arm_ioremap_caller(res_cookie, size, MT_DEVICE_WC,
				    __builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap_wc);

void __iounmap(volatile void __iomem *addr)
{
{
	return __arm_ioremap(phys_addr, size, mtype);
}
}
EXPORT_SYMBOL(__iounmap);


void (*arch_iounmap)(volatile void __iomem *);
void (*arch_iounmap)(volatile void __iomem *);


void __arm_iounmap(volatile void __iomem *addr)
void iounmap(volatile void __iomem *addr)
{
{
}
}
EXPORT_SYMBOL(__arm_iounmap);
EXPORT_SYMBOL(iounmap);