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