[coreboot] [commit] r5784 - trunk/src/devices/oprom
repository service
svn at coreboot.org
Wed Sep 8 01:28:00 CEST 2010
Author: myles
Date: Wed Sep 8 01:27:59 2010
New Revision: 5784
URL: https://tracker.coreboot.org/trac/coreboot/changeset/5784
Log:
My Jmicron SATA card depends on the BIOS not clearing AL when setting AH.
Signed-off-by: Myles Watson <mylesgw at gmail.com>
Acked-by: Myles Watson <mylesgw at gmail.com>
Modified:
trunk/src/devices/oprom/x86_interrupts.c
Modified: trunk/src/devices/oprom/x86_interrupts.c
==============================================================================
--- trunk/src/devices/oprom/x86_interrupts.c Wed Sep 8 00:30:15 2010 (r5783)
+++ trunk/src/devices/oprom/x86_interrupts.c Wed Sep 8 01:27:59 2010 (r5784)
@@ -99,7 +99,8 @@
}
if (dev) {
unsigned short busdevfn;
- regs->eax = 0;
+ regs->eax &= 0xffff00ff; /* Clear AH */
+ regs->eax |= PCIBIOS_SUCCESSFUL;
// busnum is an unsigned char;
// devfn is an int, so we mask it off.
busdevfn = (dev->bus->secondary << 8)
@@ -108,7 +109,8 @@
regs->ebx = busdevfn;
retval = 0;
} else {
- regs->eax = PCIBIOS_NODEV;
+ regs->eax &= 0xffff00ff; /* Clear AH */
+ regs->eax |= PCIBIOS_NODEV;
retval = -1;
}
break;
@@ -125,7 +127,8 @@
if (!dev) {
printk(BIOS_DEBUG, "0x%x: BAD DEVICE bus %d devfn 0x%x\n", func, bus, devfn);
// Or are we supposed to return PCIBIOS_NODEV?
- regs->eax = PCIBIOS_BADREG;
+ regs->eax &= 0xffff00ff; /* Clear AH */
+ regs->eax |= PCIBIOS_BADREG;
retval = -1;
return retval;
}
@@ -160,11 +163,14 @@
printk(BIOS_DEBUG, "0x%x: bus %d devfn 0x%x reg 0x%x val 0x%x\n",
func, bus, devfn, reg, regs->ecx);
#endif
- regs->eax = 0;
+ regs->eax &= 0xffff00ff; /* Clear AH */
+ regs->eax |= PCIBIOS_SUCCESSFUL;
retval = 0;
break;
default:
printk(BIOS_ERR, "UNSUPPORTED PCIBIOS FUNCTION 0x%x\n", func);
+ regs->eax &= 0xffff00ff; /* Clear AH */
+ regs->eax |= PCIBIOS_UNSUPPORTED;
retval = -1;
break;
}
More information about the coreboot
mailing list