[SeaBIOS] Geode register functions
Kevin O'Connor
kevin at koconnor.net
Sat Sep 15 18:20:32 CEST 2012
On Sat, Sep 15, 2012 at 04:03:13PM +0200, Christian Gmeiner wrote:
> 2012/9/11 Kevin O'Connor <kevin at koconnor.net>:
> > On Mon, Sep 03, 2012 at 12:37:53PM -0400, Kevin O'Connor wrote:
> >> It would be nice if the geode code could use the same style register
> >> access functions that the stdvga code uses. I put together a patch
> >> (totally untested) below. Is this okay?
> >>
> > FYI - I pushed this patch.
>
> something is wrong with this patch... or even logical :/
Indeed - the u64_u32 union was confusingly named. Does the patch
below fix it for you?
-Kevin
>From 30e6af0dcd8d967c083311f3a105a68ac5e158e7 Mon Sep 17 00:00:00 2001
From: Kevin O'Connor <kevin at koconnor.net>
Date: Sat, 15 Sep 2012 12:17:37 -0400
Subject: [PATCH] Fix 'union u64_u32_u' member names.
To: seabios at seabios.org
Use 'lo' to mean the low bits and 'hi' to mean the high bits of a
64bit value.
Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
src/byteorder.h | 2 +-
src/farptr.h | 4 ++--
src/types.h | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/byteorder.h b/src/byteorder.h
index 94e3a3b..5a8a64a 100644
--- a/src/byteorder.h
+++ b/src/byteorder.h
@@ -17,8 +17,8 @@ static inline u32 __swab32(u32 val) {
static inline u64 __swab64(u64 val) {
union u64_u32_u i, o;
i.val = val;
- o.hi = __swab32(i.lo);
o.lo = __swab32(i.hi);
+ o.hi = __swab32(i.lo);
return o.val;
}
diff --git a/src/farptr.h b/src/farptr.h
index 3a85c6b..5b6c5c1 100644
--- a/src/farptr.h
+++ b/src/farptr.h
@@ -26,8 +26,8 @@ extern u16 __segment_FS, __segment_GS;
#define READ64_SEG(prefix, SEG, value, var) do { \
union u64_u32_u __value; \
union u64_u32_u *__r64_ptr = (union u64_u32_u *)&(var); \
- READ32_SEG(prefix, SEG, __value.hi, __r64_ptr->hi); \
READ32_SEG(prefix, SEG, __value.lo, __r64_ptr->lo); \
+ READ32_SEG(prefix, SEG, __value.hi, __r64_ptr->hi); \
*(u64*)&(value) = __value.val; \
} while (0)
#define WRITE8_SEG(prefix, SEG, var, value) \
@@ -44,8 +44,8 @@ extern u16 __segment_FS, __segment_GS;
union u64_u32_u *__w64_ptr = (union u64_u32_u *)&(var); \
typeof(var) __value_tmp = (value); \
__value.val = *(u64*)&__value_tmp; \
- WRITE32_SEG(prefix, SEG, __w64_ptr->hi, __value.hi); \
WRITE32_SEG(prefix, SEG, __w64_ptr->lo, __value.lo); \
+ WRITE32_SEG(prefix, SEG, __w64_ptr->hi, __value.hi); \
} while (0)
// Macros for automatically choosing the appropriate memory size
diff --git a/src/types.h b/src/types.h
index b10f3b3..24b078e 100644
--- a/src/types.h
+++ b/src/types.h
@@ -17,7 +17,7 @@ typedef signed long long s64;
typedef u32 size_t;
union u64_u32_u {
- struct { u32 hi, lo; };
+ struct { u32 lo, hi; };
u64 val;
};
--
1.7.11.4
More information about the SeaBIOS
mailing list