18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file apic_compat.h
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Definitions and functions for APIC interaction
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef APIC_COMPAT_H
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_COMPAT_H
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#if V_BEFORE(2, 4, 0)
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* even on SMP, some defines are missing in 2.2 */
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVR		0x30
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVTPC		0x340
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVTERR		0x370
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define GET_APIC_VERSION(x)	((x)&0xFF)
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define GET_APIC_MAXLVT(x)	(((x) >> 16)&0xFF)
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_INTEGRATED(x)	((x)&0xF0)
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#else
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <asm/apic.h>
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <asm/apicdef.h>
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <asm/mpspec.h>
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef MSR_IA32_APICBASE
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define MSR_IA32_APICBASE 0x1B
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef APIC_SPIV_APIC_ENABLED
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_SPIV_APIC_ENABLED (1 << 8)
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef APIC_DEFAULT_PHYS_BASE
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_DEFAULT_PHYS_BASE 0xfee00000
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#if !defined(CONFIG_X86_LOCAL_APIC)
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_DEFAULT_PHYS_BASE		0xfee00000
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_SPIV			0xF0
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_ESR			0x280
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVTT			0x320
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVT0			0x350
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVT_MASKED			(1 << 16)
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVT_LEVEL_TRIGGER		(1 << 15)
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_MODE_NMI			0x4
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_MODE_EXINT			0x7
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define GET_APIC_DELIVERY_MODE(x)	(((x) >> 8)&0x7)
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define SET_APIC_DELIVERY_MODE(x, y)	(((x)&~0x700)|((y) << 8))
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_LVT1			0x360
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_SEND_PENDING		(1 << 12)
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_TDCR			0x3E0
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_TDR_DIV_1			0xB
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* when !CONFIG_X86_LOCAL_APIC we need to provide a valid va to map the
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * the pa of APIC onto. This va must be un-cachable/un-swapable*/
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/*#define APIC_BASE (fix_to_virt(FIX_APIC_BASE))*/
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddextern unsigned long virt_apic_base;
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/* the other define above can be redefined until the ref is identical, this
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * allow a compile time checking but this need to be redefined differently */
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#undef APIC_BASE
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define APIC_BASE	virt_apic_base
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic __inline void apic_write(unsigned long reg, unsigned long v)
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	*((volatile u32 *)(APIC_BASE+reg)) = v;
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic __inline unsigned long apic_read(unsigned long reg)
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return *((volatile u32 *)(APIC_BASE+reg));
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* !defined(CONFIG_X86_LOCAL_APIC) */
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* APIC_COMPAT_H */
81