diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-03-29 12:45:53 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-03-29 12:45:53 -0400 |
commit | 0cdac0e6206367616ad03eed93b3bf9f0999461f (patch) | |
tree | fff161c97a0fb3050bb655cc51ca2aea05509ccd | |
parent | f06f03a8727193171cf7f6bd062ecf911119d883 (diff) | |
download | seabios-0cdac0e6206367616ad03eed93b3bf9f0999461f.tar.gz |
Reorder basic_access() to reduce stack usage.
-rw-r--r-- | src/disk.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -39,18 +39,6 @@ checksum_seg(u16 seg, u16 offset, u32 len) static void basic_access(struct bregs *regs, u8 device, u16 command) { - u16 count = regs->al; - u16 cylinder = regs->ch | ((((u16) regs->cl) << 2) & 0x300); - u16 sector = regs->cl & 0x3f; - u16 head = regs->dh; - - if (count > 128 || count == 0 || sector == 0) { - BX_INFO("int13_harddisk: function %02x, parameter out of range!\n" - , regs->ah); - disk_ret(regs, DISK_RET_EPARAM); - return; - } - u8 type = GET_EBDA(ata.devices[device].type); u16 nlc, nlh, nlspt; if (type == ATA_TYPE_ATA) { @@ -64,6 +52,18 @@ basic_access(struct bregs *regs, u8 device, u16 command) nlspt = GET_EBDA(cdemu.vdevice.spt); } + u16 count = regs->al; + u16 cylinder = regs->ch | ((((u16) regs->cl) << 2) & 0x300); + u16 sector = regs->cl & 0x3f; + u16 head = regs->dh; + + if (count > 128 || count == 0 || sector == 0) { + BX_INFO("int13_harddisk: function %02x, parameter out of range!\n" + , regs->ah); + disk_ret(regs, DISK_RET_EPARAM); + return; + } + // sanity check on cyl heads, sec if (cylinder >= nlc || head >= nlh || sector > nlspt) { BX_INFO("int13_harddisk: function %02x, parameters out of" |