Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _ASM_X86_ACPI_H
  2. #define _ASM_X86_ACPI_H
  3.  
  4. /*
  5.  *  Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
  6.  *  Copyright (C) 2001 Patrick Mochel <mochel@osdl.org>
  7.  *
  8.  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  23.  *
  24.  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  25.  */
  26. #include <acpi/pdc_intel.h>
  27.  
  28. #include <asm/numa.h>
  29. #include <asm/fixmap.h>
  30. #include <asm/processor.h>
  31.  
  32. #ifdef CONFIG_ACPI_APEI
  33. # include <asm/pgtable_types.h>
  34. #endif
  35.  
  36. #ifdef CONFIG_ACPI
  37. extern int acpi_lapic;
  38. extern int acpi_ioapic;
  39. extern int acpi_noirq;
  40. extern int acpi_strict;
  41. extern int acpi_disabled;
  42. extern int acpi_pci_disabled;
  43. extern int acpi_skip_timer_override;
  44. extern int acpi_use_timer_override;
  45. extern int acpi_fix_pin2_polarity;
  46. extern int acpi_disable_cmcff;
  47.  
  48. extern u8 acpi_sci_flags;
  49. extern int acpi_sci_override_gsi;
  50. void acpi_pic_sci_set_trigger(unsigned int, u16);
  51.  
  52. extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi,
  53.                                   int trigger, int polarity);
  54. extern void (*__acpi_unregister_gsi)(u32 gsi);
  55.  
  56. static inline void disable_acpi(void)
  57. {
  58.         acpi_disabled = 1;
  59.         acpi_pci_disabled = 1;
  60.         acpi_noirq = 1;
  61. }
  62.  
  63. extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
  64.  
  65. static inline void acpi_noirq_set(void) { acpi_noirq = 1; }
  66. static inline void acpi_disable_pci(void)
  67. {
  68.         acpi_pci_disabled = 1;
  69.         acpi_noirq_set();
  70. }
  71.  
  72. /* Low-level suspend routine. */
  73. extern int (*acpi_suspend_lowlevel)(void);
  74.  
  75. /* Physical address to resume after wakeup */
  76. #define acpi_wakeup_address ((unsigned long)(real_mode_header->wakeup_start))
  77.  
  78. /*
  79.  * Check if the CPU can handle C2 and deeper
  80.  */
  81. static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
  82. {
  83.         /*
  84.          * Early models (<=5) of AMD Opterons are not supposed to go into
  85.          * C2 state.
  86.          *
  87.          * Steppings 0x0A and later are good
  88.          */
  89.         if (boot_cpu_data.x86 == 0x0F &&
  90.             boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
  91.             boot_cpu_data.x86_model <= 0x05 &&
  92.             boot_cpu_data.x86_mask < 0x0A)
  93.                 return 1;
  94.         else if (amd_e400_c1e_detected)
  95.                 return 1;
  96.         else
  97.                 return max_cstate;
  98. }
  99.  
  100. static inline bool arch_has_acpi_pdc(void)
  101. {
  102.         struct cpuinfo_x86 *c = &cpu_data(0);
  103.         return (c->x86_vendor == X86_VENDOR_INTEL ||
  104.                 c->x86_vendor == X86_VENDOR_CENTAUR);
  105. }
  106.  
  107. static inline void arch_acpi_set_pdc_bits(u32 *buf)
  108. {
  109.         struct cpuinfo_x86 *c = &cpu_data(0);
  110.  
  111.         buf[2] |= ACPI_PDC_C_CAPABILITY_SMP;
  112.  
  113.         if (cpu_has(c, X86_FEATURE_EST))
  114.                 buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
  115.  
  116.         if (cpu_has(c, X86_FEATURE_ACPI))
  117.                 buf[2] |= ACPI_PDC_T_FFH;
  118.  
  119.         /*
  120.          * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
  121.          */
  122.         if (!cpu_has(c, X86_FEATURE_MWAIT))
  123.                 buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
  124. }
  125.  
  126. static inline bool acpi_has_cpu_in_madt(void)
  127. {
  128.         return !!acpi_lapic;
  129. }
  130.  
  131. #else /* !CONFIG_ACPI */
  132.  
  133. #define acpi_lapic 0
  134. #define acpi_ioapic 0
  135. #define acpi_disable_cmcff 0
  136. static inline void acpi_noirq_set(void) { }
  137. static inline void acpi_disable_pci(void) { }
  138. static inline void disable_acpi(void) { }
  139.  
  140. #endif /* !CONFIG_ACPI */
  141.  
  142. #define ARCH_HAS_POWER_INIT     1
  143.  
  144. #ifdef CONFIG_ACPI_NUMA
  145. extern int acpi_numa;
  146. extern int x86_acpi_numa_init(void);
  147. #endif /* CONFIG_ACPI_NUMA */
  148.  
  149. #define acpi_unlazy_tlb(x)      leave_mm(x)
  150.  
  151. #ifdef CONFIG_ACPI_APEI
  152. static inline pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr)
  153. {
  154.         /*
  155.          * We currently have no way to look up the EFI memory map
  156.          * attributes for a region in a consistent way, because the
  157.          * memmap is discarded after efi_free_boot_services(). So if
  158.          * you call efi_mem_attributes() during boot and at runtime,
  159.          * you could theoretically see different attributes.
  160.          *
  161.          * Since we are yet to see any x86 platforms that require
  162.          * anything other than PAGE_KERNEL (some arm64 platforms
  163.          * require the equivalent of PAGE_KERNEL_NOCACHE), return that
  164.          * until we know differently.
  165.          */
  166.          return PAGE_KERNEL;
  167. }
  168. #endif
  169.  
  170. #endif /* _ASM_X86_ACPI_H */
  171.