2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_ACPI_H
# define _ASM_X86_ACPI_H
2007-11-26 20:42:19 +01:00
2008-01-30 13:30:36 +01:00
/*
* Copyright ( C ) 2001 Paul Diefenbaugh < paul . s . diefenbaugh @ intel . com >
* Copyright ( C ) 2001 Patrick Mochel < mochel @ osdl . org >
*
* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*/
# include <acpi/pdc_intel.h>
2007-11-26 20:42:19 +01:00
2008-01-30 13:30:36 +01:00
# include <asm/numa.h>
2013-09-06 19:08:00 -07:00
# include <asm/fixmap.h>
2007-11-26 20:42:19 +01:00
# include <asm/processor.h>
2008-01-30 13:32:01 +01:00
# include <asm/mmu.h>
2008-06-03 09:28:52 +02:00
# include <asm/mpspec.h>
2012-05-30 12:33:41 +03:00
# include <asm/realmode.h>
2007-11-26 20:42:19 +01:00
2008-01-30 13:30:36 +01:00
# ifdef CONFIG_ACPI
extern int acpi_lapic ;
extern int acpi_ioapic ;
extern int acpi_noirq ;
extern int acpi_strict ;
extern int acpi_disabled ;
extern int acpi_pci_disabled ;
extern int acpi_skip_timer_override ;
extern int acpi_use_timer_override ;
2011-02-24 15:53:46 +01:00
extern int acpi_fix_pin2_polarity ;
2013-07-01 21:08:54 +05:30
extern int acpi_disable_cmcff ;
2008-01-30 13:30:36 +01:00
2008-02-09 23:24:08 +01:00
extern u8 acpi_sci_flags ;
extern int acpi_sci_override_gsi ;
void acpi_pic_sci_set_trigger ( unsigned int , u16 ) ;
2010-06-24 17:05:41 +01:00
extern int ( * __acpi_register_gsi ) ( struct device * dev , u32 gsi ,
int trigger , int polarity ) ;
2015-01-20 10:21:07 +08:00
extern void ( * __acpi_unregister_gsi ) ( u32 gsi ) ;
2010-06-24 17:05:41 +01:00
2008-01-30 13:30:36 +01:00
static inline void disable_acpi ( void )
{
acpi_disabled = 1 ;
acpi_pci_disabled = 1 ;
acpi_noirq = 1 ;
}
extern int acpi_gsi_to_irq ( u32 gsi , unsigned int * irq ) ;
static inline void acpi_noirq_set ( void ) { acpi_noirq = 1 ; }
static inline void acpi_disable_pci ( void )
{
acpi_pci_disabled = 1 ;
acpi_noirq_set ( ) ;
}
2011-02-08 23:42:22 +01:00
/* Low-level suspend routine. */
2013-05-14 17:09:16 +00:00
extern int ( * acpi_suspend_lowlevel ) ( void ) ;
2008-01-30 13:30:36 +01:00
2012-05-30 12:33:41 +03:00
/* Physical address to resume after wakeup */
# define acpi_wakeup_address ((unsigned long)(real_mode_header->wakeup_start))
2008-01-30 13:30:36 +01:00
2007-11-26 20:42:19 +01:00
/*
* Check if the CPU can handle C2 and deeper
*/
static inline unsigned int acpi_processor_cstate_check ( unsigned int max_cstate )
{
/*
* Early models ( < = 5 ) of AMD Opterons are not supposed to go into
* C2 state .
*
* Steppings 0x0A and later are good
*/
if ( boot_cpu_data . x86 = = 0x0F & &
boot_cpu_data . x86_vendor = = X86_VENDOR_AMD & &
boot_cpu_data . x86_model < = 0x05 & &
boot_cpu_data . x86_mask < 0x0A )
return 1 ;
2011-04-01 16:59:53 -04:00
else if ( amd_e400_c1e_detected )
2008-09-22 19:02:25 +02:00
return 1 ;
2007-11-26 20:42:19 +01:00
else
return max_cstate ;
}
2009-12-20 12:19:14 -07:00
static inline bool arch_has_acpi_pdc ( void )
{
struct cpuinfo_x86 * c = & cpu_data ( 0 ) ;
return ( c - > x86_vendor = = X86_VENDOR_INTEL | |
c - > x86_vendor = = X86_VENDOR_CENTAUR ) ;
}
2009-12-20 12:19:29 -07:00
static inline void arch_acpi_set_pdc_bits ( u32 * buf )
{
struct cpuinfo_x86 * c = & cpu_data ( 0 ) ;
buf [ 2 ] | = ACPI_PDC_C_CAPABILITY_SMP ;
if ( cpu_has ( c , X86_FEATURE_EST ) )
buf [ 2 ] | = ACPI_PDC_EST_CAPABILITY_SWSMP ;
if ( cpu_has ( c , X86_FEATURE_ACPI ) )
buf [ 2 ] | = ACPI_PDC_T_FFH ;
/*
* If mwait / monitor is unsupported , C2 / C3_FFH will be disabled
*/
if ( ! cpu_has ( c , X86_FEATURE_MWAIT ) )
buf [ 2 ] & = ~ ( ACPI_PDC_C_C2C3_FFH ) ;
}
2014-07-18 18:02:53 +08:00
static inline bool acpi_has_cpu_in_madt ( void )
{
return ! ! acpi_lapic ;
}
2008-01-30 13:30:36 +01:00
# else /* !CONFIG_ACPI */
# define acpi_lapic 0
# define acpi_ioapic 0
2013-07-01 21:08:54 +05:30
# define acpi_disable_cmcff 0
2008-01-30 13:30:36 +01:00
static inline void acpi_noirq_set ( void ) { }
static inline void acpi_disable_pci ( void ) { }
static inline void disable_acpi ( void ) { }
# endif /* !CONFIG_ACPI */
# define ARCH_HAS_POWER_INIT 1
# ifdef CONFIG_ACPI_NUMA
extern int acpi_numa ;
2011-02-16 12:13:06 +01:00
extern int x86_acpi_numa_init ( void ) ;
2010-12-22 17:23:47 -08:00
# endif /* CONFIG_ACPI_NUMA */
2008-01-30 13:30:36 +01:00
2008-01-30 13:32:01 +01:00
# define acpi_unlazy_tlb(x) leave_mm(x)
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_ACPI_H */