aboutsummaryrefslogtreecommitdiff
path: root/src/farptr.h
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-03-09 00:59:58 -0500
committerKevin O'Connor <kevin@koconnor.net>2008-03-09 00:59:58 -0500
commit843a62c3e54154077f0197f009491e2a712c3175 (patch)
tree77a37490f95ad4ce23daa9962a0717f8f5c2a079 /src/farptr.h
parentdcc7a4f3e7f829662f594d175ec9c145aa37e226 (diff)
downloadseabios-hppa-843a62c3e54154077f0197f009491e2a712c3175.zip
seabios-hppa-843a62c3e54154077f0197f009491e2a712c3175.tar.gz
seabios-hppa-843a62c3e54154077f0197f009491e2a712c3175.tar.bz2
Optimize insb/outsb/insw/etc. functions.
Use "string ops" to simplify port accesses. Always run "cld" on entry to C code.
Diffstat (limited to 'src/farptr.h')
-rw-r--r--src/farptr.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/farptr.h b/src/farptr.h
index 7216f23..e142843 100644
--- a/src/farptr.h
+++ b/src/farptr.h
@@ -6,6 +6,8 @@
#ifndef __FARPTR_H
#define __FARPTR_H
+#include "ioport.h" // insb
+
#define READ8_SEG(SEG, var) ({ \
u8 __value; \
__asm__ __volatile__("movb %%" #SEG ":%1, %b0" \
@@ -100,4 +102,29 @@ extern void __force_link_error__unknown_type();
#define SET_FARPTR(ptr, val) do { (var) = (val); } while (0)
#endif
+static inline void insb_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ insb(port, (u8*)(offset+0), count);
+}
+static inline void insw_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ insw(port, (u16*)(offset+0), count);
+}
+static inline void insl_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ insl(port, (u32*)(offset+0), count);
+}
+static inline void outsb_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ outsb(port, (u8*)(offset+0), count);
+}
+static inline void outsw_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ outsw(port, (u16*)(offset+0), count);
+}
+static inline void outsl_seg(u16 port, u16 segment, u16 offset, u16 count) {
+ SET_SEG(ES, segment);
+ outsl(port, (u32*)(offset+0), count);
+}
+
#endif // farptr.h