diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-03-09 00:59:58 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-03-09 00:59:58 -0500 |
commit | 843a62c3e54154077f0197f009491e2a712c3175 (patch) | |
tree | 77a37490f95ad4ce23daa9962a0717f8f5c2a079 /src/farptr.h | |
parent | dcc7a4f3e7f829662f594d175ec9c145aa37e226 (diff) | |
download | seabios-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.h | 27 |
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 |