|
@@ -1111,3 +1111,90 @@ ia64_pal_get_hw_policy (u64 proc_num, u64 *cur_policy, u64 *num_impacted,
|
|
|
{
|
|
|
struct ia64_pal_retval iprv;
|
|
|
PAL_CALL(iprv, PAL_GET_HW_POLICY, proc_num, 0, 0);
|
|
|
+ if (cur_policy)
|
|
|
+ *cur_policy = iprv.v0;
|
|
|
+ if (num_impacted)
|
|
|
+ *num_impacted = iprv.v1;
|
|
|
+ if (la)
|
|
|
+ *la = iprv.v2;
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Make the processor enter HALT or one of the implementation dependent low
|
|
|
+ * power states where prefetching and execution are suspended and cache and
|
|
|
+ * TLB coherency is not maintained.
|
|
|
+ */
|
|
|
+static inline s64
|
|
|
+ia64_pal_halt (u64 halt_state)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL(iprv, PAL_HALT, halt_state, 0, 0);
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+typedef union pal_power_mgmt_info_u {
|
|
|
+ u64 ppmi_data;
|
|
|
+ struct {
|
|
|
+ u64 exit_latency : 16,
|
|
|
+ entry_latency : 16,
|
|
|
+ power_consumption : 28,
|
|
|
+ im : 1,
|
|
|
+ co : 1,
|
|
|
+ reserved : 2;
|
|
|
+ } pal_power_mgmt_info_s;
|
|
|
+} pal_power_mgmt_info_u_t;
|
|
|
+
|
|
|
+/* Return information about processor's optional power management capabilities. */
|
|
|
+static inline s64
|
|
|
+ia64_pal_halt_info (pal_power_mgmt_info_u_t *power_buf)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL_STK(iprv, PAL_HALT_INFO, (unsigned long) power_buf, 0, 0);
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Get the current P-state information */
|
|
|
+static inline s64
|
|
|
+ia64_pal_get_pstate (u64 *pstate_index, unsigned long type)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL_STK(iprv, PAL_GET_PSTATE, type, 0, 0);
|
|
|
+ *pstate_index = iprv.v0;
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Set the P-state */
|
|
|
+static inline s64
|
|
|
+ia64_pal_set_pstate (u64 pstate_index)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL_STK(iprv, PAL_SET_PSTATE, pstate_index, 0, 0);
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Processor branding information*/
|
|
|
+static inline s64
|
|
|
+ia64_pal_get_brand_info (char *brand_info)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL_STK(iprv, PAL_BRAND_INFO, 0, (u64)brand_info, 0);
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Cause the processor to enter LIGHT HALT state, where prefetching and execution are
|
|
|
+ * suspended, but cache and TLB coherency is maintained.
|
|
|
+ */
|
|
|
+static inline s64
|
|
|
+ia64_pal_halt_light (void)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL(iprv, PAL_HALT_LIGHT, 0, 0, 0);
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Clear all the processor error logging registers and reset the indicator that allows
|
|
|
+ * the error logging registers to be written. This procedure also checks the pending
|
|
|
+ * machine check bit and pending INIT bit and reports their states.
|
|
|
+ */
|
|
|
+static inline s64
|
|
|
+ia64_pal_mc_clear_log (u64 *pending_vector)
|