[PATCH] Fix implicit declaration of inb/outb
Bernhard Walle
bwalle at suse.de
Tue Jun 3 03:33:57 EDT 2008
This patch fixes following compiler warning:
purgatory/arch/i386/console-x86.c:84: \
warning: implicit declaration of function `outb'
purgatory/arch/i386/console-x86.c:89: \
warning: implicit declaration of function `inb'
Found on x86_64. The problem did not happen with i386.
Fix tested on x86_64-suse-linux and i586-suse-linux.
I also added __always_inline__ to make sure that the function gets always
inlined, regardless of optimisation compiler flags.
Signed-off-by: Bernhard Walle <bwalle at suse.de>
---
purgatory/arch/i386/include/arch/io.h | 42 ++++++++++++++++++++-----------
purgatory/arch/x86_64/include/arch/io.h | 40 +++--------------------------
2 files changed, 31 insertions(+), 51 deletions(-)
diff --git a/purgatory/arch/i386/include/arch/io.h b/purgatory/arch/i386/include/arch/io.h
index 13ad887..0a9430a 100644
--- a/purgatory/arch/i386/include/arch/io.h
+++ b/purgatory/arch/i386/include/arch/io.h
@@ -1,10 +1,11 @@
-#ifndef ARCH_IO_H
-#define ARCH_IO_H
+#ifndef ARCH_I386_IO_H
+#define ARCH_I386_IO_H
#include <stdint.h>
/* Helper functions for directly doing I/O */
-extern inline uint8_t inb(uint16_t port)
+static inline __attribute__((__always_inline__))
+uint8_t inb(uint16_t port)
{
uint8_t result;
@@ -15,7 +16,8 @@ extern inline uint8_t inb(uint16_t port)
return result;
}
-extern inline uint16_t inw(uint16_t port)
+static inline __attribute__((__always_inline__))
+uint16_t inw(uint16_t port)
{
uint16_t result;
@@ -26,7 +28,8 @@ extern inline uint16_t inw(uint16_t port)
return result;
}
-extern inline uint32_t inl(uint32_t port)
+static inline __attribute__((__always_inline__))
+uint32_t inl(uint32_t port)
{
uint32_t result;
@@ -37,7 +40,8 @@ extern inline uint32_t inl(uint32_t port)
return result;
}
-extern inline void outb (uint8_t value, uint16_t port)
+static inline __attribute__((__always_inline__))
+void outb (uint8_t value, uint16_t port)
{
__asm__ __volatile__ (
"outb %b0,%w1"
@@ -45,7 +49,8 @@ extern inline void outb (uint8_t value, uint16_t port)
:"a" (value), "Nd" (port));
}
-extern inline void outw (uint16_t value, uint16_t port)
+static inline __attribute__((__always_inline__))
+void outw (uint16_t value, uint16_t port)
{
__asm__ __volatile__ (
"outw %w0,%w1"
@@ -53,7 +58,8 @@ extern inline void outw (uint16_t value, uint16_t port)
:"a" (value), "Nd" (port));
}
-extern inline void outl (uint32_t value, uint16_t port)
+static inline __attribute__((__always_inline__))
+void outl (uint32_t value, uint16_t port)
{
__asm__ __volatile__ (
"outl %0,%w1"
@@ -69,30 +75,36 @@ extern inline void outl (uint32_t value, uint16_t port)
* memory location directly.
*/
-static inline unsigned char readb(const volatile void *addr)
+static inline __attribute__((__always_inline__))
+unsigned char readb(const volatile void *addr)
{
return *(volatile unsigned char *) addr;
}
-static inline unsigned short readw(const volatile void *addr)
+static inline __attribute__((__always_inline__))
+unsigned short readw(const volatile void *addr)
{
return *(volatile unsigned short *) addr;
}
-static inline unsigned int readl(const volatile void *addr)
+static inline __attribute__((__always_inline__))
+unsigned int readl(const volatile void *addr)
{
return *(volatile unsigned int *) addr;
}
-static inline void writeb(unsigned char b, volatile void *addr)
+static inline __attribute__((__always_inline__))
+void writeb(unsigned char b, volatile void *addr)
{
*(volatile unsigned char *) addr = b;
}
-static inline void writew(unsigned short b, volatile void *addr)
+static inline __attribute__((__always_inline__))
+void writew(unsigned short b, volatile void *addr)
{
*(volatile unsigned short *) addr = b;
}
-static inline void writel(unsigned int b, volatile void *addr)
+static inline __attribute__((__always_inline__))
+void writel(unsigned int b, volatile void *addr)
{
*(volatile unsigned int *) addr = b;
}
-#endif /* ARCH_IO_H */
+#endif /* ARCH_I386_IO_H */
diff --git a/purgatory/arch/x86_64/include/arch/io.h b/purgatory/arch/x86_64/include/arch/io.h
index dcd01bf..464cd14 100644
--- a/purgatory/arch/x86_64/include/arch/io.h
+++ b/purgatory/arch/x86_64/include/arch/io.h
@@ -1,39 +1,7 @@
-#ifndef ARCH_IO_H
-#define ARCH_IO_H
+#ifndef ARCH_X86_64_IO_H
+#define ARCH_X86_64_IO_H
#include <stdint.h>
+#include "../../../i386/include/arch/io.h"
-/*
- * readX/writeX() are used to access memory mapped devices. On some
- * architectures the memory mapped IO stuff needs to be accessed
- * differently. On the x86 architecture, we just read/write the
- * memory location directly.
- */
-
-static inline unsigned char readb(const volatile void *addr)
-{
- return *(volatile unsigned char *) addr;
-}
-static inline unsigned short readw(const volatile void *addr)
-{
- return *(volatile unsigned short *) addr;
-}
-static inline unsigned int readl(const volatile void *addr)
-{
- return *(volatile unsigned int *) addr;
-}
-
-static inline void writeb(unsigned char b, volatile void *addr)
-{
- *(volatile unsigned char *) addr = b;
-}
-static inline void writew(unsigned short b, volatile void *addr)
-{
- *(volatile unsigned short *) addr = b;
-}
-static inline void writel(unsigned int b, volatile void *addr)
-{
- *(volatile unsigned int *) addr = b;
-}
-
-#endif /* ARCH_IO_H */
+#endif /* ARCH_X86_64_IO_H */
--
1.5.4.5
More information about the kexec
mailing list