|
@@ -511,3 +511,183 @@ typedef struct pal_cache_check_info_s {
|
|
hlth : 2, /* Health indicator */
|
|
hlth : 2, /* Health indicator */
|
|
|
|
|
|
index : 20, /* Cache line index */
|
|
index : 20, /* Cache line index */
|
|
|
|
+ reserved4 : 2,
|
|
|
|
+
|
|
|
|
+ is : 1, /* instruction set (1 == ia32) */
|
|
|
|
+ iv : 1, /* instruction set field valid */
|
|
|
|
+ pl : 2, /* privilege level */
|
|
|
|
+ pv : 1, /* privilege level field valid */
|
|
|
|
+ mcc : 1, /* Machine check corrected */
|
|
|
|
+ tv : 1, /* Target address
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rq : 1, /* Requester identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rp : 1, /* Responder identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ pi : 1; /* Precise instruction pointer
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+} pal_cache_check_info_t;
|
|
|
|
+
|
|
|
|
+typedef struct pal_tlb_check_info_s {
|
|
|
|
+
|
|
|
|
+ u64 tr_slot : 8, /* Slot# of TR where
|
|
|
|
+ * error occurred
|
|
|
|
+ */
|
|
|
|
+ trv : 1, /* tr_slot field is valid */
|
|
|
|
+ reserved1 : 1,
|
|
|
|
+ level : 2, /* TLB level where failure occurred */
|
|
|
|
+ reserved2 : 4,
|
|
|
|
+ dtr : 1, /* Fail in data TR */
|
|
|
|
+ itr : 1, /* Fail in inst TR */
|
|
|
|
+ dtc : 1, /* Fail in data TC */
|
|
|
|
+ itc : 1, /* Fail in inst. TC */
|
|
|
|
+ op : 4, /* Cache operation */
|
|
|
|
+ reserved3 : 6,
|
|
|
|
+ hlth : 2, /* Health indicator */
|
|
|
|
+ reserved4 : 22,
|
|
|
|
+
|
|
|
|
+ is : 1, /* instruction set (1 == ia32) */
|
|
|
|
+ iv : 1, /* instruction set field valid */
|
|
|
|
+ pl : 2, /* privilege level */
|
|
|
|
+ pv : 1, /* privilege level field valid */
|
|
|
|
+ mcc : 1, /* Machine check corrected */
|
|
|
|
+ tv : 1, /* Target address
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rq : 1, /* Requester identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rp : 1, /* Responder identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ pi : 1; /* Precise instruction pointer
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+} pal_tlb_check_info_t;
|
|
|
|
+
|
|
|
|
+typedef struct pal_bus_check_info_s {
|
|
|
|
+ u64 size : 5, /* Xaction size */
|
|
|
|
+ ib : 1, /* Internal bus error */
|
|
|
|
+ eb : 1, /* External bus error */
|
|
|
|
+ cc : 1, /* Error occurred
|
|
|
|
+ * during cache-cache
|
|
|
|
+ * transfer.
|
|
|
|
+ */
|
|
|
|
+ type : 8, /* Bus xaction type*/
|
|
|
|
+ sev : 5, /* Bus error severity*/
|
|
|
|
+ hier : 2, /* Bus hierarchy level */
|
|
|
|
+ dp : 1, /* Data poisoned on MBE */
|
|
|
|
+ bsi : 8, /* Bus error status
|
|
|
|
+ * info
|
|
|
|
+ */
|
|
|
|
+ reserved2 : 22,
|
|
|
|
+
|
|
|
|
+ is : 1, /* instruction set (1 == ia32) */
|
|
|
|
+ iv : 1, /* instruction set field valid */
|
|
|
|
+ pl : 2, /* privilege level */
|
|
|
|
+ pv : 1, /* privilege level field valid */
|
|
|
|
+ mcc : 1, /* Machine check corrected */
|
|
|
|
+ tv : 1, /* Target address
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rq : 1, /* Requester identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rp : 1, /* Responder identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ pi : 1; /* Precise instruction pointer
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+} pal_bus_check_info_t;
|
|
|
|
+
|
|
|
|
+typedef struct pal_reg_file_check_info_s {
|
|
|
|
+ u64 id : 4, /* Register file identifier */
|
|
|
|
+ op : 4, /* Type of register
|
|
|
|
+ * operation that
|
|
|
|
+ * caused the machine
|
|
|
|
+ * check.
|
|
|
|
+ */
|
|
|
|
+ reg_num : 7, /* Register number */
|
|
|
|
+ rnv : 1, /* reg_num valid */
|
|
|
|
+ reserved2 : 38,
|
|
|
|
+
|
|
|
|
+ is : 1, /* instruction set (1 == ia32) */
|
|
|
|
+ iv : 1, /* instruction set field valid */
|
|
|
|
+ pl : 2, /* privilege level */
|
|
|
|
+ pv : 1, /* privilege level field valid */
|
|
|
|
+ mcc : 1, /* Machine check corrected */
|
|
|
|
+ reserved3 : 3,
|
|
|
|
+ pi : 1; /* Precise instruction pointer
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+} pal_reg_file_check_info_t;
|
|
|
|
+
|
|
|
|
+typedef struct pal_uarch_check_info_s {
|
|
|
|
+ u64 sid : 5, /* Structure identification */
|
|
|
|
+ level : 3, /* Level of failure */
|
|
|
|
+ array_id : 4, /* Array identification */
|
|
|
|
+ op : 4, /* Type of
|
|
|
|
+ * operation that
|
|
|
|
+ * caused the machine
|
|
|
|
+ * check.
|
|
|
|
+ */
|
|
|
|
+ way : 6, /* Way of structure */
|
|
|
|
+ wv : 1, /* way valid */
|
|
|
|
+ xv : 1, /* index valid */
|
|
|
|
+ reserved1 : 6,
|
|
|
|
+ hlth : 2, /* Health indicator */
|
|
|
|
+ index : 8, /* Index or set of the uarch
|
|
|
|
+ * structure that failed.
|
|
|
|
+ */
|
|
|
|
+ reserved2 : 24,
|
|
|
|
+
|
|
|
|
+ is : 1, /* instruction set (1 == ia32) */
|
|
|
|
+ iv : 1, /* instruction set field valid */
|
|
|
|
+ pl : 2, /* privilege level */
|
|
|
|
+ pv : 1, /* privilege level field valid */
|
|
|
|
+ mcc : 1, /* Machine check corrected */
|
|
|
|
+ tv : 1, /* Target address
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rq : 1, /* Requester identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ rp : 1, /* Responder identifier
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+ pi : 1; /* Precise instruction pointer
|
|
|
|
+ * structure is valid
|
|
|
|
+ */
|
|
|
|
+} pal_uarch_check_info_t;
|
|
|
|
+
|
|
|
|
+typedef union pal_mc_error_info_u {
|
|
|
|
+ u64 pmei_data;
|
|
|
|
+ pal_processor_state_info_t pme_processor;
|
|
|
|
+ pal_cache_check_info_t pme_cache;
|
|
|
|
+ pal_tlb_check_info_t pme_tlb;
|
|
|
|
+ pal_bus_check_info_t pme_bus;
|
|
|
|
+ pal_reg_file_check_info_t pme_reg_file;
|
|
|
|
+ pal_uarch_check_info_t pme_uarch;
|
|
|
|
+} pal_mc_error_info_t;
|
|
|
|
+
|
|
|
|
+#define pmci_proc_unknown_check pme_processor.uc
|
|
|
|
+#define pmci_proc_bus_check pme_processor.bc
|
|
|
|
+#define pmci_proc_tlb_check pme_processor.tc
|
|
|
|
+#define pmci_proc_cache_check pme_processor.cc
|
|
|
|
+#define pmci_proc_dynamic_state_size pme_processor.dsize
|
|
|
|
+#define pmci_proc_gpr_valid pme_processor.gr
|
|
|
|
+#define pmci_proc_preserved_bank0_gpr_valid pme_processor.b0
|
|
|
|
+#define pmci_proc_preserved_bank1_gpr_valid pme_processor.b1
|
|
|
|
+#define pmci_proc_fp_valid pme_processor.fp
|
|
|
|
+#define pmci_proc_predicate_regs_valid pme_processor.pr
|
|
|
|
+#define pmci_proc_branch_regs_valid pme_processor.br
|
|
|
|
+#define pmci_proc_app_regs_valid pme_processor.ar
|
|
|
|
+#define pmci_proc_region_regs_valid pme_processor.rr
|
|
|
|
+#define pmci_proc_translation_regs_valid pme_processor.tr
|
|
|
|
+#define pmci_proc_debug_regs_valid pme_processor.dr
|
|
|
|
+#define pmci_proc_perf_counters_valid pme_processor.pc
|