Skip to contentSkip to conversation

Allow more IDE power management

PATCH New Ben Guthro 1 participant 1 message Aug 27, 2007

lore
Share & tools
lore

Ben Guthro

author
#0 lore raw

PATCH 1/1 Allow more IDE power management

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.

hw/ide.c +6 -0
diff -r 106bc46793ca hw/ide.c
@@ -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;