LCOV - code coverage report
Current view: top level - drivers/acpi - reboot.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 26 0.0 %
Date: 2022-04-01 14:35:51 Functions: 0 2 0.0 %
Branches: 0 11 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : 
       3                 :            : #include <linux/pci.h>
       4                 :            : #include <linux/acpi.h>
       5                 :            : #include <acpi/reboot.h>
       6                 :            : 
       7                 :            : #ifdef CONFIG_PCI
       8                 :          0 : static void acpi_pci_reboot(struct acpi_generic_address *rr, u8 reset_value)
       9                 :            : {
      10                 :          0 :         unsigned int devfn;
      11                 :          0 :         struct pci_bus *bus0;
      12                 :            : 
      13                 :            :         /* The reset register can only live on bus 0. */
      14                 :          0 :         bus0 = pci_find_bus(0, 0);
      15         [ #  # ]:          0 :         if (!bus0)
      16                 :            :                 return;
      17                 :            :         /* Form PCI device/function pair. */
      18                 :          0 :         devfn = PCI_DEVFN((rr->address >> 32) & 0xffff,
      19                 :            :                           (rr->address >> 16) & 0xffff);
      20                 :          0 :         pr_debug("Resetting with ACPI PCI RESET_REG.\n");
      21                 :            :         /* Write the value that resets us. */
      22                 :          0 :         pci_bus_write_config_byte(bus0, devfn,
      23                 :          0 :                         (rr->address & 0xffff), reset_value);
      24                 :            : }
      25                 :            : #else
      26                 :            : static inline void acpi_pci_reboot(struct acpi_generic_address *rr,
      27                 :            :                                    u8 reset_value)
      28                 :            : {
      29                 :            :         pr_warn_once("PCI configuration space access is not supported\n");
      30                 :            : }
      31                 :            : #endif
      32                 :            : 
      33                 :          0 : void acpi_reboot(void)
      34                 :            : {
      35                 :          0 :         struct acpi_generic_address *rr;
      36                 :          0 :         u8 reset_value;
      37                 :            : 
      38         [ #  # ]:          0 :         if (acpi_disabled)
      39                 :            :                 return;
      40                 :            : 
      41                 :          0 :         rr = &acpi_gbl_FADT.reset_register;
      42                 :            : 
      43                 :            :         /* ACPI reset register was only introduced with v2 of the FADT */
      44                 :            : 
      45         [ #  # ]:          0 :         if (acpi_gbl_FADT.header.revision < 2)
      46                 :            :                 return;
      47                 :            : 
      48                 :            :         /* Is the reset register supported? The spec says we should be
      49                 :            :          * checking the bit width and bit offset, but Windows ignores
      50                 :            :          * these fields */
      51         [ #  # ]:          0 :         if (!(acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER))
      52                 :            :                 return;
      53                 :            : 
      54                 :          0 :         reset_value = acpi_gbl_FADT.reset_value;
      55                 :            : 
      56                 :            :         /* The reset register can only exist in I/O, Memory or PCI config space
      57                 :            :          * on a device on bus 0. */
      58      [ #  #  # ]:          0 :         switch (rr->space_id) {
      59                 :          0 :         case ACPI_ADR_SPACE_PCI_CONFIG:
      60                 :          0 :                 acpi_pci_reboot(rr, reset_value);
      61                 :          0 :                 break;
      62                 :            : 
      63                 :          0 :         case ACPI_ADR_SPACE_SYSTEM_MEMORY:
      64                 :            :         case ACPI_ADR_SPACE_SYSTEM_IO:
      65                 :          0 :                 printk(KERN_DEBUG "ACPI MEMORY or I/O RESET_REG.\n");
      66                 :          0 :                 acpi_reset();
      67                 :          0 :                 break;
      68                 :            :         }
      69                 :          0 : }

Generated by: LCOV version 1.14