[SeaBIOS] [PATCH 21/23] Move standard bda type info from biosvar.h to std/bda.h.

Kevin O'Connor kevin at koconnor.net
Sun Sep 15 07:12:53 CEST 2013


Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
 src/biosvar.h  | 161 ++-------------------------------------------------------
 src/fw/csm.c   |   3 +-
 src/post.c     |   2 +-
 src/resume.c   |   4 +-
 src/std/bda.h  | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/std/disk.h |  16 ++++++
 src/system.c   |   2 +-
 src/util.h     |   3 +-
 8 files changed, 188 insertions(+), 162 deletions(-)
 create mode 100644 src/std/bda.h

diff --git a/src/biosvar.h b/src/biosvar.h
index e49a10a..051cd1e 100644
--- a/src/biosvar.h
+++ b/src/biosvar.h
@@ -1,24 +1,20 @@
-// Variable layouts of bios.
+// Memory access to BIOS variables.
 //
-// Copyright (C) 2008-2010  Kevin O'Connor <kevin at koconnor.net>
+// Copyright (C) 2008-2013  Kevin O'Connor <kevin at koconnor.net>
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 #ifndef __BIOSVAR_H
 #define __BIOSVAR_H
 
-#include "types.h" // u8
-#include "farptr.h" // GET_FARVAR
 #include "config.h" // SEG_BDA
+#include "farptr.h" // GET_FARVAR
+#include "std/bda.h" // struct bios_data_area_s
 
 
 /****************************************************************
  * Interupt vector table
  ****************************************************************/
 
-struct rmode_IVT {
-    struct segoff_s ivec[256];
-};
-
 #define GET_IVT(vector)                                         \
     GET_FARVAR(SEG_IVT, ((struct rmode_IVT *)0)->ivec[vector])
 #define SET_IVT(vector, segoff)                                         \
