x86: add functions to determine if platform is a UV platform
Add functions that can be used to determine if an x86_64 system is a SGI "UV" system. UV systems come in 3 types and are identified by the OEM ID in the MADT. Signed-off-by: Jack Steiner <steiner@sgi.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
05f2d12c35
commit
ae26186865
|
@ -56,9 +56,7 @@ EXPORT_SYMBOL(acpi_disabled);
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
|
#include <asm/genapic.h>
|
||||||
static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return 0; }
|
|
||||||
|
|
||||||
|
|
||||||
#else /* X86 */
|
#else /* X86 */
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid);
|
||||||
|
|
||||||
struct genapic __read_mostly *genapic = &apic_flat;
|
struct genapic __read_mostly *genapic = &apic_flat;
|
||||||
|
|
||||||
|
static enum uv_system_type uv_system_type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
|
* Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
|
||||||
*/
|
*/
|
||||||
|
@ -64,3 +66,26 @@ void send_IPI_self(int vector)
|
||||||
{
|
{
|
||||||
__send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
|
__send_IPI_shortcut(APIC_DEST_SELF, vector, APIC_DEST_PHYSICAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
||||||
|
{
|
||||||
|
if (!strcmp(oem_id, "SGI")) {
|
||||||
|
if (!strcmp(oem_table_id, "UVL"))
|
||||||
|
uv_system_type = UV_LEGACY_APIC;
|
||||||
|
else if (!strcmp(oem_table_id, "UVX"))
|
||||||
|
uv_system_type = UV_X2APIC;
|
||||||
|
else if (!strcmp(oem_table_id, "UVH"))
|
||||||
|
uv_system_type = UV_NON_UNIQUE_APIC;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum uv_system_type get_uv_system_type(void)
|
||||||
|
{
|
||||||
|
return uv_system_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
int is_uv_system(void)
|
||||||
|
{
|
||||||
|
return uv_system_type != UV_NONE;
|
||||||
|
}
|
||||||
|
|
|
@ -114,4 +114,9 @@ struct genapic {
|
||||||
|
|
||||||
extern struct genapic *genapic;
|
extern struct genapic *genapic;
|
||||||
|
|
||||||
|
enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC};
|
||||||
|
#define get_uv_system_type() UV_NONE
|
||||||
|
#define is_uv_system() 0
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -33,5 +33,10 @@ extern struct genapic *genapic;
|
||||||
|
|
||||||
extern struct genapic apic_flat;
|
extern struct genapic apic_flat;
|
||||||
extern struct genapic apic_physflat;
|
extern struct genapic apic_physflat;
|
||||||
|
extern int acpi_madt_oem_check(char *, char *);
|
||||||
|
|
||||||
|
enum uv_system_type {UV_NONE, UV_LEGACY_APIC, UV_X2APIC, UV_NON_UNIQUE_APIC};
|
||||||
|
extern enum uv_system_type get_uv_system_type(void);
|
||||||
|
extern int is_uv_system(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue