diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2009-07-12 09:29:46 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2009-07-12 09:29:46 -0400 |
commit | 9becbf1652cd001b812f9ae1d88fb2f921407768 (patch) | |
tree | c9ed5153c409235a365ed37df7a99e4a7c53bdbc | |
parent | 96f6fcd2bd60230cffb09edbea88df3b92517f3a (diff) | |
download | seabios-9becbf1652cd001b812f9ae1d88fb2f921407768.tar.gz |
Delay fdpt pointer setting in ebda to drive map stage.
Can't set the fdpt pointers during init as the ebda might get moved.
-rw-r--r-- | src/ata.c | 7 | ||||
-rw-r--r-- | src/post.c | 3 |
2 files changed, 8 insertions, 2 deletions
@@ -952,6 +952,13 @@ fill_fdpt(int driveid) // Checksum structure. fdpt->checksum -= checksum(fdpt, sizeof(*fdpt)); + + if (driveid == 0) + SET_IVT(0x41, get_ebda_seg() + , offsetof(struct extended_bios_data_area_s, fdpt[0])); + else + SET_IVT(0x46, get_ebda_seg() + , offsetof(struct extended_bios_data_area_s, fdpt[1])); } // Map a drive (that was registered via add_bcv_hd) @@ -81,11 +81,10 @@ init_bda() u16 eseg = EBDA_SEGMENT_START; SET_BDA(ebda_seg, eseg); + // Init ebda struct extended_bios_data_area_s *ebda = get_ebda_ptr(); memset(ebda, 0, sizeof(*ebda)); ebda->size = esize; - SET_IVT(0x41, eseg, offsetof(struct extended_bios_data_area_s, fdpt[0])); - SET_IVT(0x46, eseg, offsetof(struct extended_bios_data_area_s, fdpt[1])); } static void |