Made the QEMU IDE disk tolerate more power-mgmt commands, specifically: WIN_SETFEATURE(EN_AAM) - enable automatic acoustic mgmt WIN_SETFEATURE(DIS_AAM) - disable automatic acoustic mgmt WIN_STANDBY WIN_SETIDLE1 WIN_SLEEPNOW1 WIN_STANDBY2 WIN_SETIDLE2 WIN_SLEEPNOW2 WIN_STANDBYNOW2 These are all essentially no-ops, like existing support for EN_RLA (enable read lookahead) and WIN_STANDBYNOW1.
This fixes a crash in the SLES9-SP3 64bit kernel when the powersaved was started (with ACPI or ACM). This guest really only needs EN_AAM, DIS_APM, and WIN_SETIDLE1 support, but the others seemed sensible to include. I've excluded EN_APM since I'm unsure of what that's agreeing to do. It's probably ok to include. Signed-off-by: Ben Guthro <[EMAIL PROTECTED]> Signed-off-by: David Lively <[EMAIL PROTECTED]>
diff -r 106bc46793ca hw/ide.c --- a/hw/ide.c Mon Aug 27 16:20:33 2007 -0400 +++ b/hw/ide.c Mon Aug 27 16:27:28 2007 -0400 @@ -1914,6 +1914,8 @@ static void ide_ioport_write(void *opaqu case 0x67: /* NOP */ case 0x96: /* NOP */ case 0x9a: /* NOP */ + case 0x42: /* enable Automatic Acoustic Mode */ + case 0xc2: /* disable Automatic Acoustic Mode */ s->status = READY_STAT | SEEK_STAT; ide_set_irq(s); break; @@ -1952,12 +1954,16 @@ static void ide_ioport_write(void *opaqu s->status = READY_STAT; ide_set_irq(s); break; + case WIN_STANDBY: + case WIN_STANDBY2: case WIN_STANDBYNOW1: case WIN_STANDBYNOW2: case WIN_IDLEIMMEDIATE: case CFA_IDLEIMMEDIATE: case WIN_SETIDLE1: case WIN_SETIDLE2: + case WIN_SLEEPNOW1: + case WIN_SLEEPNOW2: s->status = READY_STAT; ide_set_irq(s); break;