Technology.
### reboot
-> `= t[riple] | k[bd] | a[cpi] | p[ci] | e[fi] | n[o] [, [w]arm | [c]old]`
+> `= t[riple] | k[bd] | a[cpi] | p[ci] | P[ower] | e[fi] | n[o] [, [w]arm | [c]old]`
> Default: `0`
`pci` instructs Xen to reboot the host using PCI reset register (port CF9).
+`Power` instructs Xen to power-cycle the host using PCI reset register (port CF9).
+
'efi' instructs Xen to reboot using the EFI reboot call (in EFI mode by
default it will use that method first).
BOOT_KBD = 'k',
BOOT_ACPI = 'a',
BOOT_CF9 = 'p',
+ BOOT_CF9_PWR = 'P',
BOOT_EFI = 'e',
};
* kbd Use the keyboard controller. cold reset (default)
* acpi Use the RESET_REG in the FADT
* pci Use the so-called "PCI reset register", CF9
+ * Power Like 'pci' but for a full power-cyle reset
* efi Use the EFI reboot (if running under EFI)
*/
static enum reboot_type reboot_type = BOOT_INVALID;
case 'a':
case 'e':
case 'k':
- case 't':
+ case 'P':
case 'p':
+ case 't':
reboot_type = *str;
break;
}
reboot_type = BOOT_KBD;
break;
case BOOT_CF9:
+ case BOOT_CF9_PWR:
{
- u8 cf9 = inb(0xcf9) & ~6;
- outb(cf9|2, 0xcf9); /* Request hard reset */
+ u8 cf9 = inb(0xcf9) & ~0x0e;
+
+ /* Request warm, hard, or power-cycle reset. */
+ if ( reboot_type == BOOT_CF9_PWR )
+ cf9 |= 0x0a;
+ else if ( reboot_mode == 0 )
+ cf9 |= 0x02;
+ outb(cf9, 0xcf9);
udelay(50);
- outb(cf9|6, 0xcf9); /* Actually do the reset */
+ outb(cf9 | 0x04, 0xcf9); /* Actually do the reset. */
udelay(50);
}
reboot_type = BOOT_ACPI;