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