|
@@ -1545,3 +1545,88 @@ typedef union pal_version_u {
|
|
|
u64 pv_pal_a_model : 8;
|
|
|
u64 pv_reserved2 : 16;
|
|
|
} pal_version_s;
|
|
|
+} pal_version_u_t;
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+ * Return PAL version information. While the documentation states that
|
|
|
+ * PAL_VERSION can be called in either physical or virtual mode, some
|
|
|
+ * implementations only allow physical calls. We don't call it very often,
|
|
|
+ * so the overhead isn't worth eliminating.
|
|
|
+ */
|
|
|
+static inline s64
|
|
|
+ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL_PHYS(iprv, PAL_VERSION, 0, 0, 0);
|
|
|
+ if (pal_min_version)
|
|
|
+ pal_min_version->pal_version_val = iprv.v0;
|
|
|
+
|
|
|
+ if (pal_cur_version)
|
|
|
+ pal_cur_version->pal_version_val = iprv.v1;
|
|
|
+
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+typedef union pal_tc_info_u {
|
|
|
+ u64 pti_val;
|
|
|
+ struct {
|
|
|
+ u64 num_sets : 8,
|
|
|
+ associativity : 8,
|
|
|
+ num_entries : 16,
|
|
|
+ pf : 1,
|
|
|
+ unified : 1,
|
|
|
+ reduce_tr : 1,
|
|
|
+ reserved : 29;
|
|
|
+ } pal_tc_info_s;
|
|
|
+} pal_tc_info_u_t;
|
|
|
+
|
|
|
+#define tc_reduce_tr pal_tc_info_s.reduce_tr
|
|
|
+#define tc_unified pal_tc_info_s.unified
|
|
|
+#define tc_pf pal_tc_info_s.pf
|
|
|
+#define tc_num_entries pal_tc_info_s.num_entries
|
|
|
+#define tc_associativity pal_tc_info_s.associativity
|
|
|
+#define tc_num_sets pal_tc_info_s.num_sets
|
|
|
+
|
|
|
+
|
|
|
+/* Return information about the virtual memory characteristics of the processor
|
|
|
+ * implementation.
|
|
|
+ */
|
|
|
+static inline s64
|
|
|
+ia64_pal_vm_info (u64 tc_level, u64 tc_type, pal_tc_info_u_t *tc_info, u64 *tc_pages)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL(iprv, PAL_VM_INFO, tc_level, tc_type, 0);
|
|
|
+ if (tc_info)
|
|
|
+ tc_info->pti_val = iprv.v0;
|
|
|
+ if (tc_pages)
|
|
|
+ *tc_pages = iprv.v1;
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+/* Get page size information about the virtual memory characteristics of the processor
|
|
|
+ * implementation.
|
|
|
+ */
|
|
|
+static inline s64 ia64_pal_vm_page_size(u64 *tr_pages, u64 *vw_pages)
|
|
|
+{
|
|
|
+ struct ia64_pal_retval iprv;
|
|
|
+ PAL_CALL(iprv, PAL_VM_PAGE_SIZE, 0, 0, 0);
|
|
|
+ if (tr_pages)
|
|
|
+ *tr_pages = iprv.v0;
|
|
|
+ if (vw_pages)
|
|
|
+ *vw_pages = iprv.v1;
|
|
|
+ return iprv.status;
|
|
|
+}
|
|
|
+
|
|
|
+typedef union pal_vm_info_1_u {
|
|
|
+ u64 pvi1_val;
|
|
|
+ struct {
|
|
|
+ u64 vw : 1,
|
|
|
+ phys_add_size : 7,
|
|
|
+ key_size : 8,
|
|
|
+ max_pkr : 8,
|
|
|
+ hash_tag_id : 8,
|
|
|
+ max_dtr_entry : 8,
|
|
|
+ max_itr_entry : 8,
|
|
|
+ max_unique_tcs : 8,
|
|
|
+ num_tc_levels : 8;
|