x86 code reinvents io*/out* in a few places. To prepare for a common pci driver use the common accessors from io.h in pci.c and vmexit.c. Now we use the correct order (value, port) for out* too. Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> Reviewed-by: Radim Krčmář <rkrcmar@xxxxxxxxxx> --- lib/x86/pci.c | 14 ++------------ x86/vmexit.c | 40 ++++++---------------------------------- 2 files changed, 8 insertions(+), 46 deletions(-) diff --git a/lib/x86/pci.c b/lib/x86/pci.c index 231668a72101f..6aa6d70353127 100644 --- a/lib/x86/pci.c +++ b/lib/x86/pci.c @@ -1,21 +1,11 @@ #include <linux/pci_regs.h> #include "pci.h" +#include "io.h" -static void outl(unsigned short port, unsigned val) -{ - asm volatile("outl %0, %w1" : : "a"(val), "Nd"(port)); -} - -static unsigned inl(unsigned short port) -{ - unsigned data; - asm volatile("inl %w1, %0" : "=a"(data) : "Nd"(port)); - return data; -} static uint32_t pci_config_read(pcidevaddr_t dev, uint8_t reg) { uint32_t index = reg | (dev << 8) | (0x1 << 31); - outl(0xCF8, index); + outl(index, 0xCF8); return inl(0xCFC); } diff --git a/x86/vmexit.c b/x86/vmexit.c index 1413454d9ccb6..e9f240872788a 100644 --- a/x86/vmexit.c +++ b/x86/vmexit.c @@ -6,6 +6,7 @@ #include "x86/desc.h" #include "x86/pci.h" #include "x86/acpi.h" +#include "x86/io.h" struct test { void (*func)(void); @@ -15,35 +16,6 @@ struct test { bool (*next)(struct test *); }; -static void outb(unsigned short port, unsigned val) -{ - asm volatile("outb %b0, %w1" : : "a"(val), "Nd"(port)); -} - -static void outw(unsigned short port, unsigned val) -{ - asm volatile("outw %w0, %w1" : : "a"(val), "Nd"(port)); -} - -static void outl(unsigned short port, unsigned val) -{ - asm volatile("outl %0, %w1" : : "a"(val), "Nd"(port)); -} - -static unsigned int inb(unsigned short port) -{ - unsigned int val; - asm volatile("xorl %0, %0; inb %w1, %b0" : "=a"(val) : "Nd"(port)); - return val; -} - -static unsigned int inl(unsigned short port) -{ - unsigned int val; - asm volatile("inl %w1, %0" : "=a"(val) : "Nd"(port)); - return val; -} - #define GOAL (1ull << 30) static int nr_cpus; @@ -123,7 +95,7 @@ static void inl_nop_kernel(void) static void outl_elcr_kernel(void) { - outb(0x4d0, 0); + outb(0, 0x4d0); } static void mov_dr(void) @@ -201,17 +173,17 @@ static void pci_mem_testl(void) static void pci_io_testb(void) { - outb(pci_test.ioport, pci_test.data); + outb(pci_test.data, pci_test.ioport); } static void pci_io_testw(void) { - outw(pci_test.ioport, pci_test.data); + outw(pci_test.data, pci_test.ioport); } static void pci_io_testl(void) { - outl(pci_test.ioport, pci_test.data); + outl(pci_test.data, pci_test.ioport); } static uint8_t ioreadb(unsigned long addr, bool io) @@ -236,7 +208,7 @@ static uint32_t ioreadl(unsigned long addr, bool io) static void iowriteb(unsigned long addr, uint8_t data, bool io) { if (io) { - outb(addr, data); + outb(data, addr); } else { *(volatile uint8_t *)addr = data; } -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html