@@ -35,106 +31,6 @@ struct rmode_IVT {
  * Bios Data Area (BDA)
  ****************************************************************/
 
-struct bios_data_area_s {
-    // 40:00
-    u16 port_com[4];
-    u16 port_lpt[3];
-    u16 ebda_seg;
-    // 40:10
-    u16 equipment_list_flags;
-    u8 pad1;
-    u16 mem_size_kb;
-    u8 pad2;
-    u8 ps2_ctrl_flag;
-    u8 kbd_flag0;
-    u8 kbd_flag1;
-    u8 alt_keypad;
-    u16 kbd_buf_head;
-    u16 kbd_buf_tail;
-    // 40:1e
-    u8 kbd_buf[32];
-    u8 floppy_recalibration_status;
-    u8 floppy_motor_status;
-    // 40:40
-    u8 floppy_motor_counter;
-    u8 floppy_last_status;
-    u8 floppy_return_status[7];
-    u8 video_mode;
-    u16 video_cols;
-    u16 video_pagesize;
-    u16 video_pagestart;
-    // 40:50
-    u16 cursor_pos[8];
-    // 40:60
-    u16 cursor_type;
-    u8 video_page;
-    u16 crtc_address;
-    u8 video_msr;
-    u8 video_pal;
-    struct segoff_s jump;
-    u8 other_6b;
-    u32 timer_counter;
-    // 40:70
-    u8 timer_rollover;
-    u8 break_flag;
-    u16 soft_reset_flag;
-    u8 disk_last_status;
-    u8 hdcount;
-    u8 disk_control_byte;
-    u8 port_disk;
-    u8 lpt_timeout[4];
-    u8 com_timeout[4];
-    // 40:80
-    u16 kbd_buf_start_offset;
-    u16 kbd_buf_end_offset;
-    u8 video_rows;
-    u16 char_height;
-    u8 video_ctl;
-    u8 video_switches;
-    u8 modeset_ctl;
-    u8 dcc_index;
-    u8 floppy_last_data_rate;
-    u8 disk_status_controller;
-    u8 disk_error_controller;
-    u8 disk_interrupt_flag;
-    u8 floppy_harddisk_info;
-    // 40:90
-    u8 floppy_media_state[4];
-    u8 floppy_track[2];
-    u8 kbd_flag2;
-    u8 kbd_led;
-    struct segoff_s user_wait_complete_flag;
-    u32 user_wait_timeout;
-    // 40:A0
-    u8 rtc_wait_flag;
-    u8 other_a1[7];
-    struct segoff_s video_savetable;
-    u8 other_ac[4];
-    // 40:B0
-    u8 other_b0[9];
-    u8 vbe_flag;
-    u16 vbe_mode;
-    u8 other_bc[4];
-    // 40:C0
-    u8 other_c0[4*16];
-} PACKED;
-
-// BDA floppy_recalibration_status bitdefs
-#define FRS_IRQ (1<<7)
-
-// BDA rtc_wait_flag bitdefs
-#define RWS_WAIT_PENDING (1<<0)
-#define RWS_WAIT_ELAPSED (1<<7)
-
-// BDA floppy_media_state bitdefs
-#define FMS_DRIVE_STATE_MASK        (0x07)
-#define FMS_MEDIA_DRIVE_ESTABLISHED (1<<4)
-#define FMS_DOUBLE_STEPPING         (1<<5)
-#define FMS_DATA_RATE_MASK          (0xc0)
-
-// Limit of BDA timer_counter field
-#define TICKS_PER_DAY 1573040
-
 // Accessor functions
 #define GET_BDA(var) \
     GET_FARVAR(SEG_BDA, ((struct bios_data_area_s *)0)->var)
@@ -152,40 +48,6 @@ static inline void set_equipment_flags(u16 clear, u16 set) {
  * Extended Bios Data Area (EBDA)
  ****************************************************************/
 
-struct fdpt_s {
-    u16 cylinders;
-    u8 heads;
-    u8 a0h_signature;
-    u8 phys_sectors;
-    u16 precompensation;
-    u8 reserved;
-    u8 drive_control_byte;
-    u16 phys_cylinders;
-    u8 phys_heads;
-    u16 landing_zone;
-    u8 sectors;
-    u8 checksum;
-} PACKED;
-
-struct extended_bios_data_area_s {
-    u8 size;
-    u8 reserved1[0x21];
-    struct segoff_s far_call_pointer;
-    u8 mouse_flag1;
-    u8 mouse_flag2;
-    u8 mouse_data[0x08];
-    // 0x30
-    u8 other1[0x0d];
-
-    // 0x3d
-    struct fdpt_s fdpt[2];
-
-    // 0x5d
-    u8 other2[0xC4];
-
-    // 0x121 - Begin custom storage.
-} PACKED;
-
 // The initial size and location of EBDA
 #define EBDA_SIZE_START \
     DIV_ROUND_UP(sizeof(struct extended_bios_data_area_s), 1024)
@@ -269,19 +131,4 @@ extern u8 _zonelow_seg, zonelow_base[];
 #define GET_LOWFLAT(var) GET_LOW(*LOWFLAT2LOW(&(var)))
 #define SET_LOWFLAT(var, val) SET_LOW(*LOWFLAT2LOW(&(var)), (val))
 
-
-/****************************************************************
- * Bios Config Table
- ****************************************************************/
-
-struct bios_config_table_s {
-    u16 size;
-    u8 model;
-    u8 submodel;
-    u8 biosrev;
-    u8 feature1, feature2, feature3, feature4, feature5;
-} PACKED;
-
-extern struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1);
-
 #endif // __BIOSVAR_H
diff --git a/src/fw/csm.c b/src/fw/csm.c
index dda6af4..d241b17 100644
--- a/src/fw/csm.c
+++ b/src/fw/csm.c
@@ -4,10 +4,10 @@
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 
-#include "biosvar.h"
 #include "boot.h"
 #include "bregs.h"
 #include "config.h" // CONFIG_*
+#include "farptr.h" // MAKE_FLATPTR
 #include "hw/pci.h"
 #include "hw/pic.h"
 #include "malloc.h" // csm_malloc_preinit
@@ -16,6 +16,7 @@
 #include "post.h"
 #include "stacks.h" // wait_threads
 #include "std/acpi.h" // RSDP_SIGNATURE
+#include "std/bda.h" // struct bios_data_area_s
 #include "std/optionrom.h" // struct rom_header
 #include "util.h" // copy_smbios
 
diff --git a/src/post.c b/src/post.c
index 5514120..512c716 100644
--- a/src/post.c
+++ b/src/post.c
@@ -5,7 +5,7 @@
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 
-#include "biosvar.h" // struct bios_data_area_s
+#include "biosvar.h" // SET_BDA
 #include "boot.h" // boot_init
 #include "bregs.h" // struct bregs
 #include "config.h" // CONFIG_*
diff --git a/src/resume.c b/src/resume.c
index 96c63d5..af39a1d 100644
--- a/src/resume.c
+++ b/src/resume.c
@@ -4,8 +4,9 @@
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 
-#include "biosvar.h" // struct bios_data_area_s
 #include "bregs.h" // struct bregs
+#include "config.h" // CONFIG_*
+#include "farptr.h" // FLATPTR_TO_SEGOFF
 #include "hw/cmos.h" // inb_cmos
 #include "hw/pci.h" // pci_reboot
 #include "hw/pic.h" // pic_eoi2
@@ -13,6 +14,7 @@
 #include "ioport.h" // outb
 #include "output.h" // dprintf
 #include "stacks.h" // farcall16big
+#include "std/bda.h" // struct bios_data_area_s
 #include "string.h" // memset
 #include "util.h" // dma_setup
 
diff --git a/src/std/bda.h b/src/std/bda.h
new file mode 100644
index 0000000..948bdbf
--- /dev/null
+++ b/src/std/bda.h
@@ -0,0 +1,159 @@
+// BIOS Data Area (and similar) definitions
+#ifndef __BDA_H
+#define __BDA_H
+
+#include "disk.h" // struct fdpt_s
+#include "types.h" // u8
+
+
+/****************************************************************
+ * Interupt vector table
+ ****************************************************************/
+
+struct rmode_IVT {
+    struct segoff_s ivec[256];
+};
+
+
+/****************************************************************
+ * Bios Data Area (BDA)
+ ****************************************************************/
+
+struct bios_data_area_s {
+    // 40:00
+    u16 port_com[4];
+    u16 port_lpt[3];
+    u16 ebda_seg;
+    // 40:10
+    u16 equipment_list_flags;
+    u8 pad1;
+    u16 mem_size_kb;
+    u8 pad2;
+    u8 ps2_ctrl_flag;
+    u8 kbd_flag0;
+    u8 kbd_flag1;
+    u8 alt_keypad;
+    u16 kbd_buf_head;
+    u16 kbd_buf_tail;
+    // 40:1e
+    u8 kbd_buf[32];
+    u8 floppy_recalibration_status;
+    u8 floppy_motor_status;
+    // 40:40
+    u8 floppy_motor_counter;
+    u8 floppy_last_status;
+    u8 floppy_return_status[7];
+    u8 video_mode;
+    u16 video_cols;
+    u16 video_pagesize;
+    u16 video_pagestart;
+    // 40:50
+    u16 cursor_pos[8];
+    // 40:60
+    u16 cursor_type;
+    u8 video_page;
+    u16 crtc_address;
+    u8 video_msr;
+    u8 video_pal;
+    struct segoff_s jump;
+    u8 other_6b;
+    u32 timer_counter;
+    // 40:70
+    u8 timer_rollover;
+    u8 break_flag;
+    u16 soft_reset_flag;
+    u8 disk_last_status;
+    u8 hdcount;
+    u8 disk_control_byte;
+    u8 port_disk;
+    u8 lpt_timeout[4];
+    u8 com_timeout[4];
+    // 40:80
+    u16 kbd_buf_start_offset;
+    u16 kbd_buf_end_offset;
+    u8 video_rows;
+    u16 char_height;
+    u8 video_ctl;
+    u8 video_switches;
+    u8 modeset_ctl;
+    u8 dcc_index;
+    u8 floppy_last_data_rate;
+    u8 disk_status_controller;
+    u8 disk_error_controller;
+    u8 disk_interrupt_flag;
+    u8 floppy_harddisk_info;
+    // 40:90
+    u8 floppy_media_state[4];
+    u8 floppy_track[2];
+    u8 kbd_flag2;
+    u8 kbd_led;
+    struct segoff_s user_wait_complete_flag;
+    u32 user_wait_timeout;
+    // 40:A0
+    u8 rtc_wait_flag;
+    u8 other_a1[7];
+    struct segoff_s video_savetable;
+    u8 other_ac[4];
+    // 40:B0
+    u8 other_b0[9];
+    u8 vbe_flag;
+    u16 vbe_mode;
+    u8 other_bc[4];
+    // 40:C0
+    u8 other_c0[4*16];
+} PACKED;
+
+// BDA floppy_recalibration_status bitdefs
+#define FRS_IRQ (1<<7)
+
+// BDA rtc_wait_flag bitdefs
+#define RWS_WAIT_PENDING (1<<0)
+#define RWS_WAIT_ELAPSED (1<<7)
+
+// BDA floppy_media_state bitdefs
+#define FMS_DRIVE_STATE_MASK        (0x07)
+#define FMS_MEDIA_DRIVE_ESTABLISHED (1<<4)
+#define FMS_DOUBLE_STEPPING         (1<<5)
+#define FMS_DATA_RATE_MASK          (0xc0)
+
+// Limit of BDA timer_counter field
+#define TICKS_PER_DAY 1573040
+
+
+/****************************************************************
+ * Extended Bios Data Area (EBDA)
+ ****************************************************************/
+
+struct extended_bios_data_area_s {
+    u8 size;
+    u8 reserved1[0x21];
+    struct segoff_s far_call_pointer;
+    u8 mouse_flag1;
+    u8 mouse_flag2;
+    u8 mouse_data[0x08];
+    // 0x30
+    u8 other1[0x0d];
+
+    // 0x3d
+    struct fdpt_s fdpt[2];
+
+    // 0x5d
+    u8 other2[0xC4];
+
+    // 0x121 - Begin custom storage.
+} PACKED;
+
+
+/****************************************************************
+ * Bios Config Table
+ ****************************************************************/
+
+struct bios_config_table_s {
+    u16 size;
+    u8 model;
+    u8 submodel;
+    u8 biosrev;
+    u8 feature1, feature2, feature3, feature4, feature5;
+} PACKED;
+
+#endif // bda.h
diff --git a/src/std/disk.h b/src/std/disk.h
index c111e07..b2576d9 100644
--- a/src/std/disk.h
+++ b/src/std/disk.h
@@ -81,6 +81,22 @@ struct int13dpt_s {
     };
 } PACKED;
 
