diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-12-29 21:16:31 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-12-29 21:16:31 -0500 |
commit | 08815370c94d88b37bc651d6707b6f1d68dc519b (patch) | |
tree | 7ccfd69fe17ec47c91d1c5b833fa7d966cdf4084 /src/disk.c | |
parent | 92f95b0fecca029a0c4dd81203e6b42f60c4a382 (diff) | |
download | seabios-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.c | 33 |
1 files changed, 17 insertions, 16 deletions
@@ -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); |