aboutsummaryrefslogtreecommitdiff
path: root/src/disk.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2008-12-29 21:16:31 -0500
committerKevin O'Connor <kevin@koconnor.net>2008-12-29 21:16:31 -0500
commit08815370c94d88b37bc651d6707b6f1d68dc519b (patch)
tree7ccfd69fe17ec47c91d1c5b833fa7d966cdf4084 /src/disk.c
parent92f95b0fecca029a0c4dd81203e6b42f60c4a382 (diff)
downloadseabios-hppa-08815370c94d88b37bc651d6707b6f1d68dc519b.zip
seabios-hppa-08815370c94d88b37bc651d6707b6f1d68dc519b.tar.gz
seabios-hppa-08815370c94d88b37bc651d6707b6f1d68dc519b.tar.bz2
Introduce GET/SET_EBDA2() macros - they take a cached ebda seg.
For those places that repeatedly read/write to the ebda, caching the ebda segment improves code generation.
Diffstat (limited to 'src/disk.c')
-rw-r--r--src/disk.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/disk.c b/src/disk.c
index 533c254..2b40b2f 100644
--- a/src/disk.c
+++ b/src/disk.c
@@ -407,9 +407,10 @@ disk_1348(struct bregs *regs, u8 device)
// EDD 2.x
+ u16 ebda_seg = get_ebda_seg();
SET_INT13DPT(regs, size, 30);
- SET_INT13DPT(regs, dpte_segment, GET_BDA(ebda_seg));
+ SET_INT13DPT(regs, dpte_segment, ebda_seg);
SET_INT13DPT(regs, dpte_offset
, offsetof(struct extended_bios_data_area_s, dpte));
@@ -440,22 +441,22 @@ disk_1348(struct bregs *regs, u8 device)
if (mode == ATA_MODE_PIO32)
options |= 1<<7;
- SET_EBDA(dpte.iobase1, iobase1);
- SET_EBDA(dpte.iobase2, iobase2 + ATA_CB_DC);
- SET_EBDA(dpte.prefix, ((slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0)
- | ATA_CB_DH_LBA));
- SET_EBDA(dpte.unused, 0xcb);
- SET_EBDA(dpte.irq, irq);
- SET_EBDA(dpte.blkcount, 1);
- SET_EBDA(dpte.dma, 0);
- SET_EBDA(dpte.pio, 0);
- SET_EBDA(dpte.options, options);
- SET_EBDA(dpte.reserved, 0);
- SET_EBDA(dpte.revision, 0x11);
-
- u8 *p = MAKE_FARPTR(GET_BDA(ebda_seg)
+ SET_EBDA2(ebda_seg, dpte.iobase1, iobase1);
+ SET_EBDA2(ebda_seg, dpte.iobase2, iobase2 + ATA_CB_DC);
+ SET_EBDA2(ebda_seg, dpte.prefix, ((slave ? ATA_CB_DH_DEV1 : ATA_CB_DH_DEV0)
+ | ATA_CB_DH_LBA));
+ SET_EBDA2(ebda_seg, dpte.unused, 0xcb);
+ SET_EBDA2(ebda_seg, dpte.irq, irq);
+ SET_EBDA2(ebda_seg, dpte.blkcount, 1);
+ SET_EBDA2(ebda_seg, dpte.dma, 0);
+ SET_EBDA2(ebda_seg, dpte.pio, 0);
+ SET_EBDA2(ebda_seg, dpte.options, options);
+ SET_EBDA2(ebda_seg, dpte.reserved, 0);
+ SET_EBDA2(ebda_seg, dpte.revision, 0x11);
+
+ u8 *p = MAKE_FARPTR(ebda_seg
, offsetof(struct extended_bios_data_area_s, dpte));
- SET_EBDA(dpte.checksum, -checksum(p, 15));
+ SET_EBDA2(ebda_seg, dpte.checksum, -checksum(p, 15));
if (size < 66) {
disk_ret(regs, DISK_RET_SUCCESS);