+// Floppy info
+struct fdpt_s {
+    u16 cylinders;
+    u8 heads;
+    u8 a0h_signature;
+    u8 phys_sectors;
+    u16 precompensation;
+    u8 reserved;
+    u8 drive_control_byte;
+    u16 phys_cylinders;
+    u8 phys_heads;
+    u16 landing_zone;
+    u8 sectors;
+    u8 checksum;
+} PACKED;
+
 // Floppy "Disk Base Table"
 struct floppy_dbt_s {
     u8 specify1;
diff --git a/src/system.c b/src/system.c
index 4669e62..aaca059 100644
--- a/src/system.c
+++ b/src/system.c
@@ -5,7 +5,7 @@
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 
-#include "biosvar.h" // BIOS_CONFIG_TABLE
+#include "biosvar.h" // GET_GLOBAL
 #include "bregs.h" // struct bregs
 #include "hw/pic.h" // pic_reset
 #include "ioport.h" // inb
diff --git a/src/util.h b/src/util.h
index 6d8c0d2..32a4af4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -175,8 +175,9 @@ void mtrr_setup(void);
 void reset_vector(void) __noreturn;
 
 // misc.c
-void mathcp_setup(void);
+extern struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1);
 extern u8 BiosChecksum;
+void mathcp_setup(void);
 
 // version (auto generated file out/version.c)
 extern const char VERSION[];
-- 
1.8.3.1




More information about the SeaBIOS mailing list