blob: 73ea40e18bc236bae2fd67988a636783171afc5e [file] [log] [blame]
/**
* @file apic_compat.h
* Definitions and functions for APIC interaction
*
* @remark Copyright 2002 OProfile authors
* @remark Read the file COPYING
*
* @author Philippe Elie
* @author John Levon
*/
#ifndef APIC_COMPAT_H
#define APIC_COMPAT_H
#if V_BEFORE(2, 4, 0)
/* even on SMP, some defines are missing in 2.2 */
#define APIC_LVR 0x30
#define APIC_LVTPC 0x340
#define APIC_LVTERR 0x370
#define GET_APIC_VERSION(x) ((x)&0xFF)
#define GET_APIC_MAXLVT(x) (((x) >> 16)&0xFF)
#define APIC_INTEGRATED(x) ((x)&0xF0)
#else
#include <asm/apic.h>
#include <asm/apicdef.h>
#include <asm/mpspec.h>
#endif
#ifndef MSR_IA32_APICBASE
#define MSR_IA32_APICBASE 0x1B
#endif
#ifndef APIC_SPIV_APIC_ENABLED
#define APIC_SPIV_APIC_ENABLED (1 << 8)
#endif
#ifndef APIC_DEFAULT_PHYS_BASE
#define APIC_DEFAULT_PHYS_BASE 0xfee00000
#endif
#if !defined(CONFIG_X86_LOCAL_APIC)
#define APIC_DEFAULT_PHYS_BASE 0xfee00000
#define APIC_SPIV 0xF0
#define APIC_ESR 0x280
#define APIC_LVTT 0x320
#define APIC_LVT0 0x350
#define APIC_LVT_MASKED (1 << 16)
#define APIC_LVT_LEVEL_TRIGGER (1 << 15)
#define APIC_MODE_NMI 0x4
#define APIC_MODE_EXINT 0x7
#define GET_APIC_DELIVERY_MODE(x) (((x) >> 8)&0x7)
#define SET_APIC_DELIVERY_MODE(x, y) (((x)&~0x700)|((y) << 8))
#define APIC_LVT1 0x360
#define APIC_SEND_PENDING (1 << 12)
#define APIC_TDCR 0x3E0
#define APIC_TDR_DIV_1 0xB
/* when !CONFIG_X86_LOCAL_APIC we need to provide a valid va to map the
* the pa of APIC onto. This va must be un-cachable/un-swapable*/
/*#define APIC_BASE (fix_to_virt(FIX_APIC_BASE))*/
extern unsigned long virt_apic_base;
/* the other define above can be redefined until the ref is identical, this
* allow a compile time checking but this need to be redefined differently */
#undef APIC_BASE
#define APIC_BASE virt_apic_base
static __inline void apic_write(unsigned long reg, unsigned long v)
{
*((volatile u32 *)(APIC_BASE+reg)) = v;
}
static __inline unsigned long apic_read(unsigned long reg)
{
return *((volatile u32 *)(APIC_BASE+reg));
}
#endif /* !defined(CONFIG_X86_LOCAL_APIC) */
#endif /* APIC_COMPAT_H */