|
@@ -691,3 +691,160 @@ typedef union pal_mc_error_info_u {
|
|
#define pmci_proc_translation_regs_valid pme_processor.tr
|
|
#define pmci_proc_translation_regs_valid pme_processor.tr
|
|
#define pmci_proc_debug_regs_valid pme_processor.dr
|
|
#define pmci_proc_debug_regs_valid pme_processor.dr
|
|
#define pmci_proc_perf_counters_valid pme_processor.pc
|
|
#define pmci_proc_perf_counters_valid pme_processor.pc
|
|
|
|
+#define pmci_proc_control_regs_valid pme_processor.cr
|
|
|
|
+#define pmci_proc_machine_check_expected pme_processor.ex
|
|
|
|
+#define pmci_proc_machine_check_corrected pme_processor.cm
|
|
|
|
+#define pmci_proc_rse_valid pme_processor.rs
|
|
|
|
+#define pmci_proc_machine_check_or_init pme_processor.in
|
|
|
|
+#define pmci_proc_dynamic_state_valid pme_processor.dy
|
|
|
|
+#define pmci_proc_operation pme_processor.op
|
|
|
|
+#define pmci_proc_trap_lost pme_processor.tl
|
|
|
|
+#define pmci_proc_hardware_damage pme_processor.hd
|
|
|
|
+#define pmci_proc_uncontained_storage_damage pme_processor.us
|
|
|
|
+#define pmci_proc_machine_check_isolated pme_processor.ci
|
|
|
|
+#define pmci_proc_continuable pme_processor.co
|
|
|
|
+#define pmci_proc_storage_intergrity_synced pme_processor.sy
|
|
|
|
+#define pmci_proc_min_state_save_area_regd pme_processor.mn
|
|
|
|
+#define pmci_proc_distinct_multiple_errors pme_processor.me
|
|
|
|
+#define pmci_proc_pal_attempted_rendezvous pme_processor.ra
|
|
|
|
+#define pmci_proc_pal_rendezvous_complete pme_processor.rz
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define pmci_cache_level pme_cache.level
|
|
|
|
+#define pmci_cache_line_state pme_cache.mesi
|
|
|
|
+#define pmci_cache_line_state_valid pme_cache.mv
|
|
|
|
+#define pmci_cache_line_index pme_cache.index
|
|
|
|
+#define pmci_cache_instr_cache_fail pme_cache.ic
|
|
|
|
+#define pmci_cache_data_cache_fail pme_cache.dc
|
|
|
|
+#define pmci_cache_line_tag_fail pme_cache.tl
|
|
|
|
+#define pmci_cache_line_data_fail pme_cache.dl
|
|
|
|
+#define pmci_cache_operation pme_cache.op
|
|
|
|
+#define pmci_cache_way_valid pme_cache.wv
|
|
|
|
+#define pmci_cache_target_address_valid pme_cache.tv
|
|
|
|
+#define pmci_cache_way pme_cache.way
|
|
|
|
+#define pmci_cache_mc pme_cache.mc
|
|
|
|
+
|
|
|
|
+#define pmci_tlb_instr_translation_cache_fail pme_tlb.itc
|
|
|
|
+#define pmci_tlb_data_translation_cache_fail pme_tlb.dtc
|
|
|
|
+#define pmci_tlb_instr_translation_reg_fail pme_tlb.itr
|
|
|
|
+#define pmci_tlb_data_translation_reg_fail pme_tlb.dtr
|
|
|
|
+#define pmci_tlb_translation_reg_slot pme_tlb.tr_slot
|
|
|
|
+#define pmci_tlb_mc pme_tlb.mc
|
|
|
|
+
|
|
|
|
+#define pmci_bus_status_info pme_bus.bsi
|
|
|
|
+#define pmci_bus_req_address_valid pme_bus.rq
|
|
|
|
+#define pmci_bus_resp_address_valid pme_bus.rp
|
|
|
|
+#define pmci_bus_target_address_valid pme_bus.tv
|
|
|
|
+#define pmci_bus_error_severity pme_bus.sev
|
|
|
|
+#define pmci_bus_transaction_type pme_bus.type
|
|
|
|
+#define pmci_bus_cache_cache_transfer pme_bus.cc
|
|
|
|
+#define pmci_bus_transaction_size pme_bus.size
|
|
|
|
+#define pmci_bus_internal_error pme_bus.ib
|
|
|
|
+#define pmci_bus_external_error pme_bus.eb
|
|
|
|
+#define pmci_bus_mc pme_bus.mc
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * NOTE: this min_state_save area struct only includes the 1KB
|
|
|
|
+ * architectural state save area. The other 3 KB is scratch space
|
|
|
|
+ * for PAL.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+typedef struct pal_min_state_area_s {
|
|
|
|
+ u64 pmsa_nat_bits; /* nat bits for saved GRs */
|
|
|
|
+ u64 pmsa_gr[15]; /* GR1 - GR15 */
|
|
|
|
+ u64 pmsa_bank0_gr[16]; /* GR16 - GR31 */
|
|
|
|
+ u64 pmsa_bank1_gr[16]; /* GR16 - GR31 */
|
|
|
|
+ u64 pmsa_pr; /* predicate registers */
|
|
|
|
+ u64 pmsa_br0; /* branch register 0 */
|
|
|
|
+ u64 pmsa_rsc; /* ar.rsc */
|
|
|
|
+ u64 pmsa_iip; /* cr.iip */
|
|
|
|
+ u64 pmsa_ipsr; /* cr.ipsr */
|
|
|
|
+ u64 pmsa_ifs; /* cr.ifs */
|
|
|
|
+ u64 pmsa_xip; /* previous iip */
|
|
|
|
+ u64 pmsa_xpsr; /* previous psr */
|
|
|
|
+ u64 pmsa_xfs; /* previous ifs */
|
|
|
|
+ u64 pmsa_br1; /* branch register 1 */
|
|
|
|
+ u64 pmsa_reserved[70]; /* pal_min_state_area should total to 1KB */
|
|
|
|
+} pal_min_state_area_t;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+struct ia64_pal_retval {
|
|
|
|
+ /*
|
|
|
|
+ * A zero status value indicates call completed without error.
|
|
|
|
+ * A negative status value indicates reason of call failure.
|
|
|
|
+ * A positive status value indicates success but an
|
|
|
|
+ * informational value should be printed (e.g., "reboot for
|
|
|
|
+ * change to take effect").
|
|
|
|
+ */
|
|
|
|
+ s64 status;
|
|
|
|
+ u64 v0;
|
|
|
|
+ u64 v1;
|
|
|
|
+ u64 v2;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Note: Currently unused PAL arguments are generally labeled
|
|
|
|
+ * "reserved" so the value specified in the PAL documentation
|
|
|
|
+ * (generally 0) MUST be passed. Reserved parameters are not optional
|
|
|
|
+ * parameters.
|
|
|
|
+ */
|
|
|
|
+extern struct ia64_pal_retval ia64_pal_call_static (u64, u64, u64, u64);
|
|
|
|
+extern struct ia64_pal_retval ia64_pal_call_stacked (u64, u64, u64, u64);
|
|
|
|
+extern struct ia64_pal_retval ia64_pal_call_phys_static (u64, u64, u64, u64);
|
|
|
|
+extern struct ia64_pal_retval ia64_pal_call_phys_stacked (u64, u64, u64, u64);
|
|
|
|
+extern void ia64_save_scratch_fpregs (struct ia64_fpreg *);
|
|
|
|
+extern void ia64_load_scratch_fpregs (struct ia64_fpreg *);
|
|
|
|
+
|
|
|
|
+#define PAL_CALL(iprv,a0,a1,a2,a3) do { \
|
|
|
|
+ struct ia64_fpreg fr[6]; \
|
|
|
|
+ ia64_save_scratch_fpregs(fr); \
|
|
|
|
+ iprv = ia64_pal_call_static(a0, a1, a2, a3); \
|
|
|
|
+ ia64_load_scratch_fpregs(fr); \
|
|
|
|
+} while (0)
|
|
|
|
+
|
|
|
|
+#define PAL_CALL_STK(iprv,a0,a1,a2,a3) do { \
|
|
|
|
+ struct ia64_fpreg fr[6]; \
|
|
|
|
+ ia64_save_scratch_fpregs(fr); \
|
|
|
|
+ iprv = ia64_pal_call_stacked(a0, a1, a2, a3); \
|
|
|
|
+ ia64_load_scratch_fpregs(fr); \
|
|
|
|
+} while (0)
|
|
|
|
+
|
|
|
|
+#define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) do { \
|
|
|
|
+ struct ia64_fpreg fr[6]; \
|
|
|
|
+ ia64_save_scratch_fpregs(fr); \
|
|
|
|
+ iprv = ia64_pal_call_phys_static(a0, a1, a2, a3); \
|
|
|
|
+ ia64_load_scratch_fpregs(fr); \
|
|
|
|
+} while (0)
|
|
|
|
+
|
|
|
|
+#define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) do { \
|
|
|
|
+ struct ia64_fpreg fr[6]; \
|
|
|
|
+ ia64_save_scratch_fpregs(fr); \
|
|
|
|
+ iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3); \
|
|
|
|
+ ia64_load_scratch_fpregs(fr); \
|
|
|
|
+} while (0)
|
|
|
|
+
|
|
|
|
+typedef int (*ia64_pal_handler) (u64, ...);
|
|
|
|
+extern ia64_pal_handler ia64_pal;
|
|
|
|
+extern void ia64_pal_handler_init (void *);
|
|
|
|
+
|
|
|
|
+extern ia64_pal_handler ia64_pal;
|
|
|
|
+
|
|
|
|
+extern pal_cache_config_info_t l0d_cache_config_info;
|
|
|
|
+extern pal_cache_config_info_t l0i_cache_config_info;
|
|
|
|
+extern pal_cache_config_info_t l1_cache_config_info;
|
|
|
|
+extern pal_cache_config_info_t l2_cache_config_info;
|
|
|
|
+
|
|
|
|
+extern pal_cache_protection_info_t l0d_cache_protection_info;
|
|
|
|
+extern pal_cache_protection_info_t l0i_cache_protection_info;
|
|
|
|
+extern pal_cache_protection_info_t l1_cache_protection_info;
|
|
|
|
+extern pal_cache_protection_info_t l2_cache_protection_info;
|
|
|
|
+
|
|
|
|
+extern pal_cache_config_info_t pal_cache_config_info_get(pal_cache_level_t,
|
|
|
|
+ pal_cache_type_t);
|
|
|
|
+
|
|
|
|
+extern pal_cache_protection_info_t pal_cache_protection_info_get(pal_cache_level_t,
|
|
|
|
+ pal_cache_type_t);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+extern void pal_error(int);
|
|
|
|
+
|