aboutsummaryrefslogtreecommitdiffstats
path: root/src/biosvar.h
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-01-01 18:31:11 -0500
committerKevin O'Connor <kevin@koconnor.net>2009-01-01 18:31:11 -0500
commit7f343097712ebdd1f11953c867e208da899b4ba3 (patch)
treea2bee74e381ce87766c006975eb03b34ee47b213 /src/biosvar.h
parent964622410105c28c42378440ac3cb6d1a996da49 (diff)
downloadseabios-7f343097712ebdd1f11953c867e208da899b4ba3.tar.gz
Switch to new stack when calling ATA function in 16bit mode.
This reduces stack usage (old dos programs don't provide much space).
Diffstat (limited to 'src/biosvar.h')
-rw-r--r--src/biosvar.h13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/biosvar.h b/src/biosvar.h
index cd8e0ac9..2fb4b8d2 100644
--- a/src/biosvar.h
+++ b/src/biosvar.h
@@ -214,8 +214,8 @@ struct extended_bios_data_area_s {
u16 boot_sequence;
- // Resume stack
- u8 resume_stack[128] __aligned(8);
+ // Stack space available for code that needs it.
+ u8 extra_stack[512] __aligned(8);
} PACKED;
// Accessor functions
@@ -234,11 +234,16 @@ get_ebda_ptr()
GET_FARVAR(eseg, ((struct extended_bios_data_area_s *)0)->var)
#define SET_EBDA2(eseg, var, val) \
SET_FARVAR(eseg, ((struct extended_bios_data_area_s *)0)->var, (val))
-#define GET_EBDA(var) \
+#define GET_EBDA(var) \
GET_EBDA2(get_ebda_seg(), var)
-#define SET_EBDA(var, val) \
+#define SET_EBDA(var, val) \
SET_EBDA2(get_ebda_seg(), var, (val))
+#define EBDA_OFFSET_TOP_STACK \
+ offsetof(struct extended_bios_data_area_s, extra_stack[ \
+ FIELD_SIZEOF(struct extended_bios_data_area_s \
+ , extra_stack)])
+
/****************************************************************
* Global variables