Blame view

drivers/acpi/reboot.c 1.34 KB
4d3870431   Aaron Durbin   Add the ability t...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
  #include <linux/pci.h>
  #include <linux/acpi.h>
  #include <acpi/reboot.h>
  
  void acpi_reboot(void)
  {
  	struct acpi_generic_address *rr;
  	struct pci_bus *bus0;
  	u8 reset_value;
  	unsigned int devfn;
  
  	if (acpi_disabled)
  		return;
  
  	rr = &acpi_gbl_FADT.reset_register;
95cf3e12e   Matthew Garrett   ACPI: Make sure t...
17
18
19
20
  	/* ACPI reset register was only introduced with v2 of the FADT */
  
  	if (acpi_gbl_FADT.header.revision < 2)
  		return;
6734fe57a   Matthew Garrett   ACPI: Bug compati...
21
22
23
  	/* Is the reset register supported? The spec says we should be
  	 * checking the bit width and bit offset, but Windows ignores
  	 * these fields */
19244ad06   Linus Torvalds   Revert "ACPI: ign...
24
25
  	if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER))
  		return;
4d3870431   Aaron Durbin   Add the ability t...
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  
  	reset_value = acpi_gbl_FADT.reset_value;
  
  	/* The reset register can only exist in I/O, Memory or PCI config space
  	 * on a device on bus 0. */
  	switch (rr->space_id) {
  	case ACPI_ADR_SPACE_PCI_CONFIG:
  		/* The reset register can only live on bus 0. */
  		bus0 = pci_find_bus(0, 0);
  		if (!bus0)
  			return;
  		/* Form PCI device/function pair. */
  		devfn = PCI_DEVFN((rr->address >> 32) & 0xffff,
  				  (rr->address >> 16) & 0xffff);
  		printk(KERN_DEBUG "Resetting with ACPI PCI RESET_REG.");
  		/* Write the value that resets us. */
  		pci_bus_write_config_byte(bus0, devfn,
  				(rr->address & 0xffff), reset_value);
  		break;
  
  	case ACPI_ADR_SPACE_SYSTEM_MEMORY:
  	case ACPI_ADR_SPACE_SYSTEM_IO:
  		printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.
  ");
2ee626124   Lin Ming   ACPI: reboot.c: u...
50
  		acpi_reset();
4d3870431   Aaron Durbin   Add the ability t...
51
52
  		break;
  	}
4d3870431   Aaron Durbin   Add the ability t...
53
  }