aboutsummaryrefslogtreecommitdiff
path: root/src/x86.h
diff options
context:
space:
mode:
authorAmeya Palande <2ameya@gmail.com>2015-02-17 14:00:49 -0800
committerKevin O'Connor <kevin@koconnor.net>2015-02-18 15:01:54 -0500
commitbc82fa431ef3a0791f637c54fc8065b3fbc13772 (patch)
tree9ffa25fda7007d9e8de10413bb187afb94604f01 /src/x86.h
parent4c59f5d83044df4d57b90958b0fdfcecb913fddb (diff)
downloadseabios-hppa-bc82fa431ef3a0791f637c54fc8065b3fbc13772.zip
seabios-hppa-bc82fa431ef3a0791f637c54fc8065b3fbc13772.tar.gz
seabios-hppa-bc82fa431ef3a0791f637c54fc8065b3fbc13772.tar.bz2
x86: add barrier to read{b,w,l} and write{b,w,l} functions
Use barrier() for memory mapped IO functions. This fixes pvscsi driver to boot on QEMU's pvscsi controller. Test command: qemu -m 512 --enable-kvm -device pvscsi,id=pvscsi0 -device scsi-disk,bus=pvscsi0.0,drive=drive0 -drive id=drive0,if=none,file=ubuntu1410.img,if=none -bios seabios/out/bios.bin Signed-off-by: Ameya Palande <2ameya@gmail.com> Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/x86.h')
-rw-r--r--src/x86.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/x86.h b/src/x86.h
index 57773d2..7798b1c 100644
--- a/src/x86.h
+++ b/src/x86.h
@@ -176,22 +176,31 @@ static inline void outsl(u16 port, u32 *data, u32 count) {
}
static inline void writel(void *addr, u32 val) {
+ barrier();
*(volatile u32 *)addr = val;
}
static inline void writew(void *addr, u16 val) {
+ barrier();
*(volatile u16 *)addr = val;
}
static inline void writeb(void *addr, u8 val) {
+ barrier();
*(volatile u8 *)addr = val;
}
static inline u32 readl(const void *addr) {
- return *(volatile const u32 *)addr;
+ u32 val = *(volatile const u32 *)addr;
+ barrier();
+ return val;
}
static inline u16 readw(const void *addr) {
- return *(volatile const u16 *)addr;
+ u16 val = *(volatile const u16 *)addr;
+ barrier();
+ return val;
}
static inline u8 readb(const void *addr) {
- return *(volatile const u8 *)addr;
+ u8 val = *(volatile const u8 *)addr;
+ barrier();
+ return val;
}
// GDT bits