[SeaBIOS] [PATCH 3/8] Convert timer code EBDA variables to VARLOW variables.

Kevin O'Connor kevin at koconnor.net
Mon May 14 05:34:57 CEST 2012


Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
 src/biosvar.h |    6 ------
 src/clock.c   |   32 +++++++++++++++++---------------
 2 files changed, 17 insertions(+), 21 deletions(-)

diff --git a/src/biosvar.h b/src/biosvar.h
index 0674df6..5a77f7d 100644
--- a/src/biosvar.h
+++ b/src/biosvar.h
@@ -226,8 +226,6 @@ struct extended_bios_data_area_s {
     u8 ps2ctr;
     struct usbkeyinfo usbkey_last;
 
-    int RTCusers;
-
     // El Torito Emulation data
     struct cdemu_s cdemu;
 
@@ -238,10 +236,6 @@ struct extended_bios_data_area_s {
     u8 cdrom_locks[CONFIG_MAX_EXTDRIVE];
 
     u16 boot_sequence;
-
-    /* TSC emulation timekeepers */
-    u64 tsc_8254;
-    int last_tsc_8254;
 } PACKED;
 
 // The initial size and location of EBDA
diff --git a/src/clock.c b/src/clock.c
index e8a48a1..5767996 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -108,22 +108,24 @@ calibrate_tsc(void)
     dprintf(1, "CPU Mhz=%u\n", hz / 1000000);
 }
 
+/* TSC emulation timekeepers */
+u64 TSC_8254 VARLOW;
+int Last_TSC_8254 VARLOW;
+
 static u64
 emulate_tsc(void)
 {
-    int cnt, d;
-    u16 ebda_seg = get_ebda_seg();
-    u64 ret;
     /* read timer 0 current count */
-    ret = GET_EBDA2(ebda_seg, tsc_8254);
-    /* readback mode has slightly shifted registers, works on all 8254, readback PIT0 latch */
+    u64 ret = GET_FLATPTR(TSC_8254);
+    /* readback mode has slightly shifted registers, works on all
+     * 8254, readback PIT0 latch */
     outb(PM_SEL_READBACK | PM_READ_VALUE | PM_READ_COUNTER0, PORT_PIT_MODE);
-    cnt = (inb(PORT_PIT_COUNTER0) | (inb(PORT_PIT_COUNTER0) << 8));
-    d = GET_EBDA2(ebda_seg, last_tsc_8254) - cnt;
+    int cnt = (inb(PORT_PIT_COUNTER0) | (inb(PORT_PIT_COUNTER0) << 8));
+    int d = GET_FLATPTR(Last_TSC_8254) - cnt;
     /* Determine the ticks count from last invocation of this function */
     ret += (d > 0) ? d : (PIT_TICK_INTERVAL + d);
-    SET_EBDA2(ebda_seg, last_tsc_8254, cnt);
-    SET_EBDA2(ebda_seg, tsc_8254, ret);
+    SET_FLATPTR(Last_TSC_8254, cnt);
+    SET_FLATPTR(TSC_8254, ret);
     return ret;
 }
 
@@ -545,12 +547,13 @@ handle_08(void)
  * Periodic timer
  ****************************************************************/
 
+int RTCusers VARLOW;
+
 void
 useRTC(void)
 {
-    u16 ebda_seg = get_ebda_seg();
-    int count = GET_EBDA2(ebda_seg, RTCusers);
-    SET_EBDA2(ebda_seg, RTCusers, count+1);
+    int count = GET_FLATPTR(RTCusers);
+    SET_FLATPTR(RTCusers, count+1);
     if (count)
         return;
     // Turn on the Periodic Interrupt timer
@@ -561,9 +564,8 @@ useRTC(void)
 void
 releaseRTC(void)
 {
-    u16 ebda_seg = get_ebda_seg();
-    int count = GET_EBDA2(ebda_seg, RTCusers);
-    SET_EBDA2(ebda_seg, RTCusers, count-1);
+    int count = GET_FLATPTR(RTCusers);
+    SET_FLATPTR(RTCusers, count-1);
     if (count != 1)
         return;
     // Clear the Periodic Interrupt.
-- 
1.7.6.5




More information about the SeaBIOS mailing list