2005-04-17 02:20:36 +04:00
/*
* asm - i386 / acpi . h
*
* 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
*
* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
*/
# ifndef _ASM_ACPI_H
# define _ASM_ACPI_H
# ifdef __KERNEL__
2005-04-15 23:07:10 +04:00
# include <acpi/pdc_intel.h>
2005-04-17 02:20:36 +04:00
# include <asm/system.h> /* defines cmpxchg */
# define COMPILER_DEPENDENT_INT64 long long
# define COMPILER_DEPENDENT_UINT64 unsigned long long
/*
* Calling conventions :
*
* ACPI_SYSTEM_XFACE - Interfaces to host OS ( handlers , threads )
* ACPI_EXTERNAL_XFACE - External ACPI interfaces
* ACPI_INTERNAL_XFACE - Internal ACPI interfaces
* ACPI_INTERNAL_VAR_XFACE - Internal variable - parameter list interfaces
*/
# define ACPI_SYSTEM_XFACE
# define ACPI_EXTERNAL_XFACE
# define ACPI_INTERNAL_XFACE
# define ACPI_INTERNAL_VAR_XFACE
/* Asm macros */
# define ACPI_ASM_MACROS
# define BREAKPOINT3
# define ACPI_DISABLE_IRQS() local_irq_disable()
# define ACPI_ENABLE_IRQS() local_irq_enable()
# define ACPI_FLUSH_CPU_CACHE() wbinvd()
static inline int
__acpi_acquire_global_lock ( unsigned int * lock )
{
unsigned int old , new , val ;
do {
old = * lock ;
new = ( ( ( old & ~ 0x3 ) + 2 ) + ( ( old > > 1 ) & 0x1 ) ) ;
val = cmpxchg ( lock , old , new ) ;
} while ( unlikely ( val ! = old ) ) ;
return ( new < 3 ) ? - 1 : 0 ;
}
static inline int
__acpi_release_global_lock ( unsigned int * lock )
{
unsigned int old , new , val ;
do {
old = * lock ;
new = old & ~ 0x3 ;
val = cmpxchg ( lock , old , new ) ;
} while ( unlikely ( val ! = old ) ) ;
return old & 0x1 ;
}
# define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
( ( Acq ) = __acpi_acquire_global_lock ( ( unsigned int * ) GLptr ) )
# define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
( ( Acq ) = __acpi_release_global_lock ( ( unsigned int * ) GLptr ) )
/*
* Math helper asm macros
*/
# define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
asm ( " divl %2; " \
: " =a " ( q32 ) , " =d " ( r32 ) \
: " r " ( d32 ) , \
" 0 " ( n_lo ) , " 1 " ( n_hi ) )
# define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
asm ( " shrl $1,%2; " \
" rcrl $1,%3; " \
: " =r " ( n_hi ) , " =r " ( n_lo ) \
: " 0 " ( n_hi ) , " 1 " ( n_lo ) )
2006-03-22 11:07:34 +03:00
# ifdef CONFIG_X86_IO_APIC
extern void check_acpi_pci ( void ) ;
# else
static inline void check_acpi_pci ( void ) { }
# endif
2005-08-24 20:07:20 +04:00
# ifdef CONFIG_ACPI
2005-04-17 02:20:36 +04:00
extern int acpi_lapic ;
extern int acpi_ioapic ;
extern int acpi_noirq ;
extern int acpi_strict ;
extern int acpi_disabled ;
extern int acpi_ht ;
extern int acpi_pci_disabled ;
static inline void disable_acpi ( void )
{
acpi_disabled = 1 ;
acpi_ht = 0 ;
acpi_pci_disabled = 1 ;
acpi_noirq = 1 ;
}
/* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
# define FIX_ACPI_PAGES 4
extern int acpi_gsi_to_irq ( u32 gsi , unsigned int * irq ) ;
# ifdef CONFIG_X86_IO_APIC
extern int skip_ioapic_setup ;
extern int acpi_skip_timer_override ;
static inline void disable_ioapic_setup ( void )
{
skip_ioapic_setup = 1 ;
}
static inline int ioapic_setup_disabled ( void )
{
return skip_ioapic_setup ;
}
# else
static inline void disable_ioapic_setup ( void ) { }
# endif
static inline void acpi_noirq_set ( void ) { acpi_noirq = 1 ; }
static inline void acpi_disable_pci ( void )
{
acpi_pci_disabled = 1 ;
acpi_noirq_set ( ) ;
}
extern int acpi_irq_balance_set ( char * str ) ;
2005-08-25 20:27:09 +04:00
# else /* !CONFIG_ACPI */
# define acpi_lapic 0
# define acpi_ioapic 0
2005-04-17 02:20:36 +04:00
static inline void acpi_noirq_set ( void ) { }
static inline void acpi_disable_pci ( void ) { }
2005-08-25 20:27:09 +04:00
# endif /* !CONFIG_ACPI */
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_ACPI_SLEEP
/* routines for saving/restoring kernel state */
extern int acpi_save_state_mem ( void ) ;
extern void acpi_restore_state_mem ( void ) ;
extern unsigned long acpi_wakeup_address ;
/* early initialization routine */
extern void acpi_reserve_bootmem ( void ) ;
# endif /*CONFIG_ACPI_SLEEP*/
extern u8 x86_acpiid_to_apicid [ ] ;
2005-10-24 00:31:00 +04:00
# define ARCH_HAS_POWER_INIT 1
2005-04-15 23:07:10 +04:00
2005-04-17 02:20:36 +04:00
# endif /*__KERNEL__*/
# endif /*_ASM_ACPI_H*/