Commit 3ca9fab4 authored by David S. Miller's avatar David S. Miller Committed by David S. Miller

[SPARC]: Add of_io{remap,unmap}().

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 95714e12
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -40,6 +41,7 @@ ...@@ -40,6 +41,7 @@
#include <asm/vaddrs.h> #include <asm/vaddrs.h>
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/of_device.h>
#include <asm/sbus.h> #include <asm/sbus.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
...@@ -143,6 +145,21 @@ void __iomem *sbus_ioremap(struct resource *phyres, unsigned long offset, ...@@ -143,6 +145,21 @@ void __iomem *sbus_ioremap(struct resource *phyres, unsigned long offset,
phyres->start + offset, size, name); phyres->start + offset, size, name);
} }
void __iomem *of_ioremap(struct resource *res, unsigned long offset,
unsigned long size, char *name)
{
return _sparc_alloc_io(res->flags & 0xF,
res->start + offset,
size, name);
}
EXPORT_SYMBOL(of_ioremap);
void of_iounmap(void __iomem *base, unsigned long size)
{
iounmap(base);
}
EXPORT_SYMBOL(of_iounmap);
/* /*
*/ */
void sbus_iounmap(volatile void __iomem *addr, unsigned long size) void sbus_iounmap(volatile void __iomem *addr, unsigned long size)
......
...@@ -129,6 +129,23 @@ static int of_device_resume(struct device * dev) ...@@ -129,6 +129,23 @@ static int of_device_resume(struct device * dev)
return error; return error;
} }
void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name)
{
unsigned long ret = res->start + offset;
if (!request_region(ret, size, name))
ret = 0;
return (void __iomem *) ret;
}
EXPORT_SYMBOL(of_ioremap);
void of_iounmap(void __iomem *base, unsigned long size)
{
release_region((unsigned long) base, size);
}
EXPORT_SYMBOL(of_iounmap);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
struct bus_type isa_bus_type = { struct bus_type isa_bus_type = {
.name = "isa", .name = "isa",
......
...@@ -31,6 +31,9 @@ struct of_device ...@@ -31,6 +31,9 @@ struct of_device
}; };
#define to_of_device(d) container_of(d, struct of_device, dev) #define to_of_device(d) container_of(d, struct of_device, dev)
extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name);
extern void of_iounmap(void __iomem *base, unsigned long size);
extern const struct of_device_id *of_match_device( extern const struct of_device_id *of_match_device(
const struct of_device_id *matches, const struct of_device *dev); const struct of_device_id *matches, const struct of_device *dev);
......
...@@ -32,6 +32,9 @@ struct of_device ...@@ -32,6 +32,9 @@ struct of_device
}; };
#define to_of_device(d) container_of(d, struct of_device, dev) #define to_of_device(d) container_of(d, struct of_device, dev)
extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name);
extern void of_iounmap(void __iomem *base, unsigned long size);
extern const struct of_device_id *of_match_device( extern const struct of_device_id *of_match_device(
const struct of_device_id *matches, const struct of_device *dev); const struct of_device_id *matches, const struct of_device *dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment