15b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
25b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  <Insert copyright here : it must be BSD-like so everyone can use it>
35b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
45b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Author:  Erich Boleyn  <erich@uruk.org>   http://www.uruk.org/~erich/
55b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
65b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Header file implementing Intel MultiProcessor Specification (MPS)
75b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  version 1.1 and 1.4 SMP hardware control for Intel Architecture CPUs,
85b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  with hooks for running correctly on a standard PC without the hardware.
95b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This file was created from information in the Intel MPS version 1.4
115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  document, order number 242016-004, which can be ordered from the
125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Intel literature center.
135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef _SMP_IMPS_H
165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define _SMP_IMPS_H
175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/* make sure "apic.h" is included */
195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifndef _APIC_H
205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#error		Must include "apic.h" before "smp-imps.h"
215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* !_APIC_H */
225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Defines used.
255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#ifdef IMPS_DEBUG
285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_DEBUG_PRINT(x)  KERNEL_PRINT(x)
295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#else /* !IMPS_DEBUG */
305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_DEBUG_PRINT(x)
315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* !IMPS_DEBUG */
325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_MAX_CPUS			APIC_BROADCAST_ID
345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Defines representing limitations on values usable in different
375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  situations.  This mostly depends on whether the APICs are old
385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  (82489DX) or new (SIO or Pentium/Pentium Pro integrated APICs).
395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  NOTE:  It appears that the APICs must either be all old or all new,
415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *    or broadcasts won't work right.
425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  NOTE #2:  Given that, the maximum ID which can be sent to predictably
435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *    is 14 for new APICs and 254 for old APICs.  So, this all implies that
445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *    a maximum of 15 processors is supported with the new APICs, and a
455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *    maximum of 255 processors with the old APICs.
465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_APIC_ID(x)							\
495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  ( imps_any_new_apics ? APIC_NEW_ID(x) : APIC_OLD_ID(x) )
505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This is the value that must be in the "sig" member of the MP
535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Floating Pointer Structure.
545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_FPS_SIGNATURE	('_' | ('M'<<8) | ('P'<<16) | ('_'<<24))
565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_FPS_IMCRP_BIT	0x80
575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_FPS_DEFAULT_MAX	7
585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This is the value that must be in the "sig" member of the MP
615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Configuration Table Header.
625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_CTH_SIGNATURE	('P' | ('C'<<8) | ('M'<<16) | ('P'<<24))
645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  These are the "type" values for Base MP Configuration Table entries.
675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_FLAG_ENABLED	1
695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_BCT_PROCESSOR		0
705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_CPUFLAG_BOOT	2
715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_BCT_BUS			1
725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_BCT_IOAPIC			2
735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_BCT_IO_INTERRUPT		3
745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_BCT_LOCAL_INTERRUPT	4
755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_INT_INT		0
765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_INT_NMI		1
775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_INT_SMI		2
785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define		IMPS_INT_EXTINT		3
795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Typedefs and data item definitions done here.
835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_fps imps_fps;	/* MP floating pointer structure */
865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_cth imps_cth;	/* MP configuration table header */
875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_processor imps_processor;
885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_bus imps_bus;
895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_ioapic imps_ioapic;
905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projecttypedef struct imps_interrupt imps_interrupt;
915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Data structures defined here
955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  MP Floating Pointer Structure (fps)
995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
1005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Look at page 4-3 of the MP spec for the starting definitions of
1015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  this structure.
1025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_fps
1045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned sig;
1065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    imps_cth *cth_ptr;
1075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char length;
1085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char spec_rev;
1095b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char checksum;
1105b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char feature_info[5];
1115b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1125b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1135b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1145b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  MP Configuration Table Header  (cth)
1155b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
1165b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Look at page 4-5 of the MP spec for the starting definitions of
1175b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  this structure.
1185b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1195b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_cth
1205b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1215b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned sig;
1225b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned short base_length;
1235b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char spec_rev;
1245b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char checksum;
1255b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    char oem_id[8];
1265b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    char prod_id[12];
1275b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned oem_table_ptr;
1285b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned short oem_table_size;
1295b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned short entry_count;
1305b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned lapic_addr;
1315b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned short extended_length;
1325b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char extended_checksum;
1335b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    char reserved[1];
1345b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1355b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1365b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1375b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Base MP Configuration Table Types.  They are sorted according to
1385b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  type (i.e. all of type 0 come first, etc.).  Look on page 4-6 for
1395b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  the start of the descriptions.
1405b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1415b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1425b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_processor
1435b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1445b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char type;		/* must be 0 */
1455b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char apic_id;
1465b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char apic_ver;
1475b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char flags;
1485b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned signature;
1495b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned features;
1505b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    char reserved[8];
1515b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1525b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1535b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_bus
1545b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1555b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char type;		/* must be 1 */
1565b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char id;
1575b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    char bus_type[6];
1585b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1595b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1605b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_ioapic
1615b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1625b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char type;		/* must be 2 */
1635b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char id;
1645b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char ver;
1655b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char flags;
1665b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned addr;
1675b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1685b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1695b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectstruct imps_interrupt
1705b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  {
1715b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char type;		/* must be 3 or 4 */
1725b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char int_type;
1735b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned short flags;
1745b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char source_bus_id;
1755b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char source_bus_irq;
1765b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char dest_apic_id;
1775b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project    unsigned char dest_apic_intin;
1785b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project  };
1795b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1805b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1815b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1825b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Exported globals here.
1835b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1845b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1855b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
1865b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  This is the primary function for probing for Intel MPS 1.1/1.4
1875b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  compatible hardware and BIOS information.  While probing the CPUs
1885b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  information returned from the BIOS, this also starts up each CPU
1895b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  and gets it ready for use.
1905b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
1915b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Call this during the early stages of OS startup, before memory can
1925b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  be messed up.
1935b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *
1945b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Returns 1 if IMPS information was found and is valid, else 0.
1955b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
1965b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1975b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Projectint imps_probe (void);
1985b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
1995b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2005b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project/*
2015b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project *  Defines that use variables
2025b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project */
2035b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2045b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_LAPIC_READ(x)  (*((volatile unsigned *) (imps_lapic_addr+(x))))
2055b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#define IMPS_LAPIC_WRITE(x, y)   \
2065b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project   (*((volatile unsigned *) (imps_lapic_addr+(x))) = (y))
2075b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project
2085b1eb061628a97aae48a9c0bcaa96eb0bfa07aa4The Android Open Source Project#endif /* !_SMP_IMPS_H */
209