Merge tag 'arm64-perf' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[linux-2.6-block.git] / arch / x86 / include / asm / uv / bios.h
index 71605c7d5c5c52989d64a3c9305f58b091cd15eb..c852590254d5f4191609f92fce8ee488896efe8b 100644 (file)
@@ -51,15 +51,66 @@ enum {
        BIOS_STATUS_UNAVAIL             = -EBUSY
 };
 
+/* Address map parameters */
+struct uv_gam_parameters {
+       u64     mmr_base;
+       u64     gru_base;
+       u8      mmr_shift;      /* Convert PNode to MMR space offset */
+       u8      gru_shift;      /* Convert PNode to GRU space offset */
+       u8      gpa_shift;      /* Size of offset field in GRU phys addr */
+       u8      unused1;
+};
+
+/* UV_TABLE_GAM_RANGE_ENTRY values */
+#define UV_GAM_RANGE_TYPE_UNUSED       0 /* End of table */
+#define UV_GAM_RANGE_TYPE_RAM          1 /* Normal RAM */
+#define UV_GAM_RANGE_TYPE_NVRAM                2 /* Non-volatile memory */
+#define UV_GAM_RANGE_TYPE_NV_WINDOW    3 /* NVMDIMM block window */
+#define UV_GAM_RANGE_TYPE_NV_MAILBOX   4 /* NVMDIMM mailbox */
+#define UV_GAM_RANGE_TYPE_HOLE         5 /* Unused address range */
+#define UV_GAM_RANGE_TYPE_MAX          6
+
+/* The structure stores PA bits 56:26, for 64MB granularity */
+#define UV_GAM_RANGE_SHFT              26              /* 64MB */
+
+struct uv_gam_range_entry {
+       char    type;           /* Entry type: GAM_RANGE_TYPE_UNUSED, etc. */
+       char    unused1;
+       u16     nasid;          /* HNasid */
+       u16     sockid;         /* Socket ID, high bits of APIC ID */
+       u16     pnode;          /* Index to MMR and GRU spaces */
+       u32     pxm;            /* ACPI proximity domain number */
+       u32     limit;          /* PA bits 56:26 (UV_GAM_RANGE_SHFT) */
+};
+
+#define        UV_SYSTAB_SIG                   "UVST"
+#define        UV_SYSTAB_VERSION_1             1       /* UV1/2/3 BIOS version */
+#define        UV_SYSTAB_VERSION_UV4           0x400   /* UV4 BIOS base version */
+#define        UV_SYSTAB_VERSION_UV4_1         0x401   /* + gpa_shift */
+#define        UV_SYSTAB_VERSION_UV4_2         0x402   /* + TYPE_NVRAM/WINDOW/MBOX */
+#define        UV_SYSTAB_VERSION_UV4_LATEST    UV_SYSTAB_VERSION_UV4_2
+
+#define        UV_SYSTAB_TYPE_UNUSED           0       /* End of table (offset == 0) */
+#define        UV_SYSTAB_TYPE_GAM_PARAMS       1       /* GAM PARAM conversions */
+#define        UV_SYSTAB_TYPE_GAM_RNG_TBL      2       /* GAM entry table */
+#define        UV_SYSTAB_TYPE_MAX              3
+
 /*
  * The UV system table describes specific firmware
  * capabilities available to the Linux kernel at runtime.
  */
 struct uv_systab {
-       char signature[4];      /* must be "UVST" */
+       char signature[4];      /* must be UV_SYSTAB_SIG */
        u32 revision;           /* distinguish different firmware revs */
        u64 function;           /* BIOS runtime callback function ptr */
+       u32 size;               /* systab size (starting with _VERSION_UV4) */
+       struct {
+               u32 type:8;     /* type of entry */
+               u32 offset:24;  /* byte offset from struct start to entry */
+       } entry[1];             /* additional entries follow */
 };
+extern struct uv_systab *uv_systab;
+/* (... end of definitions from UV BIOS ...) */
 
 enum {
        BIOS_FREQ_BASE_PLATFORM = 0,
@@ -99,7 +150,11 @@ extern s64 uv_bios_change_memprotect(u64, u64, enum uv_memprotect);
 extern s64 uv_bios_reserved_page_pa(u64, u64 *, u64 *, u64 *);
 extern int uv_bios_set_legacy_vga_target(bool decode, int domain, int bus);
 
+#ifdef CONFIG_EFI
 extern void uv_bios_init(void);
+#else
+void uv_bios_init(void) { }
+#endif
 
 extern unsigned long sn_rtc_cycles_per_second;
 extern int uv_type;
@@ -107,7 +162,7 @@ extern long sn_partition_id;
 extern long sn_coherency_id;
 extern long sn_region_size;
 extern long system_serial_number;
-#define partition_coherence_id()       (sn_coherency_id)
+#define uv_partition_coherence_id()    (sn_coherency_id)
 
 extern struct kobject *sgi_uv_kobj;    /* /sys/firmware/sgi_uv */