Browse Source

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

Signed-off-by: David S. Miller <davem@davemloft.net>
David S. Miller 19 years ago
parent
commit
3ca9fab410

+ 17 - 0
arch/sparc/kernel/ioport.c

@@ -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 @@
 #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,
 	    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)

+ 17 - 0
arch/sparc64/kernel/of_device.c

@@ -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",

+ 3 - 0
include/asm-sparc/of_device.h

@@ -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);
 
 

+ 3 - 0
include/asm-sparc64/of_device.h

@@ -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);